class Oakdex::Pokedex::PokemonImporter
Handles Pokemon
Import
Public Class Methods
new(custom_pokemon)
click to toggle source
# File lib/oakdex/pokedex/pokemon_importer.rb, line 7 def initialize(custom_pokemon) pokemon_list = if custom_pokemon.is_a?(Array) custom_pokemon else JSON.parse(custom_pokemon) end @pokemon = pokemon_list.map do |p| p.is_a?(Hash) ? p : JSON.parse(p) end end
Public Instance Methods
import!()
click to toggle source
# File lib/oakdex/pokedex/pokemon_importer.rb, line 18 def import! validate! Oakdex::Pokedex::Pokemon.add_to_all(@pokemon) end
Private Instance Methods
available_pokemon()
click to toggle source
# File lib/oakdex/pokedex/pokemon_importer.rb, line 44 def available_pokemon Pokemon.all.keys + @pokemon.map { |p| pokemon_name(p) }.compact end
pokemon_name(data)
click to toggle source
# File lib/oakdex/pokedex/pokemon_importer.rb, line 48 def pokemon_name(data) data.dig('names', 'en') ? data['names']['en'] : nil end
schema()
click to toggle source
# File lib/oakdex/pokedex/pokemon_importer.rb, line 36 def schema @schema ||= JSON.parse(File.read(schema_path)).tap do |schema| schema['properties']['national_id']['minimum'] = 10_001 schema['properties']['national_id'].delete('maximum') schema['definitions']['pokemon']['enum'] = [nil] + available_pokemon end end
schema_path()
click to toggle source
# File lib/oakdex/pokedex/pokemon_importer.rb, line 52 def schema_path "#{Oakdex::Pokedex.data_dir}/schemas/pokemon.json" end
validate!()
click to toggle source
# File lib/oakdex/pokedex/pokemon_importer.rb, line 25 def validate! @pokemon.each do |p| begin JSON::Validator.validate!(schema, p) rescue JSON::Schema::ValidationError => e pname = pokemon_name(p) || 'Unknown' raise InvalidPokemonError, "Invalid #{pname}: #{e.message}" end end end