Sha256: aabda1350084b18100fbf031e5a5a26000eba4840cac9148575a4ad0eab57512
Contents?: true
Size: 1.34 KB
Versions: 3
Compression:
Stored size: 1.34 KB
Contents
require 'dry-initializer' module ROM # @api private module Initializer # @api private module DefineWithHook def param(*) super __define_with__ end def option(*) super __define_with__ unless method_defined?(:with) end def __define_with__ seq_names = __initializer_mixin__. instance_method(:__initialize__). parameters. select { |type, _| type == :req }. map { |_, name| name }. join(', ') seq_names << ', ' unless seq_names.empty? undef_method(:with) if method_defined?(:with) class_eval(<<-RUBY, __FILE__, __LINE__ + 1) def with(new_options = EMPTY_HASH) if new_options.empty? self else self.class.new(#{ seq_names }options.merge(new_options)) end end RUBY end end # @api private def self.extended(base) base.extend(Dry::Initializer[undefined: false]) base.extend(DefineWithHook) base.include(InstanceMethods) end # @api private module InstanceMethods # Instance options # # @return [Hash] # # @api public def options @__options__ end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
rom-core-4.0.0.beta3 | lib/rom/initializer.rb |
rom-core-4.0.0.beta2 | lib/rom/initializer.rb |
rom-core-4.0.0.beta1 | lib/rom/initializer.rb |