Class: KeyValueName::KeyValueBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/key_value_name/builders/key_value_builder.rb

Overview

Yield-based Domain-Specific Language (DSL) to build a ‘KeyValueName`.

Direct Known Subclasses

FileBuilder, FolderBuilder

Instance Method Summary collapse

Constructor Details

#initialize(&block) ⇒ KeyValueBuilder

Returns a new instance of KeyValueBuilder.



8
9
10
11
# File 'lib/key_value_name/builders/key_value_builder.rb', line 8

def initialize(&block)
  @marshalers = {}
  instance_eval(&block) if block_given?
end

Instance Method Details

#buildObject



32
33
34
35
# File 'lib/key_value_name/builders/key_value_builder.rb', line 32

def build
  struct_args = @marshalers.any? ? @marshalers.keys : [nil]
  Struct.new(*struct_args, keyword_init: true)
end

#include_keys(key_value_name_klass) ⇒ Object



17
18
19
20
21
22
23
# File 'lib/key_value_name/builders/key_value_builder.rb', line 17

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



25
26
27
28
29
30
# File 'lib/key_value_name/builders/key_value_builder.rb', line 25

def key(name, type:, **kwargs)
  KeyValueName.check_symbol(name)
  KeyValueName.check_marshaler(type)
  check_no_existing_marshaler(name)
  @marshalers[name] = MARSHALERS[type].new(**kwargs)
end

#singular?Boolean

Returns:

  • (Boolean)


13
14
15
# File 'lib/key_value_name/builders/key_value_builder.rb', line 13

def singular?
  @marshalers.none?
end