Sha256: e4de9059e9b10c35b865eb04a4a912a6db33dde1fcdb9ab87a50664d930925ca
Contents?: true
Size: 1.13 KB
Versions: 3
Compression:
Stored size: 1.13 KB
Contents
module ActiveHouse module Unionable extend ActiveSupport::Concern included do private def build_union_query_part "UNION ALL\n#{@unions.values.map(&:to_query).join("\n")}" unless @unions.values.empty? end end def initialize(*) @unions = {} super end def union(name, query) query = query.all if query.is_a?(ActiveHouse::Model) raise ArgumentError, 'argument must be model or query object' unless query.is_a?(ActiveHouse::Query) new_unions = @unions.map { |n, q| [n, q.dup] }.to_h new_unions[name] = query.dup chain_query unions: new_unions end def update_union(name) raise ArgumentError, "can't find union by name #{name}" unless @unions.key?(name) new_union = yield union_for(name) union(name, new_union) end def union_for(name) raise ArgumentError, "can't find union by name #{name}" unless @unions.key?(name) @unions[name].dup end def except_union(name) new_unions = @unions.map { |n, q| [n, q.dup] }.to_h new_unions.delete(name) chain_query unions: new_unions end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
active_house-0.4.0 | lib/active_house/unionable.rb |
active_house-0.3.2 | lib/active_house/unionable.rb |
active_house-0.3.1 | lib/active_house/unionable.rb |