Sha256: 839fe6e808861a6dbcc009e0080cf462afacf98ca2e589a80017c5a756291c7b

Contents?: true

Size: 751 Bytes

Versions: 3

Compression:

Stored size: 751 Bytes

Contents

module Dry::Initializer
  # Carries declarations for arguments along with a mixin module
  #
  # @api private
  #
  class Builder
    def arguments
      @arguments ||= Arguments.new
    end

    def mixin
      @mixin ||= Module.new
    end

    def define_initializer(name, **options)
      @arguments = arguments.add(name, **options)
      mixin.instance_eval @arguments.declaration
    end

    def define_attributes_reader(name, keys)
      symbol_keys = keys.map { |key| ":" << key.to_s }.join(", ")
      key = '@#{key}'

      mixin.class_eval <<-RUBY
        def #{name}
          [#{symbol_keys}].inject({}) do |hash, key|
            hash.merge key => instance_variable_get(:"#{key}")
          end
        end
      RUBY
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
dry-initializer-0.1.1 lib/dry/initializer/builder.rb
dry-initializer-0.1.0 lib/dry/initializer/builder.rb
dry-initializer-0.0.1 lib/dry/initializer/builder.rb