esi-sdk 1.1.1

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 (68) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +9 -0
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +36 -0
  4. data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  5. data/.github/ISSUE_TEMPLATE/support.md +7 -0
  6. data/.github/PULL_REQUEST_TEMPLATE.md +37 -0
  7. data/.github/dependabot.yml +17 -0
  8. data/.github/workflows/cicd.yml +181 -0
  9. data/.gitignore +11 -0
  10. data/.rspec +2 -0
  11. data/.rubocop.yml +36 -0
  12. data/.ruby-version +1 -0
  13. data/.yardext.rb +18 -0
  14. data/.yardopts +17 -0
  15. data/CHANGELOG.md +17 -0
  16. data/CODE_OF_CONDUCT.md +84 -0
  17. data/CONTRIBUTING.md +69 -0
  18. data/Gemfile +24 -0
  19. data/Gemfile.lock +141 -0
  20. data/LICENSE.txt +21 -0
  21. data/README.md +87 -0
  22. data/Rakefile +349 -0
  23. data/SECURITY.md +13 -0
  24. data/bin/console +15 -0
  25. data/bin/setup +8 -0
  26. data/esi-sdk.gemspec +32 -0
  27. data/exe/esi-sdk +4 -0
  28. data/lib/esi/client/alliance.rb +104 -0
  29. data/lib/esi/client/assets.rb +179 -0
  30. data/lib/esi/client/bookmarks.rb +126 -0
  31. data/lib/esi/client/calendar.rb +139 -0
  32. data/lib/esi/client/character.rb +389 -0
  33. data/lib/esi/client/clones.rb +69 -0
  34. data/lib/esi/client/contacts.rb +277 -0
  35. data/lib/esi/client/contracts.rb +274 -0
  36. data/lib/esi/client/corporation.rb +626 -0
  37. data/lib/esi/client/dogma.rb +117 -0
  38. data/lib/esi/client/faction_warfare.rb +196 -0
  39. data/lib/esi/client/fittings.rb +93 -0
  40. data/lib/esi/client/fleets.rb +428 -0
  41. data/lib/esi/client/incursions.rb +30 -0
  42. data/lib/esi/client/industry.rb +237 -0
  43. data/lib/esi/client/insurance.rb +30 -0
  44. data/lib/esi/client/killmails.rb +95 -0
  45. data/lib/esi/client/location.rb +100 -0
  46. data/lib/esi/client/loyalty.rb +61 -0
  47. data/lib/esi/client/mail.rb +244 -0
  48. data/lib/esi/client/market.rb +302 -0
  49. data/lib/esi/client/opportunities.rb +124 -0
  50. data/lib/esi/client/planetary_interaction.rb +122 -0
  51. data/lib/esi/client/routes.rb +37 -0
  52. data/lib/esi/client/search.rb +68 -0
  53. data/lib/esi/client/skills.rb +97 -0
  54. data/lib/esi/client/sovereignty.rb +74 -0
  55. data/lib/esi/client/status.rb +31 -0
  56. data/lib/esi/client/universe.rb +640 -0
  57. data/lib/esi/client/user_interface.rb +145 -0
  58. data/lib/esi/client/wallet.rb +191 -0
  59. data/lib/esi/client/wars.rb +82 -0
  60. data/lib/esi/client.rb +225 -0
  61. data/lib/esi/errors.rb +51 -0
  62. data/lib/esi/version.rb +5 -0
  63. data/lib/esi-sdk.rb +8 -0
  64. data/release.config.js +32 -0
  65. data/yard/fulldoc/html/css/pygments-default.css +69 -0
  66. data/yard/fulldoc/html/setup.rb +6 -0
  67. data/yard/layout/html/setup.rb +6 -0
  68. metadata +156 -0
@@ -0,0 +1,145 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ESI
4
+ class Client
5
+ # ESI user interface operations.
6
+ module UserInterface
7
+ # Set a solar system as autopilot waypoint.
8
+ #
9
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
10
+ #
11
+ # @esi_scope esi-ui.write_waypoint.v1
12
+ #
13
+ # @esi_version dev
14
+ # @esi_version legacy
15
+ # @esi_version v2
16
+ #
17
+ # @param add_to_beginning [Boolean] Whether this solar system should be added to the beginning of all waypoints
18
+ # @param clear_other_waypoints [Boolean] Whether clean other waypoints beforing adding this one
19
+ # @param destination_id [Integer] The destination to travel to, can be solar system, station or structure's id
20
+ # @param headers [Hash] Additional headers
21
+ #
22
+ # @raise [ESI::Errors::BadRequestError] Bad request
23
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
24
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
25
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
26
+ # @raise [ESI::Errors::InternalServerError] Internal server error
27
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
28
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
29
+ #
30
+ # @see https://esi.evetech.net/ui/#/User Interface/post_ui_autopilot_waypoint
31
+ def post_ui_autopilot_waypoint(add_to_beginning:, clear_other_waypoints:, destination_id:, headers: {})
32
+ query_string = URI.encode_www_form([["add_to_beginning", add_to_beginning], ["clear_other_waypoints", clear_other_waypoints], ["destination_id", destination_id]])
33
+ post("/ui/autopilot/waypoint/?#{query_string}", headers: headers)
34
+ end
35
+
36
+ # Open the contract window inside the client.
37
+ #
38
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
39
+ #
40
+ # @esi_scope esi-ui.open_window.v1
41
+ #
42
+ # @esi_version dev
43
+ # @esi_version legacy
44
+ # @esi_version v1
45
+ #
46
+ # @param contract_id [Integer] The contract to open
47
+ # @param headers [Hash] Additional headers
48
+ #
49
+ # @raise [ESI::Errors::BadRequestError] Bad request
50
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
51
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
52
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
53
+ # @raise [ESI::Errors::InternalServerError] Internal server error
54
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
55
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
56
+ #
57
+ # @see https://esi.evetech.net/ui/#/User Interface/post_ui_openwindow_contract
58
+ def post_ui_openwindow_contract(contract_id:, headers: {})
59
+ query_string = URI.encode_www_form([["contract_id", contract_id]])
60
+ post("/ui/openwindow/contract/?#{query_string}", headers: headers)
61
+ end
62
+
63
+ # Open the information window for a character, corporation or alliance inside the client.
64
+ #
65
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
66
+ #
67
+ # @esi_scope esi-ui.open_window.v1
68
+ #
69
+ # @esi_version dev
70
+ # @esi_version legacy
71
+ # @esi_version v1
72
+ #
73
+ # @param target_id [Integer] The target to open
74
+ # @param headers [Hash] Additional headers
75
+ #
76
+ # @raise [ESI::Errors::BadRequestError] Bad request
77
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
78
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
79
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
80
+ # @raise [ESI::Errors::InternalServerError] Internal server error
81
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
82
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
83
+ #
84
+ # @see https://esi.evetech.net/ui/#/User Interface/post_ui_openwindow_information
85
+ def post_ui_openwindow_information(target_id:, headers: {})
86
+ query_string = URI.encode_www_form([["target_id", target_id]])
87
+ post("/ui/openwindow/information/?#{query_string}", headers: headers)
88
+ end
89
+
90
+ # Open the market details window for a specific typeID inside the client.
91
+ #
92
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
93
+ #
94
+ # @esi_scope esi-ui.open_window.v1
95
+ #
96
+ # @esi_version dev
97
+ # @esi_version legacy
98
+ # @esi_version v1
99
+ #
100
+ # @param type_id [Integer] The item type to open in market window
101
+ # @param headers [Hash] Additional headers
102
+ #
103
+ # @raise [ESI::Errors::BadRequestError] Bad request
104
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
105
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
106
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
107
+ # @raise [ESI::Errors::InternalServerError] Internal server error
108
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
109
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
110
+ #
111
+ # @see https://esi.evetech.net/ui/#/User Interface/post_ui_openwindow_marketdetails
112
+ def post_ui_openwindow_marketdetails(type_id:, headers: {})
113
+ query_string = URI.encode_www_form([["type_id", type_id]])
114
+ post("/ui/openwindow/marketdetails/?#{query_string}", headers: headers)
115
+ end
116
+
117
+ # Open the New Mail window, according to settings from the request if applicable.
118
+ #
119
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
120
+ #
121
+ # @esi_scope esi-ui.open_window.v1
122
+ #
123
+ # @esi_version dev
124
+ # @esi_version legacy
125
+ # @esi_version v1
126
+ #
127
+ # @param new_mail [Hash] The details of mail to create
128
+ # @param headers [Hash] Additional headers
129
+ #
130
+ # @raise [ESI::Errors::BadRequestError] Bad request
131
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
132
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
133
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
134
+ # @raise [ESI::Errors::UnprocessableEntityError] Invalid request
135
+ # @raise [ESI::Errors::InternalServerError] Internal server error
136
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
137
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
138
+ #
139
+ # @see https://esi.evetech.net/ui/#/User Interface/post_ui_openwindow_newmail
140
+ def post_ui_openwindow_newmail(new_mail:, headers: {})
141
+ post("/ui/openwindow/newmail/", headers: headers, payload: new_mail)
142
+ end
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,191 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ESI
4
+ class Client
5
+ # ESI wallet operations.
6
+ module Wallet
7
+ # Returns a character's wallet balance.
8
+ #
9
+ # This endpoint is cached for up to 120 seconds.
10
+ #
11
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
12
+ #
13
+ # @esi_scope esi-wallet.read_character_wallet.v1
14
+ #
15
+ # @esi_version legacy
16
+ # @esi_version v1
17
+ #
18
+ # @param character_id [Integer,String] An EVE character ID
19
+ # @param params [Hash] Additional query string parameters
20
+ # @param headers [Hash] Additional headers
21
+ #
22
+ # @raise [ESI::Errors::BadRequestError] Bad request
23
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
24
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
25
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
26
+ # @raise [ESI::Errors::InternalServerError] Internal server error
27
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
28
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
29
+ #
30
+ # @see https://esi.evetech.net/ui/#/Wallet/get_characters_character_id_wallet
31
+ def get_character_wallet(character_id:, params: {}, headers: {})
32
+ get("/characters/#{character_id}/wallet/", headers: headers, params: params)
33
+ end
34
+ alias get_characters_character_id_wallet get_character_wallet
35
+
36
+ # Retrieve the given character's wallet journal going 30 days back.
37
+ #
38
+ # This endpoint is cached for up to 3600 seconds.
39
+ #
40
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
41
+ #
42
+ # @esi_scope esi-wallet.read_character_wallet.v1
43
+ #
44
+ # @esi_version dev
45
+ # @esi_version v6
46
+ #
47
+ # @param character_id [Integer,String] An EVE character ID
48
+ # @param params [Hash] Additional query string parameters
49
+ # @param headers [Hash] Additional headers
50
+ #
51
+ # @raise [ESI::Errors::BadRequestError] Bad request
52
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
53
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
54
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
55
+ # @raise [ESI::Errors::InternalServerError] Internal server error
56
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
57
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
58
+ #
59
+ # @see https://esi.evetech.net/ui/#/Wallet/get_characters_character_id_wallet_journal
60
+ def get_character_wallet_journal(character_id:, params: {}, headers: {})
61
+ get("/characters/#{character_id}/wallet/journal/", headers: headers, params: params)
62
+ end
63
+ alias get_characters_character_id_wallet_journal get_character_wallet_journal
64
+
65
+ # Get wallet transactions of a character.
66
+ #
67
+ # This endpoint is cached for up to 3600 seconds.
68
+ #
69
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
70
+ #
71
+ # @esi_scope esi-wallet.read_character_wallet.v1
72
+ #
73
+ # @esi_version dev
74
+ # @esi_version legacy
75
+ # @esi_version v1
76
+ #
77
+ # @param character_id [Integer,String] An EVE character ID
78
+ # @param from_id [Integer] Only show transactions happened before the one referenced by this id
79
+ # @param params [Hash] Additional query string parameters
80
+ # @param headers [Hash] Additional headers
81
+ #
82
+ # @raise [ESI::Errors::BadRequestError] Bad request
83
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
84
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
85
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
86
+ # @raise [ESI::Errors::InternalServerError] Internal server error
87
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
88
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
89
+ #
90
+ # @see https://esi.evetech.net/ui/#/Wallet/get_characters_character_id_wallet_transactions
91
+ def get_character_wallet_transactions(character_id:, from_id:, params: {}, headers: {})
92
+ query_string = URI.encode_www_form([["from_id", from_id]])
93
+ get("/characters/#{character_id}/wallet/transactions/?#{query_string}", headers: headers, params: params)
94
+ end
95
+ alias get_characters_character_id_wallet_transactions get_character_wallet_transactions
96
+
97
+ # Get a corporation's wallets.
98
+ #
99
+ # This endpoint is cached for up to 300 seconds.
100
+ #
101
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
102
+ #
103
+ # @esi_scope esi-wallet.read_corporation_wallets.v1
104
+ #
105
+ # @esi_version dev
106
+ # @esi_version legacy
107
+ # @esi_version v1
108
+ #
109
+ # @param corporation_id [Integer,String] An EVE corporation ID
110
+ # @param params [Hash] Additional query string parameters
111
+ # @param headers [Hash] Additional headers
112
+ #
113
+ # @raise [ESI::Errors::BadRequestError] Bad request
114
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
115
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
116
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
117
+ # @raise [ESI::Errors::InternalServerError] Internal server error
118
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
119
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
120
+ #
121
+ # @see https://esi.evetech.net/ui/#/Wallet/get_corporations_corporation_id_wallets
122
+ def get_corporation_wallets(corporation_id:, params: {}, headers: {})
123
+ get("/corporations/#{corporation_id}/wallets/", headers: headers, params: params)
124
+ end
125
+ alias get_corporations_corporation_id_wallets get_corporation_wallets
126
+
127
+ # Retrieve the given corporation's wallet journal for the given division going 30 days back.
128
+ #
129
+ # This endpoint is cached for up to 3600 seconds.
130
+ #
131
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
132
+ #
133
+ # @esi_scope esi-wallet.read_corporation_wallets.v1
134
+ #
135
+ # @esi_version dev
136
+ # @esi_version v4
137
+ #
138
+ # @param corporation_id [Integer,String] An EVE corporation ID
139
+ # @param division [Integer,String] Wallet key of the division to fetch journals from
140
+ # @param params [Hash] Additional query string parameters
141
+ # @param headers [Hash] Additional headers
142
+ #
143
+ # @raise [ESI::Errors::BadRequestError] Bad request
144
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
145
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
146
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
147
+ # @raise [ESI::Errors::InternalServerError] Internal server error
148
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
149
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
150
+ #
151
+ # @see https://esi.evetech.net/ui/#/Wallet/get_corporations_corporation_id_wallets_division_journal
152
+ def get_corporation_wallets_division_journal(corporation_id:, division:, params: {}, headers: {})
153
+ get("/corporations/#{corporation_id}/wallets/#{division}/journal/", headers: headers, params: params)
154
+ end
155
+ alias get_corporations_corporation_id_wallets_division_journal get_corporation_wallets_division_journal
156
+
157
+ # Get wallet transactions of a corporation.
158
+ #
159
+ # This endpoint is cached for up to 3600 seconds.
160
+ #
161
+ # This endpoint requires authorization (see {ESI::Client#authorize}).
162
+ #
163
+ # @esi_scope esi-wallet.read_corporation_wallets.v1
164
+ #
165
+ # @esi_version dev
166
+ # @esi_version legacy
167
+ # @esi_version v1
168
+ #
169
+ # @param corporation_id [Integer,String] An EVE corporation ID
170
+ # @param division [Integer,String] Wallet key of the division to fetch journals from
171
+ # @param from_id [Integer] Only show journal entries happened before the transaction referenced by this id
172
+ # @param params [Hash] Additional query string parameters
173
+ # @param headers [Hash] Additional headers
174
+ #
175
+ # @raise [ESI::Errors::BadRequestError] Bad request
176
+ # @raise [ESI::Errors::UnauthorizedError] Unauthorized
177
+ # @raise [ESI::Errors::ForbiddenError] Forbidden
178
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
179
+ # @raise [ESI::Errors::InternalServerError] Internal server error
180
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
181
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
182
+ #
183
+ # @see https://esi.evetech.net/ui/#/Wallet/get_corporations_corporation_id_wallets_division_transactions
184
+ def get_corporation_wallets_division_transactions(corporation_id:, division:, from_id:, params: {}, headers: {})
185
+ query_string = URI.encode_www_form([["from_id", from_id]])
186
+ get("/corporations/#{corporation_id}/wallets/#{division}/transactions/?#{query_string}", headers: headers, params: params)
187
+ end
188
+ alias get_corporations_corporation_id_wallets_division_transactions get_corporation_wallets_division_transactions
189
+ end
190
+ end
191
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ESI
4
+ class Client
5
+ # ESI wars operations.
6
+ module War
7
+ # Return details about a war.
8
+ #
9
+ # This endpoint is cached for up to 3600 seconds.
10
+ #
11
+ # @esi_version dev
12
+ # @esi_version legacy
13
+ # @esi_version v1
14
+ #
15
+ # @param war_id [Integer,String] ID for a war
16
+ # @param params [Hash] Additional query string parameters
17
+ # @param headers [Hash] Additional headers
18
+ #
19
+ # @raise [ESI::Errors::BadRequestError] Bad request
20
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
21
+ # @raise [ESI::Errors::UnprocessableEntityError] War not found
22
+ # @raise [ESI::Errors::InternalServerError] Internal server error
23
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
24
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
25
+ #
26
+ # @see https://esi.evetech.net/ui/#/Wars/get_wars_war_id
27
+ def get_war(war_id:, params: {}, headers: {})
28
+ get("/wars/#{war_id}/", headers: headers, params: params)
29
+ end
30
+ alias get_wars_war_id get_war
31
+
32
+ # Return a list of kills related to a war.
33
+ #
34
+ # This endpoint is cached for up to 3600 seconds.
35
+ #
36
+ # @esi_version dev
37
+ # @esi_version legacy
38
+ # @esi_version v1
39
+ #
40
+ # @param war_id [Integer,String] A valid war ID
41
+ # @param params [Hash] Additional query string parameters
42
+ # @param headers [Hash] Additional headers
43
+ #
44
+ # @raise [ESI::Errors::BadRequestError] Bad request
45
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
46
+ # @raise [ESI::Errors::UnprocessableEntityError] War not found
47
+ # @raise [ESI::Errors::InternalServerError] Internal server error
48
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
49
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
50
+ #
51
+ # @see https://esi.evetech.net/ui/#/Wars/get_wars_war_id_killmails
52
+ def get_war_killmails(war_id:, params: {}, headers: {})
53
+ get("/wars/#{war_id}/killmails/", headers: headers, params: params)
54
+ end
55
+ alias get_wars_war_id_killmails get_war_killmails
56
+
57
+ # Return a list of wars.
58
+ #
59
+ # This endpoint is cached for up to 3600 seconds.
60
+ #
61
+ # @esi_version dev
62
+ # @esi_version legacy
63
+ # @esi_version v1
64
+ #
65
+ # @param max_war_id [Integer] Only return wars with ID smaller than this
66
+ # @param params [Hash] Additional query string parameters
67
+ # @param headers [Hash] Additional headers
68
+ #
69
+ # @raise [ESI::Errors::BadRequestError] Bad request
70
+ # @raise [ESI::Errors::ErrorLimitedError] Error limited
71
+ # @raise [ESI::Errors::InternalServerError] Internal server error
72
+ # @raise [ESI::Errors::ServiceUnavailableError] Service unavailable
73
+ # @raise [ESI::Errors::GatewayTimeoutError] Gateway timeout
74
+ #
75
+ # @see https://esi.evetech.net/ui/#/Wars/get_wars
76
+ def get_wars(max_war_id:, params: {}, headers: {})
77
+ query_string = URI.encode_www_form([["max_war_id", max_war_id]])
78
+ get("/wars/?#{query_string}", headers: headers, params: params)
79
+ end
80
+ end
81
+ end
82
+ end
data/lib/esi/client.rb ADDED
@@ -0,0 +1,225 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "faraday"
4
+ require "faraday-http-cache"
5
+ require "faraday_middleware"
6
+ require "timeout"
7
+
8
+ require_relative "./errors"
9
+ require_relative "./client/alliance"
10
+ require_relative "./client/contacts"
11
+ require_relative "./client/character"
12
+ require_relative "./client/assets"
13
+ require_relative "./client/skills"
14
+ require_relative "./client/bookmarks"
15
+ require_relative "./client/calendar"
16
+ require_relative "./client/clones"
17
+ require_relative "./client/contracts"
18
+ require_relative "./client/fittings"
19
+ require_relative "./client/fleets"
20
+ require_relative "./client/faction_warfare"
21
+ require_relative "./client/industry"
22
+ require_relative "./client/killmails"
23
+ require_relative "./client/location"
24
+ require_relative "./client/loyalty"
25
+ require_relative "./client/mail"
26
+ require_relative "./client/opportunities"
27
+ require_relative "./client/market"
28
+ require_relative "./client/planetary_interaction"
29
+ require_relative "./client/search"
30
+ require_relative "./client/wallet"
31
+ require_relative "./client/corporation"
32
+ require_relative "./client/dogma"
33
+ require_relative "./client/incursions"
34
+ require_relative "./client/insurance"
35
+ require_relative "./client/routes"
36
+ require_relative "./client/sovereignty"
37
+ require_relative "./client/status"
38
+ require_relative "./client/user_interface"
39
+ require_relative "./client/universe"
40
+ require_relative "./client/wars"
41
+
42
+ module ESI
43
+ # Client for the EVE Swagger Interface (ESI) API.
44
+ class Client # rubocop:disable Metrics/ClassLength
45
+ include ESI::Client::Alliance
46
+ include ESI::Client::Contact
47
+ include ESI::Client::Character
48
+ include ESI::Client::Asset
49
+ include ESI::Client::Skill
50
+ include ESI::Client::Bookmark
51
+ include ESI::Client::Calendar
52
+ include ESI::Client::Clone
53
+ include ESI::Client::Contract
54
+ include ESI::Client::Fitting
55
+ include ESI::Client::Fleet
56
+ include ESI::Client::FactionWarfare
57
+ include ESI::Client::Industry
58
+ include ESI::Client::Killmail
59
+ include ESI::Client::Location
60
+ include ESI::Client::Loyalty
61
+ include ESI::Client::Mail
62
+ include ESI::Client::Opportunity
63
+ include ESI::Client::Market
64
+ include ESI::Client::PlanetaryInteraction
65
+ include ESI::Client::Search
66
+ include ESI::Client::Wallet
67
+ include ESI::Client::Corporation
68
+ include ESI::Client::Dogma
69
+ include ESI::Client::Incursion
70
+ include ESI::Client::Insurance
71
+ include ESI::Client::Route
72
+ include ESI::Client::Sovereignty
73
+ include ESI::Client::Status
74
+ include ESI::Client::UserInterface
75
+ include ESI::Client::Universe
76
+ include ESI::Client::War
77
+
78
+ DEFAULT_BASE_URL = "https://esi.evetech.net"
79
+ DEFAULT_VERSION = "latest"
80
+
81
+ ERROR_MAPPING = {
82
+ 400 => ESI::Errors::BadRequestError,
83
+ 401 => ESI::Errors::UnauthorizedError,
84
+ 403 => ESI::Errors::ForbiddenError,
85
+ 404 => ESI::Errors::NotFoundError,
86
+ 420 => ESI::Errors::ErrorLimitedError,
87
+ 422 => ESI::Errors::UnprocessableEntityError,
88
+ 500 => ESI::Errors::InternalServerError,
89
+ 503 => ESI::Errors::ServiceUnavailableError,
90
+ 504 => ESI::Errors::GatewayTimeoutError,
91
+ 520 => ESI::Errors::EveServerError
92
+ }.freeze
93
+
94
+ attr_reader :base_url, :cache, :user_agent, :version
95
+
96
+ # Returns a new {ESI::Client}.
97
+ #
98
+ # @param user_agent [String] Value of the `User-Agent` header for HTTP calls
99
+ # @param base_url [String] The base URL of the ESI API
100
+ # @param version [String] The version of the ESI API
101
+ # @param cache [Hash] The cache configuration to use
102
+ # @option cache [Object] :store The cache store (e.g. `Rails.cache`)
103
+ # @option cache [Object] :logger The logger (e.g. `Rails.logger`)
104
+ # @option cache [Object] :instrumenter The instrumenter (e.g. `ActiveSupport::Notifications`)
105
+ def initialize(user_agent:, base_url: DEFAULT_BASE_URL, version: DEFAULT_VERSION, cache: {})
106
+ @base_url = base_url
107
+ @cache = cache
108
+ @user_agent = user_agent
109
+ @version = version
110
+ end
111
+
112
+ # Set the `Authorization` header for subsequent requests.
113
+ #
114
+ # @param token [String] The [EVE SSO JWT token](https://docs.esi.evetech.net/docs/sso/) to use
115
+ def authorize(token)
116
+ url_encoded_connection.authorization :Bearer, token
117
+ json_encoded_connection.authorization :Bearer, token
118
+ end
119
+
120
+ private
121
+
122
+ ESI_RETRY_EXCEPTIONS = [Errno::ETIMEDOUT, Timeout::Error, Faraday::TimeoutError, Faraday::ConnectionFailed,
123
+ Faraday::ParsingError, SocketError].freeze
124
+
125
+ def delete(path, params: {}, headers: {})
126
+ response = make_delete_request(path, params: params, headers: headers)
127
+ response.body
128
+ end
129
+
130
+ def get(path, params: {}, headers: {})
131
+ response = make_get_request(path, params: params, headers: headers)
132
+
133
+ return paginate(response, params, headers) if paginated?(response)
134
+
135
+ response.body
136
+ end
137
+
138
+ def post(path, payload: {}, headers: {})
139
+ response = make_post_request(path, payload: payload, headers: headers)
140
+ response.body
141
+ end
142
+
143
+ def put(path, payload: {}, headers: {})
144
+ response = make_put_request(path, payload: payload, headers: headers)
145
+ response.body
146
+ end
147
+
148
+ def paginate(response, params, headers)
149
+ all_items = response.body
150
+ page_count = response.headers["X-Pages"].to_i - 1
151
+ page_count.times do |n|
152
+ page_number = n + 1
153
+ params = params.merge(page: page_number)
154
+ page = make_get_request(path, params: params, headers: headers)
155
+ all_items += page.body
156
+ end
157
+
158
+ all_items
159
+ end
160
+
161
+ def make_delete_request(path, params: {}, headers: {})
162
+ res = url_encoded_connection.delete("/#{version}#{path}", params, headers)
163
+
164
+ raise_error(res) unless res.success?
165
+
166
+ res
167
+ end
168
+
169
+ def make_get_request(path, params: {}, headers: {})
170
+ res = url_encoded_connection.get("/#{version}#{path}", params, headers)
171
+
172
+ raise_error(res) unless res.success?
173
+
174
+ res
175
+ end
176
+
177
+ def make_post_request(path, payload: {}, headers: {})
178
+ res = json_encoded_connection.post("/#{version}#{path}", payload, headers)
179
+
180
+ raise_error(res) unless res.success?
181
+
182
+ res
183
+ end
184
+
185
+ def make_put_request(path, payload: {}, headers: {})
186
+ res = json_encoded_connection.put("/#{version}#{path}", payload, headers)
187
+
188
+ raise_error(res) unless res.success?
189
+
190
+ res
191
+ end
192
+
193
+ def paginated?(response)
194
+ response.headers["X-Pages"] && response.headers["X-Pages"].to_i <= 1
195
+ end
196
+
197
+ def raise_error(res)
198
+ raise (ERROR_MAPPING[res.status] || Error).new("(#{res.status}) #{res["error"]}", response: res)
199
+ end
200
+
201
+ def url_encoded_connection
202
+ @url_encoded_connection ||= Faraday.new(base_url, headers: default_headers) do |f|
203
+ f.use :http_cache, cache unless cache.empty?
204
+ f.request :url_encoded
205
+ f.request :retry, { exceptions: ESI_RETRY_EXCEPTIONS }
206
+ f.response :follow_redirects
207
+ f.response :json
208
+ end
209
+ end
210
+
211
+ def json_encoded_connection
212
+ @json_encoded_connection ||= Faraday.new(base_url, headers: default_headers) do |f|
213
+ f.use :http_cache, cache unless cache.empty?
214
+ f.request :json
215
+ f.request :retry, { exceptions: ESI_RETRY_EXCEPTIONS }
216
+ f.response :follow_redirects
217
+ f.response :json
218
+ end
219
+ end
220
+
221
+ def default_headers
222
+ { "User-Agent": user_agent }
223
+ end
224
+ end
225
+ end
data/lib/esi/errors.rb ADDED
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ESI
4
+ # Namespace for ESI errors.
5
+ module Errors
6
+ # Base class for ESI errors.
7
+ class Error < RuntimeError
8
+ end
9
+
10
+ # Base class for ESI client errors.
11
+ class ClientError < Error
12
+ attr_reader :response
13
+
14
+ def initialize(msg, response:)
15
+ super(msg)
16
+
17
+ @response = response
18
+ end
19
+ end
20
+
21
+ # ESI unauthorized error.
22
+ class UnauthorizedError < ClientError; end
23
+
24
+ # ESI bad request error.
25
+ class BadRequestError < ClientError; end
26
+
27
+ # ESI forbidden error.
28
+ class ForbiddenError < ClientError; end
29
+
30
+ # ESI not found error.
31
+ class NotFoundError < ClientError; end
32
+
33
+ # ESI unprocessable entity error.
34
+ class UnprocessableEntityError < ClientError; end
35
+
36
+ # ESI error limited error.
37
+ class ErrorLimitedError < ClientError; end
38
+
39
+ # ESI internal server error.
40
+ class InternalServerError < ClientError; end
41
+
42
+ # ESI service unavailable error.
43
+ class ServiceUnavailableError < ClientError; end
44
+
45
+ # ESI gateway timeout error.
46
+ class GatewayTimeoutError < ClientError; end
47
+
48
+ # ESI EVE server error.
49
+ class EveServerError < ClientError; end
50
+ end
51
+ end