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