Sha256: d9e3f3fad5db111e84621735c57fab0071d294799e74c95abcd72daa0b434f06
Contents?: true
Size: 1.12 KB
Versions: 1
Compression:
Stored size: 1.12 KB
Contents
# frozen_string_literal: true require_relative 'assoc' module LogicalQueryParser class AssocResolver def initialize(klass) @klass = klass end def run(*args) Assoc.new.tap do |assoc| assoc.current = assoc.structure resolve_assocs(@klass, args, assoc) end end private def wrap_array(options) if options.is_a?(Array) options.flatten(1) else [options] end end 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 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 end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
logical_query_parser-0.4.0 | lib/logical_query_parser/assoc_resolver.rb |