pokeapi 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pokeapi.rb +7 -0
- data/lib/pokeapi/chain.rb +7 -0
- data/lib/pokeapi/evolution_chain.rb +6 -0
- data/lib/pokeapi/evolution_details.rb +22 -0
- data/lib/pokeapi/parser/evolution_chain.rb +31 -0
- data/lib/pokeapi/parser/evolution_details.rb +58 -0
- data/lib/pokeapi/parser/pokemon.rb +6 -0
- data/lib/pokeapi/parser/species.rb +46 -0
- data/lib/pokeapi/pokemon.rb +9 -0
- data/lib/pokeapi/requester.rb +14 -2
- data/lib/pokeapi/species.rb +17 -0
- data/lib/pokeapi/version.rb +1 -1
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fbf266aef125f77a8a4356e82548283942c15130
|
4
|
+
data.tar.gz: d2800adcc1840164e3cdf136a36b4d2640141663
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab2950b33993bb2015664ea16378c22dab640b86e0c0a94d2aed63edfb9585683d22b367cac0a99e82d1140ddbb637a3925bf763402e3dea6ffb1d275ab4e283
|
7
|
+
data.tar.gz: 131d86886a7a65b67ec507575099e87edb8bac7ca92e826ce36bb10bd0150d18a5717192668ca7f24b297f1e09942ff09e31a475f2f3a1d63593199cc0e41c28
|
data/lib/pokeapi.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
require "hashie"
|
2
2
|
require "pokeapi/version"
|
3
3
|
require "pokeapi/parser/pokemon"
|
4
|
+
require "pokeapi/parser/species"
|
5
|
+
require "pokeapi/parser/evolution_chain"
|
6
|
+
require "pokeapi/parser/evolution_details"
|
4
7
|
require "pokeapi/base"
|
5
8
|
require "pokeapi/ability"
|
6
9
|
require "pokeapi/move"
|
@@ -8,6 +11,10 @@ require "pokeapi/type"
|
|
8
11
|
require "pokeapi/stat"
|
9
12
|
require "pokeapi/requester"
|
10
13
|
require "pokeapi/pokemon"
|
14
|
+
require "pokeapi/species"
|
15
|
+
require "pokeapi/evolution_details"
|
16
|
+
require "pokeapi/chain"
|
17
|
+
require "pokeapi/evolution_chain"
|
11
18
|
|
12
19
|
module PokeAPI
|
13
20
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module PokeAPI
|
2
|
+
class EvolutionDetails < Base
|
3
|
+
property :item
|
4
|
+
property :trigger
|
5
|
+
property :gender
|
6
|
+
property :held_item
|
7
|
+
property :known_move
|
8
|
+
property :known_move_type
|
9
|
+
property :location
|
10
|
+
property :min_level
|
11
|
+
property :min_happiness
|
12
|
+
property :min_beauty
|
13
|
+
property :min_affection
|
14
|
+
property :needs_overworld_rain
|
15
|
+
property :party_species
|
16
|
+
property :party_type
|
17
|
+
property :relative_physical_stats
|
18
|
+
property :time_of_day
|
19
|
+
property :trade_species
|
20
|
+
property :turn_upside_down
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module PokeAPI
|
2
|
+
module Parser
|
3
|
+
class EvolutionChain
|
4
|
+
def self.parse(data)
|
5
|
+
new(data).parse
|
6
|
+
end
|
7
|
+
|
8
|
+
def initialize(data)
|
9
|
+
@data = data.clone
|
10
|
+
@chain = data.delete :chain
|
11
|
+
end
|
12
|
+
|
13
|
+
def parse
|
14
|
+
{
|
15
|
+
id: @data[:id],
|
16
|
+
chain: parse_chain(@chain),
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def parse_chain(chain)
|
23
|
+
{
|
24
|
+
name: chain[:species][:name],
|
25
|
+
evolution_details: EvolutionDetails.parse(chain[:evolution_details].first),
|
26
|
+
evolves_to: chain[:evolves_to].map { |evolution_chain| parse_chain(evolution_chain) },
|
27
|
+
}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module PokeAPI
|
2
|
+
module Parser
|
3
|
+
class EvolutionDetails
|
4
|
+
def self.parse(data)
|
5
|
+
return if data.nil?
|
6
|
+
new(data).parse
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(data)
|
10
|
+
@data = data.clone
|
11
|
+
@item = @data.delete :item
|
12
|
+
@trigger = @data.delete :trigger
|
13
|
+
@held_item = @data.delete :held_item
|
14
|
+
end
|
15
|
+
|
16
|
+
def parse
|
17
|
+
{
|
18
|
+
item: item,
|
19
|
+
trigger: trigger,
|
20
|
+
held_item: held_item,
|
21
|
+
gender: @data[:gender],
|
22
|
+
known_move: @data[:known_move],
|
23
|
+
known_move_type: @data[:known_move_type],
|
24
|
+
location: @data[:location],
|
25
|
+
min_level: @data[:min_level],
|
26
|
+
min_happiness: @data[:min_happiness],
|
27
|
+
min_beauty: @data[:min_beauty],
|
28
|
+
min_affection: @data[:min_affection],
|
29
|
+
needs_overworld_rain: @data[:needs_overworld_rain],
|
30
|
+
party_species: @data[:party_species],
|
31
|
+
party_type: @data[:party_type],
|
32
|
+
relative_physical_stats: @data[:relative_physical_stats],
|
33
|
+
time_of_day: time_of_day,
|
34
|
+
trade_species: @data[:trade_species],
|
35
|
+
turn_upside_down: @data[:turn_upside_down],
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def time_of_day
|
42
|
+
@data[:time_of_day].empty? ? nil : @data[:time_of_day]
|
43
|
+
end
|
44
|
+
|
45
|
+
def item
|
46
|
+
@item && @item[:name]
|
47
|
+
end
|
48
|
+
|
49
|
+
def trigger
|
50
|
+
@trigger && @trigger[:name]
|
51
|
+
end
|
52
|
+
|
53
|
+
def held_item
|
54
|
+
@held_item && @held_item[:name]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module PokeAPI
|
2
2
|
module Parser
|
3
3
|
class Pokemon
|
4
|
+
ANIMATED_THUMBNAIL_SOURCE = "http://pokegifs.surge.sh/"
|
5
|
+
|
4
6
|
def self.parse(data)
|
5
7
|
new(data).parse
|
6
8
|
end
|
@@ -12,6 +14,8 @@ module PokeAPI
|
|
12
14
|
@types = @data.delete :types
|
13
15
|
@stats = @data.delete :stats
|
14
16
|
@thumbnail = @data.delete(:sprites).delete(:front_default)
|
17
|
+
@animated_thumbnail = "#{ANIMATED_THUMBNAIL_SOURCE}#{@data[:id]}.gif"
|
18
|
+
@species_id = @data[:species][:url].split("/").last
|
15
19
|
end
|
16
20
|
|
17
21
|
def parse
|
@@ -23,6 +27,8 @@ module PokeAPI
|
|
23
27
|
types: types,
|
24
28
|
stats: stats,
|
25
29
|
thumbnail: @thumbnail,
|
30
|
+
animated_thumbnail: @animated_thumbnail,
|
31
|
+
species_id: @species_id,
|
26
32
|
}
|
27
33
|
end
|
28
34
|
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module PokeAPI
|
2
|
+
module Parser
|
3
|
+
class Species
|
4
|
+
HEX_COLORS = {
|
5
|
+
red: '#f05868',
|
6
|
+
blue: '#3088f0',
|
7
|
+
yellow: '#f0d048',
|
8
|
+
green: '#40b868',
|
9
|
+
black: '#585858',
|
10
|
+
brown: '#b07030',
|
11
|
+
purple: '#a868c0',
|
12
|
+
gray: '#a0a0a0',
|
13
|
+
white: '#f0f0f0',
|
14
|
+
pink: '#f890c8',
|
15
|
+
}.freeze
|
16
|
+
|
17
|
+
def self.parse(data)
|
18
|
+
new(data).parse
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize(data)
|
22
|
+
@data = data.clone
|
23
|
+
@flavor_text_entries = @data.delete :flavor_text_entries
|
24
|
+
@color_name = @data[:color][:name]
|
25
|
+
end
|
26
|
+
|
27
|
+
def parse
|
28
|
+
{
|
29
|
+
id: @data[:id],
|
30
|
+
color_name: @color_name,
|
31
|
+
color_hex: HEX_COLORS[@color_name.to_sym],
|
32
|
+
shape: @data[:shape][:name],
|
33
|
+
pokedex_entry: english_pokedex_entry,
|
34
|
+
evolution_chain_id: @data[:evolution_chain][:url].split("/").last,
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def english_pokedex_entry
|
41
|
+
flavor_text = @flavor_text_entries.find { |entry| entry[:language][:name] == "en" } || @flavor_text_entries.first
|
42
|
+
flavor_text[:flavor_text]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/pokeapi/pokemon.rb
CHANGED
@@ -7,6 +7,8 @@ module PokeAPI
|
|
7
7
|
property :types, coerce: Array[Type]
|
8
8
|
property :stats, coerce: Array[Stat]
|
9
9
|
property :thumbnail
|
10
|
+
property :animated_thumbnail
|
11
|
+
property :species_id
|
10
12
|
|
11
13
|
class << self
|
12
14
|
def find(id)
|
@@ -14,5 +16,12 @@ module PokeAPI
|
|
14
16
|
new response
|
15
17
|
end
|
16
18
|
end
|
19
|
+
|
20
|
+
def species
|
21
|
+
@species ||= begin
|
22
|
+
response = Requester.species(species_id)
|
23
|
+
Species.new response
|
24
|
+
end
|
25
|
+
end
|
17
26
|
end
|
18
27
|
end
|
data/lib/pokeapi/requester.rb
CHANGED
@@ -5,8 +5,10 @@ module PokeAPI
|
|
5
5
|
NotFoundError = Class.new(StandardError)
|
6
6
|
TimeoutError = Class.new(StandardError)
|
7
7
|
|
8
|
-
API_ENDPOINT
|
9
|
-
POKEMON_ENDPOINT
|
8
|
+
API_ENDPOINT = "https://pokeapi.co/api/v2/"
|
9
|
+
POKEMON_ENDPOINT = "pokemon/"
|
10
|
+
POKEMON_SPECIES_ENDPOINT = "pokemon-species/"
|
11
|
+
EVOLUTION_CHAIN_ENDPOINT = "evolution-chain/"
|
10
12
|
|
11
13
|
class << self
|
12
14
|
def pokemon(id)
|
@@ -14,6 +16,16 @@ module PokeAPI
|
|
14
16
|
Parser::Pokemon.parse(data)
|
15
17
|
end
|
16
18
|
|
19
|
+
def species(id)
|
20
|
+
data = get("#{POKEMON_SPECIES_ENDPOINT}#{id}")
|
21
|
+
Parser::Species.parse(data)
|
22
|
+
end
|
23
|
+
|
24
|
+
def evolution_chain(id)
|
25
|
+
data = get("#{EVOLUTION_CHAIN_ENDPOINT}#{id}")
|
26
|
+
Parser::EvolutionChain.parse(data)
|
27
|
+
end
|
28
|
+
|
17
29
|
def get(path)
|
18
30
|
http = HTTP.get("#{API_ENDPOINT}#{path}/")
|
19
31
|
fail NotFoundError if http.code == 404
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module PokeAPI
|
2
|
+
class Species < Base
|
3
|
+
property :id
|
4
|
+
property :color_name
|
5
|
+
property :color_hex
|
6
|
+
property :shape
|
7
|
+
property :pokedex_entry
|
8
|
+
property :evolution_chain_id
|
9
|
+
|
10
|
+
def evolution_chain
|
11
|
+
@evolution_chain ||= begin
|
12
|
+
response = Requester.evolution_chain(evolution_chain_id)
|
13
|
+
EvolutionChain.new(response)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/pokeapi/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pokeapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Edgar Ortega
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http
|
@@ -101,10 +101,17 @@ files:
|
|
101
101
|
- lib/pokeapi.rb
|
102
102
|
- lib/pokeapi/ability.rb
|
103
103
|
- lib/pokeapi/base.rb
|
104
|
+
- lib/pokeapi/chain.rb
|
105
|
+
- lib/pokeapi/evolution_chain.rb
|
106
|
+
- lib/pokeapi/evolution_details.rb
|
104
107
|
- lib/pokeapi/move.rb
|
108
|
+
- lib/pokeapi/parser/evolution_chain.rb
|
109
|
+
- lib/pokeapi/parser/evolution_details.rb
|
105
110
|
- lib/pokeapi/parser/pokemon.rb
|
111
|
+
- lib/pokeapi/parser/species.rb
|
106
112
|
- lib/pokeapi/pokemon.rb
|
107
113
|
- lib/pokeapi/requester.rb
|
114
|
+
- lib/pokeapi/species.rb
|
108
115
|
- lib/pokeapi/stat.rb
|
109
116
|
- lib/pokeapi/type.rb
|
110
117
|
- lib/pokeapi/version.rb
|