class Tacokit::Transform

Public Instance Methods

deserialize(body) click to toggle source
# File lib/tacokit/transform.rb, line 13
def deserialize(body)
  deserialize_body(body)
end
serialize(body) click to toggle source
# File lib/tacokit/transform.rb, line 9
def serialize(body)
  serialize_body(body)
end
serialize_params(params) click to toggle source
# File lib/tacokit/transform.rb, line 5
def serialize_params(params)
  normalize_request_params(params)
end

Private Instance Methods

camelize_key(key) click to toggle source
# File lib/tacokit/transform.rb, line 53
def camelize_key(key)
  k = key.to_s
  k = k.gsub(%r{([a-zA-Z_]+?)_id(s\b|\b)?$}, "id_\\1\\2")
  k = k.gsub(%r{(#{camelize_special_cases.keys.join("|")})}) { |m| camelize_special_cases.fetch(m) }
  camelize(k, :lower)
end
camelize_keys(body) click to toggle source
# File lib/tacokit/transform.rb, line 49
def camelize_keys(body)
  deep_transform_keys(body) { |key| camelize_key(key) }
end
camelize_special_cases() click to toggle source
# File lib/tacokit/transform.rb, line 110
def camelize_special_cases
  {
    "callback_url" => "callbackURL",
    "checklist_source_id" => "idChecklistSource"
  }
end
deserialize_array(body) click to toggle source
# File lib/tacokit/transform.rb, line 89
def deserialize_array(body)
  body.map { |data| deserialize_body(data) }
end
deserialize_body(body) click to toggle source
# File lib/tacokit/transform.rb, line 78
def deserialize_body(body)
  case body
  when Hash
    deserialize_hash(body)
  when Array
    deserialize_array(body)
  else
    body
  end
end
deserialize_hash(body) click to toggle source
# File lib/tacokit/transform.rb, line 93
def deserialize_hash(body)
  deep_transform_keys(body) do |key|
    underscore_key(key)
  end
end
flatten_nested_keys(body) click to toggle source

Converts “prefs” => { “voting” => “members” } to “prefs/voting” => “members

# File lib/tacokit/transform.rb, line 65
def flatten_nested_keys(body)
  options = {}
  body.each do |key, value|
    next unless value.is_a?(Hash)
    value = flatten_nested_keys(value.dup)
    value.each do |nested_key, nested_value|
      options["#{key}/#{nested_key}"] = nested_value
    end
    body.delete(key)
  end
  body.merge(options)
end
normalize_param_value(value) click to toggle source
# File lib/tacokit/transform.rb, line 25
def normalize_param_value(value)
  case value
  when Array
    value.map { |v| camel_path(v) }.join(",")
  when /\,/
    normalize_param_value(value.split(","))
  else
    camel_path(value)
  end
end
normalize_request_params(params) click to toggle source
# File lib/tacokit/transform.rb, line 19
def normalize_request_params(params)
  (params || {}).reject { |_k, v| v.nil? }.each_with_object({}) do |(key, value), norm|
    norm[key] = normalize_param_value(value)
  end
end
pluralize_special_cases() click to toggle source
# File lib/tacokit/transform.rb, line 106
def pluralize_special_cases
  %w[ idBoardsPinned idPremOrgsAdmin ]
end
serialize_body(body) click to toggle source
# File lib/tacokit/transform.rb, line 36
def serialize_body(body)
  case body
  when Hash
    serialize_hash(body)
  else
    body
  end
end
serialize_hash(body) click to toggle source
# File lib/tacokit/transform.rb, line 45
def serialize_hash(body)
  flatten_nested_keys(camelize_keys(body))
end
underscore_key(key) click to toggle source
# File lib/tacokit/transform.rb, line 99
def underscore_key(key)
  k = key.to_s
  k = k.gsub(%r{(#{pluralize_special_cases.join("|")})}, "\\1s")
  k = underscore(k)
  k.gsub(%r{^id_([a-zA-Z_]+?)(s\b|\b)$}, "\\1_id\\2")
end