Sha256: fc9d440b1b55f9f53f10be4b7ccde199fc4399d441ca809e43b11431a46c04bb

Contents?: true

Size: 1.57 KB

Versions: 4

Compression:

Stored size: 1.57 KB

Contents

require 'dm-core'

require 'dm-aggregates/aggregate_functions'
require 'dm-aggregates/collection'
require 'dm-aggregates/core_ext/symbol'
require 'dm-aggregates/model'
require 'dm-aggregates/query'
require 'dm-aggregates/repository'

module DataMapper
  module Aggregates
    def self.include_aggregate_api
      %i(Repository Model Collection Query).each do |name|
        DataMapper.const_get(name).send(:include, const_get(name))
      end
      Adapters::AbstractAdapter.descendants.each do |adapter_class|
        Adapters.include_aggregate_api(DataMapper::Inflector.demodulize(adapter_class.name))
      end
    end
  end

  module Adapters
    def self.include_aggregate_api(const_name)
      require aggregate_extensions(const_name)
      if Aggregates.const_defined?(const_name)
        adapter = const_get(const_name)
        adapter.send(:include, aggregate_module(const_name))
      end
    rescue LoadError
      # Silently ignore the fact that no adapter extensions could be required
      # This means that the adapter in use doesn't support aggregates
    end

    def self.aggregate_module(const_name)
      Aggregates.const_get(const_name)
    end

    class << self
      # @api private
      private def aggregate_extensions(const_name)
        name = adapter_name(const_name)
        name = 'do' if name == 'dataobjects'
        "dm-aggregates/adapters/dm-#{name}-adapter"
      end
    end

    extendable do
      # @api private
      def const_added(const_name)
        include_aggregate_api(const_name)
        super
      end
    end
  end

  Aggregates.include_aggregate_api
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
sbf-dm-aggregates-1.5.0 lib/dm-aggregates.rb
sbf-dm-aggregates-1.4.0 lib/dm-aggregates.rb
sbf-dm-aggregates-1.3.0 lib/dm-aggregates.rb
sbf-dm-aggregates-1.3.0.beta lib/dm-aggregates.rb