class JsonUpdater::JsonFullBuilder

Attributes

json_changeable[R]
json_etalon[R]

Public Class Methods

build(json_changeable:, json_etalon:) click to toggle source
# File lib/json_updater/json_full_builder.rb, line 7
def self.build(json_changeable:, json_etalon:)
  new(json_changeable: json_changeable, json_etalon: json_etalon).build
end
new(json_changeable:, json_etalon:) click to toggle source
# File lib/json_updater/json_full_builder.rb, line 11
def initialize(json_changeable:, json_etalon:)
  @json_changeable = json_changeable
  @json_etalon = json_etalon
end

Public Instance Methods

build() click to toggle source
# File lib/json_updater/json_full_builder.rb, line 16
def build
  recursion_updation(json_changeable, json_etalon)
end

Private Instance Methods

dive_inside(mutation_field_value, etalon_field_value) click to toggle source
# File lib/json_updater/json_full_builder.rb, line 31
def dive_inside(mutation_field_value, etalon_field_value)
  return etalon_field_value unless hash_or_array?(mutation_field_value)

  case etalon_field_value
  when Hash
    recursion_updation(mutation_field_value, etalon_field_value)
  when Array
    mutation_field_value.map { |hash| recursion_updation(hash, etalon_field_value.first) }
  end
end
hash_or_array?(etalon_field_value) click to toggle source

this method smells of :reek:UtilityFunction

# File lib/json_updater/json_full_builder.rb, line 43
def hash_or_array?(etalon_field_value)
  [Hash, Array].include?(etalon_field_value.class)
end
recursion_updation(mutation_json, inner_json_etalon) click to toggle source
# File lib/json_updater/json_full_builder.rb, line 22
def recursion_updation(mutation_json, inner_json_etalon)
  inner_json_etalon.each do |etalon_field_key, etalon_field_value|
    if hash_or_array?(etalon_field_value)
      mutation_json[etalon_field_key] = dive_inside(mutation_json[etalon_field_key], etalon_field_value)
    end
  end
  JsonTypeDetector.detect_type(mutation_json).build(json_changeable: mutation_json, json_etalon: inner_json_etalon)
end