class LogicalQueryParser::AssocResolver
Public Class Methods
new(klass)
click to toggle source
# File lib/logical_query_parser/assoc_resolver.rb, line 5 def initialize(klass) @klass = klass end
Public Instance Methods
run(*args)
click to toggle source
# File lib/logical_query_parser/assoc_resolver.rb, line 9 def run(*args) Assoc.new.tap do |assoc| assoc.current = assoc.structure resolve_assocs(@klass, args, assoc) end end
Private Instance Methods
resolve_assocs(klass, options, assoc)
click to toggle source
# File lib/logical_query_parser/assoc_resolver.rb, line 26 def resolve_assocs(klass, options, assoc) options = wrap_array(options) options.each do |option| if option.is_a?(Hash) resolve_assocs_for_hash(klass, option, assoc) else assoc.column_mapping[klass] ||= [] assoc.column_mapping[klass] << option end end end
resolve_assocs_for_hash(klass, hash, assoc)
click to toggle source
# File lib/logical_query_parser/assoc_resolver.rb, line 38 def resolve_assocs_for_hash(klass, hash, assoc) hash.each do |assoc_name, options| if (reflection = klass.reflect_on_association(assoc_name)) assoc.current[assoc_name] = {} assoc.current = assoc.current[assoc_name] resolve_assocs(reflection.klass, options, assoc) end end end
wrap_array(options)
click to toggle source
# File lib/logical_query_parser/assoc_resolver.rb, line 18 def wrap_array(options) if options.is_a?(Array) options.flatten(1) else [options] end end