Sha256: e58a611fbca35df51b4b4156a3b2d1de25a2b152703bbd46e6f953f5db7b9fdb

Contents?: true

Size: 1.09 KB

Versions: 13

Compression:

Stored size: 1.09 KB

Contents

module ROM
  # 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 = {}, &block)
      type = options.fetch(:type) { name }
      command_type = Inflector.classify(type)
      adapter = options.fetch(:adapter)
      parent = 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

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
rom-0.9.0.rc1 lib/rom/setup_dsl/command.rb
rom-0.9.0.beta1 lib/rom/setup_dsl/command.rb
rom-0.8.1 lib/rom/setup_dsl/command.rb
rom-0.8.0 lib/rom/setup_dsl/command.rb
rom-0.7.1 lib/rom/setup_dsl/command.rb
rom-0.7.0 lib/rom/setup_dsl/command.rb
rom-0.6.2 lib/rom/setup_dsl/command.rb
rom-0.6.1 lib/rom/setup_dsl/command.rb
rom-0.6.0 lib/rom/setup_dsl/command.rb
rom-0.6.0.rc1 lib/rom/setup_dsl/command.rb
rom-0.6.0.beta3 lib/rom/setup_dsl/command.rb
rom-0.6.0.beta2 lib/rom/setup_dsl/command.rb
rom-0.6.0.beta1 lib/rom/setup_dsl/command.rb