Class: FilterMe::Filter::ArelDSL

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

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_classObject (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, options={})
	association_filter_class  = options.fetch(:filter_class) { filter_for_name(name) }
	configuration = options.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