module FootballApi::Symbolizer::ClassMethods

Public Instance Methods

custom_deep_symbolic_hash(hash) click to toggle source

Custom deep symbolize of an hash So we can override the mess of some footbal-api arrays

# File lib/football_api/mixins/symbolizer.rb, line 12
def custom_deep_symbolic_hash(hash)
  {}.tap do |h|
    Hash(hash).each do |key, value|
      key = symbolyze_key(key)
      h[key] = map_value(key, value)
    end
  end
end

Private Instance Methods

array_from_mess(hash) click to toggle source

Since the custom keys come as an hash like: => { '1': { … }, '2': { … } } OR! A simple object from the root We need to unify the return value and return a simple array of objects Ugly? yup! as f*ck!

# File lib/football_api/mixins/symbolizer.rb, line 50
def array_from_mess(hash)
  return key_contains_object?(hash.keys.first) ? [hash] : hash.values
end
is_a_custom_key?(key) click to toggle source
# File lib/football_api/mixins/symbolizer.rb, line 41
def is_a_custom_key?(key)
  HASH_OR_ARRAY_KEYS.include?(key)
end
key_contains_object?(key) click to toggle source
# File lib/football_api/mixins/symbolizer.rb, line 54
def key_contains_object?(key)
  (key.to_s =~ /[0-9]/) == nil
end
map_value(key, value) click to toggle source

Recursive way of checking all hash

# File lib/football_api/mixins/symbolizer.rb, line 29
def map_value(key, value)
  case value
  when Array
    value.map { |v| map_value(nil, v) }
  when Hash
    return custom_deep_symbolic_hash(value) unless is_a_custom_key?(key)
    map_value(nil, array_from_mess(value))
  else
    value
  end
end
symbolyze_key(key) click to toggle source

Convert key to symbol

# File lib/football_api/mixins/symbolizer.rb, line 24
def symbolyze_key(key)
  key.to_sym rescue key
end