esi 0.1.2 → 0.1.5

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: b5d0ba8745382e4dc76d80883f103938d1db197f
4
- data.tar.gz: 86b2d0155c58f106b2115ae636cd9dcf152b667d
3
+ metadata.gz: 7cca478fd5427ecdcc25baebef64a0a6fd4f0f74
4
+ data.tar.gz: b61b8a1527217628dd0644b49668f31e0011ee79
5
5
  SHA512:
6
- metadata.gz: 495ca804fd67f4e55a327a9e6990613ab9cb36682d921c8913413c2e2ff8b4b161bac61e4536441817a75cb94f6740dba3b2059f7cde0fac8b970f83dd554d48
7
- data.tar.gz: 3117e5bf411a9808f9fcbc621df104e79d2c9527e567975723c7500b0ec3d96a2b3717ceaa33e8b2dc7c0b854d51b92f02d5034723009918ebcf2d931aaa2e54
6
+ metadata.gz: 8e33ddf6dae4e6c65876e528cf4f7e4fe6b3fc5df725ba0660d4d9e50f8cdab47d45dc25c0d958281f4d75391d3029ada2ff2fb509aed49255dccc998af07e54
7
+ data.tar.gz: 45a8329ca80fa71af75a9406f6fddd66d27847f8a6fd0021740285ceca63feb8db09ed90f018c7c50057af8db36e7cb93c1a89278ea4d53998fdd2fa8798fed8
data/README.md CHANGED
@@ -27,7 +27,7 @@ Or install it yourself as:
27
27
 
28
28
  ### You can optionally specify a callback that will be executed after a new token has been received using the refresh token
29
29
 
30
- esi.refresh_callback = ~> (token, expires_at) {
30
+ esi.refresh_callback = -> (token, expires_at) {
31
31
  # save new token & expires at
32
32
  }
33
33
 
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.add_dependency "oauth2", "~> 1.2"
21
21
  spec.add_dependency "addressable", "~> 2.3"
22
22
  spec.add_dependency "recursive-open-struct", "~> 1"
23
+ spec.add_dependency "activesupport"
23
24
  spec.add_development_dependency "bundler", "~> 1.14"
24
25
  spec.add_development_dependency "rake", "~> 10.0"
25
26
  spec.add_development_dependency "minitest", "~> 5.0"
data/lib/esi.rb CHANGED
@@ -2,6 +2,7 @@ require "oauth2"
2
2
  require "forwardable"
3
3
  require "ostruct"
4
4
  require "addressable/uri"
5
+ require "active_support/notifications"
5
6
 
6
7
  module Esi
7
8
  autoload :Version, 'esi/version'
@@ -12,47 +13,51 @@ module Esi
12
13
  autoload :Response, 'esi/response'
13
14
 
14
15
  SCOPES = %w(
15
- esi-calendar.respond_calendar_events.v1
16
+ esi-assets.read_assets.v1
17
+ esi-bookmarks.read_character_bookmarks.v1
16
18
  esi-calendar.read_calendar_events.v1
19
+ esi-calendar.respond_calendar_events.v1
20
+ esi-characters.read_agents_research.v1
21
+ esi-characters.read_blueprints.v1
22
+ esi-characters.read_chat_channels.v1
23
+ esi-characters.read_contacts.v1
24
+ esi-characters.read_corporation_roles.v1
25
+ esi-characters.read_fatigue.v1
26
+ esi-characters.read_loyalty.v1
27
+ esi-characters.read_medals.v1
28
+ esi-characters.read_opportunities.v1
29
+ esi-characters.read_standings.v1
30
+ esi-characters.write_contacts.v1
31
+ esi-clones.read_clones.v1
32
+ esi-clones.read_implants.v1
33
+ esi-contracts.read_character_contracts.v1
34
+ esi-corporations.read_corporation_membership.v1
35
+ esi-corporations.read_structures.v1
36
+ esi-corporations.track_members.v1
37
+ esi-corporations.write_structures.v1
38
+ esi-fittings.read_fittings.v1
39
+ esi-fittings.write_fittings.v1
40
+ esi-fleets.read_fleet.v1
41
+ esi-fleets.write_fleet.v1
42
+ esi-industry.read_character_jobs.v1
43
+ esi-killmails.read_killmails.v1
17
44
  esi-location.read_location.v1
45
+ esi-location.read_online.v1
18
46
  esi-location.read_ship_type.v1
19
47
  esi-mail.organize_mail.v1
20
48
  esi-mail.read_mail.v1
21
49
  esi-mail.send_mail.v1
22
- esi-skills.read_skills.v1
23
- esi-skills.read_skillqueue.v1
24
- esi-wallet.read_character_wallet.v1
25
- esi-search.search_structures.v1
26
- esi-clones.read_clones.v1
27
- esi-characters.read_contacts.v1
28
- esi-universe.read_structures.v1
29
- esi-bookmarks.read_character_bookmarks.v1
30
- esi-killmails.read_killmails.v1
31
- esi-corporations.read_corporation_membership.v1
32
- esi-assets.read_assets.v1
50
+ esi-markets.read_character_orders.v1
51
+ esi-markets.structure_markets.v1
33
52
  esi-planets.manage_planets.v1
34
- esi-fleets.read_fleet.v1
35
- esi-fleets.write_fleet.v1
53
+ esi-search.search_structures.v1
54
+ esi-skills.read_skillqueue.v1
55
+ esi-skills.read_skills.v1
36
56
  esi-ui.open_window.v1
37
57
  esi-ui.write_waypoint.v1
38
- esi-characters.write_contacts.v1
39
- esi-fittings.read_fittings.v1
40
- esi-fittings.write_fittings.v1
41
- esi-markets.structure_markets.v1
42
- esi-corporations.read_structures.v1
43
- esi-corporations.write_structures.v1
44
- esi-characters.read_loyalty.v1
45
- esi-characters.read_opportunities.v1
46
- esi-characters.read_chat_channels.v1
47
- esi-characters.read_medals.v1
48
- esi-characters.read_standings.v1
49
- esi-characters.read_agents_research.v1
50
- esi-industry.read_character_jobs.v1
51
- esi-markets.read_character_orders.v1
52
- esi-characters.read_blueprints.v1
53
- esi-characters.read_corporation_roles.v1
54
- esi-location.read_online.v1
55
- esi-contracts.read_character_contracts.v1
58
+ esi-universe.read_structures.v1
59
+ esi-wallet.read_character_wallet.v1
60
+ esi-wallet.read_corporation_wallets.v1
56
61
  )
57
62
  DEFAULT_CONFIG = {
58
63
  datasource: :tranquility,
@@ -1,6 +1,8 @@
1
1
  module Esi
2
2
  class Calls
3
3
  class Base
4
+ class_attribute :scope
5
+ class_attribute :cache_duration
4
6
  attr_accessor :path, :params
5
7
 
6
8
  def method
@@ -21,14 +23,6 @@ module Esi
21
23
  end
22
24
  end
23
25
 
24
- class OpenMarketDetails < Base
25
- def initialize(type_id)
26
- @path = "/ui/openwindow/marketdetails"
27
- @method = :post
28
- @params = { type_id: type_id }
29
- end
30
- end
31
-
32
26
  class SolarSystem < Base
33
27
  def initialize(system_id)
34
28
  @path = "/universe/systems/#{system_id}"
@@ -55,126 +49,164 @@ module Esi
55
49
  end
56
50
  end
57
51
 
58
- class Characters < Base
59
- def initialize(character_ids)
60
- @path = "/characters/names"
61
- @params = { character_ids: character_ids.join(',') }
52
+ class StructureOrders < Base
53
+ def initialize(structure_id:)
54
+ @path = "/markets/structures/#{structure_id}"
55
+ @paginated = true
56
+ end
57
+ end
58
+
59
+ class MarketHistory < Base
60
+ def initialize(type_id:, region_id: Region::FORGE)
61
+ @path = "/markets/#{region_id}/history"
62
+ @params = { type_id: type_id }
62
63
  end
63
64
  end
64
65
 
65
66
  class CharacterNames < Base
67
+ self.cache_duration = 3600
68
+
66
69
  def initialize(character_ids)
67
70
  @path = "/characters/names"
68
71
  @params = { character_ids: character_ids.join(',') }
69
72
  end
70
73
  end
71
74
 
72
- # Link: https://esi.tech.ccp.is/latest/#!/Character/get_characters_character_id
73
- # Cache: 1 hour
74
75
  class Character < Base
76
+ self.cache_duration = 3600
77
+
75
78
  def initialize(character_id)
76
79
  @path = "/characters/#{character_id}"
77
80
  end
78
81
  end
79
82
 
80
- # Link: https://esi.tech.ccp.is/dev/#!/Wallet/get_characters_character_id_wallet
81
- # Scope: esi-wallet.read_character_wallet.v1
82
83
  # Cache: 2 minutes
83
84
  class CharacterWallet < Base
85
+ self.scope = 'esi-wallet.read_character_wallet.v1'
86
+ self.cache_duration = 120
87
+
84
88
  def initialize(character_id)
85
89
  @path = "/characters/#{character_id}/wallet"
86
90
  end
87
91
  end
88
92
 
89
- # Link: https://esi.tech.ccp.is/dev/#!/Wallet/get_characters_character_id_wallet_journal
90
- # Scope: esi-wallet.read_character_wallet.v1
91
- # Cache: 1 hour
92
93
  class CharacterWalletJournal < Base
94
+ self.scope = 'esi-wallet.read_character_wallet.v1'
95
+ self.cache_duration = 3600
96
+
93
97
  def initialize(character_id)
94
98
  @path = "/characters/#{character_id}/wallet/journal"
95
99
  end
96
100
  end
97
101
 
98
- # Link: https://esi.tech.ccp.is/dev/#!/Wallet/get_characters_character_id_wallet_transactions
99
- # Scope: esi-wallet.read_character_wallet.v1
100
- # Cache: 1 hour
101
102
  class CharacterWalletTransactions < Base
103
+ self.scope = 'esi-wallet.read_character_wallet.v1'
104
+ self.cache_duration = 3600
105
+
102
106
  def initialize(character_id)
103
107
  @path = "/characters/#{character_id}/wallet/transactions"
104
108
  end
105
109
  end
106
110
 
107
- # Link: https://esi.tech.ccp.is/latest/#!/Market/get_characters_character_id_orders
108
- # Scope: esi-markets.read_character_orders.v1
109
- # Cache: 1 hour
110
111
  class CharacterOrders < Base
112
+ self.scope = 'esi-markets.read_character_orders.v1'
113
+ self.cache_duration = 3600
114
+
111
115
  def initialize(character_id)
112
116
  @path = "/characters/#{character_id}/orders"
113
117
  end
114
118
  end
115
119
 
116
- # Link: https://esi.tech.ccp.is/latest/#!/Industry/get_characters_character_id_industry_jobs
117
- # Scope: esi-industry.read_character_jobs.v1
118
- # Cache: 5 minutes
119
120
  class CharacterIndustryJobs < Base
121
+ self.scope = 'esi-industry.read_character_jobs.v1'
122
+ self.cache_duration = 300
123
+
120
124
  def initialize(character_id, with_completed: false)
121
125
  @path = "/characters/#{character_id}/industry/jobs"
122
126
  @params = { with_completed: with_completed }
123
127
  end
124
128
  end
125
129
 
126
- # Link: https://esi.tech.ccp.is/dev/?datasource=tranquility#!/Contacts/get_characters_character_id_contacts
127
- # Scope: esi-contracts.read_character_contracts.v1
128
- # Cache: 1 hour
129
130
  class CharacterContracts < Base
130
- def initialize(character_id)
131
- @path = "/characters/#{character_id}/contracts"
132
- end
133
- end
131
+ self.scope = 'esi-contracts.read_character_contracts.v1'
132
+ self.cache_duration = 3600
134
133
 
135
- # Link: https://esi.tech.ccp.is/dev/#!/Location/get_characters_character_id_location
136
- # Scope: esi-location.read_location.v1
137
- # Cache: 1 hour
138
- class CharacterLocation < Base
139
134
  def initialize(character_id)
140
- @path = "/characters/#{character_id}/location"
135
+ @path = "/characters/#{character_id}/contracts"
141
136
  end
142
137
  end
143
138
 
144
- # Link: https://esi.tech.ccp.is/dev/#!/Contracts/get_characters_character_id_contracts_contract_id_items
145
- # Scope: esi-contracts.read_character_contracts.v1
146
- # Cache: 1 hour
147
139
  class ContractItems < Base
140
+ self.scope = 'esi-contracts.read_character_contracts.v1'
141
+ self.cache_duration = 3600
142
+
148
143
  def initialize(character_id, contract_id)
149
144
  @path = "/characters/#{character_id}/contracts/#{contract_id}/items"
150
145
  end
151
146
  end
152
147
 
153
- # Link: https://esi.tech.ccp.is/dev/#!/Location/get_characters_character_id_location
154
- # Scope: esi-location.read_location.v1
155
- # Cache: 5 seconds
156
148
  class CharacterLocation < Base
149
+ self.scope = 'esi-location.read_location.v1'
150
+ self.cache_duration = 5
151
+
157
152
  def initialize(character_id)
158
153
  @path = "/characters/#{character_id}/location"
159
154
  end
160
155
  end
161
156
 
162
- # Link: https://esi.tech.ccp.is/dev/#!/Assets/get_characters_character_id_assets
163
- # Scope: esi-assets.read_assets.v1
164
- # Cache: 1 hour
157
+ # characters/{character_id}/online
158
+ # esi-location.read_online.v1
159
+ # 60
160
+
161
+ # /characters/{character_id}/attributes
162
+ # esi-skills.read_skills.v1
163
+ # 3600
164
+
165
+ # /characters/{character_id}/chat_channels
166
+ # esi-characters.read_chat_channels.v1
167
+ # 300
168
+
169
+ # /characters/{character_id}/clones
170
+ # esi-clones.read_clones.v1
171
+ # 120
172
+
173
+ # /characters/{character_id}/implants
174
+ # esi-clones.read_implants.v1
175
+ # 3600
176
+
177
+ # /characters/{character_id}/roles
178
+ # esi-characters.read_corporation_roles.v1
179
+ # 3600
180
+
181
+ class CharacterMail < Base
182
+ self.scope = 'esi-mail.read_mail.v1'
183
+ self.cache_duration = 30
184
+
185
+ def initialize(character_id)
186
+ @path = "/characters/#{character_id}/mail"
187
+ end
188
+ end
189
+
165
190
  class Assets < Base
191
+ self.scope = 'esi-assets.read_assets.v1'
192
+ self.cache_duration = 3600
193
+
166
194
  def initialize(character_id)
167
195
  @path = "/characters/#{character_id}/assets"
168
196
  end
169
197
  end
170
198
 
171
199
  class Alliances < Base
200
+ self.cache_duration = 3600
201
+
172
202
  def initialize
173
203
  @path = "/alliances"
174
204
  end
175
205
  end
176
206
 
177
207
  class AllianceNames < Base
208
+ self.cache_duration = 3600
209
+
178
210
  def initialize(alliance_ids)
179
211
  @path = "/alliances/names"
180
212
  @params = { alliance_ids: alliance_ids.join(',') }
@@ -182,12 +214,16 @@ module Esi
182
214
  end
183
215
 
184
216
  class Alliance < Base
217
+ self.cache_duration = 3600
218
+
185
219
  def initialize(alliance_id)
186
220
  @path = "/alliances/#{alliance_id}"
187
221
  end
188
222
  end
189
223
 
190
224
  class CorporationNames < Base
225
+ self.cache_duration = 3600
226
+
191
227
  def initialize(corporation_ids)
192
228
  @path = "/corporations/names"
193
229
  @params = { corporation_ids: corporation_ids.join(',') }
@@ -195,41 +231,64 @@ module Esi
195
231
  end
196
232
 
197
233
  class Corporation < Base
234
+ self.cache_duration = 3600
235
+
198
236
  def initialize(corporation_id)
199
237
  @path = "/corporations/#{corporation_id}"
200
238
  end
201
239
  end
202
240
 
203
- class CorporationStructures < Base
241
+ class CorporationWallet < Base
242
+ self.scope = 'esi-wallet.read_corporation_wallet.v1'
243
+ self.cache_duration = 120
244
+
204
245
  def initialize(corporation_id)
205
- @path = "/corporations/#{corporation_id}/structures"
246
+ @path = "/corporations/#{corporation_id}/wallets"
206
247
  end
207
248
  end
208
249
 
209
- class CorporationStructure < Base
210
- def initialize(corporation_id, structure_id)
211
- @path = "/corporations/#{corporation_id}/structures/#{structure_id}"
250
+ class CorporationStructures < Base
251
+ self.scope = 'esi-corporations.read_structures.v1'
252
+ self.cache_duration = 3600
253
+
254
+ def initialize(corporation_id)
255
+ @path = "/corporations/#{corporation_id}/structures"
212
256
  end
213
257
  end
214
258
 
215
- # Link: https://esi.tech.ccp.is/dev/#!/Corporation/get_corporations_corporation_id_members
216
- # Scope: esi-corporations.read_corporation_membership.v1
217
- # Cache: 1 hour
218
259
  class CorporationMembers < Base
260
+ self.scope = 'esi-corporations.read_corporation_membership.v1'
261
+ self.cache_duration = 3600
262
+
219
263
  def initialize(corporation_id)
220
264
  @path = "/corporations/#{corporation_id}/members"
221
265
  end
222
266
  end
223
267
 
268
+ class CorporationMemberTracking < Base
269
+ self.scope = 'esi-corporations.track_members.v1'
270
+ self.cache_duration = 3600
271
+
272
+ def initialize(corporation_id)
273
+ @path = "/corporations/#{corporation_id}/membertracking"
274
+ end
275
+ end
276
+
224
277
  # Link: https://esi.tech.ccp.is/dev/#!/Corporation/get_corporations_corporation_id_roles
225
- # Scope: esi-corporations.read_corporation_membership.v1
226
- # Cache: 1 hour
227
278
  class CorporationRoles < Base
279
+ self.scope = 'esi-corporations.read_corporation_membership.v1'
280
+ self.cache_duration = 3600
281
+
228
282
  def initialize(corporation_id)
229
283
  @path = "/corporations/#{corporation_id}/roles"
230
284
  end
231
285
  end
232
286
 
287
+ class CorporationWallets < Base
288
+ self.scope = 'esi-wallet.read_corporation_wallets.v1'
289
+ self.cache_duration = 300
290
+ end
291
+
233
292
  class Structures < Base
234
293
  def initialize
235
294
  @path = "/universe/structures"
@@ -277,21 +336,9 @@ module Esi
277
336
  end
278
337
  end
279
338
 
280
- class StructureOrders < Base
281
- def initialize(structure_id:)
282
- @path = "/markets/structures/#{structure_id}"
283
- @paginated = true
284
- end
285
- end
286
-
287
- class MarketHistory < Base
288
- def initialize(type_id:, region_id: Region::FORGE)
289
- @path = "/markets/#{region_id}/history"
290
- @params = { type_id: type_id }
291
- end
292
- end
293
-
294
339
  class Killmails < Base
340
+ self.scope = 'esi-killmails.read_killmails.v1'
341
+
295
342
  def initialize(character_id:, max_count: 50, max_kill_id: nil)
296
343
  @path = "/characters/#{character_id}/killmails/recent"
297
344
  @params = { max_count: max_count }
@@ -324,6 +371,8 @@ module Esi
324
371
  end
325
372
 
326
373
  class Fittings < Base
374
+ self.scope = 'esi-fittings.read_fittings.v1'
375
+
327
376
  def initialize(character_id)
328
377
  @path = "characters/#{character_id}/fittings"
329
378
  end
@@ -335,5 +384,15 @@ module Esi
335
384
  @method = :delete
336
385
  end
337
386
  end
387
+
388
+ class OpenMarketDetails < Base
389
+ self.scope = 'esi-ui.open_window.v1'
390
+
391
+ def initialize(type_id)
392
+ @path = "/ui/openwindow/marketdetails"
393
+ @method = :post
394
+ @params = { type_id: type_id }
395
+ end
396
+ end
338
397
  end
339
398
  end
@@ -13,11 +13,14 @@ module Esi
13
13
  end
14
14
 
15
15
  def method_missing(name, *args, &block)
16
- class_name = name.to_s.split('_').map(&:capitalize).join
17
- begin
18
- klass = Esi::Calls.const_get(class_name)
19
- rescue NameError
20
- super(name, *args, &block)
16
+ klass = nil
17
+ ActiveSupport::Notifications.instrument('esi.client.detect_call') do
18
+ class_name = name.to_s.split('_').map(&:capitalize).join
19
+ begin
20
+ klass = Esi::Calls.const_get(class_name)
21
+ rescue NameError
22
+ super(name, *args, &block)
23
+ end
21
24
  end
22
25
 
23
26
  call = klass.new(*args)
@@ -53,12 +56,14 @@ module Esi
53
56
  items = []
54
57
  page = 1
55
58
 
56
- loop do
57
- call.page = page
58
- response = request(call, &block)
59
- break if response.data.blank?
60
- items += response.data
61
- page += 1
59
+ ActiveSupport::Notifications.instrument('esi.client.request.paginated') do
60
+ loop do
61
+ call.page = page
62
+ response = request(call, &block)
63
+ break if response.data.blank?
64
+ items += response.data
65
+ page += 1
66
+ end
62
67
  end
63
68
 
64
69
  items
@@ -67,54 +72,59 @@ module Esi
67
72
  def request(call, url=nil, &block)
68
73
  response = nil
69
74
  url ||= call.url
70
-
71
75
  debug "Starting request: #{url}"
72
76
 
73
- 1.upto(MAX_ATTEMPTS) do |try|
74
- begin
75
- response = oauth.request(call.method, url)
76
- rescue OAuth2::Error => e
77
- case e.response.status
78
- when 502 # Temporary server error
79
- logger.error "TemporaryServerError, sleeping for 15 seconds"
80
- sleep 15
81
- next
82
- when 503 # Rate Limit
83
- logger.error "RateLimit error, sleeping for 15 seconds"
84
- sleep 15
85
- next
86
- when 403 # Forbidden
87
- logger.error "ApiForbiddenError: #{e.response.status}: #{e.response.body}"
88
- logger.error url
89
- raise Esi::ApiForbiddenError.new(Response.new(e.response))
90
- when 404 # Not Found
91
- raise Esi::ApiNotFoundError.new(Response.new(e.response))
92
- else
93
- response = Response.new(e.response)
94
- logger.error "ApiUnknownError (#{response.status}): #{url}"
95
-
96
- case response.error
97
- when 'invalid_client' then
98
- raise ApiInvalidAppClientKeysError.new(response)
77
+ ActiveSupport::Notifications.instrument('esi.client.request') do
78
+ 1.upto(MAX_ATTEMPTS) do |try|
79
+ begin
80
+ response = oauth.request(call.method, url)
81
+ rescue OAuth2::Error => e
82
+ case e.response.status
83
+ when 502 # Temporary server error
84
+ logger.error "TemporaryServerError, sleeping for 15 seconds"
85
+ sleep 15
86
+ next
87
+ when 503 # Rate Limit
88
+ logger.error "RateLimit error, sleeping for 15 seconds"
89
+ sleep 15
90
+ next
91
+ when 403 # Forbidden
92
+ logger.error "ApiForbiddenError: #{e.response.status}: #{e.response.body}"
93
+ logger.error url
94
+ raise Esi::ApiForbiddenError.new(Response.new(e.response))
95
+ when 404 # Not Found
96
+ raise Esi::ApiNotFoundError.new(Response.new(e.response))
99
97
  else
100
- raise Esi::ApiUnknownError.new(response)
98
+ response = Response.new(e.response)
99
+ logger.error "ApiUnknownError (#{response.status}): #{url}"
100
+
101
+ case response.error
102
+ when 'invalid_client' then
103
+ raise ApiInvalidAppClientKeysError.new(response)
104
+ else
105
+ raise Esi::ApiUnknownError.new(response)
106
+ end
101
107
  end
102
108
  end
109
+ break if response
103
110
  end
104
- break if response
105
111
  end
106
112
 
107
113
  debug "Request finished"
108
- response = Response.new(response)
109
-
110
- if Esi.config.response_log_path && Dir.exists?(Esi.config.response_log_path)
111
- call_name = call.class.to_s.downcase.split('::').last
112
- folder = Pathname.new(Esi.config.response_log_path).join(call_name)
113
- FileUtils.mkdir_p(folder)
114
- File.write(folder.join("#{Time.now.to_i.to_s}.json"), response.to_s)
114
+ ActiveSupport::Notifications.instrument('esi.client.response.initialize') do
115
+ response = Response.new(response)
116
+ end
117
+ ActiveSupport::Notifications.instrument('esi.client.response.save') do
118
+ if Esi.config.response_log_path && Dir.exists?(Esi.config.response_log_path)
119
+ call_name = call.class.to_s.downcase.split('::').last
120
+ folder = Pathname.new(Esi.config.response_log_path).join(call_name)
121
+ FileUtils.mkdir_p(folder)
122
+ File.write(folder.join("#{Time.now.to_i.to_s}.json"), response.to_s)
123
+ end
124
+ end
125
+ ActiveSupport::Notifications.instrument('esi.client.response.classify') do
126
+ response.data.each { |item| block.call(item) } if block
115
127
  end
116
-
117
- response.data.each { |item| block.call(item) } if block
118
128
  response
119
129
  end
120
130
  end
@@ -12,7 +12,9 @@ module Esi
12
12
  end
13
13
 
14
14
  def obtain_token(code)
15
- Esi::AccessToken.new(client.auth_code.get_token(code))
15
+ ActiveSupport::Notifications.instrument('esi.oauth.obtain_token') do
16
+ Esi::AccessToken.new(client.auth_code.get_token(code))
17
+ end
16
18
  end
17
19
 
18
20
  def client
@@ -45,10 +47,12 @@ module Esi
45
47
  end
46
48
 
47
49
  def refresh_access_token
48
- @token = @token.refresh!
49
- @access_token = @token.token
50
- @expires_at = @token.expires_at.integer? ? Time.at(@token.expires_at) : @token.expires_at
51
- @callback.call(@access_token, @expires_at) if @callback
50
+ ActiveSupport::Notifications.instrument('esi.oauth.refresh_token') do
51
+ @token = @token.refresh!
52
+ @access_token = @token.token
53
+ @expires_at = @token.expires_at.integer? ? Time.at(@token.expires_at) : @token.expires_at
54
+ @callback.call(@access_token, @expires_at) if @callback
55
+ end
52
56
  end
53
57
  end
54
58
  end
@@ -6,6 +6,7 @@ module Esi
6
6
 
7
7
  attr_reader :original_response, :json
8
8
  def_delegators :original_response, :status, :body, :headers
9
+ def_delegators :data, :each
9
10
 
10
11
  def initialize(response)
11
12
  @original_response = response
@@ -1,3 +1,3 @@
1
1
  module Esi
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: esi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danny Hiemstra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-08 00:00:00.000000000 Z
11
+ date: 2017-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oauth2
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activesupport
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -133,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
147
  version: '0'
134
148
  requirements: []
135
149
  rubyforge_project:
136
- rubygems_version: 2.6.11
150
+ rubygems_version: 2.5.2
137
151
  signing_key:
138
152
  specification_version: 4
139
153
  summary: EVE ESI API wrapper