From ec09ce148569e46547dec5d2dfb9b0b04bbb8b28 Mon Sep 17 00:00:00 2001 From: Alex Coles Date: Mon, 6 Jul 2015 10:55:21 +0200 Subject: [PATCH] Add, configure FriendlyId for permalinks --- Gemfile | 2 + Gemfile.lock | 3 + config/initializers/friendly_id.rb | 88 ++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 config/initializers/friendly_id.rb diff --git a/Gemfile b/Gemfile index 532ee32ad93..574e7efdd0e 100644 --- a/Gemfile +++ b/Gemfile @@ -50,6 +50,8 @@ gem 'rails_autolink', '~> 1.1.6' gem 'will_paginate', '~> 3.0' gem 'acts_as_list', '~> 0.3.0' +gem 'friendly_id', '~> 5.1.0' + gem 'awesome_nested_set', github: 'finnlabs/awesome_nested_set', branch: 'v2.1.6-rails4' gem 'color-tools', '~> 1.3.0', require: 'color' diff --git a/Gemfile.lock b/Gemfile.lock index 93df7ca8cba..6cc813bebcb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -210,6 +210,8 @@ GEM fog-core fog-json formatador (0.2.5) + friendly_id (5.1.0) + activerecord (>= 4.0.0) gherkin (2.12.2) multi_json (~> 1.3) globalize (4.0.3) @@ -489,6 +491,7 @@ DEPENDENCIES factory_girl_rails (~> 4.5) faker fog (~> 1.23.0) + friendly_id (~> 5.1.0) globalize (~> 4.0.3) gon (~> 4.0) grape (~> 0.10.1) diff --git a/config/initializers/friendly_id.rb b/config/initializers/friendly_id.rb new file mode 100644 index 00000000000..f064f1e59c7 --- /dev/null +++ b/config/initializers/friendly_id.rb @@ -0,0 +1,88 @@ +# FriendlyId Global Configuration +# +# Use this to set up shared configuration options for your entire application. +# Any of the configuration options shown here can also be applied to single +# models by passing arguments to the `friendly_id` class method or defining +# methods in your model. +# +# To learn more, check out the guide: +# +# http://norman.github.io/friendly_id/file.Guide.html + +FriendlyId.defaults do |config| + # ## Reserved Words + # + # Some words could conflict with Rails's routes when used as slugs, or are + # undesirable to allow as slugs. Edit this list as needed for your app. + config.use :reserved + + config.reserved_words = %w(new edit index session login logout users admin + stylesheets assets javascripts images) + + # ## Friendly Finders + # + # Uncomment this to use friendly finders in all models. By default, if + # you wish to find a record by its friendly id, you must do: + # + # MyModel.friendly.find('foo') + # + # If you uncomment this, you can do: + # + # MyModel.find('foo') + # + # This is significantly more convenient but may not be appropriate for + # all applications, so you must explicity opt-in to this behavior. You can + # always also configure it on a per-model basis if you prefer. + # + # Something else to consider is that using the :finders addon boosts + # performance because it will avoid Rails-internal code that makes runtime + # calls to `Module.extend`. + # + # config.use :finders + # + # ## Slugs + # + # Most applications will use the :slugged module everywhere. If you wish + # to do so, uncomment the following line. + # + # config.use :slugged + # + # By default, FriendlyId's :slugged addon expects the slug column to be named + # 'slug', but you can change it if you wish. + # + # config.slug_column = 'slug' + # + # When FriendlyId can not generate a unique ID from your base method, it appends + # a UUID, separated by a single dash. You can configure the character used as the + # separator. If you're upgrading from FriendlyId 4, you may wish to replace this + # with two dashes. + # + # config.sequence_separator = '-' + # + # ## Tips and Tricks + # + # ### Controlling when slugs are generated + # + # As of FriendlyId 5.0, new slugs are generated only when the slug field is + # nil, but if you're using a column as your base method can change this + # behavior by overriding the `should_generate_new_friendly_id` method that + # FriendlyId adds to your model. The change below makes FriendlyId 5.0 behave + # more like 4.0. + # + # config.use Module.new { + # def should_generate_new_friendly_id? + # slug.blank? || _changed? + # end + # } + # + # FriendlyId uses Rails's `parameterize` method to generate slugs, but for + # languages that don't use the Roman alphabet, that's not usually sufficient. + # Here we use the Babosa library to transliterate Russian Cyrillic slugs to + # ASCII. If you use this, don't forget to add "babosa" to your Gemfile. + # + # config.use Module.new { + # def normalize_friendly_id(text) + # text.to_slug.normalize! :transliterations => [:russian, :latin] + # end + # } +end