module Riveter::Enquiry::ClassMethods

Public Instance Methods

filter_with(query_filter_klass=nil, &block) click to toggle source
# 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) click to toggle source
# 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