apipie-rails 0.8.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rubocop-challenger.yml +28 -0
  3. data/.gitignore +1 -0
  4. data/.rubocop.yml +37 -0
  5. data/.rubocop_todo.yml +2001 -0
  6. data/CHANGELOG.md +24 -0
  7. data/README.rst +45 -2
  8. data/Rakefile +0 -5
  9. data/apipie-rails.gemspec +11 -7
  10. data/lib/apipie/dsl_definition.rb +3 -3
  11. data/lib/apipie/extractor/writer.rb +2 -2
  12. data/lib/apipie/generator/generator.rb +2 -0
  13. data/lib/apipie/generator/swagger/swagger.rb +2 -0
  14. data/lib/apipie/generator/swagger/type.rb +16 -0
  15. data/lib/apipie/generator/swagger/type_extractor.rb +70 -0
  16. data/lib/apipie/generator/swagger/warning.rb +77 -0
  17. data/lib/apipie/generator/swagger/warning_writer.rb +48 -0
  18. data/lib/apipie/method_description/api.rb +12 -0
  19. data/lib/apipie/method_description/apis_service.rb +82 -0
  20. data/lib/apipie/method_description.rb +1 -46
  21. data/lib/apipie/param_description.rb +1 -1
  22. data/lib/apipie/swagger_generator.rb +76 -81
  23. data/lib/apipie/validator.rb +13 -0
  24. data/lib/apipie/version.rb +1 -1
  25. data/lib/apipie-rails.rb +9 -1
  26. data/lib/generators/apipie/install/install_generator.rb +1 -1
  27. data/lib/generators/apipie/views_generator.rb +1 -1
  28. data/lib/tasks/apipie.rake +2 -2
  29. data/spec/controllers/included_param_group_controller_spec.rb +13 -0
  30. data/spec/dummy/Rakefile +1 -1
  31. data/spec/dummy/app/controllers/included_param_group_controller.rb +19 -0
  32. data/spec/dummy/app/helpers/random_param_group.rb +8 -0
  33. data/spec/dummy/components/test_engine/test_engine.gemspec +1 -1
  34. data/spec/dummy/config/application.rb +1 -1
  35. data/spec/dummy/config/boot.rb +2 -2
  36. data/spec/dummy/config/environment.rb +1 -1
  37. data/spec/dummy/config/routes.rb +1 -0
  38. data/spec/dummy/config.ru +1 -1
  39. data/spec/dummy/script/rails +2 -2
  40. data/spec/lib/application_spec.rb +1 -1
  41. data/spec/lib/extractor/writer_spec.rb +7 -5
  42. data/spec/lib/generator/swagger/type_extractor_spec.rb +61 -0
  43. data/spec/lib/generator/swagger/warning_spec.rb +51 -0
  44. data/spec/lib/generator/swagger/warning_writer_spec.rb +59 -0
  45. data/spec/lib/method_description/apis_service_spec.rb +60 -0
  46. data/spec/lib/param_description_spec.rb +18 -0
  47. data/spec/lib/rake_spec.rb +1 -1
  48. data/spec/lib/swagger/rake_swagger_spec.rb +4 -4
  49. data/spec/spec_helper.rb +8 -4
  50. data/spec/support/custom_bool_validator.rb +17 -0
  51. metadata +49 -30
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe Apipie::MethodDescription::ApisService do
4
+ let(:resource) {}
5
+ let(:controller_action) {}
6
+ let(:api_args) { [] }
7
+ let(:dsl) { { api_args: api_args } }
8
+ let(:service) { described_class.new(resource, controller_action, dsl) }
9
+
10
+ describe '#call' do
11
+ subject { service.call }
12
+
13
+ it { is_expected.to eq(api_args) }
14
+
15
+ context 'when api_from_routes is given' do
16
+ let(:controller) { UsersController }
17
+ let(:controller_action) { :show }
18
+ let(:resource) { Apipie::ResourceDescription.new(controller, 'dummy') }
19
+ let(:short_description) { 'Short description' }
20
+
21
+ let(:dsl) do
22
+ super().merge({
23
+ api_from_routes: {
24
+ desc: short_description,
25
+ options: {}
26
+ }
27
+ })
28
+ end
29
+
30
+ it 'returns an array of Apipie::MethodDescription::Api' do
31
+ expect(subject).to all(be_an_instance_of(Apipie::MethodDescription::Api))
32
+ expect(subject.count).to eq(1)
33
+ end
34
+
35
+ context 'Apipie::MethodDescription::Api' do
36
+ subject { service.call.first }
37
+
38
+ it 'has the correct values' do
39
+ expect(subject.short_description).to eq(short_description)
40
+ expect(subject.path).to eq('/api/users/:id')
41
+ expect(subject.from_routes).to eq(true)
42
+ expect(subject.options).to eq({ from_routes: true })
43
+ end
44
+
45
+ context "when it's from concern" do
46
+ let(:controller) { ConcernsController }
47
+ let(:controller_action) { :custom }
48
+ let(:dsl) { super().merge(from_concern: true ) }
49
+
50
+ it 'has the correct values' do
51
+ expect(subject.short_description).to eq(short_description)
52
+ expect(subject.path).to eq('/api/concern_resources/custom')
53
+ expect(subject.from_routes).to eq(true)
54
+ expect(subject.options).to eq({ from_routes: true })
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -157,11 +157,29 @@ describe Apipie::ParamDescription do
157
157
  expect { Apipie::ParamDescription.new(method_desc, :param, :boolean).validate(false) }.to_not raise_error
158
158
  end
159
159
 
160
+ it "should still not throw an exception when passed false with explicit allow_blank: false" do
161
+ expect { Apipie::ParamDescription.new(method_desc, :param, :boolean, allow_blank: false).validate(false) }.to_not raise_error
162
+ end
163
+
160
164
  it "should throw an exception when passed an empty value" do
161
165
  expect { Apipie::ParamDescription.new(method_desc, :param, :boolean).validate('') }.to raise_error(Apipie::ParamInvalid)
162
166
  end
163
167
  end
164
168
 
169
+ context "when the parameter is a custom type with ignore_allow_blank? returning true" do
170
+ it "should not throw an exception when passed a blank but valid value" do
171
+ expect { Apipie::ParamDescription.new(method_desc, :param, :custom_bool).validate(false) }.to_not raise_error
172
+ end
173
+
174
+ it "should still not throw an exception when passed false with explicit allow_blank: false" do
175
+ expect { Apipie::ParamDescription.new(method_desc, :param, :custom_bool, allow_blank: false).validate(false) }.to_not raise_error
176
+ end
177
+
178
+ it "should throw an exception when passed an invalid but blank value" do
179
+ expect { Apipie::ParamDescription.new(method_desc, :param, :custom_bool).validate("") }.to raise_error(Apipie::ParamInvalid)
180
+ end
181
+ end
182
+
165
183
  context 'when the parameter is a string' do
166
184
  context 'when allow_blank is specified as true' do
167
185
  it "should throw an exception when passed an empty value" do
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe 'rake tasks' do
4
4
  include_context "rake"
5
5
 
6
- let(:doc_path) { "user_specified_doc_path" }
6
+ let(:doc_path) { 'tmp/user_specified_doc_path' }
7
7
 
8
8
  before do
9
9
  Apipie.configuration.doc_path = doc_path
@@ -1,14 +1,14 @@
1
1
  require 'spec_helper'
2
2
  require "json-schema"
3
3
 
4
- require File.expand_path("../../../dummy/app/controllers/twitter_example_controller.rb", __FILE__)
5
- require File.expand_path("../../../dummy/app/controllers/users_controller.rb", __FILE__)
6
- require File.expand_path("../../../dummy/app/controllers/pets_controller.rb", __FILE__)
4
+ require File.expand_path('../../dummy/app/controllers/twitter_example_controller.rb', __dir__)
5
+ require File.expand_path('../../dummy/app/controllers/users_controller.rb', __dir__)
6
+ require File.expand_path('../../dummy/app/controllers/pets_controller.rb', __dir__)
7
7
 
8
8
  describe 'rake tasks' do
9
9
  include_context "rake"
10
10
 
11
- let(:doc_path) { "user_specified_doc_path" }
11
+ let(:doc_path) { 'tmp/user_specified_doc_path' }
12
12
 
13
13
  before do
14
14
  Apipie.configuration.doc_path = doc_path
data/spec/spec_helper.rb CHANGED
@@ -1,9 +1,13 @@
1
1
  require 'rubygems'
2
2
  require 'bundler/setup'
3
3
 
4
+ require 'simplecov'
5
+ SimpleCov.minimum_coverage 89
6
+ SimpleCov.start
7
+
4
8
  ENV["RAILS_ENV"] ||= 'test'
5
- APIPIE_ROOT = File.expand_path('../..', __FILE__)
6
- require File.expand_path("../dummy/config/environment", __FILE__)
9
+ APIPIE_ROOT = File.expand_path('..', __dir__)
10
+ require File.expand_path('dummy/config/environment', __dir__)
7
11
 
8
12
  require 'rspec/rails'
9
13
 
@@ -51,7 +55,7 @@ end
51
55
 
52
56
  # Requires supporting ruby files with custom matchers and macros, etc,
53
57
  # in spec/support/ and its subdirectories.
54
- Dir[File.expand_path("../support/**/*.rb", __FILE__)].each {|f| require f}
58
+ Dir[File.expand_path('support/**/*.rb', __dir__)].each {|f| require f}
55
59
 
56
60
  RSpec.configure do |config|
57
61
 
@@ -82,4 +86,4 @@ RSpec.configure do |config|
82
86
  config.infer_spec_type_from_file_location!
83
87
  end
84
88
 
85
- require 'action_controller/test_case.rb'
89
+ require 'action_controller/test_case'
@@ -0,0 +1,17 @@
1
+ class CustomBoolValidator < Apipie::Validator::BaseValidator
2
+ def validate(value)
3
+ value.in?([true, false])
4
+ end
5
+
6
+ def self.build(param_description, argument, options, block)
7
+ new(param_description) if argument == :custom_bool
8
+ end
9
+
10
+ def description
11
+ "Must be a boolean."
12
+ end
13
+
14
+ def ignore_allow_blank?
15
+ true
16
+ end
17
+ end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apipie-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Pokorny
8
8
  - Ivan Necas
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-05-26 00:00:00.000000000 Z
12
+ date: 2023-01-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -40,21 +40,21 @@ dependencies:
40
40
  - !ruby/object:Gem::Version
41
41
  version: '5.0'
42
42
  - !ruby/object:Gem::Dependency
43
- name: rspec-rails
43
+ name: maruku
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - "~>"
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
- version: '3.0'
48
+ version: '0'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - "~>"
53
+ - - ">="
54
54
  - !ruby/object:Gem::Version
55
- version: '3.0'
55
+ version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
- name: sqlite3
57
+ name: RedCloth
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - ">="
@@ -68,35 +68,35 @@ dependencies:
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
70
  - !ruby/object:Gem::Dependency
71
- name: minitest
71
+ name: json-schema
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - ">="
74
+ - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: '0'
76
+ version: '2.8'
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - ">="
81
+ - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: '0'
83
+ version: '2.8'
84
84
  - !ruby/object:Gem::Dependency
85
- name: maruku
85
+ name: rspec-rails
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - ">="
88
+ - - "~>"
89
89
  - !ruby/object:Gem::Version
90
- version: '0'
90
+ version: '3.0'
91
91
  type: :development
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
- - - ">="
95
+ - - "~>"
96
96
  - !ruby/object:Gem::Version
97
- version: '0'
97
+ version: '3.0'
98
98
  - !ruby/object:Gem::Dependency
99
- name: RedCloth
99
+ name: rake
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
102
  - - ">="
@@ -110,7 +110,7 @@ dependencies:
110
110
  - !ruby/object:Gem::Version
111
111
  version: '0'
112
112
  - !ruby/object:Gem::Dependency
113
- name: rake
113
+ name: rubocop_challenger
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
116
  - - ">="
@@ -124,7 +124,7 @@ dependencies:
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  - !ruby/object:Gem::Dependency
127
- name: rdoc
127
+ name: simplecov
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  requirements:
130
130
  - - ">="
@@ -138,19 +138,19 @@ dependencies:
138
138
  - !ruby/object:Gem::Version
139
139
  version: '0'
140
140
  - !ruby/object:Gem::Dependency
141
- name: json-schema
141
+ name: sqlite3
142
142
  requirement: !ruby/object:Gem::Requirement
143
143
  requirements:
144
- - - "~>"
144
+ - - ">="
145
145
  - !ruby/object:Gem::Version
146
- version: '2.8'
146
+ version: '0'
147
147
  type: :development
148
148
  prerelease: false
149
149
  version_requirements: !ruby/object:Gem::Requirement
150
150
  requirements:
151
- - - "~>"
151
+ - - ">="
152
152
  - !ruby/object:Gem::Version
153
- version: '2.8'
153
+ version: '0'
154
154
  description: Rails REST API documentation tool
155
155
  email:
156
156
  - pajkycz@gmail.com
@@ -160,8 +160,11 @@ extensions: []
160
160
  extra_rdoc_files: []
161
161
  files:
162
162
  - ".github/workflows/build.yml"
163
+ - ".github/workflows/rubocop-challenger.yml"
163
164
  - ".gitignore"
164
165
  - ".rspec"
166
+ - ".rubocop.yml"
167
+ - ".rubocop_todo.yml"
165
168
  - APACHE-LICENSE-2.0
166
169
  - CHANGELOG.md
167
170
  - MIT-LICENSE
@@ -231,9 +234,17 @@ files:
231
234
  - lib/apipie/extractor/collector.rb
232
235
  - lib/apipie/extractor/recorder.rb
233
236
  - lib/apipie/extractor/writer.rb
237
+ - lib/apipie/generator/generator.rb
238
+ - lib/apipie/generator/swagger/swagger.rb
239
+ - lib/apipie/generator/swagger/type.rb
240
+ - lib/apipie/generator/swagger/type_extractor.rb
241
+ - lib/apipie/generator/swagger/warning.rb
242
+ - lib/apipie/generator/swagger/warning_writer.rb
234
243
  - lib/apipie/helpers.rb
235
244
  - lib/apipie/markup.rb
236
245
  - lib/apipie/method_description.rb
246
+ - lib/apipie/method_description/api.rb
247
+ - lib/apipie/method_description/apis_service.rb
237
248
  - lib/apipie/middleware/checksum_in_headers.rb
238
249
  - lib/apipie/param_description.rb
239
250
  - lib/apipie/railtie.rb
@@ -264,6 +275,7 @@ files:
264
275
  - spec/controllers/apipies_controller_spec.rb
265
276
  - spec/controllers/concerns_controller_spec.rb
266
277
  - spec/controllers/extended_controller_spec.rb
278
+ - spec/controllers/included_param_group_controller_spec.rb
267
279
  - spec/controllers/memes_controller_spec.rb
268
280
  - spec/controllers/users_controller_spec.rb
269
281
  - spec/dummy/Rakefile
@@ -279,6 +291,7 @@ files:
279
291
  - spec/dummy/app/controllers/extended_controller.rb
280
292
  - spec/dummy/app/controllers/extending_concern.rb
281
293
  - spec/dummy/app/controllers/files_controller.rb
294
+ - spec/dummy/app/controllers/included_param_group_controller.rb
282
295
  - spec/dummy/app/controllers/overridden_concerns_controller.rb
283
296
  - spec/dummy/app/controllers/pets_controller.rb
284
297
  - spec/dummy/app/controllers/pets_using_auto_views_controller.rb
@@ -288,6 +301,7 @@ files:
288
301
  - spec/dummy/app/controllers/tagged_dogs_controller.rb
289
302
  - spec/dummy/app/controllers/twitter_example_controller.rb
290
303
  - spec/dummy/app/controllers/users_controller.rb
304
+ - spec/dummy/app/helpers/random_param_group.rb
291
305
  - spec/dummy/app/views/layouts/application.html.erb
292
306
  - spec/dummy/components/test_engine/Gemfile
293
307
  - spec/dummy/components/test_engine/app/controllers/test_engine/application_controller.rb
@@ -326,6 +340,10 @@ files:
326
340
  - spec/lib/extractor/middleware_spec.rb
327
341
  - spec/lib/extractor/writer_spec.rb
328
342
  - spec/lib/file_handler_spec.rb
343
+ - spec/lib/generator/swagger/type_extractor_spec.rb
344
+ - spec/lib/generator/swagger/warning_spec.rb
345
+ - spec/lib/generator/swagger/warning_writer_spec.rb
346
+ - spec/lib/method_description/apis_service_spec.rb
329
347
  - spec/lib/method_description_spec.rb
330
348
  - spec/lib/param_description_spec.rb
331
349
  - spec/lib/param_group_spec.rb
@@ -338,11 +356,12 @@ files:
338
356
  - spec/lib/validator_spec.rb
339
357
  - spec/lib/validators/array_validator_spec.rb
340
358
  - spec/spec_helper.rb
359
+ - spec/support/custom_bool_validator.rb
341
360
  - spec/support/rake.rb
342
361
  homepage: http://github.com/Apipie/apipie-rails
343
362
  licenses: []
344
363
  metadata: {}
345
- post_install_message:
364
+ post_install_message:
346
365
  rdoc_options: []
347
366
  require_paths:
348
367
  - lib
@@ -357,8 +376,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
357
376
  - !ruby/object:Gem::Version
358
377
  version: '0'
359
378
  requirements: []
360
- rubygems_version: 3.2.33
361
- signing_key:
379
+ rubygems_version: 3.3.26
380
+ signing_key:
362
381
  specification_version: 4
363
382
  summary: Rails REST API documentation tool
364
383
  test_files: []