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