class ActiveSet::Filtering::ActiveRecord::Strategy
Public Class Methods
new(set, attribute_instruction)
click to toggle source
# File lib/active_set/filtering/active_record/strategy.rb, line 19 def initialize(set, attribute_instruction) @set = set @attribute_instruction = attribute_instruction @set_instruction = SetInstruction.new(attribute_instruction, set) end
Public Instance Methods
execute()
click to toggle source
# File lib/active_set/filtering/active_record/strategy.rb, line 25 def execute return false unless @set.respond_to? :to_sql if execute_filter_operation? statement = filter_operation elsif execute_intersect_operation? begin statement = intersect_operation rescue ArgumentError # thrown if merging a non-ActiveRecord::Relation return false end else return false end statement end
Private Instance Methods
execute_filter_operation?()
click to toggle source
# File lib/active_set/filtering/active_record/strategy.rb, line 45 def execute_filter_operation? return false unless attribute_model return false unless attribute_model.respond_to?(:attribute_names) return false unless attribute_model.attribute_names.include?(attribute) true end
execute_intersect_operation?()
click to toggle source
# File lib/active_set/filtering/active_record/strategy.rb, line 53 def execute_intersect_operation? return false unless attribute_model return false unless attribute_model.respond_to?(attribute) return false if attribute_model.method(attribute).arity.zero? true end
filter_operation()
click to toggle source
# File lib/active_set/filtering/active_record/strategy.rb, line 61 def filter_operation initial_relation .where( query_column.send( arel_operator, query_value ) ) end
intersect_operation()
click to toggle source
# File lib/active_set/filtering/active_record/strategy.rb, line 71 def intersect_operation # NOTE: If merging relations that contain duplicate column conditions, # the second condition will replace the first. # e.g. Thing.where(id: [1,2]).merge(Thing.where(id: [2,3])) # => [Thing<2>, Thing<3>] NOT [Thing<2>] initial_relation .merge( attribute_model.public_send( attribute, query_value ) ) end