apipie-rails 0.8.1 → 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|