Module: EasyPost::InternalUtilities

Defined in:
lib/easypost/internal_utilities.rb

Defined Under Namespace

Modules: Constants, Json, StaticMapper, System

Class Method Summary collapse

Class Method Details

.build_dict_key(keys) ⇒ Object

Build a dict key from a list of keys. Example: [code, number] -> code



30
31
32
33
34
35
36
37
38
# File 'lib/easypost/internal_utilities.rb', line 30

def self.build_dict_key(keys)
  result = keys[0].to_s

  keys[1..].each do |key|
    result += "[#{key}]"
  end

  result
end

.form_encode_params(hash, parent_keys = [], parent_dict = {}) ⇒ Object

Form-encode a multi-layer dictionary to a one-layer dictionary.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/easypost/internal_utilities.rb', line 12

def self.form_encode_params(hash, parent_keys = [], parent_dict = {})
  result = parent_dict or {}
  keys = parent_keys or []

  hash.each do |key, value|
    if value.instance_of?(Hash)
      keys << key
      result = form_encode_params(value, keys, result)
    else
      dict_key = build_dict_key(keys + [key])
      result[dict_key] = value
    end
  end
  result
end

.normalize_string_list(lst) ⇒ Object

Normalizes a list of strings.



57
58
59
60
# File 'lib/easypost/internal_utilities.rb', line 57

def self.normalize_string_list(lst)
  lst = lst.is_a?(String) ? lst.split(',') : Array(lst)
  lst.map(&:to_s).map(&:downcase).map(&:strip)
end

.objects_to_ids(obj) ⇒ Object

Converts an object to an object ID.



41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/easypost/internal_utilities.rb', line 41

def self.objects_to_ids(obj)
  case obj
  when EasyPost::Models::EasyPostObject
    { id: obj.id }
  when Hash
    result = {}
    obj.each { |k, v| result[k] = objects_to_ids(v) unless v.nil? }
    result
  when Array
    obj.map { |v| objects_to_ids(v) }
  else
    obj
  end
end

.to_snake_case(str) ⇒ Object

Convert a string to snake case



5
6
7
8
9
# File 'lib/easypost/internal_utilities.rb', line 5

def self.to_snake_case(str)
  str.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
     .gsub(/([a-z\d])([A-Z])/, '\1_\2')
     .downcase
end