Module: Riveter::Enquiry::ClassMethods

Defined in:
lib/riveter/enquiry.rb

Instance Method Summary collapse

Instance Method Details

#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

#query_with(query_klass = nil, &block) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/riveter/enquiry.rb', line 54

def query_with(query_klass=nil, &block)
  raise "Query already defined." if self.respond_to?(:query_class)

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

    # define an anomymous class derived from Query
    # which delegates to the block given
    query_klass = Class.new(Query::Base)
    query_klass.class_eval do
      define_method :build_relation, &block
      protected :build_relation
    end
  end

  define_singleton_method :query_class do
    query_klass
  end

  define_method :query_class do
    query_klass
  end
end