Class: KeyValueName::Builder
- Inherits:
-
Object
- Object
- KeyValueName::Builder
- Defined in:
- lib/key_value_name/builder.rb
Overview
Yield-based Domain-Specific Language (DSL) to build a ‘KeyValueName`.
Defined Under Namespace
Modules: ClassMethods, InstanceMethods
Instance Method Summary collapse
-
#build ⇒ Object
rubocop:disable Metrics/MethodLength.
-
#extension(ext) ⇒ Object
rubocop:disable Style/TrivialAccessors.
- #include_keys(key_value_name_klass) ⇒ Object
-
#initialize ⇒ Builder
constructor
A new instance of Builder.
- #key(name, type:, **kwargs) ⇒ Object
Constructor Details
#initialize ⇒ Builder
Returns a new instance of Builder.
41 42 43 44 |
# File 'lib/key_value_name/builder.rb', line 41 def initialize @marshalers = {} @extension = nil end |
Instance Method Details
#build ⇒ Object
rubocop:disable Metrics/MethodLength
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/key_value_name/builder.rb', line 65 def build # rubocop:disable Metrics/MethodLength raise 'no keys defined' if @marshalers.none? klass = Struct.new(*@marshalers.keys) do def initialize(**kwargs) super(*kwargs.keys) kwargs.each { |k, v| self[k] = v } end include InstanceMethods class <<self include ClassMethods attr_accessor :key_value_name_spec end end klass.key_value_name_spec = Spec.new(@marshalers, @extension) klass end |
#extension(ext) ⇒ Object
rubocop:disable Style/TrivialAccessors
61 62 63 |
# File 'lib/key_value_name/builder.rb', line 61 def extension(ext) # rubocop:disable Style/TrivialAccessors @extension = ext end |
#include_keys(key_value_name_klass) ⇒ Object
46 47 48 49 50 51 52 |
# File 'lib/key_value_name/builder.rb', line 46 def include_keys(key_value_name_klass) spec = key_value_name_klass.key_value_name_spec spec.marshalers.each do |name, marshaler| check_no_existing_marshaler(name) @marshalers[name] = marshaler end end |
#key(name, type:, **kwargs) ⇒ Object
54 55 56 57 58 59 |
# File 'lib/key_value_name/builder.rb', line 54 def key(name, type:, **kwargs) KeyValueName.check_symbol(name) raise ArgumentError, "bad type: #{type}" unless MARSHALERS.key?(type) check_no_existing_marshaler(name) @marshalers[name] = MARSHALERS[type].new(**kwargs) end |