Method: Riveter::Enquiry::ClassMethods#query_with

Defined in:
lib/riveter/enquiry.rb

#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