Method: Riveter::Enquiry::ClassMethods#filter_with

Defined in:
lib/riveter/enquiry.rb

#filter_with(query_filter_klass = nil, &block) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/riveter/enquiry.rb', line 20

def filter_with(query_filter_klass=nil, &block)
  raise "Filter already defined." if self.respond_to?(:query_filter_class)

  unless query_filter_klass
    raise ArgumentError, "Missing block" unless block_given?

    # define an anomymous class derived from QueryFilter
    # which invokes the block given in the classes context
    query_filter_klass = Class.new(QueryFilter::Base)
    query_filter_klass.class_eval(&block)

    # for anonymous classes, need to override the
    # model_name method so that forms etc can work
    enquiry_name = self.enquiry_name
    query_filter_klass.class_eval do
      define_singleton_method :model_name do
        enquiry_name
      end
    end
  end

  define_singleton_method :query_filter_class do
    query_filter_klass
  end

  define_method :query_filter_class do
    query_filter_klass
  end

  define_singleton_method :query_filter_attributes do
    query_filter_klass.attributes
  end
end