esi-sdk 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/cicd.yml +17 -2
  3. data/.gitignore +2 -0
  4. data/CHANGELOG.md +17 -0
  5. data/Gemfile +1 -0
  6. data/Gemfile.lock +21 -46
  7. data/README.md +0 -13
  8. data/Rakefile +31 -15
  9. data/bin/console +1 -1
  10. data/esi-sdk.gemspec +2 -4
  11. data/lib/esi/client/alliance.rb +4 -4
  12. data/lib/esi/client/assets.rb +8 -6
  13. data/lib/esi/client/bookmarks.rb +8 -4
  14. data/lib/esi/client/calendar.rb +4 -4
  15. data/lib/esi/client/character.rb +16 -15
  16. data/lib/esi/client/clones.rb +2 -2
  17. data/lib/esi/client/contacts.rb +12 -9
  18. data/lib/esi/client/contracts.rb +15 -9
  19. data/lib/esi/client/corporation.rb +31 -22
  20. data/lib/esi/client/dogma.rb +5 -5
  21. data/lib/esi/client/faction_warfare.rb +8 -8
  22. data/lib/esi/client/fittings.rb +3 -3
  23. data/lib/esi/client/fleets.rb +14 -14
  24. data/lib/esi/client/incursions.rb +1 -1
  25. data/lib/esi/client/industry.rb +13 -8
  26. data/lib/esi/client/insurance.rb +1 -1
  27. data/lib/esi/client/killmails.rb +5 -3
  28. data/lib/esi/client/location.rb +3 -3
  29. data/lib/esi/client/loyalty.rb +2 -2
  30. data/lib/esi/client/mail.rb +8 -8
  31. data/lib/esi/client/market.rb +17 -11
  32. data/lib/esi/client/opportunities.rb +5 -5
  33. data/lib/esi/client/planetary_interaction.rb +5 -4
  34. data/lib/esi/client/routes.rb +1 -1
  35. data/lib/esi/client/search.rb +2 -2
  36. data/lib/esi/client/skills.rb +3 -3
  37. data/lib/esi/client/sovereignty.rb +3 -3
  38. data/lib/esi/client/status.rb +1 -1
  39. data/lib/esi/client/universe.rb +32 -30
  40. data/lib/esi/client/user_interface.rb +5 -5
  41. data/lib/esi/client/wallet.rb +8 -6
  42. data/lib/esi/client/wars.rb +4 -3
  43. data/lib/esi/client.rb +65 -95
  44. data/lib/esi/errors.rb +3 -3
  45. data/lib/esi/version.rb +1 -1
  46. data/package.json +19 -0
  47. data/yarn.lock +3695 -0
  48. metadata +10 -36
@@ -20,7 +20,7 @@ module ESI
20
20
  #
21
21
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_ancestries
22
22
  def get_universe_ancestries(headers: {}, params: {})
23
- get("/universe/ancestries/", headers: headers, params: params)
23
+ get("/universe/ancestries/", headers: headers, params: params).json
24
24
  end
25
25
 
26
26
  # Get information on an asteroid belt.
@@ -41,7 +41,7 @@ module ESI
41
41
  #
42
42
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_asteroid_belts_asteroid_belt_id
43
43
  def get_universe_asteroid_belt(asteroid_belt_id:, headers: {}, params: {})
44
- get("/universe/asteroid_belts/#{asteroid_belt_id}/", headers: headers, params: params)
44
+ get("/universe/asteroid_belts/#{asteroid_belt_id}/", headers: headers, params: params).json
45
45
  end
46
46
  alias get_universe_asteroid_belts_asteroid_belt_id get_universe_asteroid_belt
47
47
 
@@ -61,7 +61,7 @@ module ESI
61
61
  #
62
62
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_bloodlines
63
63
  def get_universe_bloodlines(headers: {}, params: {})
64
- get("/universe/bloodlines/", headers: headers, params: params)
64
+ get("/universe/bloodlines/", headers: headers, params: params).json
65
65
  end
66
66
 
67
67
  # Get a list of item categories.
@@ -80,7 +80,7 @@ module ESI
80
80
  #
81
81
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_categories
82
82
  def get_universe_categories(headers: {}, params: {})
83
- get("/universe/categories/", headers: headers, params: params)
83
+ get("/universe/categories/", headers: headers, params: params).json
84
84
  end
85
85
 
86
86
  # Get information of an item category.
@@ -101,7 +101,7 @@ module ESI
101
101
  #
102
102
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_categories_category_id
103
103
  def get_universe_categories_category(category_id:, headers: {}, params: {})
104
- get("/universe/categories/#{category_id}/", headers: headers, params: params)
104
+ get("/universe/categories/#{category_id}/", headers: headers, params: params).json
105
105
  end
106
106
  alias get_universe_categories_category_id get_universe_categories_category
107
107
 
@@ -123,7 +123,7 @@ module ESI
123
123
  #
124
124
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_constellations_constellation_id
125
125
  def get_universe_constellation(constellation_id:, headers: {}, params: {})
126
- get("/universe/constellations/#{constellation_id}/", headers: headers, params: params)
126
+ get("/universe/constellations/#{constellation_id}/", headers: headers, params: params).json
127
127
  end
128
128
  alias get_universe_constellations_constellation_id get_universe_constellation
129
129
 
@@ -143,7 +143,7 @@ module ESI
143
143
  #
144
144
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_constellations
145
145
  def get_universe_constellations(headers: {}, params: {})
146
- get("/universe/constellations/", headers: headers, params: params)
146
+ get("/universe/constellations/", headers: headers, params: params).json
147
147
  end
148
148
 
149
149
  # Get a list of factions.
@@ -162,7 +162,7 @@ module ESI
162
162
  #
163
163
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_factions
164
164
  def get_universe_factions(headers: {}, params: {})
165
- get("/universe/factions/", headers: headers, params: params)
165
+ get("/universe/factions/", headers: headers, params: params).json
166
166
  end
167
167
 
168
168
  # Get information on a graphic.
@@ -184,7 +184,7 @@ module ESI
184
184
  #
185
185
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_graphics_graphic_id
186
186
  def get_universe_graphic(graphic_id:, headers: {}, params: {})
187
- get("/universe/graphics/#{graphic_id}/", headers: headers, params: params)
187
+ get("/universe/graphics/#{graphic_id}/", headers: headers, params: params).json
188
188
  end
189
189
  alias get_universe_graphics_graphic_id get_universe_graphic
190
190
 
@@ -204,7 +204,7 @@ module ESI
204
204
  #
205
205
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_graphics
206
206
  def get_universe_graphics(headers: {}, params: {})
207
- get("/universe/graphics/", headers: headers, params: params)
207
+ get("/universe/graphics/", headers: headers, params: params).json
208
208
  end
209
209
 
210
210
  # Get information on an item group.
@@ -226,7 +226,7 @@ module ESI
226
226
  #
227
227
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_groups_group_id
228
228
  def get_universe_group(group_id:, headers: {}, params: {})
229
- get("/universe/groups/#{group_id}/", headers: headers, params: params)
229
+ get("/universe/groups/#{group_id}/", headers: headers, params: params).json
230
230
  end
231
231
  alias get_universe_groups_group_id get_universe_group
232
232
 
@@ -246,7 +246,8 @@ module ESI
246
246
  #
247
247
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_groups
248
248
  def get_universe_groups(headers: {}, params: {})
249
- get("/universe/groups/", headers: headers, params: params)
249
+ responses = get("/universe/groups/", headers: headers, params: params)
250
+ responses.map(&:json).reduce([], :concat)
250
251
  end
251
252
 
252
253
  # Get information on a moon.
@@ -267,7 +268,7 @@ module ESI
267
268
  #
268
269
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_moons_moon_id
269
270
  def get_universe_moon(moon_id:, headers: {}, params: {})
270
- get("/universe/moons/#{moon_id}/", headers: headers, params: params)
271
+ get("/universe/moons/#{moon_id}/", headers: headers, params: params).json
271
272
  end
272
273
  alias get_universe_moons_moon_id get_universe_moon
273
274
 
@@ -289,7 +290,7 @@ module ESI
289
290
  #
290
291
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_planets_planet_id
291
292
  def get_universe_planet(planet_id:, headers: {}, params: {})
292
- get("/universe/planets/#{planet_id}/", headers: headers, params: params)
293
+ get("/universe/planets/#{planet_id}/", headers: headers, params: params).json
293
294
  end
294
295
  alias get_universe_planets_planet_id get_universe_planet
295
296
 
@@ -310,7 +311,7 @@ module ESI
310
311
  #
311
312
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_races
312
313
  def get_universe_races(headers: {}, params: {})
313
- get("/universe/races/", headers: headers, params: params)
314
+ get("/universe/races/", headers: headers, params: params).json
314
315
  end
315
316
 
316
317
  # Get information on a region.
@@ -331,7 +332,7 @@ module ESI
331
332
  #
332
333
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_regions_region_id
333
334
  def get_universe_region(region_id:, headers: {}, params: {})
334
- get("/universe/regions/#{region_id}/", headers: headers, params: params)
335
+ get("/universe/regions/#{region_id}/", headers: headers, params: params).json
335
336
  end
336
337
  alias get_universe_regions_region_id get_universe_region
337
338
 
@@ -351,7 +352,7 @@ module ESI
351
352
  #
352
353
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_regions
353
354
  def get_universe_regions(headers: {}, params: {})
354
- get("/universe/regions/", headers: headers, params: params)
355
+ get("/universe/regions/", headers: headers, params: params).json
355
356
  end
356
357
 
357
358
  # Get information on a star.
@@ -371,7 +372,7 @@ module ESI
371
372
  #
372
373
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_stars_star_id
373
374
  def get_universe_star(star_id:, headers: {}, params: {})
374
- get("/universe/stars/#{star_id}/", headers: headers, params: params)
375
+ get("/universe/stars/#{star_id}/", headers: headers, params: params).json
375
376
  end
376
377
  alias get_universe_stars_star_id get_universe_star
377
378
 
@@ -393,7 +394,7 @@ module ESI
393
394
  #
394
395
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_stargates_stargate_id
395
396
  def get_universe_stargate(stargate_id:, headers: {}, params: {})
396
- get("/universe/stargates/#{stargate_id}/", headers: headers, params: params)
397
+ get("/universe/stargates/#{stargate_id}/", headers: headers, params: params).json
397
398
  end
398
399
  alias get_universe_stargates_stargate_id get_universe_stargate
399
400
 
@@ -415,7 +416,7 @@ module ESI
415
416
  #
416
417
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_stations_station_id
417
418
  def get_universe_station(station_id:, headers: {}, params: {})
418
- get("/universe/stations/#{station_id}/", headers: headers, params: params)
419
+ get("/universe/stations/#{station_id}/", headers: headers, params: params).json
419
420
  end
420
421
  alias get_universe_stations_station_id get_universe_station
421
422
 
@@ -444,7 +445,7 @@ module ESI
444
445
  #
445
446
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_structures_structure_id
446
447
  def get_universe_structure(structure_id:, headers: {}, params: {})
447
- get("/universe/structures/#{structure_id}/", headers: headers, params: params)
448
+ get("/universe/structures/#{structure_id}/", headers: headers, params: params).json
448
449
  end
449
450
  alias get_universe_structures_structure_id get_universe_structure
450
451
 
@@ -469,7 +470,7 @@ module ESI
469
470
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_structures
470
471
  def get_universe_structures(filter: nil, headers: {}, params: {})
471
472
  params.merge!("filter" => filter)
472
- get("/universe/structures/", headers: headers, params: params)
473
+ get("/universe/structures/", headers: headers, params: params).json
473
474
  end
474
475
 
475
476
  # Get information on a solar system.
@@ -490,7 +491,7 @@ module ESI
490
491
  #
491
492
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_systems_system_id
492
493
  def get_universe_system(system_id:, headers: {}, params: {})
493
- get("/universe/systems/#{system_id}/", headers: headers, params: params)
494
+ get("/universe/systems/#{system_id}/", headers: headers, params: params).json
494
495
  end
495
496
  alias get_universe_systems_system_id get_universe_system
496
497
 
@@ -512,7 +513,7 @@ module ESI
512
513
  #
513
514
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_system_jumps
514
515
  def get_universe_system_jumps(headers: {}, params: {})
515
- get("/universe/system_jumps/", headers: headers, params: params)
516
+ get("/universe/system_jumps/", headers: headers, params: params).json
516
517
  end
517
518
 
518
519
  # Get the number of ship, pod and NPC kills per solar system within the last hour ending at the timestamp of the Last-Modified header, excluding wormhole space. Only systems with kills will be listed.
@@ -532,7 +533,7 @@ module ESI
532
533
  #
533
534
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_system_kills
534
535
  def get_universe_system_kills(headers: {}, params: {})
535
- get("/universe/system_kills/", headers: headers, params: params)
536
+ get("/universe/system_kills/", headers: headers, params: params).json
536
537
  end
537
538
 
538
539
  # Get a list of solar systems.
@@ -552,7 +553,7 @@ module ESI
552
553
  #
553
554
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_systems
554
555
  def get_universe_systems(headers: {}, params: {})
555
- get("/universe/systems/", headers: headers, params: params)
556
+ get("/universe/systems/", headers: headers, params: params).json
556
557
  end
557
558
 
558
559
  # Get information on a type.
@@ -573,7 +574,7 @@ module ESI
573
574
  #
574
575
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_types_type_id
575
576
  def get_universe_type(type_id:, headers: {}, params: {})
576
- get("/universe/types/#{type_id}/", headers: headers, params: params)
577
+ get("/universe/types/#{type_id}/", headers: headers, params: params).json
577
578
  end
578
579
  alias get_universe_types_type_id get_universe_type
579
580
 
@@ -593,7 +594,8 @@ module ESI
593
594
  #
594
595
  # @see https://esi.evetech.net/ui/#/Universe/get_universe_types
595
596
  def get_universe_types(headers: {}, params: {})
596
- get("/universe/types/", headers: headers, params: params)
597
+ responses = get("/universe/types/", headers: headers, params: params)
598
+ responses.map(&:json).reduce([], :concat)
597
599
  end
598
600
 
599
601
  # Resolve a set of names to IDs in the following categories: agents, alliances, characters, constellations, corporations factions, inventory_types, regions, stations, and systems. Only exact matches will be returned. All names searched for are cached for 12 hours.
@@ -614,7 +616,7 @@ module ESI
614
616
  #
615
617
  # @see https://esi.evetech.net/ui/#/Universe/post_universe_ids
616
618
  def post_universe_ids(names:, headers: {}, params: {})
617
- post("/universe/ids/", headers: headers, params: params, payload: names)
619
+ post("/universe/ids/", headers: headers, params: params, payload: names).json
618
620
  end
619
621
 
620
622
  # Resolve a set of IDs to names and categories. Supported ID's for resolving are: Characters, Corporations, Alliances, Stations, Solar Systems, Constellations, Regions, Types, Factions.
@@ -635,7 +637,7 @@ module ESI
635
637
  #
636
638
  # @see https://esi.evetech.net/ui/#/Universe/post_universe_names
637
639
  def post_universe_names(ids:, headers: {}, params: {})
638
- post("/universe/names/", headers: headers, params: params, payload: ids)
640
+ post("/universe/names/", headers: headers, params: params, payload: ids).json
639
641
  end
640
642
  end
641
643
  end
@@ -31,7 +31,7 @@ module ESI
31
31
  # @see https://esi.evetech.net/ui/#/User Interface/post_ui_autopilot_waypoint
32
32
  def post_ui_autopilot_waypoint(add_to_beginning:, clear_other_waypoints:, destination_id:, headers: {}, params: {})
33
33
  params.merge!("add_to_beginning" => add_to_beginning, "clear_other_waypoints" => clear_other_waypoints, "destination_id" => destination_id)
34
- post("/ui/autopilot/waypoint/", headers: headers, params: params)
34
+ post("/ui/autopilot/waypoint/", headers: headers, params: params).json
35
35
  end
36
36
 
37
37
  # Open the contract window inside the client.
@@ -59,7 +59,7 @@ module ESI
59
59
  # @see https://esi.evetech.net/ui/#/User Interface/post_ui_openwindow_contract
60
60
  def post_ui_openwindow_contract(contract_id:, headers: {}, params: {})
61
61
  params.merge!("contract_id" => contract_id)
62
- post("/ui/openwindow/contract/", headers: headers, params: params)
62
+ post("/ui/openwindow/contract/", headers: headers, params: params).json
63
63
  end
64
64
 
65
65
  # Open the information window for a character, corporation or alliance inside the client.
@@ -87,7 +87,7 @@ module ESI
87
87
  # @see https://esi.evetech.net/ui/#/User Interface/post_ui_openwindow_information
88
88
  def post_ui_openwindow_information(target_id:, headers: {}, params: {})
89
89
  params.merge!("target_id" => target_id)
90
- post("/ui/openwindow/information/", headers: headers, params: params)
90
+ post("/ui/openwindow/information/", headers: headers, params: params).json
91
91
  end
92
92
 
93
93
  # Open the market details window for a specific typeID inside the client.
@@ -115,7 +115,7 @@ module ESI
115
115
  # @see https://esi.evetech.net/ui/#/User Interface/post_ui_openwindow_marketdetails
116
116
  def post_ui_openwindow_marketdetails(type_id:, headers: {}, params: {})
117
117
  params.merge!("type_id" => type_id)
118
- post("/ui/openwindow/marketdetails/", headers: headers, params: params)
118
+ post("/ui/openwindow/marketdetails/", headers: headers, params: params).json
119
119
  end
120
120
 
121
121
  # Open the New Mail window, according to settings from the request if applicable.
@@ -143,7 +143,7 @@ module ESI
143
143
  #
144
144
  # @see https://esi.evetech.net/ui/#/User Interface/post_ui_openwindow_newmail
145
145
  def post_ui_openwindow_newmail(new_mail:, headers: {}, params: {})
146
- post("/ui/openwindow/newmail/", headers: headers, params: params, payload: new_mail)
146
+ post("/ui/openwindow/newmail/", headers: headers, params: params, payload: new_mail).json
147
147
  end
148
148
  end
149
149
  end
@@ -29,7 +29,7 @@ module ESI
29
29
  #
30
30
  # @see https://esi.evetech.net/ui/#/Wallet/get_characters_character_id_wallet
31
31
  def get_character_wallet(character_id:, headers: {}, params: {})
32
- get("/characters/#{character_id}/wallet/", headers: headers, params: params)
32
+ get("/characters/#{character_id}/wallet/", headers: headers, params: params).json
33
33
  end
34
34
  alias get_characters_character_id_wallet get_character_wallet
35
35
 
@@ -58,7 +58,8 @@ module ESI
58
58
  #
59
59
  # @see https://esi.evetech.net/ui/#/Wallet/get_characters_character_id_wallet_journal
60
60
  def get_character_wallet_journal(character_id:, headers: {}, params: {})
61
- get("/characters/#{character_id}/wallet/journal/", headers: headers, params: params)
61
+ responses = get("/characters/#{character_id}/wallet/journal/", headers: headers, params: params)
62
+ responses.map(&:json).reduce([], :concat)
62
63
  end
63
64
  alias get_characters_character_id_wallet_journal get_character_wallet_journal
64
65
 
@@ -90,7 +91,7 @@ module ESI
90
91
  # @see https://esi.evetech.net/ui/#/Wallet/get_characters_character_id_wallet_transactions
91
92
  def get_character_wallet_transactions(character_id:, from_id: nil, headers: {}, params: {})
92
93
  params.merge!("from_id" => from_id)
93
- get("/characters/#{character_id}/wallet/transactions/", headers: headers, params: params)
94
+ get("/characters/#{character_id}/wallet/transactions/", headers: headers, params: params).json
94
95
  end
95
96
  alias get_characters_character_id_wallet_transactions get_character_wallet_transactions
96
97
 
@@ -120,7 +121,7 @@ module ESI
120
121
  #
121
122
  # @see https://esi.evetech.net/ui/#/Wallet/get_corporations_corporation_id_wallets
122
123
  def get_corporation_wallets(corporation_id:, headers: {}, params: {})
123
- get("/corporations/#{corporation_id}/wallets/", headers: headers, params: params)
124
+ get("/corporations/#{corporation_id}/wallets/", headers: headers, params: params).json
124
125
  end
125
126
  alias get_corporations_corporation_id_wallets get_corporation_wallets
126
127
 
@@ -150,7 +151,8 @@ module ESI
150
151
  #
151
152
  # @see https://esi.evetech.net/ui/#/Wallet/get_corporations_corporation_id_wallets_division_journal
152
153
  def get_corporation_wallets_division_journal(corporation_id:, division:, headers: {}, params: {})
153
- get("/corporations/#{corporation_id}/wallets/#{division}/journal/", headers: headers, params: params)
154
+ responses = get("/corporations/#{corporation_id}/wallets/#{division}/journal/", headers: headers, params: params)
155
+ responses.map(&:json).reduce([], :concat)
154
156
  end
155
157
  alias get_corporations_corporation_id_wallets_division_journal get_corporation_wallets_division_journal
156
158
 
@@ -183,7 +185,7 @@ module ESI
183
185
  # @see https://esi.evetech.net/ui/#/Wallet/get_corporations_corporation_id_wallets_division_transactions
184
186
  def get_corporation_wallets_division_transactions(corporation_id:, division:, from_id: nil, headers: {}, params: {})
185
187
  params.merge!("from_id" => from_id)
186
- get("/corporations/#{corporation_id}/wallets/#{division}/transactions/", headers: headers, params: params)
188
+ get("/corporations/#{corporation_id}/wallets/#{division}/transactions/", headers: headers, params: params).json
187
189
  end
188
190
  alias get_corporations_corporation_id_wallets_division_transactions get_corporation_wallets_division_transactions
189
191
  end
@@ -25,7 +25,7 @@ module ESI
25
25
  #
26
26
  # @see https://esi.evetech.net/ui/#/Wars/get_wars_war_id
27
27
  def get_war(war_id:, headers: {}, params: {})
28
- get("/wars/#{war_id}/", headers: headers, params: params)
28
+ get("/wars/#{war_id}/", headers: headers, params: params).json
29
29
  end
30
30
  alias get_wars_war_id get_war
31
31
 
@@ -50,7 +50,8 @@ module ESI
50
50
  #
51
51
  # @see https://esi.evetech.net/ui/#/Wars/get_wars_war_id_killmails
52
52
  def get_war_killmails(war_id:, headers: {}, params: {})
53
- get("/wars/#{war_id}/killmails/", headers: headers, params: params)
53
+ responses = get("/wars/#{war_id}/killmails/", headers: headers, params: params)
54
+ responses.map(&:json).reduce([], :concat)
54
55
  end
55
56
  alias get_wars_war_id_killmails get_war_killmails
56
57
 
@@ -75,7 +76,7 @@ module ESI
75
76
  # @see https://esi.evetech.net/ui/#/Wars/get_wars
76
77
  def get_wars(max_war_id: nil, headers: {}, params: {})
77
78
  params.merge!("max_war_id" => max_war_id)
78
- get("/wars/", headers: headers, params: params)
79
+ get("/wars/", headers: headers, params: params).json
79
80
  end
80
81
  end
81
82
  end
data/lib/esi/client.rb CHANGED
@@ -1,11 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "faraday"
4
- require "faraday-http-cache"
5
- require "faraday_middleware"
3
+ require "httpx"
6
4
  require "timeout"
7
- require "typhoeus"
8
- require "typhoeus/adapters/faraday"
9
5
 
10
6
  require_relative "./errors"
11
7
  require_relative "./client/alliance"
@@ -93,7 +89,7 @@ module ESI
93
89
  520 => ESI::Errors::EveServerError
94
90
  }.freeze
95
91
 
96
- attr_reader :base_url, :cache, :user_agent, :version
92
+ attr_reader :base_url, :cache, :instrumentation, :logger, :user_agent, :version
97
93
 
98
94
  # Returns a new {ESI::Client}.
99
95
  #
@@ -103,141 +99,115 @@ module ESI
103
99
  # @param user_agent [String] Value of the `User-Agent` header for HTTP calls
104
100
  # @param base_url [String] The base URL of the ESI API
105
101
  # @param version [String] The version of the ESI API
102
+ # @param logger [Object] The logger to use
106
103
  # @param cache [Hash] The cache configuration to use
107
- # @param max_concurrency [Integer] Maximum concurrent requests for pagination
108
104
  # @option cache [Object] :store The cache store (e.g. `Rails.cache`)
109
105
  # @option cache [Object] :logger The logger (e.g. `Rails.logger`)
110
106
  # @option cache [Object] :instrumenter The instrumenter (e.g. `ActiveSupport::Notifications`)
111
- def initialize(user_agent:, base_url: DEFAULT_BASE_URL, version: DEFAULT_VERSION, cache: {}, max_concurrency: 50)
107
+ # @param instrumentation [Hash] The instrumentation configuration to use
108
+ # @option instrumentation [String] :name The name to use for instrumentation
109
+ # @option instrumentation [Object] :instrumenter The instrumenter to use (e.g. `ActiveSupport::Notifications`)
110
+ def initialize(user_agent:, base_url: DEFAULT_BASE_URL, version: DEFAULT_VERSION, cache: {}, instrumentation: {}, logger: nil) # rubocop:disable Layout/LineLength, Metrics/ParameterLists
112
111
  @base_url = base_url
113
112
  @cache = cache
113
+ @instrumentation = instrumentation
114
114
  @user_agent = user_agent
115
115
  @version = version
116
- @hydra = Typhoeus::Hydra.new(max_concurrency: max_concurrency)
116
+ @logger = logger
117
117
  end
118
118
 
119
119
  # Set the `Authorization` header for subsequent requests.
120
120
  #
121
121
  # @param token [String] The [EVE SSO JWT token](https://docs.esi.evetech.net/docs/sso/) to use
122
122
  def authorize(token)
123
- url_encoded_connection.authorization :Bearer, token
124
- json_encoded_connection.authorization :Bearer, token
123
+ session.authentication token
125
124
  end
126
125
 
127
- private
128
-
129
- ESI_RETRY_EXCEPTIONS = [Errno::ETIMEDOUT, Timeout::Error, Faraday::TimeoutError, Faraday::ConnectionFailed,
130
- Faraday::ParsingError, SocketError].freeze
131
-
132
- attr_reader :hydra
133
-
134
126
  def delete(path, params: {}, headers: {})
135
- response = make_delete_request(path, params: params, headers: headers)
136
- raise_error(response) unless response.success?
137
- response.body
127
+ params.delete_if { |_, v| v.nil? }
128
+ response = session.delete("/#{version}#{path}", params: params, headers: headers)
129
+ response.raise_for_status
130
+ response
131
+ rescue HTTPX::Error
132
+ raise_error(response)
138
133
  end
139
134
 
140
135
  def get(path, params: {}, headers: {})
141
- response = make_get_request(path, params: params, headers: headers)
142
- raise_error(response) unless response.success?
136
+ params.delete_if { |_, v| v.nil? }
137
+ response = session.get("/#{version}#{path}", params: params, headers: headers)
138
+ response.raise_for_status
143
139
 
144
- response_headers = normalize_headers(response.headers)
145
- return paginate(response, path, params, headers) if paginated?(response_headers)
140
+ return paginate(response, "/#{version}#{path}", params, headers) if paginated?(response)
146
141
 
147
- response.body
142
+ response
143
+ rescue HTTPX::Error
144
+ raise_error(response)
148
145
  end
149
146
 
150
147
  def post(path, payload: {}, params: {}, headers: {})
151
- response = make_post_request(path, payload: payload, params: params, headers: headers)
152
- raise_error(response) unless response.success?
153
- response.body
148
+ params.delete_if { |_, v| v.nil? }
149
+ response = session.post("/#{version}#{path}",
150
+ params: params,
151
+ headers: headers,
152
+ json: payload)
153
+ response.raise_for_status
154
+ response
155
+ rescue HTTPX::Error
156
+ raise_error(response)
154
157
  end
155
158
 
156
159
  def put(path, payload: {}, params: {}, headers: {})
157
- response = make_put_request(path, payload: payload, params: params, headers: headers)
158
- raise_error(response) unless response.success?
159
- response.body
160
- end
161
-
162
- def paginate(response, path, params, headers) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
163
- all_items = response.body
164
- response_headers = normalize_headers(response.headers)
165
- page_count = response_headers["x-pages"].to_i - 1
166
-
167
- responses = []
168
- url_encoded_connection.in_parallel(hydra) do
169
- page_count.times do |n|
170
- page_number = n + 2
171
- params = params.merge(page: page_number)
172
- responses << make_get_request(path, params: params, headers: headers)
173
- end
174
- end
175
- unless responses.all?(&:success?)
176
- raise ESI::Errors::PaginationError.new("Error paginating request", response: response,
177
- responses: responses)
178
- end
179
-
180
- all_items + responses.map(&:body).flatten
181
- end
182
-
183
- def make_delete_request(path, params: {}, headers: {})
184
160
  params.delete_if { |_, v| v.nil? }
185
- url_encoded_connection.delete("/#{version}#{path}", params, headers)
161
+ response = session.put("/#{version}#{path}",
162
+ params: params,
163
+ headers: headers,
164
+ json: payload)
165
+ response.raise_for_status
166
+ response
167
+ rescue HTTPX::Error
168
+ raise_error(response)
186
169
  end
187
170
 
188
- def make_get_request(path, params: {}, headers: {})
189
- params.delete_if { |_, v| v.nil? }
190
- url_encoded_connection.get("/#{version}#{path}", params, headers)
191
- end
171
+ private
192
172
 
193
- def make_post_request(path, payload: {}, params: {}, headers: {})
194
- params.delete_if { |_, v| v.nil? }
195
- json_encoded_connection.post("/#{version}#{path}") do |req|
196
- req.params = params
197
- req.headers = req.headers.merge(headers)
198
- req.body = payload.to_json
173
+ def paginate(response, path, params, headers) # rubocop:disable Metrics/MethodLength
174
+ response_headers = normalize_headers(response.headers)
175
+ page_count = response_headers["x-pages"].to_i
176
+
177
+ requests = (2..page_count).map do |n|
178
+ session.build_request(:get, path, params: params.merge(page: n), headers: headers)
199
179
  end
200
- end
180
+ responses = requests.any? ? session.request(*requests) : []
181
+ responses.unshift(response)
201
182
 
202
- def make_put_request(path, payload: {}, params: {}, headers: {})
203
- params.delete_if { |_, v| v.nil? }
204
- json_encoded_connection.put("/#{version}#{path}") do |req|
205
- req.params = params
206
- req.headers = req.headers.merge(headers)
207
- req.body = payload.to_json
183
+ if responses.any?(&:error)
184
+ raise ESI::Errors::PaginationError.new("Error paginating request", responses: responses)
208
185
  end
186
+
187
+ responses
209
188
  end
210
189
 
211
- def paginated?(headers)
212
- headers["x-pages"] && headers["x-pages"].to_i > 1
190
+ def paginated?(response)
191
+ headers = normalize_headers(response.headers)
192
+ headers.key?("x-pages")
213
193
  end
214
194
 
215
195
  def normalize_headers(headers)
216
- headers.transform_keys(&:downcase)
196
+ headers.to_h.transform_keys(&:downcase)
217
197
  end
218
198
 
219
199
  def raise_error(res)
220
- raise (ERROR_MAPPING[res.status] || ESI::Errors::ClientError).new("(#{res.status}) #{res["error"]}",
200
+ raise (ERROR_MAPPING[res.status] || ESI::Errors::ClientError).new("(#{res.status}) #{res.json["error"]}",
221
201
  response: res)
222
202
  end
223
203
 
224
- def url_encoded_connection
225
- @url_encoded_connection ||= Faraday.new(base_url, headers: default_headers) do |f|
226
- f.use :http_cache, **cache unless cache.empty?
227
- f.request :retry, { exceptions: ESI_RETRY_EXCEPTIONS, max: 10, retry_statuses: [502, 503, 504] }
228
- f.response :json
229
- f.adapter :typhoeus
230
- end
231
- end
232
-
233
- def json_encoded_connection
234
- @json_encoded_connection ||= Faraday.new(base_url, headers: default_headers) do |f|
235
- f.use :http_cache, **cache unless cache.empty?
236
- f.request :json
237
- f.request :retry, { exceptions: ESI_RETRY_EXCEPTIONS, max: 10, retry_statuses: [502, 503, 504] }
238
- f.response :json
239
- f.adapter :typhoeus
240
- end
204
+ def session
205
+ @session ||= HTTPX.with(origin: base_url)
206
+ .with_headers(default_headers)
207
+ .plugin(:authentication)
208
+ .plugin(:persistent)
209
+ .plugin(:response_cache)
210
+ .plugin(:retries)
241
211
  end
242
212
 
243
213
  def default_headers
data/lib/esi/errors.rb CHANGED
@@ -9,7 +9,7 @@ module ESI
9
9
 
10
10
  # Base class for ESI client errors.
11
11
  class ClientError < Error
12
- attr_reader :response
12
+ attr_reader :response, :responses
13
13
 
14
14
  def initialize(msg, response:)
15
15
  super(msg)
@@ -22,8 +22,8 @@ module ESI
22
22
  class PaginationError < ClientError
23
23
  attr_reader :responses
24
24
 
25
- def initialize(msg, response:, responses:)
26
- super(msg, response: response)
25
+ def initialize(msg, responses:)
26
+ super(msg, response: nil)
27
27
 
28
28
  @responses = responses
29
29
  end
data/lib/esi/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ESI
4
- VERSION = "1.2.0"
4
+ VERSION = "2.0.0"
5
5
  end