Spaces:
Paused
Paused
| 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 | |