File size: 825 Bytes
874ae95
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
module StringifyIds
  def stringify_ids(hash)
    hash.keys.each_with_object({}) do |key, result|
      string_key = key.to_s
      original_value = hash[key]

      result[key] = if original_value.is_a?(Array)
        stringify_ids_in_array(string_key, original_value)
      elsif original_value.respond_to?(:key?)
        stringify_ids(original_value)
      elsif (string_key == 'id' || string_key.ends_with?('_id')) && original_value.is_a?(Numeric)
        original_value.to_s
      else
        original_value
      end
    end
  end

  private

  def stringify_ids_in_array(key, array)
    if key.ends_with?('_ids')
      array.map(&:to_s)
    else
      array.map do |element|
        if element.respond_to?(:key?)
          stringify_ids(element)
        else
          element
        end
      end
    end
  end
end