module ExposeQuery::ControllerDsl
Public Class Methods
expose_query(*attrs)
click to toggle source
# File lib/expose_query/controller_dsl.rb, line 10 def self.expose_query(*attrs) self.query_objects ||= [] options = attrs.extract_options! filter_classes = attrs.map do |class_filter| OpenStruct.new(query_class: class_filter, only: Array.wrap(options[:only]).compact, except: Array.wrap(options[:except]).compact) end self.query_objects += Array.wrap(filter_classes) end
query_classes()
click to toggle source
# File lib/expose_query/controller_dsl.rb, line 21 def self.query_classes self.query_objects.map(&:query_class) end
Public Instance Methods
apply_filters(source_scope, expose_name = nil)
click to toggle source
# File lib/expose_query/controller_dsl.rb, line 27 def apply_filters(source_scope, expose_name = nil) query_objects ? apply_objects_for(source_scope, expose_name) : source_scope end
Private Instance Methods
apply_objects_for(source_scope, expose_name)
click to toggle source
# File lib/expose_query/controller_dsl.rb, line 33 def apply_objects_for(source_scope, expose_name) query_objects.reduce(source_scope) do |scope, filter_object| if filter_object_allowed_for?(filter_object, expose_name.to_sym) filter_object.query_class.new(self).apply(scope) else scope end end end
filter_object_allowed_for?(object, expose_name)
click to toggle source
# File lib/expose_query/controller_dsl.rb, line 43 def filter_object_allowed_for?(object, expose_name) if object.only.blank? !object.except.include?(expose_name) else object.only.include?(expose_name) end end