esi 0.1.2 → 0.1.5

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