eve_online 0.29.0 → 0.34.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (200) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +62 -0
  3. data/.ruby-version +1 -1
  4. data/Appraisals +11 -0
  5. data/CHANGELOG.md +67 -0
  6. data/Gemfile +7 -10
  7. data/Gemfile.lock +77 -68
  8. data/Gemfile.mutant.lock +67 -59
  9. data/README.md +414 -136
  10. data/Rakefile +2 -2
  11. data/eve_online.gemspec +28 -27
  12. data/lib/eve_online.rb +226 -185
  13. data/lib/eve_online/esi/alliance.rb +6 -6
  14. data/lib/eve_online/esi/alliance_corporations.rb +4 -3
  15. data/lib/eve_online/esi/alliance_icon.rb +5 -4
  16. data/lib/eve_online/esi/alliances.rb +3 -2
  17. data/lib/eve_online/esi/base.rb +42 -32
  18. data/lib/eve_online/esi/character.rb +7 -6
  19. data/lib/eve_online/esi/character_assets.rb +4 -4
  20. data/lib/eve_online/esi/character_assets_locations.rb +4 -4
  21. data/lib/eve_online/esi/character_assets_names.rb +4 -4
  22. data/lib/eve_online/esi/character_attributes.rb +6 -6
  23. data/lib/eve_online/esi/character_blueprints.rb +4 -4
  24. data/lib/eve_online/esi/character_calendar.rb +4 -4
  25. data/lib/eve_online/esi/character_calendar_event.rb +4 -5
  26. data/lib/eve_online/esi/character_clones.rb +7 -7
  27. data/lib/eve_online/esi/{character_bookmarks.rb → character_contracts.rb} +9 -9
  28. data/lib/eve_online/esi/character_corporation_history.rb +4 -3
  29. data/lib/eve_online/esi/character_fatigue.rb +5 -5
  30. data/lib/eve_online/esi/character_get_mail.rb +37 -0
  31. data/lib/eve_online/esi/character_implants.rb +3 -3
  32. data/lib/eve_online/esi/character_industry_jobs.rb +4 -4
  33. data/lib/eve_online/esi/character_killmails_recent.rb +4 -4
  34. data/lib/eve_online/esi/character_location.rb +5 -5
  35. data/lib/eve_online/esi/character_loyalty_points.rb +3 -3
  36. data/lib/eve_online/esi/character_mail_labels.rb +40 -0
  37. data/lib/eve_online/esi/character_notifications.rb +3 -3
  38. data/lib/eve_online/esi/character_online.rb +5 -5
  39. data/lib/eve_online/esi/character_orders.rb +3 -3
  40. data/lib/eve_online/esi/character_portrait.rb +5 -4
  41. data/lib/eve_online/esi/character_ship.rb +4 -4
  42. data/lib/eve_online/esi/character_skill_queue.rb +3 -3
  43. data/lib/eve_online/esi/character_skills.rb +6 -6
  44. data/lib/eve_online/esi/character_standings.rb +3 -3
  45. data/lib/eve_online/esi/character_wallet.rb +3 -3
  46. data/lib/eve_online/esi/character_wallet_journal.rb +6 -6
  47. data/lib/eve_online/esi/character_wallet_transactions.rb +41 -0
  48. data/lib/eve_online/esi/corporation.rb +8 -7
  49. data/lib/eve_online/esi/corporation_alliance_history.rb +4 -3
  50. data/lib/eve_online/esi/corporation_assets.rb +5 -5
  51. data/lib/eve_online/esi/corporation_assets_locations.rb +5 -5
  52. data/lib/eve_online/esi/corporation_assets_names.rb +5 -5
  53. data/lib/eve_online/esi/corporation_blueprints.rb +5 -5
  54. data/lib/eve_online/esi/corporation_industry_jobs.rb +5 -5
  55. data/lib/eve_online/esi/corporation_killmails_recent.rb +5 -5
  56. data/lib/eve_online/esi/corporation_loyalty_store_offers.rb +4 -3
  57. data/lib/eve_online/esi/corporation_npc.rb +20 -0
  58. data/lib/eve_online/esi/corporation_orders.rb +5 -5
  59. data/lib/eve_online/esi/dogma_attribute.rb +7 -6
  60. data/lib/eve_online/esi/dogma_attributes.rb +3 -2
  61. data/lib/eve_online/esi/dogma_effect.rb +11 -11
  62. data/lib/eve_online/esi/dogma_effects.rb +3 -2
  63. data/lib/eve_online/esi/killmail.rb +30 -0
  64. data/lib/eve_online/esi/market_group.rb +39 -0
  65. data/lib/eve_online/esi/market_groups.rb +20 -0
  66. data/lib/eve_online/esi/market_history.rb +5 -4
  67. data/lib/eve_online/esi/market_prices.rb +27 -0
  68. data/lib/eve_online/esi/models/aggressor.rb +34 -0
  69. data/lib/eve_online/esi/models/alliance.rb +7 -7
  70. data/lib/eve_online/esi/models/alliance_icon.rb +2 -2
  71. data/lib/eve_online/esi/models/alliance_short.rb +2 -2
  72. data/lib/eve_online/esi/models/allies.rb +21 -0
  73. data/lib/eve_online/esi/models/ally.rb +24 -0
  74. data/lib/eve_online/esi/models/ancestry.rb +6 -6
  75. data/lib/eve_online/esi/models/asset.rb +8 -8
  76. data/lib/eve_online/esi/models/asset_location.rb +2 -2
  77. data/lib/eve_online/esi/models/asset_name.rb +2 -2
  78. data/lib/eve_online/esi/models/asteroid_belt.rb +3 -3
  79. data/lib/eve_online/esi/models/attributes.rb +8 -8
  80. data/lib/eve_online/esi/models/base.rb +2 -2
  81. data/lib/eve_online/esi/models/bloodline.rb +11 -11
  82. data/lib/eve_online/esi/models/blueprint.rb +8 -8
  83. data/lib/eve_online/esi/models/category.rb +4 -4
  84. data/lib/eve_online/esi/models/character.rb +12 -12
  85. data/lib/eve_online/esi/models/character_corporation_history.rb +4 -4
  86. data/lib/eve_online/esi/models/character_industry_job.rb +22 -22
  87. data/lib/eve_online/esi/models/character_location.rb +3 -3
  88. data/lib/eve_online/esi/models/character_order.rb +14 -14
  89. data/lib/eve_online/esi/models/character_portrait.rb +4 -4
  90. data/lib/eve_online/esi/models/character_ship.rb +3 -3
  91. data/lib/eve_online/esi/models/constellation.rb +5 -5
  92. data/lib/eve_online/esi/models/contract.rb +132 -0
  93. data/lib/eve_online/esi/models/coordinates.rb +3 -3
  94. data/lib/eve_online/esi/models/corporation.rb +14 -14
  95. data/lib/eve_online/esi/models/corporation_alliance_history.rb +4 -4
  96. data/lib/eve_online/esi/models/corporation_industry_job.rb +22 -22
  97. data/lib/eve_online/esi/models/corporation_order.rb +15 -15
  98. data/lib/eve_online/esi/models/defender.rb +34 -0
  99. data/lib/eve_online/esi/models/dogma_attribute.rb +10 -10
  100. data/lib/eve_online/esi/models/dogma_attribute_short.rb +2 -2
  101. data/lib/eve_online/esi/models/dogma_attributes.rb +1 -1
  102. data/lib/eve_online/esi/models/dogma_effect.rb +21 -21
  103. data/lib/eve_online/esi/models/dogma_effect_modifier.rb +6 -6
  104. data/lib/eve_online/esi/models/dogma_effect_modifiers.rb +1 -1
  105. data/lib/eve_online/esi/models/dogma_effect_short.rb +2 -2
  106. data/lib/eve_online/esi/models/dogma_effects.rb +1 -1
  107. data/lib/eve_online/esi/models/event.rb +5 -5
  108. data/lib/eve_online/esi/models/event_details.rb +10 -10
  109. data/lib/eve_online/esi/models/faction.rb +10 -10
  110. data/lib/eve_online/esi/models/fatigue.rb +3 -3
  111. data/lib/eve_online/esi/models/graphic.rb +8 -8
  112. data/lib/eve_online/esi/models/group.rb +5 -5
  113. data/lib/eve_online/esi/models/home_location.rb +2 -2
  114. data/lib/eve_online/esi/models/jump_clone.rb +5 -5
  115. data/lib/eve_online/esi/models/killmail.rb +47 -0
  116. data/lib/eve_online/esi/models/killmail_short.rb +2 -2
  117. data/lib/eve_online/esi/models/loyalty_point.rb +2 -2
  118. data/lib/eve_online/esi/models/loyalty_store_offer.rb +9 -8
  119. data/lib/eve_online/esi/models/mail.rb +49 -0
  120. data/lib/eve_online/esi/models/mail_label.rb +34 -0
  121. data/lib/eve_online/esi/models/mail_recipient.rb +24 -0
  122. data/lib/eve_online/esi/models/mail_recipients.rb +21 -0
  123. data/lib/eve_online/esi/models/market_group.rb +38 -0
  124. data/lib/eve_online/esi/models/market_history.rb +6 -6
  125. data/lib/eve_online/esi/models/market_price.rb +29 -0
  126. data/lib/eve_online/esi/models/moon.rb +4 -4
  127. data/lib/eve_online/esi/models/notification.rb +7 -7
  128. data/lib/eve_online/esi/models/offer_required_item.rb +24 -0
  129. data/lib/eve_online/esi/models/offer_required_items.rb +21 -0
  130. data/lib/eve_online/esi/models/online.rb +4 -4
  131. data/lib/eve_online/esi/models/planet.rb +5 -5
  132. data/lib/eve_online/esi/models/planet_short.rb +3 -3
  133. data/lib/eve_online/esi/models/position.rb +3 -3
  134. data/lib/eve_online/esi/models/race.rb +6 -6
  135. data/lib/eve_online/esi/models/region.rb +7 -8
  136. data/lib/eve_online/esi/models/server_status.rb +4 -4
  137. data/lib/eve_online/esi/models/skill.rb +4 -4
  138. data/lib/eve_online/esi/models/skill_queue_entry.rb +8 -8
  139. data/lib/eve_online/esi/models/standing.rb +3 -3
  140. data/lib/eve_online/esi/models/star.rb +8 -8
  141. data/lib/eve_online/esi/models/stargate.rb +14 -8
  142. data/lib/eve_online/esi/models/station.rb +12 -12
  143. data/lib/eve_online/esi/models/system.rb +10 -10
  144. data/lib/eve_online/esi/models/system_jump.rb +2 -2
  145. data/lib/eve_online/esi/models/system_kill.rb +4 -4
  146. data/lib/eve_online/esi/models/type.rb +16 -16
  147. data/lib/eve_online/esi/models/{wallet_journal_entry.rb → wallet_journal.rb} +16 -16
  148. data/lib/eve_online/esi/models/wallet_transaction.rb +66 -0
  149. data/lib/eve_online/esi/models/war.rb +69 -0
  150. data/lib/eve_online/esi/server_status.rb +4 -3
  151. data/lib/eve_online/esi/universe_ancestries.rb +4 -3
  152. data/lib/eve_online/esi/universe_asteroid_belt.rb +5 -4
  153. data/lib/eve_online/esi/universe_bloodlines.rb +4 -3
  154. data/lib/eve_online/esi/universe_categories.rb +3 -2
  155. data/lib/eve_online/esi/universe_category.rb +7 -6
  156. data/lib/eve_online/esi/universe_constellation.rb +7 -6
  157. data/lib/eve_online/esi/universe_constellations.rb +3 -2
  158. data/lib/eve_online/esi/universe_factions.rb +4 -3
  159. data/lib/eve_online/esi/universe_graphic.rb +7 -6
  160. data/lib/eve_online/esi/universe_graphics.rb +3 -2
  161. data/lib/eve_online/esi/universe_group.rb +7 -6
  162. data/lib/eve_online/esi/universe_groups.rb +4 -3
  163. data/lib/eve_online/esi/universe_moon.rb +5 -4
  164. data/lib/eve_online/esi/universe_planet.rb +6 -5
  165. data/lib/eve_online/esi/universe_races.rb +4 -3
  166. data/lib/eve_online/esi/universe_region.rb +8 -7
  167. data/lib/eve_online/esi/universe_regions.rb +3 -2
  168. data/lib/eve_online/esi/universe_star.rb +6 -6
  169. data/lib/eve_online/esi/universe_stargate.rb +6 -5
  170. data/lib/eve_online/esi/universe_station.rb +8 -7
  171. data/lib/eve_online/esi/universe_structures.rb +4 -3
  172. data/lib/eve_online/esi/universe_system.rb +8 -7
  173. data/lib/eve_online/esi/universe_system_jumps.rb +3 -2
  174. data/lib/eve_online/esi/universe_system_kills.rb +3 -2
  175. data/lib/eve_online/esi/universe_systems.rb +3 -2
  176. data/lib/eve_online/esi/universe_type.rb +9 -8
  177. data/lib/eve_online/esi/universe_types.rb +4 -3
  178. data/lib/eve_online/esi/war.rb +35 -0
  179. data/lib/eve_online/esi/war_killmails.rb +5 -4
  180. data/lib/eve_online/esi/wars.rb +4 -3
  181. data/lib/eve_online/exceptions/error_limited.rb +8 -0
  182. data/lib/eve_online/formulas/blueprint_copy_time.rb +47 -0
  183. data/lib/eve_online/version.rb +1 -1
  184. metadata +54 -27
  185. data/.rubocop-thread_safety.yml +0 -9
  186. data/.rubocop.yml +0 -14
  187. data/.rubocop_general.yml +0 -102
  188. data/.rubocop_rspec.yml +0 -65
  189. data/.rubocop_todo.yml +0 -0
  190. data/.travis.yml +0 -100
  191. data/gemfiles/activesupport_42.gemfile +0 -7
  192. data/gemfiles/activesupport_50.gemfile +0 -7
  193. data/gemfiles/activesupport_51.gemfile +0 -7
  194. data/gemfiles/activesupport_52.gemfile +0 -7
  195. data/gemfiles/activesupport_60.gemfile +0 -7
  196. data/gemfiles/activesupport_edge.gemfile +0 -7
  197. data/lib/eve_online/esi/character_bookmark_folders.rb +0 -41
  198. data/lib/eve_online/esi/models/bookmark.rb +0 -71
  199. data/lib/eve_online/esi/models/bookmark_folder.rb +0 -24
  200. data/lib/eve_online/esi/models/stargate_destination.rb +0 -24
data/README.md CHANGED
@@ -1,9 +1,9 @@
1
1
  # EveOnline ESI API
2
2
 
3
+ [![CircleCI](https://circleci.com/gh/evemonk/eve_online.svg?style=svg)](https://circleci.com/gh/evemonk/eve_online)
3
4
  [![Gem Version](https://badge.fury.io/rb/eve_online.svg)](https://badge.fury.io/rb/eve_online)
4
5
  [![Gem Downloads](https://img.shields.io/gem/dt/eve_online.svg)](https://rubygems.org/gems/eve_online)
5
6
  [![Test Coverage](https://api.codeclimate.com/v1/badges/955073c905b91d53e68c/test_coverage)](https://codeclimate.com/github/evemonk/eve_online/test_coverage)
6
- [![Build Status](https://travis-ci.com/evemonk/eve_online.svg?branch=master)](https://travis-ci.com/evemonk/eve_online)
7
7
  [![security](https://hakiri.io/github/evemonk/eve_online/master.svg)](https://hakiri.io/github/evemonk/eve_online/master)
8
8
 
9
9
  This gem implement Ruby API for EveOnline MMORPG (ESI).
@@ -12,6 +12,8 @@ Looking for [EveOnline SSO OAuth2 Strategy for OmniAuth](https://github.com/evem
12
12
 
13
13
  This gem was extracted from [EveMonk](https://evemonk.com). Source code of EveMonk backend published [here](https://github.com/evemonk/evemonk).
14
14
 
15
+ [API Documentation for latest release at rubydoc](https://rubydoc.info/gems/eve_online/frames).
16
+
15
17
  ## TOC
16
18
 
17
19
  * [Installation](#installation)
@@ -35,7 +37,7 @@ gem 'eve_online'
35
37
  And then execute:
36
38
 
37
39
  ```shell
38
- bundle
40
+ bundle install
39
41
  ```
40
42
 
41
43
  Or install it yourself as:
@@ -46,20 +48,15 @@ gem install eve_online
46
48
 
47
49
  ## Supported ruby versions
48
50
 
49
- * MRI 2.4
50
51
  * MRI 2.5
51
52
  * MRI 2.6
52
- * MRI (head)
53
- * JRuby 9.2.8.0
54
- * JRuby (head)
53
+ * MRI 2.7
54
+ * JRuby 9.2.11.1
55
55
 
56
56
  ## Supported rails versions
57
57
 
58
- * 4.2
59
- * 5.0
60
- * 5.1
61
58
  * 5.2
62
- * 6.0.0
59
+ * 6.0
63
60
  * Edge
64
61
 
65
62
  ## Usage examples
@@ -330,74 +327,8 @@ corporation_assets_names.etag # => NotImplementedError
330
327
 
331
328
  #### List bookmarks
332
329
 
333
- ```ruby
334
- options = { token: 'token123', character_id: 90_729_314, page: 1 }
335
-
336
- character_bookmarks = EveOnline::ESI::CharacterBookmarks.new(options)
337
-
338
- character_bookmarks.scope # => "esi-bookmarks.read_character_bookmarks.v1"
339
-
340
- character_bookmarks.page # => 1
341
-
342
- character_bookmarks.total_pages # => 1
343
-
344
- character_bookmarks.bookmarks.size # => 20
345
-
346
- bookmark = character_bookmarks.bookmarks.first
347
-
348
- bookmark.as_json # => {:bookmark_id=>4,
349
- # :created=>Mon, 09 Jul 2012 22:38:31 UTC +00:00,
350
- # :creator_id=>2112625428,
351
- # :folder_id=>5,
352
- # :item_id=>30003496,
353
- # :item_type_id=>5,
354
- # :label=>"Stargate",
355
- # :location_id=>30003430,
356
- # :notes=>"This is a stargate"}
357
-
358
- bookmark.bookmark_id # => 4
359
- bookmark.created # => Mon, 09 Jul 2012 22:38:31 UTC +00:00
360
- bookmark.creator_id # => 2112625428
361
- bookmark.folder_id # => 5
362
- bookmark.item_id # => 30003496
363
- bookmark.item_type_id # => 5
364
- bookmark.label # => "Stargate"
365
- bookmark.location_id # => 30003430
366
- bookmark.notes # => "This is a stargate"
367
-
368
- bookmark.coordinates.as_json # => {:x=>-144951231521.81625,
369
- # :y=>164030047870.25558,
370
- # :z=>211467631848.1311}
371
-
372
- # TODO: character_bookmarks.etag
373
- ```
374
-
375
330
  #### List bookmark folders
376
331
 
377
- ```ruby
378
- options = { token: 'token123', character_id: 90_729_314, page: 1 }
379
-
380
- character_bookmark_folders = EveOnline::ESI::CharacterBookmarkFolders.new(options)
381
-
382
- character_bookmark_folders.scope # => "esi-bookmarks.read_character_bookmarks.v1"
383
-
384
- character_bookmark_folders.page # => 1
385
-
386
- character_bookmark_folders.total_pages # => 1
387
-
388
- character_bookmark_folders.bookmark_folders.size # => 1
389
-
390
- bookmark_folder = character_bookmark_folders.bookmark_folders.first
391
-
392
- bookmark_folder.as_json # => {:folder_id=>5,
393
- # :name=>"Icecream"}
394
-
395
- bookmark_folder.folder_id # => 5
396
- bookmark_folder.name # => "Icecream"
397
-
398
- # TODO: character_bookmark_folders.etag
399
- ```
400
-
401
332
  #### List corporation bookmarks
402
333
 
403
334
  #### List corporation bookmark folders
@@ -644,15 +575,15 @@ character_portrait = EveOnline::ESI::CharacterPortrait.new(options)
644
575
 
645
576
  character_portrait.scope # => nil
646
577
 
647
- character_portrait.as_json # => {:medium=>"http://imageserver.eveonline.com/Character/90729314_128.jpg",
648
- # :large=>"http://imageserver.eveonline.com/Character/90729314_256.jpg",
649
- # :huge=>"http://imageserver.eveonline.com/Character/90729314_512.jpg",
650
- # :small=>"http://imageserver.eveonline.com/Character/90729314_64.jpg"}
578
+ character_portrait.as_json # => {:medium=>"https://images.evetech.net/Character/1337512245_128.jpg",
579
+ # :large=>"https://images.evetech.net/Character/1337512245_256.jpg",
580
+ # :huge=>"https://images.evetech.net/Character/1337512245_512.jpg",
581
+ # :small=>"https://images.evetech.net/Character/1337512245_64.jpg"}
651
582
 
652
- character_portrait.medium # => "http://imageserver.eveonline.com/Character/90729314_128.jpg"
653
- character_portrait.large # => "http://imageserver.eveonline.com/Character/90729314_256.jpg"
654
- character_portrait.huge # => "http://imageserver.eveonline.com/Character/90729314_512.jpg"
655
- character_portrait.small # => "http://imageserver.eveonline.com/Character/90729314_64.jpg"
583
+ character_portrait.medium # => "https://images.evetech.net/Character/1337512245_128.jpg"
584
+ character_portrait.large # => "https://images.evetech.net/Character/1337512245_256.jpg"
585
+ character_portrait.huge # => "https://images.evetech.net/Character/1337512245_512.jpg"
586
+ character_portrait.small # => "https://images.evetech.net/Character/1337512245_64.jpg"
656
587
 
657
588
  character_portrait.etag # => "2c8392581d493e06c015ca3d48d4076079bf4c976b1f776742592260"
658
589
  ```
@@ -766,6 +697,66 @@ character_implants.implant_ids # => [9899, 9941, 9942, 9943, 9956]
766
697
 
767
698
  #### Get contracts
768
699
 
700
+ ```ruby
701
+ options = { token: 'token123', character_id: 1337512245, page: 1 }
702
+
703
+ contracts = EveOnline::ESI::CharacterContracts.new(options)
704
+
705
+ contracts.scope # => "esi-contracts.read_character_contracts.v1"
706
+
707
+ contracts.contracts.size # => 3
708
+
709
+ contract = contracts.contracts.first
710
+
711
+ contract.as_json # => {:acceptor_id=>2116199184,
712
+ # :assignee_id=>2116199184,
713
+ # :availability=>"personal",
714
+ # :buyout=>nil,
715
+ # :collateral=>0.0,
716
+ # :contract_id=>154837125,
717
+ # :date_accepted=>Fri, 06 Mar 2020 21:09:32 UTC +00:00,
718
+ # :date_completed=>Fri, 06 Mar 2020 21:09:32 UTC +00:00,
719
+ # :date_expired=>Sat, 07 Mar 2020 21:09:11 UTC +00:00,
720
+ # :date_issued=>Fri, 06 Mar 2020 21:09:11 UTC +00:00,
721
+ # :days_to_complete=>0,
722
+ # :end_location_id=>60008674,
723
+ # :for_corporation=>false,
724
+ # :issuer_corporation_id=>98134807,
725
+ # :issuer_id=>1337512245,
726
+ # :price=>0.0,
727
+ # :reward=>0.0,
728
+ # :start_location_id=>60008674,
729
+ # :status=>"finished",
730
+ # :title=>"",
731
+ # :type=>"item_exchange",
732
+ # :volume=>15000.0}
733
+
734
+ contract.acceptor_id # => 2116199184
735
+ contract.assignee_id # => 2116199184
736
+ contract.availability # => "personal"
737
+ contract.buyout # => nil
738
+ contract.collateral # => 0.0
739
+ contract.contract_id # => 154837125
740
+ contract.date_accepted # => Fri, 06 Mar 2020 21:09:32 UTC +00:00
741
+ contract.date_completed # => Fri, 06 Mar 2020 21:09:32 UTC +00:00
742
+ contract.date_expired # => Sat, 07 Mar 2020 21:09:11 UTC +00:00
743
+ contract.date_issued # => Fri, 06 Mar 2020 21:09:11 UTC +00:00
744
+ contract.days_to_complete # => 0
745
+ contract.end_location_id # => 60008674
746
+ contract.for_corporation # => false
747
+ contract.issuer_corporation_id # => 98134807
748
+ contract.issuer_id # => 1337512245
749
+ contract.price # => 0.0
750
+ contract.reward # => 0.0
751
+ contract.start_location_id # => 60008674
752
+ contract.status # => "finished"
753
+ contract.title # => ""
754
+ contract.type # => "item_exchange"
755
+ contract.volume # => 15000.0
756
+
757
+ contracts.etag # => "6e18566a8f786f08aba678262360d0c74a783f9923aa43f8043133e4"
758
+ ```
759
+
769
760
  #### Get contract bids
770
761
 
771
762
  #### Get contract items
@@ -932,6 +923,18 @@ corporation_blueprints.roles # => ["Director"]
932
923
 
933
924
  #### Get npc corporations
934
925
 
926
+ ```ruby
927
+ corporation_npcs = EveOnline::ESI::CorporationNPC.new
928
+
929
+ corporation_npcs.scope # => nil
930
+
931
+ corporation_npcs.corporation_npc_ids.size # => 262
932
+
933
+ corporation_npcs.corporation_npc_ids.first # => 1000001
934
+
935
+ corporation_npcs.etag # => "085946820256a4f7be2e9926e9d1de9e420cca53ffb31f7547740a05"
936
+ ```
937
+
935
938
  ### Dogma
936
939
 
937
940
  #### Get attributes
@@ -1297,13 +1300,13 @@ character_killmails.killmails.size # => 1
1297
1300
 
1298
1301
  killmail = character_killmails.killmails.first
1299
1302
 
1300
- killmail.as_json # => {:killmail_hash=>"07f7ef1d7f6090e78d8e85b4a98e680f67b5e9d5",
1301
- # :killmail_id=>72410059}
1303
+ killmail.as_json # => {:killmail_hash=>"8f1450fca8ce97be9b10e106a1257088407ef387",
1304
+ # :killmail_id=>81_646_519}
1302
1305
 
1303
- killmail.killmail_hash # => "07f7ef1d7f6090e78d8e85b4a98e680f67b5e9d5"
1304
- killmail.killmail_id # => 72410059
1306
+ killmail.killmail_hash # => "8f1450fca8ce97be9b10e106a1257088407ef387"
1307
+ killmail.killmail_id # => 81646519
1305
1308
 
1306
- # TODO: character_killmails.etag
1309
+ character_killmails.etag # => "ba5068bc1b07db98d9efce93437295fbdb9d29b14b4ffbcbfa91ac0d"
1307
1310
  ```
1308
1311
 
1309
1312
  #### Get a corporation's recent kills and losses
@@ -1336,6 +1339,14 @@ corporation_killmails.roles # => ["Director"]
1336
1339
 
1337
1340
  #### Get a single killmail
1338
1341
 
1342
+ ```ruby
1343
+ options = { killmail_id: 81_646_519, killmail_hash: "8f1450fca8ce97be9b10e106a1257088407ef387" }
1344
+
1345
+ killmail = EveOnline::ESI::Killmail.new(options)
1346
+
1347
+ # TODO: finish this
1348
+ ```
1349
+
1339
1350
  ### Location
1340
1351
 
1341
1352
  #### Get character location
@@ -1452,7 +1463,12 @@ offer.offer_id # => 3584
1452
1463
  offer.quantity # => 5000
1453
1464
  offer.type_id # => 23047
1454
1465
 
1455
- # TODO: offer.required_items
1466
+ offer.offer_required_items.size # => 1
1467
+
1468
+ offer_required_item = offer.offer_required_items.first
1469
+
1470
+ offer_required_item.quantity # => 5000
1471
+ offer_required_item.type_id # => 234
1456
1472
 
1457
1473
  corporation_loyalty_store_offers.etag # => "89211f42fde090e4d22621e9b97d7604ab87af95b3b6ffed7fe81bc0"
1458
1474
  ```
@@ -1461,22 +1477,103 @@ corporation_loyalty_store_offers.etag # => "89211f42fde090e4d22621e9b97d7604ab87
1461
1477
 
1462
1478
  #### Return mail headers
1463
1479
 
1480
+ ```ruby
1481
+ ```
1482
+
1464
1483
  #### Send a new mail
1465
1484
 
1485
+ ```ruby
1486
+ ```
1487
+
1466
1488
  #### Delete a mail
1467
1489
 
1490
+ ```ruby
1491
+ ```
1492
+
1468
1493
  #### Return a mail
1469
1494
 
1495
+ ```ruby
1496
+ options = { character_id: 1_337_512_245, mail_id: 376_045_681, token: "token" }
1497
+
1498
+ character_mail = EveOnline::ESI::CharacterGetMail.new(options)
1499
+
1500
+ character_mail.scope # => "esi-mail.read_mail.v1"
1501
+
1502
+ character_mail.as_json # => {:body=>"<font size=\"12\" color=\"#bfffffff\">moving</font>",
1503
+ # :from_id=>1208274826,
1504
+ # :read=>true,
1505
+ # :subject=>"moving",
1506
+ # :timestamp=>Mon, 10 Jun 2019 07:50:00 UTC +00:00}
1507
+
1508
+ character_mail.body # => "<font size=\"12\" color=\"#bfffffff\">moving</font>"
1509
+ character_mail.from_id # => 1208274826
1510
+ character_mail.read # => true
1511
+ character_mail.subject # => "moving"
1512
+ character_mail.timestamp # => Mon, 10 Jun 2019 07:50:00 UTC +00:00
1513
+
1514
+ character_mail.label_ids # => [4]
1515
+
1516
+ character_mail.recipients.size # => 1
1517
+
1518
+ recipient = character_mail.recipients.first
1519
+
1520
+ recipient.as_json # => {:recipient_id=>98134807,
1521
+ # :recipient_type=>"corporation"}
1522
+
1523
+ recipient.recipient_id # => 98134807
1524
+ recipient.recipient_type # => "corporation"
1525
+
1526
+ character_mail.etag # => "90dba7f7a6e60bfe8527b9f5112b9ca588c8f57d01415717be525a91"
1527
+ ```
1528
+
1470
1529
  #### Update metadata about a mail
1471
1530
 
1531
+ ```ruby
1532
+ ```
1533
+
1472
1534
  #### Get mail labels and unread counts
1473
1535
 
1536
+ ```ruby
1537
+ options = { character_id: 1_337_512_245, token: "token" }
1538
+
1539
+ character_mail_labels = EveOnline::ESI::CharacterMailLabels.new(options)
1540
+
1541
+ character_mail_labels.scope # => "esi-mail.read_mail.v1"
1542
+
1543
+ character_mail_labels.total_unread_count # => 288
1544
+
1545
+ character_mail_labels.labels.size # => 4
1546
+
1547
+ label = character_mail_labels.labels.last
1548
+
1549
+ label.as_json # => {:color=>"#ffffff",
1550
+ # :label_id=>8,
1551
+ # :name=>"[Alliance]",
1552
+ # :unread_count=>227}
1553
+
1554
+ label.color # => "#ffffff"
1555
+ label.label_id # => 8
1556
+ label.name # => "[Alliance]"
1557
+ label.unread_count # => 227
1558
+
1559
+ character_mail_labels.etag # => "265cfe7f2d7df2273342ed75c92b5047af6f76a3807dcc8353b5f379"
1560
+ ```
1561
+
1474
1562
  #### Create a mail label
1475
1563
 
1564
+ ```ruby
1565
+ ```
1566
+
1476
1567
  #### Delete a mail label
1477
1568
 
1569
+ ```ruby
1570
+ ```
1571
+
1478
1572
  #### Return mailing list subscriptions
1479
1573
 
1574
+ ```ruby
1575
+ ```
1576
+
1480
1577
  ### Market
1481
1578
 
1482
1579
  #### List open orders from a character
@@ -1600,10 +1697,67 @@ market_history.etag # => "01636947a53db63a0369aab78bbc98bae94a49cd6aa3950c29d588
1600
1697
 
1601
1698
  #### Get item groups
1602
1699
 
1700
+ ```ruby
1701
+ market_groups = EveOnline::ESI::MarketGroups.new
1702
+
1703
+ market_groups.scope # => nil
1704
+
1705
+ market_groups.market_group_ids.size # => 1872
1706
+
1707
+ market_groups.market_group_ids.first # => 2
1708
+
1709
+ market_groups.etag # => "bf7832bfc20f5f9fdeddc9cb0360b941067310e7e3a2a80315b45a43"
1710
+ ```
1711
+
1603
1712
  #### Get item group information
1604
1713
 
1714
+ ```ruby
1715
+ options = { id: 618, language: 'en-us' }
1716
+
1717
+ market_group = EveOnline::ESI::MarketGroup.new(options)
1718
+
1719
+ market_group.scope # => nil
1720
+
1721
+ market_group.as_json # => {:description=>"Implants intended for Subcervical Processing Slot 1.",
1722
+ # :market_group_id=>618,
1723
+ # :name=>"Implant Slot 01",
1724
+ # :parent_group_id=>532}
1725
+
1726
+ market_group.description # => "Implants intended for Subcervical Processing Slot 1."
1727
+ market_group.market_group_id # => 618
1728
+ market_group.name # => "Implant Slot 01"
1729
+ market_group.parent_group_id # => 532
1730
+
1731
+ market_group.type_ids.size # => 48
1732
+
1733
+ market_group.type_ids.first # => 28802
1734
+
1735
+ market_group.etag # => "bf7832bfc20f5f9fdeddc9cb0360b941067310e7e3a2a80315b45a43"
1736
+ ```
1737
+
1605
1738
  #### List market prices
1606
1739
 
1740
+ ```ruby
1741
+ market_prices = EveOnline::ESI::MarketPrices.new
1742
+
1743
+ market_prices.scope # => nil
1744
+
1745
+ market_prices.market_prices.size # => 12565
1746
+
1747
+ market_price = market_prices.market_prices.first
1748
+
1749
+
1750
+ market_price.as_json # => {:adjusted_price=>923296.88,
1751
+ # :average_price=>1273871.6,
1752
+ # :type_id=>32772}
1753
+
1754
+ market_price.adjusted_price # => 923296.88
1755
+ market_price.average_price # => 1273871.6
1756
+ market_price.type_id # => 32772
1757
+
1758
+ market_prices.etag # => "2d5acc3bd4555821bb91d787596f5ddad129f849739e83162e93c02f"
1759
+ ```
1760
+
1607
1761
  #### List orders in a structure
1608
1762
 
1609
1763
  ### Opportunities
@@ -1897,7 +2051,7 @@ category.published # => true
1897
2051
  category.group_ids.size # => 46
1898
2052
  category.group_ids.first # => 25
1899
2053
 
1900
- # TODO: category.etag
2054
+ category.etag # => "37a39e7a5f5ecc07b19a3128c319f1198d035aee10052d0a21ccdd94"
1901
2055
  ```
1902
2056
 
1903
2057
  #### Get constellations
@@ -2180,23 +2334,24 @@ region = EveOnline::ESI::UniverseRegion.new(options)
2180
2334
 
2181
2335
  region.scope # => nil
2182
2336
 
2183
- region.as_json # => {:constellations=>[20000001,20000002,20000003,...,20000016],
2184
- # :description=>"The Derelik region...",
2337
+ region.as_json # => {:description=>"The Derelik region...",
2185
2338
  # :name=>"Derelik",
2186
2339
  # :region_id=>10000001}
2187
2340
 
2188
- region.constellations # => [20000001,20000002,20000003,...,20000016]
2189
2341
  region.description # => "The Derelik region..."
2190
2342
  region.name # => "Derelik"
2191
2343
  region.region_id # => 10000001
2192
2344
 
2345
+ region.constellation_ids.size # => 16
2346
+ region.constellation_ids.first # => 20000001
2347
+
2193
2348
  region.etag # => "2c8392581d493e06c015ca3d48d4076079bf4c976b1f776742592260"
2194
2349
  ```
2195
2350
 
2196
2351
  #### Get stargate information
2197
2352
 
2198
2353
  ```ruby
2199
- options = { id: 50000056 }
2354
+ options = { id: 50_000_056 }
2200
2355
 
2201
2356
  stargate = EveOnline::ESI::UniverseStargate.new(options)
2202
2357
 
@@ -2205,18 +2360,16 @@ stargate.scope # => nil
2205
2360
  stargate.as_json # => {:name=>"Stargate (Akpivem)",
2206
2361
  # :stargate_id=>50000056,
2207
2362
  # :system_id=>30000001,
2208
- # :type_id=>29624}
2363
+ # :type_id=>29624,
2364
+ # :destination_stargate_id=>50000342,
2365
+ # :destination_system_id=>30000003}
2209
2366
 
2210
2367
  stargate.name # => "Stargate (Akpivem)"
2211
2368
  stargate.stargate_id # => 50000056
2212
2369
  stargate.system_id # => 30000001
2213
2370
  stargate.type_id # => 29624
2214
-
2215
- stargate.destination.as_json # => {:stargate_id=>50000342,
2216
- # :system_id=>30000003}
2217
-
2218
- stargate.destination.stargate_id # => 50000342
2219
- stargate.destination.system_id # => 30000003
2371
+ stargate.destination_stargate_id # => 50000342
2372
+ stargate.destination_system_id # => 30000003
2220
2373
 
2221
2374
  stargate.position.as_json # => {:x=>331516354560.0,
2222
2375
  # :y=>43597455360.0,
@@ -2568,7 +2721,7 @@ type.etag # => "e3f6a76b4a1287f54966c6253f8f5d6ac6460bc43d47570331b43e0b"
2568
2721
  #### Get a character's wallet balance
2569
2722
 
2570
2723
  ```ruby
2571
- options = { token: 'token123', character_id: 90729314 }
2724
+ options = { token: 'token123', character_id: 90_729_314 }
2572
2725
 
2573
2726
  character_wallet = EveOnline::ESI::CharacterWallet.new(options)
2574
2727
 
@@ -2578,13 +2731,13 @@ character_wallet.as_json # => {:wallet=>409488252.49}
2578
2731
 
2579
2732
  character_wallet.wallet # => 409488252.49
2580
2733
 
2581
- # TODO: character_wallet.etag
2734
+ character_wallet.etag # => "482786a491138fdf393f42c457424b0cd3f3c3c7c2c9afb3f55c618a"
2582
2735
  ```
2583
2736
 
2584
2737
  #### Get character wallet journal
2585
2738
 
2586
2739
  ```ruby
2587
- options = { token: 'token123', character_id: 90729314, page: 1 }
2740
+ options = { token: 'token123', character_id: 90_729_314, page: 1 }
2588
2741
 
2589
2742
  character_wallet_journal = EveOnline::ESI::CharacterWalletJournal.new(options)
2590
2743
 
@@ -2594,39 +2747,94 @@ character_wallet_journal.page # => 1
2594
2747
 
2595
2748
  character_wallet_journal.total_pages # => 1
2596
2749
 
2597
- character_wallet_journal.wallet_journal_entries.size # => 1
2750
+ character_wallet_journal.wallet_journal_entries.size # => 220
2598
2751
 
2599
2752
  wallet_journal_entry = character_wallet_journal.wallet_journal_entries.first
2600
2753
 
2601
- wallet_journal_entry.as_json
2602
-
2603
- wallet_journal_entry.amount
2604
- wallet_journal_entry.balance
2605
- wallet_journal_entry.context_id
2606
- wallet_journal_entry.context_id_type
2607
- wallet_journal_entry.date
2608
- wallet_journal_entry.description
2609
- wallet_journal_entry.first_party_id
2610
- wallet_journal_entry.id
2611
- wallet_journal_entry.reason
2612
- wallet_journal_entry.ref_type
2613
- wallet_journal_entry.second_party_id
2614
- wallet_journal_entry.tax
2615
- wallet_journal_entry.tax_receiver_id
2616
-
2617
- # TODO: update example
2618
-
2619
- # TODO: character_wallet_journal.etag
2754
+ wallet_journal_entry.as_json # => {:amount=>87375.0,
2755
+ # :balance=>2405126.01,
2756
+ # :context_id=>30003498,
2757
+ # :context_id_type=>"system_id",
2758
+ # :date=>Sun, 08 Mar 2020 12:08:25 UTC +00:00,
2759
+ # :description=>"Johnn Dillinger got bounty prizes for killing pirates in Sharhelund",
2760
+ # :first_party_id=>1000125,
2761
+ # :wallet_journal_id=>17740466914,
2762
+ # :reason=>"3744: 2,3748: 2,18085: 2,18070: 1",
2763
+ # :ref_type=>"bounty_prizes",
2764
+ # :second_party_id=>1337512245,
2765
+ # :tax=>nil,
2766
+ # :tax_receiver_id=>nil}
2767
+
2768
+ wallet_journal_entry.amount # => 87375.0
2769
+ wallet_journal_entry.balance # => 2405126.01
2770
+ wallet_journal_entry.context_id # => 30003498
2771
+ wallet_journal_entry.context_id_type # => "system_id"
2772
+ wallet_journal_entry.date # => Sun, 08 Mar 2020 12:08:25 UTC +00:00
2773
+ wallet_journal_entry.description # => "Johnn Dillinger got bounty prizes for killing pirates in Sharhelund"
2774
+ wallet_journal_entry.first_party_id # => 1000125
2775
+ wallet_journal_entry.wallet_journal_id # => 17740466914
2776
+ wallet_journal_entry.reason # => "3744: 2,3748: 2,18085: 2,18070: 1"
2777
+ wallet_journal_entry.ref_type # => "bounty_prizes"
2778
+ wallet_journal_entry.second_party_id # => 1337512245
2779
+ wallet_journal_entry.tax # => nil
2780
+ wallet_journal_entry.tax_receiver_id # => nil
2781
+
2782
+ character_wallet_journal.etag # => "b618a1a584f6aad53cb79c72d6de26d8c9210d0a18be1421d5355446"
2620
2783
  ```
2621
2784
 
2622
2785
  #### Get wallet transactions
2623
2786
 
2787
+ ```ruby
2788
+ options = { token: "token123", character_id: 1_337_512_245 } # optional, add `from_id: 123` to skip records
2789
+
2790
+ wallet_transactions = EveOnline::ESI::CharacterWalletTransactions.new(options)
2791
+
2792
+ wallet_transactions.scope # => "esi-wallet.read_character_wallet.v1"
2793
+
2794
+ wallet_transactions.wallet_transactions.size # => 47
2795
+
2796
+ wallet_transaction = wallet_transactions.wallet_transactions.first
2797
+
2798
+ wallet_transaction.as_json # => {:client_id=>2116253203,
2799
+ # :date=>Sun, 08 Mar 2020 11:49:16 UTC +00:00,
2800
+ # :is_buy=>true,
2801
+ # :is_personal=>true,
2802
+ # :journal_ref_id=>17740411474,
2803
+ # :location_id=>60008494,
2804
+ # :quantity=>1,
2805
+ # :transaction_id=>5296927639,
2806
+ # :type_id=>3538,
2807
+ # :unit_price=>99887.79}
2808
+
2809
+ wallet_transaction.client_id # => 2116253203
2810
+ wallet_transaction.date # => Sun, 08 Mar 2020 11:49:16 UTC +00:00
2811
+ wallet_transaction.is_buy # => true
2812
+ wallet_transaction.is_personal # => true
2813
+ wallet_transaction.journal_ref_id # => 17740411474
2814
+ wallet_transaction.location_id # => 60008494
2815
+ wallet_transaction.quantity # => 1
2816
+ wallet_transaction.transaction_id # => 5296927639
2817
+ wallet_transaction.type_id # => 3538
2818
+ wallet_transaction.unit_price # => 99887.79
2819
+
2820
+ wallet_transactions.etag # => "55d0fbe8b408d6a76dab70c0a709d4e7c5dd58d4e0b7bd785549e268"
2821
+ ```
2822
+
2624
2823
  #### Returns a corporation's wallet balance
2625
2824
 
2825
+ ```ruby
2826
+ ```
2827
+
2626
2828
  #### Get corporation wallet journal
2627
2829
 
2830
+ ```ruby
2831
+ ```
2832
+
2628
2833
  #### Get corporation wallet transactions
2629
2834
 
2835
+ ```ruby
2836
+ ```
2837
+
2630
2838
  ### Wars
2631
2839
 
2632
2840
  #### List wars
@@ -2657,6 +2865,66 @@ wars.etag # => "f1c28227847464613c1cb82dfc8a8c859b7b6857fad2c2a54c562812"
2657
2865
 
2658
2866
  #### Get war information
2659
2867
 
2868
+ ```ruby
2869
+ options = { id: 615578 }
2870
+
2871
+ war = EveOnline::ESI::War.new(options)
2872
+
2873
+ war.scope # => nil
2874
+
2875
+ war.as_json # => {:declared=>Fri, 14 Sep 2018 10:42:03 UTC +00:00,
2876
+ # :finished=>Thu, 20 Sep 2018 03:52:00 UTC +00:00,
2877
+ # :war_id=>615578,
2878
+ # :mutual=>false,
2879
+ # :open_for_allies=>false,
2880
+ # :retracted=>nil,
2881
+ # :started=>Fri, 14 Sep 2018 10:42:03 UTC +00:00}
2882
+
2883
+ war.declared # => Fri, 14 Sep 2018 10:42:03 UTC +00:00
2884
+ war.finished # => Thu, 20 Sep 2018 03:52:00 UTC +00:00
2885
+ war.war_id # => 615578
2886
+ war.mutual # => false
2887
+ war.open_for_allies # => false
2888
+ war.retracted # => nil
2889
+ war.started # => Fri, 14 Sep 2018 10:42:03 UTC +00:00
2890
+
2891
+ war.aggressor.as_json # => {:alliance_id=>99008592,
2892
+ # :corporation_id=>nil,
2893
+ # :isk_destroyed=>222167.22000000003,
2894
+ # :ships_killed=>9}
2895
+
2896
+ aggressor = war.aggressor
2897
+
2898
+ aggressor.alliance_id # => 99008592
2899
+ aggressor.corporation_id # => nil
2900
+ aggressor.isk_destroyed # => 222167.22000000003
2901
+ aggressor.ships_killed # => 9
2902
+
2903
+ war.allies.size # => 3
2904
+
2905
+ ally = war.allies.first
2906
+
2907
+ ally.as_json # => {:alliance_id=>99008228,
2908
+ # :corporation_id=>nil}
2909
+
2910
+ ally.alliance_id # => 99008228
2911
+ ally.corporation_id # => nil
2912
+
2913
+ war.defender.as_json # => {:alliance_id=>99008228,
2914
+ # :corporation_id=>nil,
2915
+ # :isk_destroyed=>0.0,
2916
+ # :ships_killed=>0}
2917
+
2918
+ defender = war.defender
2919
+
2920
+ defender.alliance_id # => 99008228
2921
+ defender.corporation_id # => nil
2922
+ defender.isk_destroyed # => 0.0
2923
+ defender.ships_killed # => 0
2924
+
2925
+ war.etag # => "3933b0baeaac259101f55fdad865c5590deeb9e1613fb2344b3db293"
2926
+ ```
2927
+
2660
2928
  #### List kills for a war
2661
2929
 
2662
2930
  ```ruby
@@ -2752,19 +3020,9 @@ races.write_timeout = 120
2752
3020
  races.write_timeout # => 120
2753
3021
  ```
2754
3022
 
2755
- ## Datasource
2756
-
2757
- Default datasource is `tranquility`. If you want to change it, for e.g., to `singularity`, add `datasource: 'singularity'` to default hash with options:
2758
-
2759
- ```ruby
2760
- options = { datasource: 'singularity' }
2761
-
2762
- races = EveOnline::ESI::UniverseRaces.new(options)
2763
- ```
2764
-
2765
3023
  ## Languages support
2766
3024
 
2767
- Default language is `en-us`. Supported languages: `de`, `en-us`, `fr`, `ja`, `ru`, `zh`.
3025
+ Default language is `en-us`. Supported languages: `de`, `en-us`, `fr`, `ja`, `ru`, `zh`, `ko`.
2768
3026
 
2769
3027
  If you want change it, for e.g., to `de`, add `language: 'de'` to default hash with options:
2770
3028
 
@@ -2784,6 +3042,26 @@ Oj.mimic_JSON()
2784
3042
  races = EveOnline::ESI::UniverseRaces.new
2785
3043
  ```
2786
3044
 
3045
+ ## Formulas
3046
+
3047
+ ### Blueprint copy time
3048
+
3049
+ ```ruby
3050
+ seconds = 240 # 240 seconds it time to copy e.g. "Acolyte I Blueprint"
3051
+ science_level = 5 # character science level
3052
+ advanced_industry_level = 1 # character advanced industry level
3053
+ science_copy_speed_bonus_per_level = -5.00 # type dogma attribute copy speed bonus for science
3054
+ advanced_industry_skill_industry_job_time_bonus_per_level = -3.00 # type dogma attribute industry job time bonuse for advanced industry
3055
+ runs = 1 # number of copy, optional. default: 1
3056
+
3057
+ formula = EveOnline::Formulas::BlueprintCopyTime.new(seconds, science_level,
3058
+ advanced_industry_level, science_copy_speed_bonus_per_level,
3059
+ advanced_industry_skill_industry_job_time_bonus_per_level, runs)
3060
+
3061
+ # time of copy in seconds
3062
+ formula.time # => 174.6
3063
+ ```
3064
+
2787
3065
  ## Useful links
2788
3066
 
2789
3067
  * [BREAKING CHANGES AND YOU - HOW TO USE ALT-ROUTES TO ENHANCE YOUR SANITY](https://developers.eveonline.com/blog/article/breaking-changes-and-you)