Sha256: ac141ec9ada187d974b15236d25975c6f4396850c9f99277a8b900147265ceb3

Contents?: true

Size: 1.54 KB

Versions: 3

Compression:

Stored size: 1.54 KB

Contents

module DataMapper
  module Constraints
    module Adapters
      module Extension
        # Include the corresponding Constraints module into a adapter class
        #
        # @param [Symbol] const_name
        #   demodulized name of the adapter class to include corresponding
        #   constraints module into
        #
        # TODO: come up with a better way to include modules
        # into all currently loaded and subsequently loaded Adapters
        #
        # @api private
        def include_constraint_api(const_name)
          require constraint_extensions(const_name)

          if Constraints::Adapters.const_defined?(const_name)
            adapter = const_get(const_name)
            constraint_module = Constraints::Adapters.const_get(const_name)
            adapter.class_eval { include constraint_module }
          end
        rescue LoadError
          # Silently ignore the fact that no adapter extensions could be required
          # This means that the adapter in use doesn't support constraints
        end

      private

        # @api private
        def constraint_extensions(const_name)
          name = adapter_name(const_name)
          name = 'do' if name == 'dataobjects'
          "data_mapper/constraints/adapters/#{name}_adapter"
        end

        # @api private
        def const_added(const_name)
          include_constraint_api(const_name)
          super
        end

      end # module Extension
    end # module Adapters
  end # module Constraints

  Adapters.extend Constraints::Adapters::Extension

end # module DataMapper

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
dm-constraints-1.2.0 lib/data_mapper/constraints/adapters/extension.rb
dm-constraints-1.2.0.rc2 lib/data_mapper/constraints/adapters/extension.rb
dm-constraints-1.2.0.rc1 lib/data_mapper/constraints/adapters/extension.rb