class BlueprintListInfoParser
Constants
- EXPIRATION_DATE_MANDATORY_KEYS
- MANDATORY_KEYS
Public Class Methods
parse(json, api_version)
click to toggle source
# File lib/admiral_stats_parser/parser/blueprint_list_info_parser.rb, line 41 def self.parse(json, api_version) items_array = JSON.parse(json) unless items_array.is_a?(Array) raise 'json is not an Array' end results = [] items_array.each do |items| result = BlueprintListInfo.new MANDATORY_KEYS[api_version].each do |key, key_class| # 必須のキーが含まれなければエラー camel_case_key = key.to_s.split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join unless items.include?(camel_case_key) raise "Mandatory key #{key} does not exist" end # 有効期限の情報を格納するために、特別な処理を追加 if key_class == :expiration_date_list result.instance_variable_set( "@#{key.to_s}", BlueprintListInfoParser.parse_expiration_date_list(items[camel_case_key], api_version)) next end # 結果のクラスが合わなければエラー # ruby には Boolean クラスがないので、そこだけ特別な処理を用意する if key_class == :boolean unless [true, false].include?(items[camel_case_key]) raise "Mandatory key #{key} is not boolean" end else unless items[camel_case_key].is_a?(key_class) raise "Mandatory key #{key} is not class #{key_class}" end end result.instance_variable_set("@#{key.to_s}", items[camel_case_key]) end results << result end results end
parse_expiration_date_list(expiration_date_list, api_version)
click to toggle source
# File lib/admiral_stats_parser/parser/blueprint_list_info_parser.rb, line 87 def self.parse_expiration_date_list(expiration_date_list, api_version) results = [] expiration_date_list.each do |ed| result = BlueprintListInfo::ExpirationDate.new EXPIRATION_DATE_MANDATORY_KEYS[api_version].each do |key, key_class| # 必須のキーが含まれなければエラー camel_case_key = key.to_s.split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join unless ed.include?(camel_case_key) raise "Mandatory key #{key} does not exist" end # 結果のクラスが合わなければエラー # ruby には Boolean クラスがないので、そこだけ特別な処理を用意する if key_class == :boolean unless [true, false].include?(ed[camel_case_key]) raise "Mandatory key #{key} is not boolean" end else unless ed[camel_case_key].is_a?(key_class) raise "Mandatory key #{key} is not class #{key_class}" end end result.instance_variable_set("@#{key.to_s}", ed[camel_case_key]) end results << result end results end