Module: JsonDeepUpdate

Defined in:
lib/json_deep_update.rb,
lib/json_deep_update/version.rb

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.deep_update(data, match_key:, match_value:, update_key:, new_value:) ⇒ Object

Atualizar um valor específico em um JSON aninhado match_key: chave primária a ser verificada match_value: valor da chave primária a ser verificado update_key: chave a ser atualizada new_value: novo valor a ser atribuído à chave Exemplo de uso: Model.deep_update(data, match_key: ‘id’, match_value: 123, update_key: ‘status’, new_value: ‘active’)



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/json_deep_update.rb', line 16

def self.deep_update(data, match_key:, match_value:, update_key:, new_value:)
  case data
  when Hash
    if data[match_key.to_s] == match_value || data[match_key.to_sym] == match_value
      data[update_key.to_s] = new_value if data.key?(update_key.to_s)
      data[update_key.to_sym] = new_value if data.key?(update_key.to_sym)
    end

    data.each do |k, v|
      data[k] = deep_update(v, match_key: match_key, match_value: match_value, update_key: update_key, new_value: new_value)
    end

  when Array
    data.map! do |item|
      deep_update(item, match_key: match_key, match_value: match_value, update_key: update_key, new_value: new_value)
    end
  end

  data
end