apipie-rails 1.2.3 → 1.4.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/.github/workflows/build.yml +5 -4
- data/.github/workflows/rubocop-challenger.yml +1 -3
- data/.github/workflows/rubocop.yml +1 -1
- data/.rubocop_todo.yml +22 -28
- data/CHANGELOG.md +22 -0
- data/Gemfile +2 -3
- data/README.md +2088 -0
- data/apipie-rails.gemspec +7 -1
- data/app/views/apipie/apipies/_method_detail.erb +2 -0
- data/app/views/apipie/apipies/_params.html.erb +1 -0
- data/app/views/apipie/apipies/_params_plain.html.erb +1 -0
- data/config/locales/en.yml +1 -0
- data/config/locales/ko.yml +1 -0
- data/lib/apipie/application.rb +1 -1
- data/lib/apipie/dsl_definition.rb +10 -11
- data/lib/apipie/errors.rb +1 -1
- data/lib/apipie/extractor/collector.rb +1 -1
- data/lib/apipie/extractor/recorder.rb +1 -1
- data/lib/apipie/extractor/writer.rb +2 -2
- data/lib/apipie/generator/swagger/config.rb +1 -1
- data/lib/apipie/generator/swagger/method_description/parameters_service.rb +1 -1
- data/lib/apipie/generator/swagger/method_description/response_service.rb +14 -1
- data/lib/apipie/generator/swagger/param_description/builder.rb +9 -0
- data/lib/apipie/generator/swagger/param_description/type.rb +15 -2
- data/lib/apipie/generator/swagger/resource_description_collection.rb +2 -2
- data/lib/apipie/param_description.rb +1 -1
- data/lib/apipie/response_description.rb +34 -9
- data/lib/apipie/response_description_adapter.rb +3 -3
- data/lib/apipie/routes_formatter.rb +1 -1
- data/lib/apipie/static_dispatcher.rb +7 -1
- data/lib/apipie/version.rb +1 -1
- data/lib/tasks/apipie.rake +3 -3
- data/rel-eng/gem_release.ipynb +5 -5
- data/spec/controllers/users_controller_spec.rb +1 -1
- data/spec/dummy/app/controllers/api/v2/empty_middle_controller.rb +1 -1
- data/spec/dummy/app/controllers/pets_controller.rb +2 -2
- data/spec/dummy/app/controllers/twitter_example_controller.rb +3 -3
- data/spec/lib/apipie/apipies_controller_spec.rb +1 -1
- data/spec/lib/apipie/extractor_spec.rb +1 -1
- data/spec/lib/apipie/file_handler_spec.rb +1 -1
- data/spec/lib/apipie/generator/swagger/method_description/response_schema_service_spec.rb +6 -6
- data/spec/lib/apipie/generator/swagger/method_description/response_service_spec.rb +62 -0
- data/spec/lib/apipie/generator/swagger/param_description/builder_spec.rb +14 -2
- data/spec/lib/apipie/generator/swagger/param_description/type_spec.rb +6 -1
- data/spec/lib/apipie/param_description_spec.rb +1 -1
- data/spec/lib/apipie/response_description/response_object_spec.rb +22 -0
- data/spec/lib/apipie/response_description_spec.rb +56 -0
- data/spec/lib/apipie/swagger_generator_spec.rb +2 -2
- data/spec/lib/swagger/rake_swagger_spec.rb +6 -1
- data/spec/lib/swagger/swagger_dsl_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- metadata +12 -6
- data/README.rst +0 -1965
@@ -19,8 +19,8 @@ describe Apipie::Generator::Swagger::MethodDescription::ResponseSchemaService do
|
|
19
19
|
|
20
20
|
let(:response_description_dsl) do
|
21
21
|
proc do
|
22
|
-
property :a_number, Integer
|
23
|
-
property :an_optional_number, Integer, required: false
|
22
|
+
property :a_number, Integer, example: 1
|
23
|
+
property :an_optional_number, Integer, required: false, example: 2
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -56,10 +56,10 @@ describe Apipie::Generator::Swagger::MethodDescription::ResponseSchemaService do
|
|
56
56
|
expect(properties).to eq(
|
57
57
|
{
|
58
58
|
a_number: {
|
59
|
-
type: 'number', required: true
|
59
|
+
type: 'number', required: true, example: 1
|
60
60
|
},
|
61
61
|
an_optional_number: {
|
62
|
-
type: 'number'
|
62
|
+
type: 'number', example: 2
|
63
63
|
}
|
64
64
|
}
|
65
65
|
)
|
@@ -72,10 +72,10 @@ describe Apipie::Generator::Swagger::MethodDescription::ResponseSchemaService do
|
|
72
72
|
expect(properties).to eq(
|
73
73
|
{
|
74
74
|
a_number: {
|
75
|
-
type: %w[number null], required: true
|
75
|
+
type: %w[number null], required: true, example: 1
|
76
76
|
},
|
77
77
|
an_optional_number: {
|
78
|
-
type: %w[number null]
|
78
|
+
type: %w[number null], example: 2
|
79
79
|
}
|
80
80
|
}
|
81
81
|
)
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Apipie::Generator::Swagger::MethodDescription::ResponseService do
|
4
|
+
let(:http_method) { nil }
|
5
|
+
let(:language) { :en }
|
6
|
+
let(:dsl_data) { ActionController::Base.send(:_apipie_dsl_data_init) }
|
7
|
+
|
8
|
+
let(:method_description) do
|
9
|
+
Apipie::Generator::Swagger::MethodDescription::Decorator.new(
|
10
|
+
Apipie::MethodDescription.new(
|
11
|
+
'create',
|
12
|
+
Apipie::ResourceDescription.new(ApplicationController, 'pets'),
|
13
|
+
dsl_data
|
14
|
+
)
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
let(:returns) { [] }
|
19
|
+
|
20
|
+
let(:service) do
|
21
|
+
described_class.new(
|
22
|
+
method_description,
|
23
|
+
http_method: http_method,
|
24
|
+
language: language
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#call' do
|
29
|
+
describe 'headers' do
|
30
|
+
subject(:headers) { service.call[status_code][:headers] }
|
31
|
+
|
32
|
+
let(:status_code) { 200 }
|
33
|
+
|
34
|
+
it { is_expected.to be_blank }
|
35
|
+
|
36
|
+
context 'when headers exists' do
|
37
|
+
let(:dsl_data) { super().merge({ returns: returns }) }
|
38
|
+
let(:returns) { { status_code => [{}, nil, returns_dsl, nil] } }
|
39
|
+
|
40
|
+
let(:returns_dsl) do
|
41
|
+
proc do
|
42
|
+
header 'link', String, 'Relative links'
|
43
|
+
header 'Current-Page', Integer, 'The current page'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'returns the correct format headers' do
|
48
|
+
expect(headers).to eq({
|
49
|
+
'link' => {
|
50
|
+
description: 'Relative links',
|
51
|
+
type: 'string'
|
52
|
+
},
|
53
|
+
'Current-Page' => {
|
54
|
+
description: 'The current page',
|
55
|
+
type: 'integer'
|
56
|
+
}
|
57
|
+
})
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -118,7 +118,7 @@ describe Apipie::Generator::Swagger::ParamDescription::Builder do
|
|
118
118
|
{ required: false, default_value: nil }
|
119
119
|
end
|
120
120
|
|
121
|
-
it '
|
121
|
+
it 'does not warn' do
|
122
122
|
expect { subject }.not_to output(
|
123
123
|
/is optional but default value is not specified/
|
124
124
|
).to_stderr
|
@@ -130,7 +130,7 @@ describe Apipie::Generator::Swagger::ParamDescription::Builder do
|
|
130
130
|
{ required: false, default_value: 123 }
|
131
131
|
end
|
132
132
|
|
133
|
-
it '
|
133
|
+
it 'does not warn' do
|
134
134
|
expect { subject }.not_to output(
|
135
135
|
/is optional but default value is not specified/
|
136
136
|
).to_stderr
|
@@ -200,4 +200,16 @@ describe Apipie::Generator::Swagger::ParamDescription::Builder do
|
|
200
200
|
it { is_expected.to be_present }
|
201
201
|
end
|
202
202
|
end
|
203
|
+
|
204
|
+
describe 'example' do
|
205
|
+
subject { generated_block[:example] }
|
206
|
+
|
207
|
+
it { is_expected.to be_blank }
|
208
|
+
|
209
|
+
context 'when example is assigned' do
|
210
|
+
let(:base_param_description_options) { { example: 'example' } }
|
211
|
+
|
212
|
+
it { is_expected.to eq('example') }
|
213
|
+
end
|
214
|
+
end
|
203
215
|
end
|
@@ -115,10 +115,15 @@ describe Apipie::Generator::Swagger::ParamDescription::Type do
|
|
115
115
|
it 'returns the reference' do
|
116
116
|
expect(subject).to eq({ '$ref' => reference })
|
117
117
|
end
|
118
|
-
|
119
118
|
end
|
120
119
|
end
|
121
120
|
|
121
|
+
context 'of a Swagger type' do
|
122
|
+
let(:validator_options) { { of: Integer } }
|
123
|
+
|
124
|
+
it { is_expected.to eq({ type: 'integer' }) }
|
125
|
+
end
|
126
|
+
|
122
127
|
describe 'enum' do
|
123
128
|
subject { items[:enum] }
|
124
129
|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Apipie::ResponseDescription::ResponseObject do
|
4
|
+
describe '#header' do
|
5
|
+
let(:response_object) { described_class.new(nil, nil, nil, nil) }
|
6
|
+
let(:name) { 'Current-Page' }
|
7
|
+
let(:description) { 'The current page in the pagination' }
|
8
|
+
|
9
|
+
before { response_object.header(name, String, description) }
|
10
|
+
|
11
|
+
it 'adds it to the headers' do
|
12
|
+
expect(response_object.headers).to(
|
13
|
+
contain_exactly({
|
14
|
+
name: name,
|
15
|
+
description: description,
|
16
|
+
validator: 'string',
|
17
|
+
options: {}
|
18
|
+
})
|
19
|
+
)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Apipie::ResponseDescription do
|
4
|
+
let(:resource_description) do
|
5
|
+
Apipie::ResourceDescription.new(PetsController, 'pets')
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:method_description) do
|
9
|
+
Apipie::MethodDescription.new(
|
10
|
+
'create',
|
11
|
+
resource_description,
|
12
|
+
ActionController::Base.send(:_apipie_dsl_data_init)
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:response_description_dsl) { proc {} }
|
17
|
+
let(:options) { {} }
|
18
|
+
|
19
|
+
let(:response_description) do
|
20
|
+
described_class.new(
|
21
|
+
method_description,
|
22
|
+
204,
|
23
|
+
options,
|
24
|
+
PetsController,
|
25
|
+
response_description_dsl,
|
26
|
+
nil
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#to_json' do
|
31
|
+
let(:to_json) { response_description.to_json }
|
32
|
+
|
33
|
+
describe 'headers' do
|
34
|
+
subject(:headers) { to_json[:headers] }
|
35
|
+
|
36
|
+
it { is_expected.to be_blank }
|
37
|
+
|
38
|
+
context 'when response has headers' do
|
39
|
+
let(:response_description_dsl) do
|
40
|
+
proc do
|
41
|
+
header 'Current-Page', Integer, 'The current page in the pagination', required: true
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'returns the header' do
|
46
|
+
expect(headers).to contain_exactly({
|
47
|
+
name: 'Current-Page',
|
48
|
+
description: 'The current page in the pagination',
|
49
|
+
validator: 'integer',
|
50
|
+
options: { required: true }
|
51
|
+
})
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -7,7 +7,7 @@ describe Apipie::SwaggerGenerator do
|
|
7
7
|
|
8
8
|
let(:response_description_dsl) do
|
9
9
|
proc do
|
10
|
-
property :a_number, Integer
|
10
|
+
property :a_number, Integer, example: 1
|
11
11
|
property :an_optional_number, Integer, required: false
|
12
12
|
end
|
13
13
|
end
|
@@ -61,7 +61,7 @@ describe Apipie::SwaggerGenerator do
|
|
61
61
|
expect(properties).to eq(
|
62
62
|
{
|
63
63
|
a_number: {
|
64
|
-
type: 'number', required: true
|
64
|
+
type: 'number', required: true, example: 1
|
65
65
|
},
|
66
66
|
an_optional_number: {
|
67
67
|
type: 'number'
|
@@ -82,6 +82,10 @@ describe 'rake tasks' do
|
|
82
82
|
expect(param[field]).to eq(value)
|
83
83
|
end
|
84
84
|
|
85
|
+
def expect_response_params_def(http_method, path, response_code, param_name, field, value)
|
86
|
+
param = apidoc_swagger["paths"][path][http_method]["responses"][response_code.to_s]["schema"]["properties"][param_name]
|
87
|
+
expect(param[field]).to eq(value)
|
88
|
+
end
|
85
89
|
|
86
90
|
describe 'apipie:static_swagger_json[development,json,_tmp]' do
|
87
91
|
it "generates static swagger files for the default version of apipie docs" do
|
@@ -105,6 +109,7 @@ describe 'rake tasks' do
|
|
105
109
|
%w[finance operations sales marketing HR])
|
106
110
|
|
107
111
|
expect_tags_def("get", "/twitter_example/{id}/followers", %w[twitter_example following index search])
|
112
|
+
expect_response_params_def("get", "/pets/{id}/as_properties", 200, "pet_name", "example", "mypet")
|
108
113
|
end
|
109
114
|
|
110
115
|
it "generates a valid swagger file" do
|
@@ -146,7 +151,7 @@ describe 'rake tasks' do
|
|
146
151
|
|
147
152
|
describe 'apipie:did_swagger_change[development,form_data,_tmp]' do
|
148
153
|
it "keeps a reference file" do
|
149
|
-
expect(Pathname(ref_output).children.count).to eq(2)
|
154
|
+
expect(Pathname(ref_output).children.count).to eq(2) # one file for each language
|
150
155
|
end
|
151
156
|
end
|
152
157
|
end
|
@@ -283,7 +283,7 @@ describe "Swagger Responses" do
|
|
283
283
|
expect(schema).to have_field(:pet_id, 'number', {:description => 'id of pet'})
|
284
284
|
expect(schema).to have_field(:pet_name, 'string', {:description => 'Name of pet', :required => false})
|
285
285
|
expect(schema).to have_field(:animal_type, 'string', {:description => 'Type of pet', :enum => %w[dog cat iguana kangaroo]})
|
286
|
-
expect(schema).not_to have_field(:partial_match_allowed, 'boolean', {:required => false})
|
286
|
+
expect(schema).not_to have_field(:partial_match_allowed, 'boolean', {:required => false}) # rubocop:disable Capybara/NegationMatcher
|
287
287
|
end
|
288
288
|
|
289
289
|
it "creates a swagger definition with all input parameters" do
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apipie-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Pokorny
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2024-05-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: actionpack
|
@@ -215,7 +215,7 @@ files:
|
|
215
215
|
- MIT-LICENSE
|
216
216
|
- NOTICE
|
217
217
|
- PROPOSAL_FOR_RESPONSE_DESCRIPTIONS.md
|
218
|
-
- README.
|
218
|
+
- README.md
|
219
219
|
- Rakefile
|
220
220
|
- apipie-rails.gemspec
|
221
221
|
- app/controllers/apipie/apipies_controller.rb
|
@@ -419,6 +419,7 @@ files:
|
|
419
419
|
- spec/lib/apipie/generator/swagger/context_spec.rb
|
420
420
|
- spec/lib/apipie/generator/swagger/method_description/api_schema_service_spec.rb
|
421
421
|
- spec/lib/apipie/generator/swagger/method_description/response_schema_service_spec.rb
|
422
|
+
- spec/lib/apipie/generator/swagger/method_description/response_service_spec.rb
|
422
423
|
- spec/lib/apipie/generator/swagger/operation_id_spec.rb
|
423
424
|
- spec/lib/apipie/generator/swagger/param_description/builder_spec.rb
|
424
425
|
- spec/lib/apipie/generator/swagger/param_description/composite_spec.rb
|
@@ -442,6 +443,8 @@ files:
|
|
442
443
|
- spec/lib/apipie/param_description_spec.rb
|
443
444
|
- spec/lib/apipie/param_group_spec.rb
|
444
445
|
- spec/lib/apipie/resource_description_spec.rb
|
446
|
+
- spec/lib/apipie/response_description/response_object_spec.rb
|
447
|
+
- spec/lib/apipie/response_description_spec.rb
|
445
448
|
- spec/lib/apipie/response_does_not_match_swagger_schema_spec.rb
|
446
449
|
- spec/lib/apipie/swagger_generator_spec.rb
|
447
450
|
- spec/lib/apipie/validator_spec.rb
|
@@ -454,9 +457,12 @@ files:
|
|
454
457
|
- spec/support/custom_bool_validator.rb
|
455
458
|
- spec/support/rake.rb
|
456
459
|
- spec/test_engine/memes_controller_spec.rb
|
457
|
-
homepage:
|
460
|
+
homepage: https://github.com/Apipie/apipie-rails
|
458
461
|
licenses: []
|
459
|
-
metadata:
|
462
|
+
metadata:
|
463
|
+
bug_tracker_uri: https://github.com/Apipie/apipie-rails/issues
|
464
|
+
changelog_uri: https://github.com/Apipie/apipie-rails/blob/master/CHANGELOG.md
|
465
|
+
source_code_uri: https://github.com/Apipie/apipie-rails
|
460
466
|
post_install_message:
|
461
467
|
rdoc_options: []
|
462
468
|
require_paths:
|
@@ -472,7 +478,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
472
478
|
- !ruby/object:Gem::Version
|
473
479
|
version: '0'
|
474
480
|
requirements: []
|
475
|
-
rubygems_version: 3.
|
481
|
+
rubygems_version: 3.5.9
|
476
482
|
signing_key:
|
477
483
|
specification_version: 4
|
478
484
|
summary: Rails REST API documentation tool
|