Sha256: 018470d159e8e070380690c9de04b3d4881769755cbeb67102a0aa5e6dff2c9b

Contents?: true

Size: 1.3 KB

Versions: 7

Compression:

Stored size: 1.3 KB

Contents

require 'rom/support/constants'

require 'rom/support/inflector'
require 'rom/support/class_builder'

module ROM
  module ConfigurationDSL
    # Setup DSL-specific command extensions
    #
    # @private
    class Command
      # Generate a command subclass
      #
      # This is used by Setup#commands DSL and its `define` block
      #
      # @api private
      def self.build_class(name, relation, options = EMPTY_HASH, &block)
        type = options.fetch(:type) { name }
        command_type = Inflector.classify(type)
        adapter = options.fetch(:adapter)
        parent = ROM::Command.adapter_namespace(adapter).const_get(command_type)
        class_name = generate_class_name(adapter, command_type, relation)

        ClassBuilder.new(name: class_name, parent: parent).call do |klass|
          klass.register_as(name)
          klass.relation(relation)
          klass.class_eval(&block) if block
        end
      end

      # Create a command subclass name based on adapter, type and relation
      #
      # @api private
      def self.generate_class_name(adapter, command_type, relation)
        pieces = ['ROM']
        pieces << Inflector.classify(adapter)
        pieces << 'Commands'
        pieces << "#{command_type}[#{Inflector.classify(relation)}s]"
        pieces.join('::')
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
rom-2.0.2 lib/rom/configuration_dsl/command.rb
rom-2.0.1 lib/rom/configuration_dsl/command.rb
rom-2.0.0 lib/rom/configuration_dsl/command.rb
rom-1.0.0 lib/rom/configuration_dsl/command.rb
rom-1.0.0.rc1 lib/rom/configuration_dsl/command.rb
rom-1.0.0.beta2 lib/rom/configuration_dsl/command.rb
rom-1.0.0.beta1 lib/rom/configuration_dsl/command.rb