# frozen_string_literal: true module Veriff class Parser < HTTParty::Parser SUPPORTED_FORMATS = { 'application/json' => :json }.freeze def self.formats SUPPORTED_FORMATS end protected def json deep_transform_keys(JSON.parse(body)) do |key| underscore(key).to_sym end end private # source: https://apidock.com/rails/v5.2.3/Hash/_deep_transform_keys_in_object def deep_transform_keys(object, &block) case object when Hash object.each_with_object({}) do |(key, value), result| result[yield(key)] = deep_transform_keys(value, &block) end when Array object.map { |e| deep_transform_keys(e, &block) } else object end end # source: https://github.com/rails/rails/blob/master/activesupport/lib/active_support/inflector/methods.rb#L91 def underscore(camel_cased_word) return camel_cased_word unless /[A-Z-]|::/.match?(camel_cased_word) word = camel_cased_word.to_s.gsub(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2') word.gsub!(/([a-z\d])([A-Z])/, '\1_\2') word.tr!('-', '_') word.downcase! word end end end