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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 551be0cd702443cd00ab6f07e8b5d5d34c7465f32550b55b6e4cd7198d41d274
4
- data.tar.gz: be966a1768f9839e57c5347bc7c46b40b651cea1c4c5e590feb9c4f365f56ff4
3
+ metadata.gz: dc951bacc1fe43a5e6959b51f722e5a63d37eac5b3b264603d64e93f039d7e34
4
+ data.tar.gz: 57ab01c41ef9a23b25ccc40f8f4686aace3c2a4601c35bc1c4492b918561e96a
5
5
  SHA512:
6
- metadata.gz: 1d2c1845c417378ceda213d9f452efbf33fa4c78926b689866d3559331c495940580dcc34c03840d294bcdb5327c1dd873182c9ea332b081da1b6c7fbf893707
7
- data.tar.gz: 00f2a6787774e81bdab55b9e2de74cef25cceec92d908353db88ce6c384ec643cd3f3972c95b59232ad0bc03b707f7af12c5699aa1c8b2c0f696306af8100a4c
6
+ metadata.gz: be9da39bd717e0f74bfa1b603fcab4db662bc77139b9062c4f1397f7094c5d464c52462f4580017d8e16ffc13961383b0de8ec9d8841aa9606642ec9b633ceba
7
+ data.tar.gz: 3c72fb02a1bbed1103c98f3c9a906ee54e657a4bfd65d673c614c03525d43e66d4e8da0e06899c29c814f2a848612f2a342fc984a45b6492121f2fe4e2b27399
data/.gitignore CHANGED
@@ -1,6 +1,7 @@
1
1
  .bundle/
2
2
  log/*.log
3
3
  pkg/
4
+ coverage
4
5
  spec/dummy/db/*.sqlite3
5
6
  spec/dummy/log/*.log
6
7
  spec/dummy/tmp/
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
@@ -25,5 +25,6 @@ Gem::Specification.new do |s|
25
25
  s.add_development_dependency "RedCloth"
26
26
  s.add_development_dependency "rake"
27
27
  s.add_development_dependency "rdoc"
28
+ s.add_development_dependency "simplecov"
28
29
  s.add_development_dependency "json-schema", "~> 2.8"
29
30
  end
@@ -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.is_a?(Validator::BooleanValidator)
128
+ !Apipie.configuration.ignore_allow_blank_false && !allow_blank && !validator.ignore_allow_blank?
129
129
  end
130
130
 
131
131
  def process_value(value)
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Apipie
2
- VERSION = "0.8.1"
2
+ VERSION = "0.8.2"
3
3
  end
@@ -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
+
@@ -0,0 +1,8 @@
1
+ module RandomParamGroup
2
+ def self.included(klazz)
3
+ klazz.def_param_group :random_param_group do
4
+ property :id, Integer
5
+ property :name, String
6
+ end
7
+ end
8
+ 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
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.1
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-05-26 00:00:00.000000000 Z
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.2.33
378
+ rubygems_version: 3.3.5
361
379
  signing_key:
362
380
  specification_version: 4
363
381
  summary: Rails REST API documentation tool