apipie-rails 0.8.1 → 0.8.2
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/.gitignore +1 -0
- data/CHANGELOG.md +10 -0
- data/README.rst +43 -0
- data/apipie-rails.gemspec +1 -0
- data/lib/apipie/param_description.rb +1 -1
- data/lib/apipie/validator.rb +9 -0
- data/lib/apipie/version.rb +1 -1
- data/spec/controllers/included_param_group_controller_spec.rb +13 -0
- data/spec/dummy/app/controllers/included_param_group_controller.rb +19 -0
- data/spec/dummy/app/helpers/random_param_group.rb +8 -0
- data/spec/lib/param_description_spec.rb +18 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/support/custom_bool_validator.rb +17 -0
- metadata +21 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc951bacc1fe43a5e6959b51f722e5a63d37eac5b3b264603d64e93f039d7e34
|
4
|
+
data.tar.gz: 57ab01c41ef9a23b25ccc40f8f4686aace3c2a4601c35bc1c4492b918561e96a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: be9da39bd717e0f74bfa1b603fcab4db662bc77139b9062c4f1397f7094c5d464c52462f4580017d8e16ffc13961383b0de8ec9d8841aa9606642ec9b633ceba
|
7
|
+
data.tar.gz: 3c72fb02a1bbed1103c98f3c9a906ee54e657a4bfd65d673c614c03525d43e66d4e8da0e06899c29c814f2a848612f2a342fc984a45b6492121f2fe4e2b27399
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,16 @@
|
|
4
4
|
Also deleted the `Gemfile` that was now a broken symlink.
|
5
5
|
please use `export BUNDLE_GEMFILE='gemfiles/Gemfile.rails61'; bundle exec rspec` to run the test suite
|
6
6
|
|
7
|
+
## [v0.8.2](https://github.com/Apipie/apipie-rails/tree/v0.8.2) (2022-09-03)
|
8
|
+
[Full Changelog](https://github.com/Apipie/apipie-rails/compare/v0.8.1...v0.8.2)
|
9
|
+
* Allow custom validators to opt out of allow_blank behavior [#762](https://github.com/Apipie/apipie-rails/pull/762). (Stephen Hanson)
|
10
|
+
* Enforce test coverage, set current 89% as minimum [#764](https://github.com/Apipie/apipie-rails/pull/764). (Mathieu Jobin)
|
11
|
+
* Add contributing instructions to readme [#763](https://github.com/Apipie/apipie-rails/pull/763). (Stephen Hanson)
|
12
|
+
* Fix readme formatting [#765](https://github.com/Apipie/apipie-rails/pull/765). (Stephen Hanson)
|
13
|
+
* Adds expected_type to IntegerValidator example [#769](https://github.com/Apipie/apipie-rails/pull/769). (Jeremy Liberman)
|
14
|
+
* Update readme with error handling example [#768](https://github.com/Apipie/apipie-rails/pull/768). (Jesse Eisenberg)
|
15
|
+
* Fix scope incorrectly set to nil when a param_group is used inside an array_of_hash and the param_group is in a different module / controller. [#693](https://github.com/Apipie/apipie-rails/pull/693) [#774](https://github.com/Apipie/apipie-rails/pull/774). (Omkar Joshi / Oliver Iyer)
|
16
|
+
|
7
17
|
## [v0.8.1](https://github.com/Apipie/apipie-rails/tree/v0.8.1) (2022-05-26)
|
8
18
|
[Full Changelog](https://github.com/Apipie/apipie-rails/compare/v0.8.0...v0.8.1)
|
9
19
|
* Remove warning that came back as of [#752](https://github.com/Apipie/apipie-rails/pull/752). [#761](https://github.com/Apipie/apipie-rails/pull/761) (Jorge Santos / Mathieu Jobin)
|
data/README.rst
CHANGED
@@ -1156,6 +1156,21 @@ is raised and can be rescued and processed. It contains a description
|
|
1156
1156
|
of the parameter value expectations. Validations can be turned off
|
1157
1157
|
in the configuration file.
|
1158
1158
|
|
1159
|
+
Here is an example of how to rescue and process a +ParamMissing+ or
|
1160
|
+
+ParamInvalid+ error from within the ApplicationController.
|
1161
|
+
|
1162
|
+
.. code:: ruby
|
1163
|
+
|
1164
|
+
class ApplicationController < ActionController::Base
|
1165
|
+
|
1166
|
+
# ParamError is superclass of ParamMissing, ParamInvalid
|
1167
|
+
rescue_from Apipie::ParamError do |e|
|
1168
|
+
render text: e.message, status: :unprocessable_entity
|
1169
|
+
end
|
1170
|
+
|
1171
|
+
# ...
|
1172
|
+
end
|
1173
|
+
|
1159
1174
|
Parameter validation normally happens after before_actions, just before
|
1160
1175
|
your controller method is invoked. If you prefer to control when parameter
|
1161
1176
|
validation occurs, set the configuration parameter ``validate`` to ``:explicitly``.
|
@@ -1368,6 +1383,10 @@ So we create apipie_validators.rb initializer with this content:
|
|
1368
1383
|
def description
|
1369
1384
|
"Must be #{@type}."
|
1370
1385
|
end
|
1386
|
+
|
1387
|
+
def expected_type
|
1388
|
+
'numeric'
|
1389
|
+
end
|
1371
1390
|
end
|
1372
1391
|
|
1373
1392
|
Parameters of the build method:
|
@@ -1385,6 +1404,16 @@ options
|
|
1385
1404
|
block
|
1386
1405
|
Block converted into Proc, use it as you desire. In this example nil.
|
1387
1406
|
|
1407
|
+
If your validator includes valid values that respond true to `.blank?`, you
|
1408
|
+
should also define:
|
1409
|
+
|
1410
|
+
.. code:: ruby
|
1411
|
+
|
1412
|
+
def ignore_allow_blank?
|
1413
|
+
true
|
1414
|
+
end
|
1415
|
+
|
1416
|
+
so that the validation does not fail for valid values.
|
1388
1417
|
|
1389
1418
|
============
|
1390
1419
|
Versioning
|
@@ -1872,6 +1901,20 @@ provided it uses Apipie as a backend.
|
|
1872
1901
|
|
1873
1902
|
And if you write one on your own, don't hesitate to share it with us!
|
1874
1903
|
|
1904
|
+
====================
|
1905
|
+
Contributing
|
1906
|
+
====================
|
1907
|
+
|
1908
|
+
Since this gem does not have a Gemfile, you need to specify it in your shell with:
|
1909
|
+
|
1910
|
+
.. code:: shell
|
1911
|
+
BUNDLE_GEMFILE='gemfiles/Gemfile.rails61'
|
1912
|
+
|
1913
|
+
Then, you can install dependencies and run the test suite:
|
1914
|
+
|
1915
|
+
.. code:: shell
|
1916
|
+
> bundle install
|
1917
|
+
> bundle exec rspec
|
1875
1918
|
|
1876
1919
|
====================
|
1877
1920
|
Disqus Integration
|
data/apipie-rails.gemspec
CHANGED
@@ -125,7 +125,7 @@ module Apipie
|
|
125
125
|
end
|
126
126
|
|
127
127
|
def blank_forbidden?
|
128
|
-
!Apipie.configuration.ignore_allow_blank_false && !allow_blank && !validator.
|
128
|
+
!Apipie.configuration.ignore_allow_blank_false && !allow_blank && !validator.ignore_allow_blank?
|
129
129
|
end
|
130
130
|
|
131
131
|
def process_value(value)
|
data/lib/apipie/validator.rb
CHANGED
@@ -80,6 +80,10 @@ module Apipie
|
|
80
80
|
'string'
|
81
81
|
end
|
82
82
|
|
83
|
+
def ignore_allow_blank?
|
84
|
+
false
|
85
|
+
end
|
86
|
+
|
83
87
|
def merge_with(other_validator)
|
84
88
|
return self if self == other_validator
|
85
89
|
raise NotImplementedError, "Don't know how to merge #{self.inspect} with #{other_validator.inspect}"
|
@@ -333,6 +337,7 @@ module Apipie
|
|
333
337
|
@params_ordered ||= _apipie_dsl_data[:params].map do |args|
|
334
338
|
options = args.find { |arg| arg.is_a? Hash }
|
335
339
|
options[:parent] = self.param_description
|
340
|
+
options[:param_group] = @param_group
|
336
341
|
Apipie::ParamDescription.from_dsl_data(param_description.method_description, args)
|
337
342
|
end
|
338
343
|
end
|
@@ -477,6 +482,10 @@ module Apipie
|
|
477
482
|
string = %w(true false 1 0).map { |value| format_description_value(value) }.join(', ')
|
478
483
|
"Must be one of: #{string}."
|
479
484
|
end
|
485
|
+
|
486
|
+
def ignore_allow_blank?
|
487
|
+
true
|
488
|
+
end
|
480
489
|
end
|
481
490
|
|
482
491
|
class NestedValidator < BaseValidator
|
data/lib/apipie/version.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
describe IncludedParamGroupController do
|
5
|
+
|
6
|
+
let(:dsl_data) { ActionController::Base.send(:_apipie_dsl_data_init) }
|
7
|
+
|
8
|
+
it "should not error when there is a param_group that is deeply nested in response description" do
|
9
|
+
subject = Apipie.get_resource_description(IncludedParamGroupController, Apipie.configuration.default_version)
|
10
|
+
expect(subject._methods.keys).to include(:show)
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class IncludedParamGroupController < ApplicationController
|
2
|
+
include RandomParamGroup
|
3
|
+
|
4
|
+
api :GET, '/included-param-group'
|
5
|
+
returns code:200 do
|
6
|
+
property :top_level, Array, of: Hash do
|
7
|
+
param_group :random_param_group
|
8
|
+
end
|
9
|
+
property :nested, Hash do
|
10
|
+
property :random_array, Array, of: Hash do
|
11
|
+
param_group :random_param_group
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
def show
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
@@ -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
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
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
9
|
APIPIE_ROOT = File.expand_path('../..', __FILE__)
|
6
10
|
require File.expand_path("../dummy/config/environment", __FILE__)
|
@@ -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,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apipie-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.2
|
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-
|
12
|
+
date: 2022-09-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: actionpack
|
@@ -137,6 +137,20 @@ dependencies:
|
|
137
137
|
- - ">="
|
138
138
|
- !ruby/object:Gem::Version
|
139
139
|
version: '0'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: simplecov
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
140
154
|
- !ruby/object:Gem::Dependency
|
141
155
|
name: json-schema
|
142
156
|
requirement: !ruby/object:Gem::Requirement
|
@@ -264,6 +278,7 @@ files:
|
|
264
278
|
- spec/controllers/apipies_controller_spec.rb
|
265
279
|
- spec/controllers/concerns_controller_spec.rb
|
266
280
|
- spec/controllers/extended_controller_spec.rb
|
281
|
+
- spec/controllers/included_param_group_controller_spec.rb
|
267
282
|
- spec/controllers/memes_controller_spec.rb
|
268
283
|
- spec/controllers/users_controller_spec.rb
|
269
284
|
- spec/dummy/Rakefile
|
@@ -279,6 +294,7 @@ files:
|
|
279
294
|
- spec/dummy/app/controllers/extended_controller.rb
|
280
295
|
- spec/dummy/app/controllers/extending_concern.rb
|
281
296
|
- spec/dummy/app/controllers/files_controller.rb
|
297
|
+
- spec/dummy/app/controllers/included_param_group_controller.rb
|
282
298
|
- spec/dummy/app/controllers/overridden_concerns_controller.rb
|
283
299
|
- spec/dummy/app/controllers/pets_controller.rb
|
284
300
|
- spec/dummy/app/controllers/pets_using_auto_views_controller.rb
|
@@ -288,6 +304,7 @@ files:
|
|
288
304
|
- spec/dummy/app/controllers/tagged_dogs_controller.rb
|
289
305
|
- spec/dummy/app/controllers/twitter_example_controller.rb
|
290
306
|
- spec/dummy/app/controllers/users_controller.rb
|
307
|
+
- spec/dummy/app/helpers/random_param_group.rb
|
291
308
|
- spec/dummy/app/views/layouts/application.html.erb
|
292
309
|
- spec/dummy/components/test_engine/Gemfile
|
293
310
|
- spec/dummy/components/test_engine/app/controllers/test_engine/application_controller.rb
|
@@ -338,6 +355,7 @@ files:
|
|
338
355
|
- spec/lib/validator_spec.rb
|
339
356
|
- spec/lib/validators/array_validator_spec.rb
|
340
357
|
- spec/spec_helper.rb
|
358
|
+
- spec/support/custom_bool_validator.rb
|
341
359
|
- spec/support/rake.rb
|
342
360
|
homepage: http://github.com/Apipie/apipie-rails
|
343
361
|
licenses: []
|
@@ -357,7 +375,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
357
375
|
- !ruby/object:Gem::Version
|
358
376
|
version: '0'
|
359
377
|
requirements: []
|
360
|
-
rubygems_version: 3.
|
378
|
+
rubygems_version: 3.3.5
|
361
379
|
signing_key:
|
362
380
|
specification_version: 4
|
363
381
|
summary: Rails REST API documentation tool
|