Module: ScopeFilter::ActiveRecord::ClassMethods
- Defined in:
- lib/scope_filter/active_record.rb
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.scope_filter(values = {}) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/scope_filter/active_record.rb', line 16 def self.scope_filter(values = {}) init_scope = self.scoped if sort = values.delete(:_sort) sort_field, sort_dir = sort.to_s.split('_') init_scope = self.order("#{sort_field} #{sort_dir.upcase}") if @@sf_config.sort_fields.include?(sort_field.to_sym) end values.inject(init_scope) do |rel, q| field = q.first.to_sym value = q.last unless value.blank? if cond = @@sf_config.fields[field] rel = rel.where(cond[:condition], cond[:pattern] ? cond[:pattern].call(value) : value) elsif cond = @@sf_config.scopes[field] rel = cond[:arg] ? rel.send(field, value) : rel.send(field) end end rel end end |
Instance Method Details
#configure_scope_filter {|@@sf_config| ... } ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/scope_filter/active_record.rb', line 11 def configure_scope_filter(&block) @@sf_config = Configuration.new yield @@sf_config def self.scope_filter(values = {}) init_scope = self.scoped if sort = values.delete(:_sort) sort_field, sort_dir = sort.to_s.split('_') init_scope = self.order("#{sort_field} #{sort_dir.upcase}") if @@sf_config.sort_fields.include?(sort_field.to_sym) end values.inject(init_scope) do |rel, q| field = q.first.to_sym value = q.last unless value.blank? if cond = @@sf_config.fields[field] rel = rel.where(cond[:condition], cond[:pattern] ? cond[:pattern].call(value) : value) elsif cond = @@sf_config.scopes[field] rel = cond[:arg] ? rel.send(field, value) : rel.send(field) end end rel end end end |