Sha256: b483fab29c3f2471afe3834b96ec1fed04b6bf66faf2e94081bb72e56d58fbb7

Contents?: true

Size: 1.31 KB

Versions: 19

Compression:

Stored size: 1.31 KB

Contents

require 'rom/model_builder'

module ROM
  class Mapper
    # Model DSL allows setting a model class
    #
    # @private
    module ModelDSL
      attr_reader :attributes, :builder, :klass

      DEFAULT_TYPE = :poro

      # Set or generate a model
      #
      # @example
      #   class MyDefinition
      #     include ROM::Mapper::ModelDSL
      #
      #     def initialize
      #       @attributes = [[:name], [:title]]
      #     end
      #   end
      #
      #   definition = MyDefinition.new
      #
      #   # just set a model constant
      #   definition.model(User)
      #
      #   # generate model class for the attributes
      #   definition.model(name: 'User')
      #
      # @api public
      def model(options = nil)
        if options.is_a?(Class)
          @klass = options
        elsif options
          type = options.fetch(:type) { DEFAULT_TYPE }
          @builder = ModelBuilder[type].new(options)
        end

        build_class unless options
      end

      private

      # Build a model class using a specialized builder
      #
      # @api private
      def build_class
        return klass if klass
        included_attrs = attributes.reject do |_name, opts|
          opts && opts[:exclude]
        end
        builder.call(included_attrs.map(&:first)) if builder
      end
    end
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
rom-mapper-1.2.1 lib/rom/mapper/model_dsl.rb
rom-mapper-1.2.0 lib/rom/mapper/model_dsl.rb
rom-mapper-1.1.0 lib/rom/mapper/model_dsl.rb
rom-mapper-1.0.2 lib/rom/mapper/model_dsl.rb
rom-mapper-1.0.1 lib/rom/mapper/model_dsl.rb
rom-mapper-1.0.0 lib/rom/mapper/model_dsl.rb
rom-mapper-1.0.0.rc2 lib/rom/mapper/model_dsl.rb
rom-mapper-1.0.0.rc1 lib/rom/mapper/model_dsl.rb
rom-mapper-1.0.0.beta3 lib/rom/mapper/model_dsl.rb
rom-mapper-1.0.0.beta2 lib/rom/mapper/model_dsl.rb
rom-mapper-1.0.0.beta1 lib/rom/mapper/model_dsl.rb
rom-mapper-0.5.1 lib/rom/mapper/model_dsl.rb
rom-mapper-0.5.0 lib/rom/mapper/model_dsl.rb
rom-mapper-0.5.0.rc1 lib/rom/mapper/model_dsl.rb
rom-mapper-0.5.0.beta1 lib/rom/mapper/model_dsl.rb
rom-mapper-0.4.0 lib/rom/mapper/model_dsl.rb
rom-mapper-0.3.0 lib/rom/mapper/model_dsl.rb
rom-mapper-0.3.0.rc1 lib/rom/mapper/model_dsl.rb
rom-mapper-0.3.0.beta1 lib/rom/mapper/model_dsl.rb