class Yamcha::Composer
Public Class Methods
new(node:, enable_validator: true)
click to toggle source
# File lib/yamcha/composer.rb, line 5 def initialize(node:, enable_validator: true) @node = node @enable_validator = enable_validator @hash = {} end
Public Instance Methods
compose()
click to toggle source
# File lib/yamcha/composer.rb, line 11 def compose resolved_node = ::Yamcha::NodeResolver.resolve(@node) recursively_compose(resolved_node, @hash) end
Private Instance Methods
compose_hash(key:, value:, hash:)
click to toggle source
# File lib/yamcha/composer.rb, line 41 def compose_hash(key:, value:, hash:) ::Yamcha::Validator::DuplicatedMappingKey.validate!(key_name: key, hash: hash) if @enable_validator hash[key] = value hash end
recursively_compose(resolved_node, hash)
click to toggle source
# File lib/yamcha/composer.rb, line 19 def recursively_compose(resolved_node, hash) return resolved_node unless resolved_node.is_a? Array resolved_node.each_slice(2) do |node1, node2| resolved_node1 = ::Yamcha::NodeResolver.resolve(node1) resolved_node2 = ::Yamcha::NodeResolver.resolve(node2) if scalar_and_sequence?(node1, node2) hash = compose_hash(key: resolved_node1, value: resolved_node2, hash: hash) elsif scalar_and_mapping?(node1, node2) tmp_hash = {} result = recursively_compose(resolved_node2, tmp_hash) hash = compose_hash(key: resolved_node1, value: result, hash: hash) elsif scalar_and_saclar?(node1, node2) hash = compose_hash(key: resolved_node1, value: resolved_node2, hash: hash) else # noop end end hash end
scalar_and_mapping?(node1, node2)
click to toggle source
# File lib/yamcha/composer.rb, line 51 def scalar_and_mapping?(node1, node2) node1.is_a?(Psych::Nodes::Scalar) && node2.is_a?(Psych::Nodes::Mapping) end
scalar_and_saclar?(node1, node2)
click to toggle source
# File lib/yamcha/composer.rb, line 55 def scalar_and_saclar?(node1, node2) node1.is_a?(Psych::Nodes::Scalar) && node2.is_a?(Psych::Nodes::Scalar) end
scalar_and_sequence?(node1, node2)
click to toggle source
# File lib/yamcha/composer.rb, line 47 def scalar_and_sequence?(node1, node2) node1.is_a?(Psych::Nodes::Scalar) && node2.is_a?(Psych::Nodes::Sequence) end