Class: FilterMe::Filter::ArelDSL
- Inherits:
-
Object
- Object
- FilterMe::Filter::ArelDSL
- Extended by:
- Forwardable
- Defined in:
- lib/filter_me/filter/dsl.rb
Overview
DSL Syntax (early version, highly subject to change):
class UserFilter < FilterMe::ArelFilter
model User
association :account
association :company, filter_class: SuperDuperCompanyFilter
field :login, [:matches]
field :created_at, [:gt, :gteq, :lt, :lteq, :eq]
field :email, :all
...
end
Instance Attribute Summary collapse
-
#filter_class ⇒ Object
readonly
Returns the value of attribute filter_class.
Instance Method Summary collapse
- #association(name, options = {}) ⇒ Object
- #field(name, filter_types) ⇒ Object
- #filter_for_name(name) ⇒ Object
-
#initialize(filter_class) ⇒ ArelDSL
constructor
A new instance of ArelDSL.
- #model(klass) ⇒ Object
Constructor Details
#initialize(filter_class) ⇒ ArelDSL
Returns a new instance of ArelDSL.
24 25 26 |
# File 'lib/filter_me/filter/dsl.rb', line 24 def initialize(filter_class) @filter_class = filter_class end |
Instance Attribute Details
#filter_class ⇒ Object (readonly)
Returns the value of attribute filter_class.
20 21 22 |
# File 'lib/filter_me/filter/dsl.rb', line 20 def filter_class @filter_class end |
Instance Method Details
#association(name, options = {}) ⇒ Object
43 44 45 46 47 48 49 |
# File 'lib/filter_me/filter/dsl.rb', line 43 def association(name, ={}) association_filter_class = .fetch(:filter_class) { filter_for_name(name) } configuration = .fetch(:configuration, {}) filter_class._associations[name] = association_filter_class filter(name, association_filter_class, configuration, filter_class._model) end |
#field(name, filter_types) ⇒ Object
36 37 38 39 40 41 |
# File 'lib/filter_me/filter/dsl.rb', line 36 def field(name, filter_types) field_validator = filter_types == :all ? AllValidator.new : FieldValidator.new(filter_types) filter(name, ArelFieldFilter, { :field => name, :validator => field_validator, :model_class => self.filter_class._model }) end |
#filter_for_name(name) ⇒ Object
32 33 34 |
# File 'lib/filter_me/filter/dsl.rb', line 32 def filter_for_name(name) "#{name.to_s.pluralize.camelize}Filter".constantize end |
#model(klass) ⇒ Object
28 29 30 |
# File 'lib/filter_me/filter/dsl.rb', line 28 def model(klass) @filter_class._model = klass end |