class Lolita::Configuration::Filter

Lolita::Configuration::Filter is for filtering data in list view. By now it supports these field types:

To use it, call “filter” method in list block, filter method accepts field names as arguments. You can pass block and configure each field. Field configuration is just like in tab configuration.

Examples

# this will build country select field and is_deleted checkbox
list do
  filter :country, :is_deleted
end

# For example you have text field "status" with values opened,closed,rejected
list do
  filter do
    field :status, :array, :values=> %w(open closed rejected)
    field :is_deleted, :title => "Deleted"
  end
end

Attributes

dbi[R]

Public Class Methods

new(dbi,*args,&block) click to toggle source
# File lib/lolita/configuration/filter.rb, line 31
def initialize(dbi,*args,&block)
  @dbi = dbi
  @fields=Lolita::Configuration::Fields.new
  set_attributes(*args)
  self.instance_eval(&block) if block_given?
end

Public Instance Methods

field(*args, &block) click to toggle source
# File lib/lolita/configuration/filter.rb, line 38
def field *args, &block
  field=Lolita::Configuration::Factory::Field.create(self.dbi,*args,&block)
  field
  @fields<<field
  field
end
fields(*args, &block) click to toggle source
# File lib/lolita/configuration/filter.rb, line 60
def fields(*args, &block)
  if args && args.any? || block_given?
    args.each do |field_name|
      f = field(field_name)
      f.instance_eval(&block) if block_given?
    end
  end
  @fields
end
fields=(fields) click to toggle source

Set all fields in tab. Accept fields as Array. Each array element can be Lolita::Configuration::Field object or Hash, that will be passed to field method.

# File lib/lolita/configuration/filter.rb, line 48
def fields=(fields)
  if fields.is_a?(Array)
    fields.each{|field_attr|
      if field_attr.is_a?(Lolita::Configuration::Field)
        @fields<<field_attr
      else
        self.field(field_attr)
      end
    }
  end
end
html_option_for_select(field) click to toggle source
# File lib/lolita/configuration/filter.rb, line 91
def html_option_for_select field
  {
    :include_blank => ::I18n.t('lolita.filter.include_blank_by_title', :title => field.title)
  }
end
resource(params) click to toggle source
# File lib/lolita/configuration/filter.rb, line 122
def resource(params)
  if klass = fields.any? ? fields.first.dbi.klass : nil
    klass.new(params[klass.to_s.underscore.to_sym]).extend(Module.new{def persisted?; true; end})
  end
end
set_attributes(*args) click to toggle source

Used to set attributes if block not given.

# File lib/lolita/configuration/filter.rb, line 71
def set_attributes(*args)
  if args && args[0]
    if args[0].is_a?(Hash)
      args[0].each{|m,value|
        self.send("#{m}=".to_sym,value)
      }
    else
      fields *args            
    end
  end
end
update(method_name, list, request) click to toggle source
# File lib/lolita/configuration/filter.rb, line 97
def update method_name, list, request
  filter_params = request && request.params && request.params[:filter]
  page_criteria = if method_name == :paginate && self.search && filter_params
    search_criteria = self.search.run(nil,request)
    page_criteria = if search_criteria.respond_to?(:where)
      list.page_criteria.merge(search_criteria)
    elsif search_criteria.nil?
      list.page_criteria
    else
      search_criteria
    end
  else
    list.page_criteria.merge(self.dbi.filter(filter_params || {}))
  end
  list.instance_variable_set(:@page_criteria,page_criteria)
end