Module: DynamicQuery::CombinedQuery
- Included in:
- DynamicQueryInstance
- Defined in:
- lib/dynamic_query/combined_query.rb
Instance Method Summary collapse
Methods included from Validator
Methods included from Joiner
Instance Method Details
#combine_query(query, relations, opts = {}) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/dynamic_query/combined_query.rb', line 34 def combine_query(query, relations, opts = {}) conds = conditions(query).first || {} models = relations.each_slice(3).map { |sec| sec.first } foreign_keys = relations - models selected_records = filter_conditioned_records(models, foreign_keys, conds) selected_records = remove_unlinked_records(selected_records, foreign_keys) result = join(selected_records, foreign_keys) result.delete_if { |row| row.include? nil } unless opts[:accept_null] result.map { |row| row.map { |rec| rec.attributes.keep_if { |k, _| k.to_s !~ /id$/ } } } unless opts[:reveal_id] result end |
#conditions(query, table = nil) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/dynamic_query/combined_query.rb', line 8 def conditions(query, table = nil) query ||= {} query = query.clone query = filter_valid_info(query) conditions = [] query.each do |_, ands| conditions << ands.map { |_, v| condition_to_pair v } end cond = [] conditions.each do |condition| c = {} condition.each do |pair| pair.each do |k, v| c[k] ||= [] c[k].concat v end end c.keys.each { |k| c[k] = Hash[ c[k].each_slice(2).to_a ] } cond << c end cond.map! { |c| c[table.to_s] } if table cond end |