apipie-rails 0.7.2 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c7a94176378d53856507d3df6c324e69b2637430e6d627726d344fc427e619a7
4
- data.tar.gz: 5f00ebcf9cf5fb2940e86681f2fbdb685ed215bf3708ebcc41ab0f34a0f2bab1
3
+ metadata.gz: 231e8e86bd335aa018fcd0a8bf07730dd452968bde2a9491374979ec368f2a06
4
+ data.tar.gz: 39075cddca5f3ba6ef9c412e267d10f934ea37d08696d67f5069c16eb93fd41d
5
5
  SHA512:
6
- metadata.gz: fd4340d9646496246e06454941c93ebae9039d59c0449e5b9683f01aa18cd02414ea0233f0345e09f4b4107f8daeb84387ace0af32b5e2d82cea0f6cbd57a53b
7
- data.tar.gz: 6abd0665093f3e7c9fd2d9bcf965bf85b2b4bbff937c52b317c4601898e6a71683686cdcc690f7983826db612e9f5910b55b18a011f1755f1c9b884f20681fdf
6
+ metadata.gz: c01816a4e5e254e620889e950f19bd7983b7b80d32ab8028656b2cb016cff58cd42299397f0c03b7c7e439d555c7fde6f7e1cacbbfcc9ae6115e8549c0469f80
7
+ data.tar.gz: a5d25cc68efc019d7624cf51c681fc5a7b7376615959c5f30c3858fb29e13aeccc03f113ac763b3615b0317ff29c1117ad3d003a93d26e9ca69af5e77f05a51e
@@ -26,6 +26,7 @@ jobs:
26
26
  - Gemfile.rails52 # Min ruby 2.2.2
27
27
  - Gemfile.rails60 # Min ruby 2.5.0
28
28
  - Gemfile.rails61 # Min ruby 2.5.0
29
+ - Gemfile.rails70 # Min ruby 2.7.0
29
30
  exclude:
30
31
  - gemfile: Gemfile.rails50
31
32
  ruby: 2.7
@@ -45,6 +46,8 @@ jobs:
45
46
  ruby: '3.0'
46
47
  - gemfile: Gemfile.rails52
47
48
  ruby: 3.1
49
+ - gemfile: Gemfile.rails70
50
+ ruby: 2.6
48
51
 
49
52
  env:
50
53
  BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}
data/CHANGELOG.md CHANGED
@@ -1,6 +1,17 @@
1
1
  Changelog
2
2
  ===========
3
3
 
4
+ Also deleted the `Gemfile` that was now a broken symlink.
5
+ please use `export BUNDLE_GEMFILE='gemfiles/Gemfile.rails61'; bundle exec rspec` to run the test suite
6
+
7
+ ## [v0.8.0](https://github.com/Apipie/apipie-rails/tree/v0.8.0) (2022-05-24)
8
+ [Full Changelog](https://github.com/Apipie/apipie-rails/compare/v0.7.2...v0.8.0)
9
+ * Add support for scheme definition in Swagger docs. [#710](https://github.com/Apipie/apipie-rails/pull/710) (Dan Leyden)
10
+ * Add support for Rails 7 [#760](https://github.com/Apipie/apipie-rails/pull/760) (Mathieu Jobin)
11
+ * Clean up code base, removing all trace of unsupported Rails 4.x [#752](https://github.com/Apipie/apipie-rails/pull/752) (Mathieu Jobin)
12
+ * fix: Controller resource set before version [#744](https://github.com/Apipie/apipie-rails/pull/744) (LuukvH)
13
+ * fix: enable swagger generator to add referenced schema for an array of hashes param [#689](https://github.com/Apipie/apipie-rails/pull/689) (Francis San Juan)
14
+
4
15
  ## [v0.7.2](https://github.com/Apipie/apipie-rails/tree/v0.7.2) (2022-04-19)
5
16
  [Full Changelog](https://github.com/Apipie/apipie-rails/compare/v0.7.1...v0.7.2)
6
17
  * Added Korean locale. [#480](https://github.com/Apipie/apipie-rails/pull/480) (Jaehyun Shin ) [#757](https://github.com/Apipie/apipie-rails/pull/757) (Jorge Santos)
data/README.rst CHANGED
@@ -1660,6 +1660,11 @@ There are several configuration parameters that determine the structure of the g
1660
1660
 
1661
1661
  If ``true``: the ``additional-properties: false`` field will not be included in response object descriptions
1662
1662
 
1663
+ ``config.swagger_schemes``
1664
+ An array of transport schemes that the API supports.
1665
+ This can include any combination of ``http``, ``https``, ``ws`` and ``wss``.
1666
+ By default to encourage good security practices, ``['https']`` is specified.
1667
+
1663
1668
 
1664
1669
  ``config:swagger_security_definitions``
1665
1670
  If the API requires authentication, you can specify details of the authentication mechanisms supported as a (Hash) value here.
@@ -34,7 +34,7 @@ module Apipie
34
34
 
35
35
  @language = get_language
36
36
 
37
- Apipie.load_documentation if Apipie.configuration.reload_controllers? || (Rails.version.to_i >= 4.0 && !Rails.application.config.eager_load)
37
+ Apipie.load_documentation if Apipie.configuration.reload_controllers? || !Rails.application.config.eager_load
38
38
 
39
39
  I18n.locale = @language
40
40
 
@@ -0,0 +1,17 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'actionpack', '~> 7.0.2'
6
+ gem 'activesupport', '~> 7.0.2'
7
+ gem 'mime-types', '~> 3.0'
8
+ gem 'rails-controller-testing'
9
+ gem 'rspec-rails', '~> 5.0'
10
+
11
+ # net-smtp not included by default in Ruby 3.1
12
+ # Will be fixed by https://github.com/mikel/mail/pull/1439
13
+ if Gem.ruby_version >= Gem::Version.new("3.1.0")
14
+ gem 'net-smtp', require: false
15
+ end
16
+
17
+ gem 'test_engine', path: '../spec/dummy/components/test_engine', group: :test
@@ -40,8 +40,10 @@ module Apipie
40
40
  flatten_routes = []
41
41
 
42
42
  route_set.routes.each do |route|
43
- # This is a hack to workaround a bug in apipie with Rails 4.2.5.1 or newer. See https://github.com/Apipie/apipie-rails/issues/415
44
- route_app = Rails::VERSION::STRING.to_f >= 4.2 ? route.app.app : route.app
43
+ # route is_a ActionDispatch::Journey::Route
44
+ # route.app is_a ActionDispatch::Routing::Mapper::Constraints
45
+ # route.app.app is_a TestEngine::Engine
46
+ route_app = route.app.app
45
47
  if route_app.respond_to?(:routes) && route_app.routes.is_a?(ActionDispatch::Routing::RouteSet)
46
48
  # recursively go though the mounted engines
47
49
  flatten_routes.concat(rails_routes(route_app.routes, File.join(base_url, route.path.spec.to_s)))
@@ -456,10 +458,10 @@ module Apipie
456
458
  # as this would break loading of the controllers.
457
459
  def rails_mark_classes_for_reload
458
460
  unless Rails.application.config.cache_classes
459
- Rails::VERSION::MAJOR == 4 ? ActionDispatch::Reloader.cleanup! : Rails.application.reloader.reload!
461
+ Rails.application.reloader.reload!
460
462
  init_env
461
463
  reload_examples
462
- Rails::VERSION::MAJOR == 4 ? ActionDispatch::Reloader.prepare! : Rails.application.reloader.prepare!
464
+ Rails.application.reloader.prepare!
463
465
  end
464
466
  end
465
467
 
@@ -12,7 +12,7 @@ module Apipie
12
12
  :swagger_include_warning_tags, :swagger_content_type_input, :swagger_json_input_uses_refs,
13
13
  :swagger_suppress_warnings, :swagger_api_host, :swagger_generate_x_computed_id_field,
14
14
  :swagger_allow_additional_properties_in_response, :swagger_responses_use_refs,
15
- :swagger_security_definitions, :swagger_global_security
15
+ :swagger_schemes, :swagger_security_definitions, :swagger_global_security
16
16
 
17
17
  alias_method :validate?, :validate
18
18
  alias_method :required_by_default?, :required_by_default
@@ -184,6 +184,7 @@ module Apipie
184
184
  @swagger_generate_x_computed_id_field = false
185
185
  @swagger_allow_additional_properties_in_response = false
186
186
  @swagger_responses_use_refs = true
187
+ @swagger_schemes = [:https]
187
188
  @swagger_security_definitions = {}
188
189
  @swagger_global_security = []
189
190
  end
@@ -149,10 +149,10 @@ module Apipie
149
149
 
150
150
  dsl_data = ResourceDescriptionDsl.eval_dsl(self, &block)
151
151
  versions = dsl_data[:api_versions]
152
+ Apipie.set_controller_versions(self, versions)
152
153
  @apipie_resource_descriptions = versions.map do |version|
153
154
  Apipie.define_resource_description(self, version, dsl_data)
154
155
  end
155
- Apipie.set_controller_versions(self, versions)
156
156
  end
157
157
  end
158
158
 
@@ -150,7 +150,7 @@ module Apipie
150
150
  end
151
151
 
152
152
  module FunctionalTestRecording
153
- def process(*) # action, parameters = nil, session = nil, flash = nil, http_method = 'GET')
153
+ def process(*, **) # action, parameters = nil, session = nil, flash = nil, http_method = 'GET')
154
154
  ret = super
155
155
  if Apipie.configuration.record
156
156
  Apipie::Extractor.call_recorder.analyze_functional_test(self)
@@ -17,14 +17,8 @@ class Apipie::Railtie
17
17
  end
18
18
  app.middleware.use ::Apipie::Extractor::Recorder::Middleware
19
19
 
20
- if Gem::Version.new(Rails.version) < Gem::Version.new('5.0.0')
21
- ActionController::TestCase::Behavior.instance_eval do
22
- prepend Apipie::Extractor::Recorder::FunctionalTestRecording
23
- end
24
- else
25
- ActionController::TestCase.send(:prepend, Apipie::Extractor::Recorder::FunctionalTestRecording)
26
- ActionController::TestCase::Behavior.send(:prepend, Apipie::Extractor::Recorder::FunctionalTestRecording)
27
- end
20
+ ActionController::TestCase.send(:prepend, Apipie::Extractor::Recorder::FunctionalTestRecording)
21
+ ActionController::TestCase::Behavior.send(:prepend, Apipie::Extractor::Recorder::FunctionalTestRecording)
28
22
  end
29
23
  end
30
24
 
@@ -161,8 +161,8 @@ ActionController::TestCase::Behavior.instance_eval do
161
161
  # instrument the 'process' method in ActionController::TestCase to enable response validation
162
162
  module Apipie::ResponseValidationHelpers
163
163
  @is_response_validation_on = false
164
- def process(*args)
165
- result = super(*args)
164
+ def process(*, **)
165
+ result = super
166
166
  validate_response if @is_response_validation_on
167
167
 
168
168
  result
@@ -73,6 +73,7 @@ module Apipie
73
73
  consumes: [],
74
74
  paths: {},
75
75
  definitions: {},
76
+ schemes: Apipie.configuration.swagger_schemes,
76
77
  tags: [],
77
78
  securityDefinitions: Apipie.configuration.swagger_security_definitions,
78
79
  security: Apipie.configuration.swagger_global_security
@@ -477,9 +478,16 @@ module Apipie
477
478
  end
478
479
 
479
480
  if swagger_def[:type] == "array"
480
- swagger_def[:items] = {type: "string"}
481
- enum = param_desc.options.fetch(:in, [])
481
+ array_of_validator_opts = param_desc.validator.param_description.options
482
+ items_type = array_of_validator_opts[:of].to_s || array_of_validator_opts[:array_of].to_s
483
+ if items_type == "Hash"
484
+ ref_name = "#{swagger_op_id_for_path(param_desc.method_description.apis.first.http_method, param_desc.method_description.apis.first.path)}_param_#{param_desc.name}"
485
+ swagger_def[:items] = {"$ref" => gen_referenced_block_from_params_array(ref_name, param_desc.validator.param_description.validator.params_ordered, allow_nulls)}
486
+ else
487
+ swagger_def[:items] = {type: "string"}
488
+ end
482
489
 
490
+ enum = param_desc.options.fetch(:in, [])
483
491
  swagger_def[:items][:enum] = enum if enum.any?
484
492
  end
485
493
 
@@ -1,3 +1,3 @@
1
1
  module Apipie
2
- VERSION = "0.7.2"
2
+ VERSION = "0.8.0"
3
3
  end
@@ -3,6 +3,6 @@ class ConcernsController < ApplicationController
3
3
  resource_description { resource_id 'concern_resources' }
4
4
 
5
5
  apipie_concern_subst(:concern => 'user', :custom_subst => 'custom', 'string_subst' => 'string')
6
- include ::Concerns::SampleController
6
+ include SampleController
7
7
 
8
8
  end
@@ -1,4 +1,3 @@
1
- module Concerns
2
1
  module ExtendingConcern
3
2
  extend Apipie::DSL::Concern
4
3
 
@@ -9,4 +8,3 @@ module Concerns
9
8
  meta metadata: 'data'
10
9
  end
11
10
  end
12
- end
@@ -3,7 +3,7 @@ class OverriddenConcernsController < ApplicationController
3
3
  resource_description { resource_id 'overridden_concern_resources' }
4
4
 
5
5
  apipie_concern_subst(:concern => 'user')
6
- include ::Concerns::SampleController
6
+ include SampleController
7
7
 
8
8
  def_param_group :concern do
9
9
  param :concern, String
@@ -11,7 +11,7 @@ class OverriddenConcernsController < ApplicationController
11
11
 
12
12
  api :PUT, '/:resource_id/:id'
13
13
  param :custom_parameter, String, "New parameter added by the overriding method"
14
- param_group :concern, ::Concerns::SampleController
14
+ param_group :concern, SampleController
15
15
  def update
16
16
  super
17
17
  end
@@ -1,4 +1,3 @@
1
- module Concerns
2
1
  module SampleController
3
2
  extend Apipie::DSL::Concern
4
3
 
@@ -38,4 +37,3 @@ module Concerns
38
37
  render :plain => "OK #{params.inspect}"
39
38
  end
40
39
  end
41
- end
@@ -41,7 +41,7 @@ module Dummy
41
41
  config.filter_parameters += [:password]
42
42
 
43
43
  config.to_prepare do
44
- ExtendedController.send(:include, Concerns::ExtendingConcern)
44
+ ExtendedController.send(:include, ExtendingConcern)
45
45
  end
46
46
  end
47
47
  end
data/spec/spec_helper.rb CHANGED
@@ -10,37 +10,6 @@ require 'rspec/rails'
10
10
  require 'apipie-rails'
11
11
  require 'test_engine'
12
12
 
13
- module Rails4Compatibility
14
- module Testing
15
- def process(*args)
16
- compatible_request(*args) do |*new_args|
17
- if Gem.ruby_version < Gem::Version.new('3.0.0')
18
- super(*new_args)
19
- else
20
- super(new_args[0], **new_args[1])
21
- end
22
- end
23
- end
24
-
25
- def compatible_request(method, action, hash = {})
26
- if hash.is_a?(Hash)
27
- if Gem::Version.new(Rails.version) < Gem::Version.new('5.0.0')
28
- hash = hash.dup
29
- hash.merge!(hash.delete(:params) || {})
30
- elsif hash.key?(:params)
31
- hash = { :params => hash }
32
- end
33
- end
34
- if hash.empty?
35
- yield method, action
36
- else
37
- yield method, action, hash
38
- end
39
- end
40
- end
41
- end
42
-
43
-
44
13
  #
45
14
  # Matcher to validate the properties (name, type and options) of a single field in the
46
15
  # internal representation of a swagger schema
@@ -114,4 +83,3 @@ RSpec.configure do |config|
114
83
  end
115
84
 
116
85
  require 'action_controller/test_case.rb'
117
- ActionController::TestCase::Behavior.send(:prepend, Rails4Compatibility::Testing)
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: 0.7.2
4
+ version: 0.8.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: 2022-04-19 00:00:00.000000000 Z
12
+ date: 2022-05-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -216,6 +216,7 @@ files:
216
216
  - gemfiles/Gemfile.rails52
217
217
  - gemfiles/Gemfile.rails60
218
218
  - gemfiles/Gemfile.rails61
219
+ - gemfiles/Gemfile.rails70
219
220
  - images/screenshot-1.png
220
221
  - images/screenshot-2.png
221
222
  - lib/apipie-rails.rb
@@ -274,15 +275,15 @@ files:
274
275
  - spec/dummy/app/controllers/api/v2/nested/architectures_controller.rb
275
276
  - spec/dummy/app/controllers/api/v2/nested/resources_controller.rb
276
277
  - spec/dummy/app/controllers/application_controller.rb
277
- - spec/dummy/app/controllers/concerns/extending_concern.rb
278
- - spec/dummy/app/controllers/concerns/sample_controller.rb
279
278
  - spec/dummy/app/controllers/concerns_controller.rb
280
279
  - spec/dummy/app/controllers/extended_controller.rb
280
+ - spec/dummy/app/controllers/extending_concern.rb
281
281
  - spec/dummy/app/controllers/files_controller.rb
282
282
  - spec/dummy/app/controllers/overridden_concerns_controller.rb
283
283
  - spec/dummy/app/controllers/pets_controller.rb
284
284
  - spec/dummy/app/controllers/pets_using_auto_views_controller.rb
285
285
  - spec/dummy/app/controllers/pets_using_self_describing_classes_controller.rb
286
+ - spec/dummy/app/controllers/sample_controller.rb
286
287
  - spec/dummy/app/controllers/tagged_cats_controller.rb
287
288
  - spec/dummy/app/controllers/tagged_dogs_controller.rb
288
289
  - spec/dummy/app/controllers/twitter_example_controller.rb
@@ -337,7 +338,6 @@ files:
337
338
  - spec/lib/validator_spec.rb
338
339
  - spec/lib/validators/array_validator_spec.rb
339
340
  - spec/spec_helper.rb
340
- - spec/support/rails-42-ruby-26.rb
341
341
  - spec/support/rake.rb
342
342
  homepage: http://github.com/Apipie/apipie-rails
343
343
  licenses: []
@@ -357,7 +357,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
357
357
  - !ruby/object:Gem::Version
358
358
  version: '0'
359
359
  requirements: []
360
- rubygems_version: 3.1.6
360
+ rubygems_version: 3.2.33
361
361
  signing_key:
362
362
  specification_version: 4
363
363
  summary: Rails REST API documentation tool
@@ -1,15 +0,0 @@
1
- if RUBY_VERSION >= '2.6.0'
2
- if Rails.version < '5'
3
- # rubocop:disable Style/CommentAnnotation
4
- class ActionController::TestResponse < ActionDispatch::TestResponse
5
- def recycle!
6
- # hack to avoid MonitorMixin double-initialize error:
7
- @mon_mutex_owner_object_id = nil
8
- @mon_mutex = nil
9
- initialize
10
- end
11
- end
12
- # rubocop:enable Style/CommentAnnotation
13
- end
14
- end
15
-