esi-sdk 1.2.0 → 2.0.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.
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