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

Yields:

  • (@@sf_config)


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