esi-sdk 2.1.3 → 3.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -8
- data/.yardext.rb +5 -5
- data/CHANGELOG.md +21 -0
- data/Gemfile +15 -15
- data/Gemfile.lock +10 -6
- data/Rakefile +105 -138
- data/bin/console +3 -3
- data/esi-sdk.gemspec +18 -17
- data/exe/esi-sdk +1 -1
- data/lib/esi/client/alliance.rb +5 -5
- data/lib/esi/client/assets.rb +4 -4
- data/lib/esi/client/calendar.rb +5 -5
- data/lib/esi/client/character.rb +16 -14
- data/lib/esi/client/clones.rb +2 -2
- data/lib/esi/client/contacts.rb +9 -9
- data/lib/esi/client/contracts.rb +3 -3
- data/lib/esi/client/corporation.rb +15 -15
- data/lib/esi/client/dogma.rb +7 -7
- data/lib/esi/client/faction_warfare.rb +14 -14
- data/lib/esi/client/fittings.rb +3 -3
- data/lib/esi/client/fleets.rb +14 -14
- data/lib/esi/client/incursions.rb +2 -2
- data/lib/esi/client/industry.rb +8 -8
- data/lib/esi/client/insurance.rb +2 -2
- data/lib/esi/client/killmails.rb +1 -1
- data/lib/esi/client/location.rb +3 -3
- data/lib/esi/client/loyalty.rb +2 -2
- data/lib/esi/client/mail.rb +8 -8
- data/lib/esi/client/market.rb +12 -12
- data/lib/esi/client/opportunities.rb +7 -7
- data/lib/esi/client/planetary_interaction.rb +3 -3
- data/lib/esi/client/routes.rb +4 -4
- data/lib/esi/client/search.rb +5 -5
- data/lib/esi/client/skills.rb +3 -3
- data/lib/esi/client/sovereignty.rb +6 -6
- data/lib/esi/client/status.rb +2 -2
- data/lib/esi/client/universe.rb +45 -45
- data/lib/esi/client/user_interface.rb +14 -14
- data/lib/esi/client/wallet.rb +6 -6
- data/lib/esi/client/wars.rb +4 -4
- data/lib/esi/client.rb +116 -87
- data/lib/esi/version.rb +1 -1
- data/lib/esi-sdk.rb +2 -2
- metadata +22 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 53eb50161c8ed5745331ae4c5f5e758b16d26cbdb1a03477c6529ded6f6af0d1
|
4
|
+
data.tar.gz: 86bf63be109701505da29dc155f7678162614a21fff263fe28e15abd36b78d2b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a48179dc2da01171f4fc03cb04225b542f96ac6bef91cb27fbbb5a2edddaa5affa7465fb6f737aef2e98523e6e387d0e6592aa2b39f96ae9570847631d2501a7
|
7
|
+
data.tar.gz: 03f373c97e9d0daaa0bbfef87e739518650aa6733573795235c25d1225d293b27291b8665928a711b2625370544d7183cb9905c7e4236712676d3f2a51fb0cfa
|
data/.rubocop.yml
CHANGED
@@ -2,19 +2,12 @@ AllCops:
|
|
2
2
|
NewCops: enable
|
3
3
|
TargetRubyVersion: 3.0
|
4
4
|
|
5
|
-
Style/StringLiterals:
|
6
|
-
Enabled: true
|
7
|
-
EnforcedStyle: double_quotes
|
8
|
-
|
9
|
-
Style/StringLiteralsInInterpolation:
|
10
|
-
Enabled: true
|
11
|
-
EnforcedStyle: double_quotes
|
12
|
-
|
13
5
|
Layout/LineLength:
|
14
6
|
Max: 120
|
15
7
|
Exclude:
|
16
8
|
- lib/esi/client/*.rb
|
17
9
|
- spec/lib/esi/client/*_spec.rb
|
10
|
+
- spec/lib/esi/client_spec.rb
|
18
11
|
- Rakefile
|
19
12
|
|
20
13
|
Metrics/BlockLength:
|
data/.yardext.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require 'kramdown'
|
4
|
+
require 'yard'
|
5
5
|
|
6
6
|
# Make new Kramdown class with Github Formatted Markdown on
|
7
7
|
class KramdownGFM < Kramdown::Document
|
8
8
|
def initialize(text, opts = {})
|
9
|
-
super(text, opts.merge(input:
|
9
|
+
super(text, opts.merge(input: 'GFM', hard_wrap: false))
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
# Register new KramdownGFM
|
14
14
|
YARD::Templates::Helpers::MarkupHelper::MARKUP_PROVIDERS[:markdown] <<
|
15
|
-
{ lib: :
|
15
|
+
{ lib: :'kramdown-parser-gfm', const: 'KramdownGFM' }
|
16
16
|
|
17
17
|
# Register custom templates
|
18
|
-
YARD::Templates::Engine.register_template_path File.expand_path(
|
18
|
+
YARD::Templates::Engine.register_template_path File.expand_path('yard/templates', __dir__)
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,26 @@
|
|
1
1
|
# ESI SDK Changelog
|
2
2
|
|
3
|
+
# [3.0.0](https://github.com/bokoboshahni/esi-sdk-ruby/compare/v2.1.3...v3.0.0) (2022-01-26)
|
4
|
+
|
5
|
+
|
6
|
+
* feat!: use typhoeus and oj for api calls ([b6b150e](https://github.com/bokoboshahni/esi-sdk-ruby/commit/b6b150eff93889415ddca98d497c437470030e09))
|
7
|
+
|
8
|
+
|
9
|
+
### BREAKING CHANGES
|
10
|
+
|
11
|
+
* Typhoeus is now used instead of HTTPX for API calls and
|
12
|
+
oj is used for JSON parsing.
|
13
|
+
|
14
|
+
The following options have been removed from `ESI::Client#initialize`:
|
15
|
+
|
16
|
+
- `:cache`: Configure Typhoeus cache globally with
|
17
|
+
`Typhoeus::Config.cache`
|
18
|
+
(see https://github.com/typhoeus/typhoeus#caching)
|
19
|
+
- `:logger`: Configure Ethon logger globally with `Ethon.logger`
|
20
|
+
(see https://www.rubydoc.info/github/typhoeus/ethon/Ethon/Loggable#logger=-instance_method)
|
21
|
+
- `:instrumentation`: Instrumentation support to be re-added in a later
|
22
|
+
release.
|
23
|
+
|
3
24
|
## [2.1.3](https://github.com/bokoboshahni/esi-sdk-ruby/compare/v2.1.2...v2.1.3) (2021-12-08)
|
4
25
|
|
5
26
|
|
data/Gemfile
CHANGED
@@ -1,23 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
source
|
3
|
+
source 'https://rubygems.org'
|
4
4
|
|
5
|
-
ruby
|
5
|
+
ruby '3.0.2'
|
6
6
|
|
7
7
|
gemspec
|
8
8
|
|
9
|
-
gem
|
10
|
-
gem
|
11
|
-
gem
|
12
|
-
gem
|
13
|
-
gem
|
14
|
-
gem
|
15
|
-
gem
|
16
|
-
gem
|
17
|
-
gem
|
18
|
-
gem
|
19
|
-
gem
|
9
|
+
gem 'activesupport', '~> 6.1'
|
10
|
+
gem 'awesome_print', '~> 1.9'
|
11
|
+
gem 'rake', '~> 13.0'
|
12
|
+
gem 'rspec', '~> 3.10'
|
13
|
+
gem 'rubocop', '~> 1.18'
|
14
|
+
gem 'rubocop-performance', '~> 1.11'
|
15
|
+
gem 'rubocop-rake', '~> 0.6'
|
16
|
+
gem 'rubocop-rspec', '~> 2.4'
|
17
|
+
gem 'simplecov', '~> 0.21'
|
18
|
+
gem 'webmock', '~> 3.14'
|
19
|
+
gem 'yard', '~> 0.9'
|
20
20
|
|
21
|
-
gem
|
21
|
+
gem 'kramdown-parser-gfm', '~> 1.1'
|
22
22
|
|
23
|
-
gem
|
23
|
+
gem 'rouge', '~> 3.26'
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
esi-sdk (
|
5
|
-
|
4
|
+
esi-sdk (3.0.0)
|
5
|
+
oj (~> 3.13)
|
6
6
|
retriable (~> 3.1)
|
7
|
+
typhoeus (~> 1.4)
|
7
8
|
|
8
9
|
GEM
|
9
10
|
remote: https://rubygems.org/
|
@@ -23,10 +24,10 @@ GEM
|
|
23
24
|
rexml
|
24
25
|
diff-lcs (1.4.4)
|
25
26
|
docile (1.4.0)
|
27
|
+
ethon (0.15.0)
|
28
|
+
ffi (>= 1.15.0)
|
29
|
+
ffi (1.15.5)
|
26
30
|
hashdiff (1.0.1)
|
27
|
-
http-2-next (0.5.0)
|
28
|
-
httpx (0.18.1)
|
29
|
-
http-2-next (>= 0.4.1)
|
30
31
|
i18n (1.8.10)
|
31
32
|
concurrent-ruby (~> 1.0)
|
32
33
|
kramdown (2.3.1)
|
@@ -34,6 +35,7 @@ GEM
|
|
34
35
|
kramdown-parser-gfm (1.1.0)
|
35
36
|
kramdown (~> 2.0)
|
36
37
|
minitest (5.14.4)
|
38
|
+
oj (3.13.11)
|
37
39
|
parallel (1.21.0)
|
38
40
|
parser (3.0.2.0)
|
39
41
|
ast (~> 2.4.1)
|
@@ -82,6 +84,8 @@ GEM
|
|
82
84
|
simplecov_json_formatter (~> 0.1)
|
83
85
|
simplecov-html (0.12.3)
|
84
86
|
simplecov_json_formatter (0.1.3)
|
87
|
+
typhoeus (1.4.0)
|
88
|
+
ethon (>= 0.9.0)
|
85
89
|
tzinfo (2.0.4)
|
86
90
|
concurrent-ruby (~> 1.0)
|
87
91
|
unicode-display_width (2.1.0)
|
@@ -109,7 +113,7 @@ DEPENDENCIES
|
|
109
113
|
rubocop-rake (~> 0.6)
|
110
114
|
rubocop-rspec (~> 2.4)
|
111
115
|
simplecov (~> 0.21)
|
112
|
-
webmock (~> 3.
|
116
|
+
webmock (~> 3.14)
|
113
117
|
yard (~> 0.9)
|
114
118
|
|
115
119
|
RUBY VERSION
|
data/Rakefile
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
3
|
+
require 'bundler/gem_tasks'
|
4
|
+
require 'yard'
|
5
|
+
require 'yard/rake/yardoc_task'
|
6
|
+
require 'rspec/core/rake_task'
|
7
7
|
|
8
8
|
RSpec::Core::RakeTask.new(:spec)
|
9
9
|
|
10
|
-
require
|
10
|
+
require 'rubocop/rake_task'
|
11
11
|
|
12
12
|
RuboCop::RakeTask.new
|
13
13
|
|
@@ -16,30 +16,30 @@ YARD::Rake::YardocTask.new(:doc)
|
|
16
16
|
task default: %i[spec rubocop]
|
17
17
|
|
18
18
|
task :set_version do
|
19
|
-
version_file = File.join(File.dirname(__FILE__),
|
19
|
+
version_file = File.join(File.dirname(__FILE__), 'lib/esi/version.rb')
|
20
20
|
version_content = File.read(version_file)
|
21
|
-
new_version = ENV[
|
22
|
-
new_content = version_content.gsub(/VERSION =
|
23
|
-
File.write(
|
21
|
+
new_version = ENV['VERSION']
|
22
|
+
new_content = version_content.gsub(/VERSION = '.+'/m, "VERSION = \"#{new_version}\"")
|
23
|
+
File.write('lib/esi/version.rb', new_content)
|
24
24
|
end
|
25
25
|
|
26
26
|
task :generate do
|
27
|
-
require
|
28
|
-
require
|
29
|
-
require
|
27
|
+
require 'active_support/core_ext/string/inflections'
|
28
|
+
require 'json'
|
29
|
+
require 'open-uri'
|
30
30
|
|
31
|
-
swagger = JSON.parse(URI.open(
|
31
|
+
swagger = JSON.parse(URI.open('https://esi.evetech.net/latest/swagger.json').read)
|
32
32
|
|
33
|
-
paths = swagger[
|
33
|
+
paths = swagger['paths']
|
34
34
|
all_operations = paths.each_with_object({}) do |(path, operations), h|
|
35
35
|
operations.each do |(http_method, operation)|
|
36
|
-
description = operation[
|
36
|
+
description = operation['description'].split("\n").first.strip
|
37
37
|
|
38
|
-
method_name_parts = path.split(
|
39
|
-
operation_name = operation[
|
38
|
+
method_name_parts = path.split('/').map { |p| p.gsub(/[{}]/, '') }.map { |p| p.gsub(/_id/, '') }
|
39
|
+
operation_name = operation['operationId']
|
40
40
|
method_name_parts.map! do |p|
|
41
41
|
if [(method_name_parts[method_name_parts.index(p) + 1]).to_s,
|
42
|
-
"#{method_name_parts[method_name_parts.index(p) + 1]}s",
|
42
|
+
"#{method_name_parts[method_name_parts.index(p) + 1]}s", ''].include?(p)
|
43
43
|
nil
|
44
44
|
else
|
45
45
|
p
|
@@ -55,75 +55,73 @@ task :generate do
|
|
55
55
|
p.singularize
|
56
56
|
end
|
57
57
|
end
|
58
|
-
method_name = "#{http_method}_#{method_name_parts.compact.join(
|
58
|
+
method_name = "#{http_method}_#{method_name_parts.compact.join('_')}"
|
59
59
|
|
60
|
-
path_params = operation[
|
60
|
+
path_params = operation['parameters'].select { |p| p['in'] == 'path' || p['$ref'] }
|
61
61
|
path_params.map! do |param|
|
62
|
-
if param[
|
63
|
-
ref_name = param[
|
62
|
+
if param['$ref']
|
63
|
+
ref_name = param['$ref'].match(%r{#/parameters/(alliance_id|corporation_id|character_id)})
|
64
64
|
ref_name = ref_name[1] if ref_name
|
65
65
|
|
66
66
|
next unless ref_name
|
67
67
|
|
68
|
-
swagger[
|
68
|
+
swagger['parameters'][ref_name]
|
69
69
|
else
|
70
70
|
param
|
71
71
|
end
|
72
72
|
end
|
73
|
-
path_params.compact!.sort_by! { |p| p[
|
73
|
+
path_params.compact!.sort_by! { |p| p['name'] }
|
74
74
|
|
75
|
-
body_param = operation[
|
75
|
+
body_param = operation['parameters'].select { |p| p['in'] == 'body' }.first
|
76
76
|
|
77
|
-
tag = operation[
|
77
|
+
tag = operation['tags'].first || 'Untagged'
|
78
78
|
operation[tag]
|
79
79
|
|
80
|
-
scopes = (operation[
|
80
|
+
scopes = (operation['security'].first['evesso'] if operation['security'].present?)
|
81
81
|
|
82
|
-
cache = operation[
|
83
|
-
errors = operation[
|
84
|
-
versions = operation[
|
82
|
+
cache = operation['x-cached-seconds']
|
83
|
+
errors = operation['responses'].reject { |(k, _)| %w[200 201 204 304].include?(k) }
|
84
|
+
versions = operation['x-alternate-versions']
|
85
85
|
|
86
|
-
query = operation[
|
86
|
+
query = operation['parameters'].select { |p| p['in'] == 'query' }
|
87
87
|
|
88
88
|
h[method_name] =
|
89
89
|
{ params: path_params, method: http_method, description: description, tag: tag, path: path,
|
90
90
|
name: operation_name, body: body_param, scopes: scopes, cache: cache, versions: versions, errors: errors,
|
91
|
-
responses: operation[
|
91
|
+
responses: operation['responses'], query: query }
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
95
|
method_aliases = {
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
96
|
+
'get_killmail_killmail_hash' => 'get_killmail',
|
97
|
+
'get_markets_groups_market_group' => 'get_market_group',
|
98
|
+
'get_markets_groups' => 'get_market_groups',
|
99
|
+
'get_character_corporationhistory' => 'get_character_corporation_history',
|
100
|
+
'get_corporation_alliancehistory' => 'get_corporation_alliance_history'
|
101
101
|
}
|
102
102
|
|
103
103
|
error_mapping = {
|
104
|
-
400 =>
|
105
|
-
401 =>
|
106
|
-
403 =>
|
107
|
-
404 =>
|
108
|
-
420 =>
|
109
|
-
422 =>
|
110
|
-
500 =>
|
111
|
-
503 =>
|
112
|
-
504 =>
|
113
|
-
520 =>
|
104
|
+
400 => 'ESI::Errors::BadRequestError',
|
105
|
+
401 => 'ESI::Errors::UnauthorizedError',
|
106
|
+
403 => 'ESI::Errors::ForbiddenError',
|
107
|
+
404 => 'ESI::Errors::NotFoundError',
|
108
|
+
420 => 'ESI::Errors::ErrorLimitedError',
|
109
|
+
422 => 'ESI::Errors::UnprocessableEntityError',
|
110
|
+
500 => 'ESI::Errors::InternalServerError',
|
111
|
+
503 => 'ESI::Errors::ServiceUnavailableError',
|
112
|
+
504 => 'ESI::Errors::GatewayTimeoutError',
|
113
|
+
520 => 'ESI::Errors::EveServerError'
|
114
114
|
}.freeze
|
115
115
|
|
116
|
-
requires = []
|
117
|
-
includes = []
|
118
116
|
all_operations.group_by { |(_, v)| v[:tag] }.each do |(tag, operations)|
|
119
|
-
lib_filename = "#{tag.gsub(/ /,
|
120
|
-
module_name = tag.gsub(/ /,
|
117
|
+
lib_filename = "#{tag.gsub(/ /, '_').underscore}.rb"
|
118
|
+
module_name = tag.gsub(/ /, '_').classify
|
121
119
|
method_definitions = operations.sort_by { |(k, _v)| k }.each_with_object([]) do |(method_name, operation), a|
|
122
|
-
signature_params = operation[:params].map { |p| "#{p[
|
123
|
-
raw_call_params = operation[:params].map { |p| "#{p[
|
120
|
+
signature_params = operation[:params].map { |p| "#{p['name']}:" }
|
121
|
+
raw_call_params = operation[:params].map { |p| "#{p['name']}: #{p['name']}" }
|
124
122
|
|
125
123
|
description = "# #{operation[:description]}"
|
126
|
-
description = "#{description}." unless description.end_with?(
|
124
|
+
description = "#{description}." unless description.end_with?('.')
|
127
125
|
description += "\n"
|
128
126
|
|
129
127
|
description += "#\n\n# This endpoint is cached for up to #{operation[:cache]} seconds.\n" if operation[:cache]
|
@@ -143,40 +141,40 @@ task :generate do
|
|
143
141
|
end
|
144
142
|
|
145
143
|
param_tags = operation[:params].map do |p|
|
146
|
-
"# @param #{p[
|
144
|
+
"# @param #{p['name']} [#{p['type'].capitalize}] #{p['description']}"
|
147
145
|
end
|
148
146
|
|
149
147
|
if operation[:body]
|
150
148
|
body_param = operation[:body]
|
151
|
-
body_name = body_param[
|
149
|
+
body_name = body_param['name']
|
152
150
|
body_type =
|
153
|
-
case body_param[
|
154
|
-
when
|
155
|
-
|
156
|
-
when
|
157
|
-
|
151
|
+
case body_param['schema']['type']
|
152
|
+
when 'array'
|
153
|
+
'Array'
|
154
|
+
when 'object'
|
155
|
+
'Hash'
|
158
156
|
end
|
159
157
|
|
160
158
|
signature_params << "#{body_name}:"
|
161
159
|
raw_call_params << "#{body_name}: #{body_name}"
|
162
|
-
param_tags += ["# @param #{body_name} [#{body_type}] #{body_param[
|
160
|
+
param_tags += ["# @param #{body_name} [#{body_type}] #{body_param['description']}"]
|
163
161
|
end
|
164
162
|
|
165
163
|
operation[:query]&.each do |p|
|
166
|
-
p_tag = "# @param #{p[
|
167
|
-
p_tag += (p[
|
168
|
-
p_tag += ". Must be one of: #{p[
|
169
|
-
p_str = if p[
|
170
|
-
"#{p[
|
171
|
-
elsif p[
|
172
|
-
"#{p[
|
173
|
-
elsif !p[
|
174
|
-
"#{p[
|
164
|
+
p_tag = "# @param #{p['name']} [#{p['type'].capitalize}] "
|
165
|
+
p_tag += (p['description']).to_s
|
166
|
+
p_tag += ". Must be one of: #{p['enum'].map { |e| "`#{e}`" }.join(', ')}" if p['enum']
|
167
|
+
p_str = if p['default'] && p['type'] == 'integer'
|
168
|
+
"#{p['name']}: #{p['default']}"
|
169
|
+
elsif p['default'] && p['type'] == 'string'
|
170
|
+
"#{p['name']}: \"#{p['default']}\""
|
171
|
+
elsif !p['required']
|
172
|
+
"#{p['name']}: nil"
|
175
173
|
else
|
176
|
-
"#{p[
|
174
|
+
"#{p['name']}:"
|
177
175
|
end
|
178
176
|
signature_params << p_str
|
179
|
-
raw_call_params << "#{p[
|
177
|
+
raw_call_params << "#{p['name']}: #{p['name']}"
|
180
178
|
param_tags << p_tag
|
181
179
|
end
|
182
180
|
|
@@ -186,10 +184,10 @@ task :generate do
|
|
186
184
|
raw_call_params += %w[headers params].map do |p|
|
187
185
|
"#{p}: #{p}"
|
188
186
|
end
|
189
|
-
param_tags <<
|
187
|
+
param_tags << '# @param params [Hash] Additional query string parameters'
|
190
188
|
|
191
189
|
param_tags += [
|
192
|
-
|
190
|
+
'# @param headers [Hash] Additional headers'
|
193
191
|
]
|
194
192
|
description += "#\n"
|
195
193
|
description += param_tags.join("\n")
|
@@ -197,18 +195,18 @@ task :generate do
|
|
197
195
|
|
198
196
|
description += "#\n"
|
199
197
|
raise_tags = operation[:errors].map do |(e, v)|
|
200
|
-
"# @raise [#{error_mapping[e.to_i]}] #{v[
|
198
|
+
"# @raise [#{error_mapping[e.to_i]}] #{v['description']}"
|
201
199
|
end
|
202
200
|
description += raise_tags.join("\n")
|
203
201
|
description += "\n"
|
204
202
|
|
205
203
|
description += "#\n"
|
206
204
|
description += "# @see https://esi.evetech.net/ui/#/#{operation[:tag]}/#{operation[:name]}"
|
207
|
-
description.gsub!(/^$\n/m,
|
205
|
+
description.gsub!(/^$\n/m, '')
|
208
206
|
|
209
|
-
signature = "(#{signature_params.join(
|
210
|
-
raw_call = "(#{raw_call_params.join(
|
211
|
-
path_parts = operation[:path].split(
|
207
|
+
signature = "(#{signature_params.join(', ')})"
|
208
|
+
raw_call = "(#{raw_call_params.join(', ')})"
|
209
|
+
path_parts = operation[:path].split('/')
|
212
210
|
path_parts.map! do |p|
|
213
211
|
if p =~ /\{\w+\}/
|
214
212
|
"##{p}"
|
@@ -216,18 +214,18 @@ task :generate do
|
|
216
214
|
p
|
217
215
|
end
|
218
216
|
end
|
219
|
-
path = "#{path_parts.join(
|
217
|
+
path = "#{path_parts.join('/')}/"
|
220
218
|
|
221
219
|
http_call_params = %w[headers params].map { |p| "#{p}: #{p}" }
|
222
|
-
http_call_params << ("payload: #{body_param[
|
220
|
+
http_call_params << ("payload: #{body_param['name']}" if operation[:body])
|
223
221
|
|
224
222
|
params_merge = if operation[:query].any?
|
225
|
-
"params.merge!(#{operation[:query].map { |q| "'#{q[
|
223
|
+
"params.merge!(#{operation[:query].map { |q| "'#{q['name']}' => #{q['name']}" }.join(', ')})"
|
226
224
|
else
|
227
|
-
|
225
|
+
''
|
228
226
|
end
|
229
227
|
|
230
|
-
http_call = "#{operation[:method]}(\"#{path}\", #{http_call_params.join(
|
228
|
+
http_call = "#{operation[:method]}(\"#{path}\", #{http_call_params.join(', ')})"
|
231
229
|
|
232
230
|
alias_methods = if method_aliases[method_name]
|
233
231
|
Array(method_aliases[method_name]).sort.map do |alias_name|
|
@@ -239,7 +237,7 @@ task :generate do
|
|
239
237
|
alias_methods << "alias_method :#{operation[:name]}, :#{method_name}" unless operation[:name] == method_name
|
240
238
|
alias_methods = alias_methods.join("\n")
|
241
239
|
|
242
|
-
if operation[:responses][
|
240
|
+
if operation[:responses]['200'] && operation[:responses]['200']['headers'] && operation[:responses]['200']['headers'].key?('X-Pages')
|
243
241
|
a << <<~METHOD_DEFINITION
|
244
242
|
#{description}
|
245
243
|
def #{method_name}#{signature}
|
@@ -258,7 +256,7 @@ task :generate do
|
|
258
256
|
a << <<~METHOD_DEFINITION
|
259
257
|
#{description}
|
260
258
|
def #{method_name}#{signature}
|
261
|
-
#{method_name}_raw#{raw_call}
|
259
|
+
parse_response(#{method_name}_raw#{raw_call})
|
262
260
|
end
|
263
261
|
#{alias_methods}
|
264
262
|
|
@@ -286,43 +284,43 @@ task :generate do
|
|
286
284
|
|
287
285
|
File.write(File.join("lib/esi/client/#{lib_filename}"), lib_content)
|
288
286
|
|
289
|
-
spec_filename = "#{tag.gsub(/ /,
|
287
|
+
spec_filename = "#{tag.gsub(/ /, '_').underscore}_spec.rb"
|
290
288
|
spec_path = File.join("spec/lib/esi/client/#{spec_filename}")
|
291
289
|
|
292
290
|
describe_blocks = operations.sort_by { |(k, _v)| k }.each_with_object([]) do |(method_name, operation), a|
|
293
|
-
success_path = operation[:path].gsub(/\{\w+\}/,
|
294
|
-
success_response = operation[:responses].find { |(k, _)| k.start_with?(
|
291
|
+
success_path = operation[:path].gsub(/\{\w+\}/, '1234567890')
|
292
|
+
success_response = operation[:responses].find { |(k, _)| k.start_with?('20') }
|
295
293
|
success_code = success_response.first
|
296
294
|
success_desc = success_response.last
|
297
295
|
|
298
296
|
success_response_body = case success_code
|
299
|
-
when
|
300
|
-
|
297
|
+
when '204'
|
298
|
+
'nil'
|
301
299
|
else
|
302
|
-
success_desc[
|
300
|
+
success_desc['examples']['application/json'].inspect
|
303
301
|
end
|
304
302
|
|
305
|
-
success_params = operation[:params].map { |p| "#{p[
|
306
|
-
success_params += operation[:query].map { |p| "#{p[
|
303
|
+
success_params = operation[:params].map { |p| "#{p['name']}: \"1234567890\"" }
|
304
|
+
success_params += operation[:query].map { |p| "#{p['name']}: \"1234567890\"" }
|
307
305
|
|
308
306
|
if operation[:body]
|
309
307
|
body_param = operation[:body]
|
310
|
-
body_name = body_param[
|
308
|
+
body_name = body_param['name']
|
311
309
|
body_value =
|
312
|
-
case body_param[
|
313
|
-
when
|
314
|
-
|
315
|
-
when
|
310
|
+
case body_param['schema']['type']
|
311
|
+
when 'array'
|
312
|
+
'[1, 2, 3]'
|
313
|
+
when 'object'
|
316
314
|
'{ "foo" => "bar" }'
|
317
315
|
end
|
318
316
|
success_params << "#{body_name}: #{body_value}"
|
319
317
|
end
|
320
318
|
|
321
|
-
with_query = operation[:query].any? ? ".with(query: { #{operation[:query].map { |p| "#{p[
|
319
|
+
with_query = operation[:query].any? ? ".with(query: { #{operation[:query].map { |p| "#{p['name']}: \"1234567890\"" }.join(', ')} })" : ''
|
322
320
|
|
323
|
-
extra_headers = success_desc[
|
321
|
+
extra_headers = success_desc['headers'] && success_desc['headers']['X-Pages'] ? ", 'X-Pages': '1'" : ''
|
324
322
|
|
325
|
-
describe =
|
323
|
+
describe = " describe \"##{method_name}\" do\n"
|
326
324
|
describe += " context \"when the response is #{success_code}\" do\n"
|
327
325
|
describe += " let(:response) { #{success_response_body} }\n"
|
328
326
|
describe += "\n"
|
@@ -331,33 +329,10 @@ task :generate do
|
|
331
329
|
describe += " end\n"
|
332
330
|
describe += "\n"
|
333
331
|
describe += " it \"returns the response\" do\n"
|
334
|
-
describe += " expect(client.#{method_name}(#{success_params.join(
|
332
|
+
describe += " expect(client.#{method_name}(#{success_params.join(', ')})).to eq(response)\n"
|
335
333
|
describe += " end\n"
|
336
334
|
describe += " end\n"
|
337
|
-
|
338
|
-
describe += "\n"
|
339
|
-
|
340
|
-
error_contexts = operation[:errors].map do |(code, error)|
|
341
|
-
next if %w[502 503 504].include?(code)
|
342
|
-
|
343
|
-
error_response_body = error["examples"]["application/json"].inspect
|
344
|
-
|
345
|
-
context = " context \"when the response is #{code}\" do\n"
|
346
|
-
context += " let(:response) { #{error_response_body} }\n"
|
347
|
-
context += "\n"
|
348
|
-
context += " before do\n"
|
349
|
-
context += " stub_request(:#{operation[:method]}, \"https://esi.evetech.net/latest#{success_path}\")#{with_query}.to_return(body: response.to_json, status: #{code}, headers: { 'Content-Type': 'application/json' })\n"
|
350
|
-
context += " end\n"
|
351
|
-
context += "\n"
|
352
|
-
context += " it \"raises a #{error_mapping[code.to_i]} error\" do\n"
|
353
|
-
context += " expect { client.#{method_name}(#{success_params.join(", ")}) }.to raise_error(#{error_mapping[code.to_i]})\n"
|
354
|
-
context += " end\n"
|
355
|
-
"#{context} end\n"
|
356
|
-
end
|
357
|
-
|
358
|
-
describe += error_contexts.join("\n")
|
359
|
-
|
360
|
-
describe += " end"
|
335
|
+
describe += ' end'
|
361
336
|
a << describe
|
362
337
|
end
|
363
338
|
|
@@ -365,22 +340,14 @@ task :generate do
|
|
365
340
|
# frozen_string_literal: true
|
366
341
|
|
367
342
|
RSpec.describe ESI::Client::#{module_name}, type: :stub do
|
368
|
-
subject(:client) { ESI::Client.new(user_agent: \"esi-sdk-ruby Tests/1.0; +(https://github.com/bokoboshahni/esi-sdk-ruby)\") }
|
343
|
+
subject(:client) { ESI::Client.new(retries: 2, user_agent: \"esi-sdk-ruby Tests/1.0; +(https://github.com/bokoboshahni/esi-sdk-ruby)\") }
|
369
344
|
|
370
345
|
#{describe_blocks.join("\n\n")}
|
371
346
|
end
|
372
347
|
SPEC_FILE
|
373
348
|
|
374
349
|
File.write(spec_path, spec_content)
|
375
|
-
|
376
|
-
requires << "require_relative \"./client/#{lib_filename.gsub(/\.rb/, "")}\""
|
377
|
-
includes << "include ESI::Client::#{module_name}"
|
378
|
-
end
|
379
|
-
|
380
|
-
at_exit do
|
381
|
-
puts requires
|
382
|
-
puts includes
|
383
350
|
end
|
384
351
|
|
385
|
-
Rake::Task[
|
352
|
+
Rake::Task['rubocop:auto_correct'].invoke
|
386
353
|
end
|
data/bin/console
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require
|
5
|
-
require
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'esi-sdk'
|
6
6
|
|
7
7
|
# You can add fixtures and/or initialization code here to make experimenting
|
8
8
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -11,5 +11,5 @@ require "esi-sdk"
|
|
11
11
|
# require "pry"
|
12
12
|
# Pry.start
|
13
13
|
|
14
|
-
require
|
14
|
+
require 'irb'
|
15
15
|
IRB.start(__FILE__)
|