class CloudPayments::Client::Serializer::Base

Attributes

config[R]

Public Class Methods

new(config) click to toggle source
# File lib/cloud_payments/client/serializer/base.rb, line 8
def initialize(config)
  @config = config
end

Public Instance Methods

dump(hash) click to toggle source
# File lib/cloud_payments/client/serializer/base.rb, line 16
def dump(hash)
  convert_keys_to_api(hash)
end
load(json) click to toggle source
# File lib/cloud_payments/client/serializer/base.rb, line 12
def load(json)
  convert_keys_from_api(json)
end

Protected Instance Methods

convert_keys_from_api(attributes) click to toggle source
# File lib/cloud_payments/client/serializer/base.rb, line 22
def convert_keys_from_api(attributes)
  attributes.each_with_object({}) do |(key, value), result|
    value = case value
    when Hash
      convert_keys_from_api(value)
    when Array
      value.map { |item| convert_keys_from_api(item) }
    else
      value
    end

    key = key.to_s.gsub(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
    key.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
    key.tr!('-', '_')
    key.downcase!
    result[key.to_sym] = value
  end
end
convert_keys_to_api(attributes) click to toggle source
# File lib/cloud_payments/client/serializer/base.rb, line 41
def convert_keys_to_api(attributes)
  attributes.each_with_object({}) do |(key, value), result|
    value = convert_keys_to_api(value) if value.is_a?(Hash)

    key = key.to_s.gsub(/^[a-z\d]*/){ $&.capitalize }
    key.gsub!(/(?:_|(\/))([a-z\d]*)/i){ "#{$1}#{$2.capitalize}" }
    key.gsub!('/', '::')
    result[key] = value
  end
end