module ChgkRating::AttributeMappings

Public Class Methods

find(name) click to toggle source
# File lib/chgk_rating/attribute_mappings.rb, line 6
def find(name)
  const_get name.snakecase_upcase
end
generate_mappings_for(data) click to toggle source
# File lib/chgk_rating/attribute_mappings.rb, line 10
def generate_mappings_for(data)
  data.each do |const_name, raw_schemes|
    const_set const_name, generate_mapping_for(raw_schemes)
  end
end

Private Class Methods

generate_mapping_for(raw_schemes) click to toggle source
# File lib/chgk_rating/attribute_mappings.rb, line 46
def generate_mapping_for(raw_schemes)
  return unless raw_schemes&.any?

  if raw_schemes.is_a? Array
    raw_schemes.inject({}) do |memo, raw_scheme|
      memo.merge parse_raw_scheme(raw_scheme)
    end
  else
    parse_raw_scheme raw_schemes
  end.freeze
end
name_from(raw_name) click to toggle source
# File lib/chgk_rating/attribute_mappings.rb, line 18
def name_from(raw_name)
  { raw_name: raw_name.to_s }
end
parse_raw_scheme(raw_scheme) click to toggle source
# File lib/chgk_rating/attribute_mappings.rb, line 22
def parse_raw_scheme(raw_scheme)
  if raw_scheme.respond_to? :inject
    scheme_from raw_scheme
  else
    { raw_scheme => name_from(raw_scheme) }
  end
end
scheme_from(raw_scheme) click to toggle source
# File lib/chgk_rating/attribute_mappings.rb, line 30
def scheme_from(raw_scheme)
  raw_scheme.inject({}) do |memo, (key, value)|
    memo[key] = scheme_value_from key, value
    memo
  end
end
scheme_value_from(key, raw_value) click to toggle source
# File lib/chgk_rating/attribute_mappings.rb, line 37
def scheme_value_from(key, raw_value)
  if raw_value.is_a? String
    name_from raw_value
  else
    raw_value = [key.to_s] if raw_value[0].nil? # for cases like `rating: []`
    name_from(raw_value[0]).merge transformation(raw_value[1])
  end
end