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