blizzard_api 2.0.0 → 3.2.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
  SHA256:
3
- metadata.gz: 96579c93bc977c1e27958031f03956a7fd19a1c54507a792a8c40fad27c24aea
4
- data.tar.gz: b0947d10581d4324503e561dc07059c2fc35f81f27be51b6d322d68abea87064
3
+ metadata.gz: ba8374332ff5b57727b9b5528294f71c723b617fc863672f2cc1673c8a1f1537
4
+ data.tar.gz: 29b16eee7787cfc7a5e53d3274a829b49db727ca106e9e1f53a0867a1a81b188
5
5
  SHA512:
6
- metadata.gz: 1dcdbfc4de7830373ebfda93f8bca5e2f4acc2743b18a5bcd16c6141574e48e13153966041ee4e699c75c76f9ec6af976f8c59116c0dd47f5445cf74d5aded4f
7
- data.tar.gz: c2ee55a8fb82065315dc7dc43ff14e6e1e511ffb67984ba57b1983da34d2c94ded0e6a49c46168e129bd991a788bfbe9a8ad4724bd3e7533ca6bd38914a82046
6
+ metadata.gz: e2f2dfff1fed002b4ee9ac408a59a675d175c0effbc04fd39d3aac55b29802cc5db9d9d563528b2349724111191f7d0eddd15f696c2c67399a3df05875ffa6d5
7
+ data.tar.gz: 335ccfcdebdcfc92c345c11a0da1330092fdc55a5cc0a7927a4099ae37f838673a1b2ad6fbd29b9aa0b05f9274049d8e38a653379054cecb29259af2b395290c
data/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  Please view this file on the master branch, otherwise it may be outdated
2
2
 
3
+ **Version 3.2.0**
4
+
5
+ Added new AH commodities endpoint.
6
+
7
+ **Version 3.1.0**
8
+
9
+ Fixed the latest build to exclude non 200 responses from caching.
10
+
11
+ **Version 3.0.0**
12
+
13
+ Changed the way `:extended` mode is handled regarding caching. Now the extended mode will use cache and return a fake
14
+ response object if the content is cached (Cache is still ignored when using the `:since` option).
15
+ A cached response can be identified by the presence of a `cached?` method on the response object.
16
+
17
+ Some automated tests for SC2 endpoints are now ignoring `503` errors. The state of the API is somehow unknown since it
18
+ is down most of the time.
19
+
3
20
  **Version 2.0.0**
4
21
 
5
22
  Removed the `icon` field from PlayableClass, it was meant to mimic the old communit API behavior during the transition
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- blizzard_api (1.0.0)
4
+ blizzard_api (3.1.0)
5
5
  redis (~> 4.1, >= 4.1.0)
6
6
 
7
7
  GEM
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BlizzardApi
4
+ ##
5
+ # Simple replacement for the http response object for cached data
6
+ class ApiResponse
7
+ attr_reader :code, :body
8
+
9
+ def initialize(body)
10
+ @code = 200
11
+ @body = body
12
+ end
13
+
14
+ def cached?
15
+ true
16
+ end
17
+ end
18
+ end
19
+
20
+ module Net
21
+ # Workaround for fake response payloads
22
+ class HTTPResponse
23
+ def cached?
24
+ false
25
+ end
26
+ end
27
+ end
@@ -9,7 +9,7 @@ module BlizzardApi
9
9
  #
10
10
  # You can get an instance of this class using the default region as follows:
11
11
  # api_instance = BlizzardApi::Diablo.character
12
- class Character < BlizzardApi::Diablo::Request
12
+ class CharacterClass < BlizzardApi::Diablo::Request
13
13
  ##
14
14
  # Return information about a class
15
15
  #
@@ -35,7 +35,7 @@ module BlizzardApi
35
35
  # Fetch leaderboard data for the current endpoint
36
36
  #
37
37
  # @param [Integer] id One of the IDs returned by the {index}
38
- # @param [Integer] leaderboard_id Leaderboard id
38
+ # @param [String] leaderboard_id Leaderboard id
39
39
  # @!macro request_options
40
40
  #
41
41
  # @!macro response
@@ -34,7 +34,7 @@ module BlizzardApi
34
34
  require_relative 'diablo/community/act'
35
35
  require_relative 'diablo/community/artisan'
36
36
  require_relative 'diablo/community/follower'
37
- require_relative 'diablo/community/character'
37
+ require_relative 'diablo/community/character_class'
38
38
  require_relative 'diablo/community/item_type'
39
39
  require_relative 'diablo/community/item'
40
40
  require_relative 'diablo/community/profile'
@@ -64,7 +64,7 @@ module BlizzardApi
64
64
  # @!macro init_options
65
65
  # @return {Character}
66
66
  def self.character(**options)
67
- BlizzardApi::Diablo::Character.new(**options)
67
+ BlizzardApi::Diablo::CharacterClass.new(**options)
68
68
  end
69
69
 
70
70
  ##
@@ -20,7 +20,7 @@ module BlizzardApi
20
20
  # @!macro request_options
21
21
  #
22
22
  # @!macro response
23
- def index(**options)
23
+ def search(**options)
24
24
  api_request "#{base_url(:community)}/#{@endpoint}/", **default_options.merge(options)
25
25
  end
26
26
 
@@ -82,20 +82,28 @@ module BlizzardApi
82
82
  def request(url, **options)
83
83
  # Creates the whole url for request
84
84
  parsed_url = URI.parse(url)
85
-
86
85
  data = using_cache?(options) ? find_in_cache(parsed_url.to_s) : nil
87
86
 
88
87
  # If data was found that means cache is enabled and valid
89
- return JSON.parse(data, symbolize_names: true) if data
88
+ return prepare_response data if data
90
89
 
91
90
  response = consume_api parsed_url, **options
92
91
 
93
- save_in_cache parsed_url.to_s, response.body, options[:ttl] || CACHE_DAY if using_cache? options
92
+ handle_cache_on_response parsed_url, response, **options
93
+ end
94
94
 
95
- response_data = response.code.to_i.eql?(304) ? nil : JSON.parse(response.body, symbolize_names: true)
96
- return [response, response_data] if mode.eql? :extended
95
+ def handle_cache_on_response(parsed_url, response, **options)
96
+ case response.code.to_i
97
+ when 304
98
+ response_data = nil
99
+ when 200
100
+ response_data = response.body
101
+ else
102
+ return nil, response
103
+ end
97
104
 
98
- response_data
105
+ save_in_cache parsed_url.to_s, response.body, options[:ttl] || CACHE_DAY if using_cache? options
106
+ prepare_response response_data, response
99
107
  end
100
108
 
101
109
  def api_request(uri, **query_string)
@@ -110,7 +118,7 @@ module BlizzardApi
110
118
 
111
119
  # In case uri already have query string parameters joins them with &
112
120
  if query_string.size.positive?
113
- query_string = URI.encode_www_form(query_string, false)
121
+ query_string = URI.encode_www_form(query_string)
114
122
  uri = uri.include?('?') ? "#{uri}&#{query_string}" : "#{uri}?#{query_string}"
115
123
  end
116
124
 
@@ -119,10 +127,22 @@ module BlizzardApi
119
127
 
120
128
  private
121
129
 
130
+ ##
131
+ # Resolves the response based on the mode
132
+ def prepare_response(data, response = nil)
133
+ parsed_data = data.nil? ? data : JSON.parse(data, symbolize_names: true)
134
+
135
+ return parsed_data unless mode.eql? :extended
136
+
137
+ response ||= ApiResponse.new(data)
138
+
139
+ [response, parsed_data]
140
+ end
141
+
122
142
  ##
123
143
  # @param options [Hash] Request options
124
144
  def using_cache?(options)
125
- return false if mode.eql?(:extended) || options.key?(:since)
145
+ return false if options.key?(:since)
126
146
 
127
147
  !options.fetch(:ignore_cache, false)
128
148
  end
@@ -130,6 +150,7 @@ module BlizzardApi
130
150
  def http_connection(url)
131
151
  Net::HTTP.new(url.host, url.port).tap do |http|
132
152
  http.use_ssl = true
153
+ http.keep_alive_timeout = 30
133
154
  end
134
155
  end
135
156
 
@@ -2,5 +2,5 @@
2
2
 
3
3
  module BlizzardApi
4
4
  # Gem version
5
- VERSION = '2.0.0'
5
+ VERSION = '3.2.0'
6
6
  end
@@ -39,6 +39,12 @@ module BlizzardApi
39
39
 
40
40
  api_request "#{base_url(:game_data)}/connected-realm/#{connected_realm_id}/auctions", **opts
41
41
  end
42
+
43
+ def commodities(**options)
44
+ opts = { ttl: CACHE_HOUR, namespace: :dynamic }.merge(options)
45
+
46
+ api_request "#{base_url(:game_data)}/auctions/commodities", **opts
47
+ end
42
48
  end
43
49
  end
44
50
  end
@@ -13,7 +13,7 @@ module BlizzardApi
13
13
  setup 'guild-crest', :static, CACHE_TRIMESTER
14
14
 
15
15
  def get
16
- raise BlizzardApi::ApiException, 'This endpoint doens\'t have a get method'
16
+ raise BlizzardApi::ApiException, 'This endpoint does not have a get method'
17
17
  end
18
18
 
19
19
  ##
@@ -17,7 +17,7 @@ module BlizzardApi
17
17
  #
18
18
  # @!macro response
19
19
  def index
20
- raise BlizzardApi::ApiException, 'This endpoint does not have a index method'
20
+ raise BlizzardApi::ApiException, 'This endpoint does not have an index method'
21
21
  end
22
22
 
23
23
  ##
@@ -19,7 +19,7 @@ module BlizzardApi
19
19
  #
20
20
  # @!macro response
21
21
  def index
22
- raise BlizzardApi::ApiException, 'This endpoint does not have a index method'
22
+ raise BlizzardApi::ApiException, 'This endpoint does not have an index method'
23
23
  end
24
24
 
25
25
  ##
@@ -9,16 +9,11 @@ module BlizzardApi
9
9
  #
10
10
  # You can get an instance of this class using the default region as follows:
11
11
  # api_instance = BlizzardApi::Wow.wow_token
12
- class WowToken < Wow::Request
13
- ##
14
- # Returns wow token data
15
- #
16
- # @!macro request_options
17
- #
18
- # @!macro response
19
- def get(**options)
20
- opts = { namespace: :dynamic, ttl: CACHE_HOUR }.merge(options)
21
- api_request "#{base_url(:game_data)}/token/index", **opts
12
+ class WowToken < GenericDataEndpoint
13
+ setup 'token', :dynamic, CACHE_HOUR
14
+
15
+ def get
16
+ raise BlizzardApi::ApiException, 'This endpoint does not have a index method'
22
17
  end
23
18
  end
24
19
  end
@@ -13,7 +13,7 @@ module BlizzardApi
13
13
  include BlizzardApi::Wow::Slug
14
14
 
15
15
  ##
16
- # Return character achievements
16
+ # Return character basic data
17
17
  #
18
18
  # @see https://develop.battle.net/documentation/api-reference/world-of-warcraft-profile-api
19
19
  #
data/lib/blizzard_api.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require_relative 'blizzard_api/configuration'
4
4
  require_relative 'blizzard_api/token_manager'
5
5
  require_relative 'blizzard_api/api_standards'
6
+ require_relative 'blizzard_api/api_response'
6
7
  require_relative 'blizzard_api/request'
7
8
  require_relative 'blizzard_api/exception'
8
9
  require_relative 'blizzard_api/version'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blizzard_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Francis Schiavo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-12 00:00:00.000000000 Z
11
+ date: 2022-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -121,12 +121,13 @@ files:
121
121
  - bin/setup
122
122
  - blizzard_api.gemspec
123
123
  - lib/blizzard_api.rb
124
+ - lib/blizzard_api/api_response.rb
124
125
  - lib/blizzard_api/api_standards.rb
125
126
  - lib/blizzard_api/configuration.rb
126
127
  - lib/blizzard_api/diablo.rb
127
128
  - lib/blizzard_api/diablo/community/act.rb
128
129
  - lib/blizzard_api/diablo/community/artisan.rb
129
- - lib/blizzard_api/diablo/community/character.rb
130
+ - lib/blizzard_api/diablo/community/character_class.rb
130
131
  - lib/blizzard_api/diablo/community/follower.rb
131
132
  - lib/blizzard_api/diablo/community/item.rb
132
133
  - lib/blizzard_api/diablo/community/item_type.rb