Class: FriendlyId::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/friendly_id/configuration.rb

Overview

The configuration parameters passed to Base#friendly_id will be stored in this object.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model_class, values = nil) ⇒ Configuration

Returns a new instance of Configuration.



26
27
28
29
30
31
32
33
34
# File 'lib/friendly_id/configuration.rb', line 26

def initialize(model_class, values = nil)
  @base = nil
  @model_class = model_class
  @defaults = {}
  @modules = []
  @finder_methods = FriendlyId::FinderMethods
  self.routes = :friendly
  set values
end

Instance Attribute Details

#base(*value) ⇒ Object

The base column or method used by FriendlyId as the basis of a friendly id or slug.

For models that don't use Slugged, this is the column that is used to store the friendly id. For models using Slugged, the base is a column or method whose value is used as the basis of the slug.

For example, if you have a model representing blog posts and that uses slugs, you likely will want to use the "title" attribute as the base, and FriendlyId will take care of transforming the human-readable title into something suitable for use in a URL.

If you pass an argument, it will be used as the base. Otherwise the current value is returned.

Parameters:

  • value

    A symbol referencing a column or method in the model. This value is usually set by passing it as the first argument to friendly_id.



93
94
95
96
97
98
99
# File 'lib/friendly_id/configuration.rb', line 93

def base(*value)
  if value.empty?
    @base
  else
    self.base = value.first
  end
end

#defaultsObject (readonly)

The default configuration options.



8
9
10
# File 'lib/friendly_id/configuration.rb', line 8

def defaults
  @defaults
end

#dependentObject

The value used for the slugged association's dependent option



21
22
23
# File 'lib/friendly_id/configuration.rb', line 21

def dependent
  @dependent
end

#finder_methodsObject

The module to use for finders



18
19
20
# File 'lib/friendly_id/configuration.rb', line 18

def finder_methods
  @finder_methods
end

#model_classObject

The model class that this configuration belongs to.

Returns:

  • ActiveRecord::Base



15
16
17
# File 'lib/friendly_id/configuration.rb', line 15

def model_class
  @model_class
end

#modulesObject (readonly)

The modules in use



11
12
13
# File 'lib/friendly_id/configuration.rb', line 11

def modules
  @modules
end

#routesObject

Route generation preferences



24
25
26
# File 'lib/friendly_id/configuration.rb', line 24

def routes
  @routes
end

Instance Method Details

#get_module(object) ⇒ Object (private)



103
104
105
# File 'lib/friendly_id/configuration.rb', line 103

def get_module(object)
  Module === object ? object : FriendlyId.const_get(object.to_s.titleize.camelize.gsub(/\s+/, ""))
end

#query_fieldObject

The column that FriendlyId will use to find the record when querying by friendly id.

This method is generally only used internally by FriendlyId.

Returns:

  • String



70
71
72
# File 'lib/friendly_id/configuration.rb', line 70

def query_field
  base.to_s
end

#set(values) ⇒ Object (private)



107
108
109
# File 'lib/friendly_id/configuration.rb', line 107

def set(values)
  values&.each { |name, value| send "#{name}=", value }
end

#use(*modules) ⇒ Object

Lets you specify the addon modules to use with FriendlyId.

This method is invoked by friendly_id when passing the :use option, or when using friendly_id with a block.

Examples:

class Book < ActiveRecord::Base
  extend FriendlyId
  friendly_id :name, :use => :slugged
end

Parameters:

  • modules (#to_s, Module)

    Arguments should be Modules, or symbols or strings that correspond with the name of an addon to use with FriendlyId. By default FriendlyId provides :slugged, :finders, :history, :reserved, :simple_i18n, and :scoped.



52
53
54
55
56
57
58
# File 'lib/friendly_id/configuration.rb', line 52

def use(*modules)
  modules.to_a.flatten.compact.map do |object|
    mod = get_module(object)
    mod.setup(@model_class) if mod.respond_to?(:setup)
    @model_class.send(:include, mod) unless uses? object
  end
end

#uses?(mod) ⇒ Boolean

Returns whether the given module is in use.

Returns:

  • (Boolean)


61
62
63
# File 'lib/friendly_id/configuration.rb', line 61

def uses?(mod)
  @model_class < get_module(mod)
end