Sha256: 37f7c8c41f080c9e0181e1935c6ca5b84fb5f91e27ff106d1a4ad138e079b7b4

Contents?: true

Size: 1.08 KB

Versions: 13

Compression:

Stored size: 1.08 KB

Contents

require 'json'
require 'admiral_stats_parser/model/equip_book_info'

class EquipBookInfoParser
  MANDATORY_KEYS = {
    book_no: Integer,
    equip_kind: String,
    equip_name: String,
    equip_img: String,
  }

  def self.parse(json)
    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 = EquipBookInfo.new

      MANDATORY_KEYS.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

        # 結果のクラスが合わなければエラー
        unless items[camel_case_key].is_a?(key_class)
          raise "Mandatory key #{key} is not class #{key_class}"
        end

        result.instance_variable_set("@#{key.to_s}", items[camel_case_key])
      end

      results << result
    end

    results
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
admiral_stats_parser-1.17.1 lib/admiral_stats_parser/parser/equip_book_info_parser.rb
admiral_stats_parser-1.17.0 lib/admiral_stats_parser/parser/equip_book_info_parser.rb
admiral_stats_parser-1.15.1 lib/admiral_stats_parser/parser/equip_book_info_parser.rb
admiral_stats_parser-1.15.0 lib/admiral_stats_parser/parser/equip_book_info_parser.rb
admiral_stats_parser-1.14.1 lib/admiral_stats_parser/parser/equip_book_info_parser.rb
admiral_stats_parser-1.14.0 lib/admiral_stats_parser/parser/equip_book_info_parser.rb
admiral_stats_parser-1.13.0 lib/admiral_stats_parser/parser/equip_book_info_parser.rb
admiral_stats_parser-1.12.0 lib/admiral_stats_parser/parser/equip_book_info_parser.rb
admiral_stats_parser-1.11.0 lib/admiral_stats_parser/parser/equip_book_info_parser.rb
admiral_stats_parser-1.9.0 lib/admiral_stats_parser/parser/equip_book_info_parser.rb
admiral_stats_parser-1.8.0 lib/admiral_stats_parser/parser/equip_book_info_parser.rb
admiral_stats_parser-1.7.0 lib/admiral_stats_parser/parser/equip_book_info_parser.rb
admiral_stats_parser-1.5.0 lib/admiral_stats_parser/parser/equip_book_info_parser.rb