Class: FriendlyRoutes::Params::CollectionParams
- Defined in:
- lib/friendly_routes/params/collection_params.rb
Overview
Created to work with ActiveRecord collection
Instance Attribute Summary collapse
-
#collection ⇒ Object
Instance of ActiveRecord collection.
-
#key_attr ⇒ Symbol, String
name of attribute for matching.
Attributes inherited from Base
Instance Method Summary collapse
-
#allowed?(id_or_instance) ⇒ Boolean
Check if value can be composed.
-
#compose(id_or_instance) ⇒ String
Generate request value from params.
- #constraints ⇒ Object
-
#initialize(name, collection, key_attr, optional: true) ⇒ CollectionParams
constructor
A new instance of CollectionParams.
-
#parse(value) ⇒ Integer?
Parse values from request.
Methods inherited from Base
#optional?, #refused?, #required?
Constructor Details
#initialize(name, collection, key_attr, optional: true) ⇒ CollectionParams
Returns a new instance of CollectionParams.
12 13 14 15 16 17 18 |
# File 'lib/friendly_routes/params/collection_params.rb', line 12 def initialize(name, collection, key_attr, optional: true) super(:collection, name, optional) @collection = collection @key_attr = key_attr check_params @collection_ids = collection.pluck(:id) end |
Instance Attribute Details
#collection ⇒ Object
Instance of ActiveRecord collection
9 10 11 |
# File 'lib/friendly_routes/params/collection_params.rb', line 9 def collection @collection end |
#key_attr ⇒ Symbol, String
name of attribute for matching
9 10 11 |
# File 'lib/friendly_routes/params/collection_params.rb', line 9 def key_attr @key_attr end |
Instance Method Details
#allowed?(id_or_instance) ⇒ Boolean
Check if value can be composed
43 44 45 46 47 48 49 |
# File 'lib/friendly_routes/params/collection_params.rb', line 43 def allowed?(id_or_instance) if id_or_instance.is_a?(ActiveRecord::Base) @collection_ids.include?(id_or_instance.id) else @collection.find_by(id: id_or_instance).present? end end |
#compose(id_or_instance) ⇒ String
Generate request value from params
Inverse of #parse
34 35 36 37 38 |
# File 'lib/friendly_routes/params/collection_params.rb', line 34 def compose(id_or_instance) instance = id_or_instance instance = @collection.find(id_or_instance) unless instance.is_a?(ActiveRecord::Base) instance[@key_attr] end |
#constraints ⇒ Object
20 21 22 |
# File 'lib/friendly_routes/params/collection_params.rb', line 20 def constraints Regexp.new @collection.all.map(&@key_attr).compact.map(&:downcase).join('|') end |
#parse(value) ⇒ Integer?
Parse values from request
Inverse of #compose
27 28 29 |
# File 'lib/friendly_routes/params/collection_params.rb', line 27 def parse(value) @collection.find_by(@key_attr => value).try(:id) end |