Sha256: aa6edbb04e1e5eeb567205e09e7f676a5a7594f6c11ca3e4b40f109371312e57

Contents?: true

Size: 622 Bytes

Versions: 9

Compression:

Stored size: 622 Bytes

Contents

module ESA
  module Traits
    #
    # https://gist.github.com/tlowrimore/5162327
    # 
    # Unions multiple scopes on a model, and returns an instance of ActiveRecord::Relation.
    #
    module UnionScope
      def self.included(base)
        base.send :extend, ClassMethods
      end

      module ClassMethods
        def union_scope(*scopes)
          id_column = "#{table_name}.id"
          sub_query = scopes.map { |s| s.select(id_column).to_sql }.join(" UNION ")
          where "#{id_column} IN (#{sub_query})"
        end
      end
    end
  end
end

ActiveRecord::Base.send :include, ESA::Traits::UnionScope

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
event_sourced_accounting-0.2.6 app/models/esa/traits/union_scope.rb
event_sourced_accounting-0.2.4 app/models/esa/traits/union_scope.rb
event_sourced_accounting-0.2.3 app/models/esa/traits/union_scope.rb
event_sourced_accounting-0.2.2 app/models/esa/traits/union_scope.rb
event_sourced_accounting-0.1.6 app/models/esa/traits/union_scope.rb
event_sourced_accounting-0.1.4 app/models/esa/traits/union_scope.rb
event_sourced_accounting-0.1.3 app/models/esa/traits/union_scope.rb
event_sourced_accounting-0.1.1 app/models/esa/traits/union_scope.rb
event_sourced_accounting-0.1.0 app/models/esa/traits/union_scope.rb