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 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