apipie-rails 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build.yml +3 -0
  3. data/CHANGELOG.md +29 -0
  4. data/README.rst +25 -0
  5. data/app/controllers/apipie/apipies_controller.rb +1 -1
  6. data/app/public/apipie/javascripts/bundled/bootstrap-collapse.js +70 -41
  7. data/app/public/apipie/javascripts/bundled/bootstrap.js +1033 -479
  8. data/app/public/apipie/javascripts/bundled/jquery.js +5 -5
  9. data/app/public/apipie/stylesheets/bundled/bootstrap-responsive.min.css +9 -12
  10. data/app/public/apipie/stylesheets/bundled/bootstrap.min.css +9 -689
  11. data/config/locales/ko.yml +31 -0
  12. data/gemfiles/Gemfile.rails70 +17 -0
  13. data/lib/apipie/application.rb +6 -4
  14. data/lib/apipie/configuration.rb +9 -3
  15. data/lib/apipie/dsl_definition.rb +13 -2
  16. data/lib/apipie/extractor.rb +2 -8
  17. data/lib/apipie/param_description.rb +8 -4
  18. data/lib/apipie/rspec/response_validation_helper.rb +2 -2
  19. data/lib/apipie/swagger_generator.rb +12 -2
  20. data/lib/apipie/version.rb +1 -1
  21. data/spec/controllers/users_controller_spec.rb +23 -0
  22. data/spec/dummy/app/controllers/concerns_controller.rb +1 -1
  23. data/spec/dummy/app/controllers/{concerns/extending_concern.rb → extending_concern.rb} +0 -2
  24. data/spec/dummy/app/controllers/overridden_concerns_controller.rb +2 -2
  25. data/spec/dummy/app/controllers/{concerns/sample_controller.rb → sample_controller.rb} +0 -2
  26. data/spec/dummy/config/application.rb +1 -1
  27. data/spec/lib/param_description_spec.rb +68 -0
  28. data/spec/spec_helper.rb +0 -32
  29. metadata +7 -7
  30. data/Gemfile +0 -1
  31. data/spec/support/rails-42-ruby-26.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 29292cefe596185a3becf01f657a1c8826ea2aa5601e5549926672d1ebaf9309
4
- data.tar.gz: 8c1419363f237e7cb8beb61940af1303bdef53a8830e0347f9afbca29d99e32f
3
+ metadata.gz: 231e8e86bd335aa018fcd0a8bf07730dd452968bde2a9491374979ec368f2a06
4
+ data.tar.gz: 39075cddca5f3ba6ef9c412e267d10f934ea37d08696d67f5069c16eb93fd41d
5
5
  SHA512:
6
- metadata.gz: 87f52d7d548463ec69639b85c7cb9b322b29f711fdd38800365f13bc8963a8a461f840ac8f36300e18236212b088298d90d482a0537d58b857eecbd2b479bdc5
7
- data.tar.gz: 895cb9c91976d485ab1442f42895114e15c102cccc8d3b853ea6242de360f7756c5337faa086e4df7b5536079285ab83d259ce21b292c0da7fe766decdaddb32
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,35 @@
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
+
15
+ ## [v0.7.2](https://github.com/Apipie/apipie-rails/tree/v0.7.2) (2022-04-19)
16
+ [Full Changelog](https://github.com/Apipie/apipie-rails/compare/v0.7.1...v0.7.2)
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)
18
+ * `Security` Upgraded Bootstrap from 2.0.2 to 2.3.2, JQuery from 1.11.3 to 1.12.4 [#708](https://github.com/Apipie/apipie-rails/pull/708) (Nicolas Waissbluth)
19
+ * Fix ruby2 keyword argument warning [#756](https://github.com/Apipie/apipie-rails/pull/756) (Jorge Santos)
20
+
21
+ ## [v0.7.1](https://github.com/Apipie/apipie-rails/tree/v0.7.1) (2022-04-06)
22
+ [Full Changelog](https://github.com/Apipie/apipie-rails/compare/v0.7.0...v0.7.1)
23
+ * Skip extra parameters while validating the keys. [#690](https://github.com/Apipie/apipie-rails/pull/690) (Omkar Joshi)
24
+ * Support defining security mechanisms for Swagger [#711](https://github.com/Apipie/apipie-rails/pull/711) (Dan Leyden)
25
+ * Update boolean handling of false [#749](https://github.com/Apipie/apipie-rails/pull/749) (Colin Bruce)
26
+
27
+ Note: Up until and including v0.6.x, apipie-rails was silently ignoring allow_blank == false on String validation.
28
+ when allow_blank is not specified, it default to false. to allow blank strings, you must specify it as a parameter.
29
+
30
+ Alternatively, if you want to revert to the previous behavior, you can set this configuration option:
31
+ `Apipie.configuration.ignore_allow_blank_false = true`.
32
+
4
33
  ## [v0.7.0](https://github.com/Apipie/apipie-rails/tree/v0.7.0) (2022-03-30)
5
34
  [Full Changelog](https://github.com/Apipie/apipie-rails/compare/v0.6.0...v0.7.0)
6
35
  * ArgumentError (invalid byte sequence in UTF-8) [#746](https://github.com/Apipie/apipie-rails/pull/746) (David Milanese)
data/README.rst CHANGED
@@ -966,6 +966,9 @@ validate_presence
966
966
  validate_key
967
967
  Check the received params to ensure they are defined in the API. (false by default)
968
968
 
969
+ action_on_non_validated_keys
970
+ Either `:raise` or `:skip`. If `validate_key` fails, raise error or delete the non-validated key from the params and log the key (`:raise` by default)
971
+
969
972
  process_params
970
973
  Process and extract the parameter defined from the params of the request
971
974
  to the api_params variable
@@ -1021,6 +1024,10 @@ authorize
1021
1024
  show_all_examples
1022
1025
  Set this to true to set show_in_doc=1 in all recorded examples
1023
1026
 
1027
+ ignore_allow_blank_false
1028
+ `allow_blank: false` was incorrectly ignored up until version 0.6.0, this bug was fixed in 0.7.0
1029
+ if you need the old behavior, set this to true
1030
+
1024
1031
  link_extension
1025
1032
  The extension to use for API pages ('.html' by default). Link extensions
1026
1033
  in static API docs cannot be changed from '.html'.
@@ -1653,6 +1660,23 @@ There are several configuration parameters that determine the structure of the g
1653
1660
 
1654
1661
  If ``true``: the ``additional-properties: false`` field will not be included in response object descriptions
1655
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
+
1668
+
1669
+ ``config:swagger_security_definitions``
1670
+ If the API requires authentication, you can specify details of the authentication mechanisms supported as a (Hash) value here.
1671
+ See [https://swagger.io/docs/specification/2-0/authentication/] for details of what values can be specified
1672
+ By default, no security is defined.
1673
+
1674
+ ``config.swagger_global_security``
1675
+ If the API requires authentication, you can specify which of the authentication mechanisms are supported by all API operations as an Array of hashes here.
1676
+ This should be used in conjunction with the mechanisms defined by ``swagger_security_definitions``.
1677
+ See [https://swagger.io/docs/specification/2-0/authentication/] for details of what values can be specified
1678
+ By default, no security is defined.
1679
+
1656
1680
 
1657
1681
  Known limitations of the current implementation
1658
1682
  -------------------------------------------------
@@ -1663,6 +1687,7 @@ Known limitations of the current implementation
1663
1687
  * It is not possible to leverage all of the parameter type/format capabilities of swagger
1664
1688
  * Only OpenAPI 2.0 is supported
1665
1689
  * Responses are defined inline and not as a $ref
1690
+ * It is not possible to specify per-operation security requirements (only global)
1666
1691
 
1667
1692
  ====================================
1668
1693
  Dynamic Swagger generation
@@ -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
 
@@ -1,8 +1,8 @@
1
1
  /* =============================================================
2
- * bootstrap-collapse.js v2.0.2
3
- * http://twitter.github.com/bootstrap/javascript.html#collapse
2
+ * bootstrap-collapse.js v2.3.2
3
+ * http://getbootstrap.com/2.3.2/javascript.html#collapse
4
4
  * =============================================================
5
- * Copyright 2012 Twitter, Inc.
5
+ * Copyright 2013 Twitter, Inc.
6
6
  *
7
7
  * Licensed under the Apache License, Version 2.0 (the "License");
8
8
  * you may not use this file except in compliance with the License.
@@ -17,16 +17,21 @@
17
17
  * limitations under the License.
18
18
  * ============================================================ */
19
19
 
20
- !function( $ ){
21
20
 
22
- "use strict"
21
+ !function ($) {
23
22
 
24
- var Collapse = function ( element, options ) {
25
- this.$element = $(element)
23
+ "use strict"; // jshint ;_;
24
+
25
+
26
+ /* COLLAPSE PUBLIC CLASS DEFINITION
27
+ * ================================ */
28
+
29
+ var Collapse = function (element, options) {
30
+ this.$element = $(element)
26
31
  this.options = $.extend({}, $.fn.collapse.defaults, options)
27
32
 
28
- if (this.options["parent"]) {
29
- this.$parent = $(this.options["parent"])
33
+ if (this.options.parent) {
34
+ this.$parent = $(this.options.parent)
30
35
  }
31
36
 
32
37
  this.options.toggle && this.toggle()
@@ -42,31 +47,39 @@
42
47
  }
43
48
 
44
49
  , show: function () {
45
- var dimension = this.dimension()
46
- , scroll = $.camelCase(['scroll', dimension].join('-'))
47
- , actives = this.$parent && this.$parent.find('.in')
50
+ var dimension
51
+ , scroll
52
+ , actives
48
53
  , hasData
49
54
 
55
+ if (this.transitioning || this.$element.hasClass('in')) return
56
+
57
+ dimension = this.dimension()
58
+ scroll = $.camelCase(['scroll', dimension].join('-'))
59
+ actives = this.$parent && this.$parent.find('> .accordion-group > .in')
60
+
50
61
  if (actives && actives.length) {
51
62
  hasData = actives.data('collapse')
63
+ if (hasData && hasData.transitioning) return
52
64
  actives.collapse('hide')
53
65
  hasData || actives.data('collapse', null)
54
66
  }
55
67
 
56
68
  this.$element[dimension](0)
57
- this.transition('addClass', 'show', 'shown')
58
- this.$element[dimension](this.$element[0][scroll])
59
-
69
+ this.transition('addClass', $.Event('show'), 'shown')
70
+ $.support.transition && this.$element[dimension](this.$element[0][scroll])
60
71
  }
61
72
 
62
73
  , hide: function () {
63
- var dimension = this.dimension()
74
+ var dimension
75
+ if (this.transitioning || !this.$element.hasClass('in')) return
76
+ dimension = this.dimension()
64
77
  this.reset(this.$element[dimension]())
65
- this.transition('removeClass', 'hide', 'hidden')
78
+ this.transition('removeClass', $.Event('hide'), 'hidden')
66
79
  this.$element[dimension](0)
67
80
  }
68
81
 
69
- , reset: function ( size ) {
82
+ , reset: function (size) {
70
83
  var dimension = this.dimension()
71
84
 
72
85
  this.$element
@@ -74,41 +87,49 @@
74
87
  [dimension](size || 'auto')
75
88
  [0].offsetWidth
76
89
 
77
- this.$element[size ? 'addClass' : 'removeClass']('collapse')
90
+ this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
78
91
 
79
92
  return this
80
93
  }
81
94
 
82
- , transition: function ( method, startEvent, completeEvent ) {
95
+ , transition: function (method, startEvent, completeEvent) {
83
96
  var that = this
84
97
  , complete = function () {
85
- if (startEvent == 'show') that.reset()
98
+ if (startEvent.type == 'show') that.reset()
99
+ that.transitioning = 0
86
100
  that.$element.trigger(completeEvent)
87
101
  }
88
102
 
89
- this.$element
90
- .trigger(startEvent)
91
- [method]('in')
103
+ this.$element.trigger(startEvent)
104
+
105
+ if (startEvent.isDefaultPrevented()) return
106
+
107
+ this.transitioning = 1
108
+
109
+ this.$element[method]('in')
92
110
 
93
111
  $.support.transition && this.$element.hasClass('collapse') ?
94
112
  this.$element.one($.support.transition.end, complete) :
95
113
  complete()
96
- }
114
+ }
97
115
 
98
116
  , toggle: function () {
99
117
  this[this.$element.hasClass('in') ? 'hide' : 'show']()
100
- }
118
+ }
101
119
 
102
120
  }
103
121
 
104
- /* COLLAPSIBLE PLUGIN DEFINITION
105
- * ============================== */
106
122
 
107
- $.fn.collapse = function ( option ) {
123
+ /* COLLAPSE PLUGIN DEFINITION
124
+ * ========================== */
125
+
126
+ var old = $.fn.collapse
127
+
128
+ $.fn.collapse = function (option) {
108
129
  return this.each(function () {
109
130
  var $this = $(this)
110
131
  , data = $this.data('collapse')
111
- , options = typeof option == 'object' && option
132
+ , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option)
112
133
  if (!data) $this.data('collapse', (data = new Collapse(this, options)))
113
134
  if (typeof option == 'string') data[option]()
114
135
  })
@@ -121,18 +142,26 @@
121
142
  $.fn.collapse.Constructor = Collapse
122
143
 
123
144
 
124
- /* COLLAPSIBLE DATA-API
145
+ /* COLLAPSE NO CONFLICT
125
146
  * ==================== */
126
147
 
127
- $(function () {
128
- $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) {
129
- var $this = $(this), href
130
- , target = $this.attr('data-target')
131
- || e.preventDefault()
132
- || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
133
- , option = $(target).data('collapse') ? 'toggle' : $this.data()
134
- $(target).collapse(option)
135
- })
148
+ $.fn.collapse.noConflict = function () {
149
+ $.fn.collapse = old
150
+ return this
151
+ }
152
+
153
+
154
+ /* COLLAPSE DATA-API
155
+ * ================= */
156
+
157
+ $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
158
+ var $this = $(this), href
159
+ , target = $this.attr('data-target')
160
+ || e.preventDefault()
161
+ || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
162
+ , option = $(target).data('collapse') ? 'toggle' : $this.data()
163
+ $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
164
+ $(target).collapse(option)
136
165
  })
137
166
 
138
- }( window.jQuery );
167
+ }(window.jQuery);