pokeapi 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8cd982ed2498d562b1b7e92ff43a36362b72e308
4
- data.tar.gz: d571ed59b5cc8583f00dc87bb25817113e1744b1
3
+ metadata.gz: fbf266aef125f77a8a4356e82548283942c15130
4
+ data.tar.gz: d2800adcc1840164e3cdf136a36b4d2640141663
5
5
  SHA512:
6
- metadata.gz: 7a28812b8de7cc54b262e6f160b0eeddc8242dbb5785fbadd4219b894d816d70e1c10b9b943929ef4c7fb87a5c0df6e7397fe231434f4aba5cc271c466090c23
7
- data.tar.gz: a1ae32f4ac839b37db1e69b552a5c0e103639b0bf8f8bc5018cf0ca92bcef6ca0354e63c317e8b9edc1b1d777e9ddafecfb0e6986ceef2376ba117cbe6eecb30
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,7 @@
1
+ module PokeAPI
2
+ class Chain < Base
3
+ property :name
4
+ property :evolution_details, coerce: EvolutionDetails
5
+ property :evolves_to, coerce: Array[Chain]
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ module PokeAPI
2
+ class EvolutionChain < Base
3
+ property :id
4
+ property :chain, coerce: PokeAPI::Chain
5
+ end
6
+ 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
@@ -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
@@ -5,8 +5,10 @@ module PokeAPI
5
5
  NotFoundError = Class.new(StandardError)
6
6
  TimeoutError = Class.new(StandardError)
7
7
 
8
- API_ENDPOINT = "https://pokeapi.co/api/v2/"
9
- POKEMON_ENDPOINT = "pokemon/"
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
@@ -1,3 +1,3 @@
1
1
  module PokeAPI
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
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.2.1
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-05-27 00:00:00.000000000 Z
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