apipie-rails 0.6.0 → 0.7.0

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: 94b525fc29d73244428ef1e25397219f80e703701497ad82c507e9fe0c321300
4
- data.tar.gz: 7ba3ffeceb46eb8115d1733820e87bef5a1c1be64bc19a5225c20eae430a476c
3
+ metadata.gz: 29292cefe596185a3becf01f657a1c8826ea2aa5601e5549926672d1ebaf9309
4
+ data.tar.gz: 8c1419363f237e7cb8beb61940af1303bdef53a8830e0347f9afbca29d99e32f
5
5
  SHA512:
6
- metadata.gz: 6eab6988a8d9bebb72a66096e2dbe22f04f83ab5e25070e1cb2b6176c13153b23e3499829af1f378ece9d07abfad18756ce845632ecf9711b6108fab1b8335a4
7
- data.tar.gz: 8efcdcbf133414f77cb1cf9c15f34162ad395d42117275b74a68c9b4848723174dc4d79cf1b4c6739fe775324aa94da6d16b38f5fd62b33e0577539483fe8ea4
6
+ metadata.gz: 87f52d7d548463ec69639b85c7cb9b322b29f711fdd38800365f13bc8963a8a461f840ac8f36300e18236212b088298d90d482a0537d58b857eecbd2b479bdc5
7
+ data.tar.gz: 895cb9c91976d485ab1442f42895114e15c102cccc8d3b853ea6242de360f7756c5337faa086e4df7b5536079285ab83d259ce21b292c0da7fe766decdaddb32
@@ -21,16 +21,23 @@ jobs:
21
21
  - '3.0'
22
22
  - 3.1
23
23
  gemfile:
24
- - Gemfile.rails42
24
+ - Gemfile.rails50
25
+ - Gemfile.rails51
25
26
  - Gemfile.rails52 # Min ruby 2.2.2
26
27
  - Gemfile.rails60 # Min ruby 2.5.0
27
28
  - Gemfile.rails61 # Min ruby 2.5.0
28
29
  exclude:
29
- - gemfile: Gemfile.rails42
30
+ - gemfile: Gemfile.rails50
30
31
  ruby: 2.7
31
- - gemfile: Gemfile.rails42
32
+ - gemfile: Gemfile.rails50
32
33
  ruby: '3.0'
33
- - gemfile: Gemfile.rails42
34
+ - gemfile: Gemfile.rails50
35
+ ruby: 3.1
36
+ - gemfile: Gemfile.rails51
37
+ ruby: 2.7
38
+ - gemfile: Gemfile.rails51
39
+ ruby: '3.0'
40
+ - gemfile: Gemfile.rails51
34
41
  ruby: 3.1
35
42
  - gemfile: Gemfile.rails52
36
43
  ruby: 2.7
data/CHANGELOG.md CHANGED
@@ -1,6 +1,13 @@
1
1
  Changelog
2
2
  ===========
3
3
 
4
+ ## [v0.7.0](https://github.com/Apipie/apipie-rails/tree/v0.7.0) (2022-03-30)
5
+ [Full Changelog](https://github.com/Apipie/apipie-rails/compare/v0.6.0...v0.7.0)
6
+ * ArgumentError (invalid byte sequence in UTF-8) [#746](https://github.com/Apipie/apipie-rails/pull/746) (David Milanese)
7
+ * Fix allow_blank does not work [#733](https://github.com/Apipie/apipie-rails/pull/733) (CHEN Song)
8
+ * Fix schema generation for param descriptions using the array validator in option [#732](https://github.com/Apipie/apipie-rails/pull/732) (Frank Hock)
9
+ * Remove support for Rails 4 and Ruby <= 2.5 [#747](https://github.com/Apipie/apipie-rails/pull/747) (Mathieu Jobin)
10
+
4
11
  ## [v0.6.0](https://github.com/Apipie/apipie-rails/tree/v0.6.0) (2022-03-29)
5
12
  [Full Changelog](https://github.com/Apipie/apipie-rails/compare/v0.5.20...v0.6.0)
6
13
  * Ruby 3.0 fixes [#716](https://github.com/Apipie/apipie-rails/pull/716) (hank-spokeo)
data/Gemfile CHANGED
@@ -1 +1 @@
1
- Gemfile.rails61
1
+ ./Gemfile.rails61
data/apipie-rails.gemspec CHANGED
@@ -10,14 +10,14 @@ Gem::Specification.new do |s|
10
10
  s.homepage = "http://github.com/Apipie/apipie-rails"
11
11
  s.summary = %q{Rails REST API documentation tool}
12
12
  s.description = %q{Rails REST API documentation tool}
13
- s.required_ruby_version = '>= 2.0.0'
13
+ s.required_ruby_version = '>= 2.6.0'
14
14
 
15
15
  s.files = `git ls-files`.split("\n")
16
16
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
17
  s.require_paths = ["lib"]
18
18
 
19
- s.add_dependency "actionpack", ">= 4.1"
20
- s.add_dependency "activesupport", ">= 4.1"
19
+ s.add_dependency "actionpack", ">= 5.0"
20
+ s.add_dependency "activesupport", ">= 5.0"
21
21
  s.add_development_dependency "rspec-rails", "~> 3.0"
22
22
  s.add_development_dependency "sqlite3"
23
23
  s.add_development_dependency "minitest"
@@ -0,0 +1,10 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'actionpack', '~> 5.0.0'
6
+ gem 'activesupport', '~> 5.0.0'
7
+ gem 'mime-types', '~> 2.99.3'
8
+ gem 'rails-controller-testing'
9
+
10
+ gem 'test_engine', path: '../spec/dummy/components/test_engine', group: :test
@@ -0,0 +1,10 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'actionpack', '~> 5.1.0'
6
+ gem 'activesupport', '~> 5.1.0'
7
+ gem 'mime-types', '~> 2.99.3'
8
+ gem 'rails-controller-testing'
9
+
10
+ gem 'test_engine', path: '../spec/dummy/components/test_engine', group: :test
@@ -117,7 +117,7 @@ module Apipie
117
117
  return true if @allow_nil && value.nil?
118
118
  return true if @allow_blank && value.blank?
119
119
  value = normalized_value(value)
120
- if (!@allow_nil && value.nil?) || !@validator.valid?(value)
120
+ if (!@allow_nil && value.nil?) || (!@allow_blank && value.blank?) || !@validator.valid?(value)
121
121
  error = @validator.error
122
122
  error = ParamError.new(error) unless error.is_a? StandardError
123
123
  raise error
@@ -9,7 +9,9 @@ module Apipie
9
9
 
10
10
  def match?(path)
11
11
  # Replace all null bytes
12
- path = ::Rack::Utils.unescape(path || '').gsub(/\x0/, '')
12
+ path = ::Rack::Utils.unescape(path || '')
13
+ .encode(Encoding::UTF_8, invalid: :replace, replace: '')
14
+ .gsub(/\x0/, '')
13
15
 
14
16
  full_path = path.empty? ? @root : File.join(@root, path)
15
17
  paths = "#{full_path}#{ext}"
@@ -476,6 +476,9 @@ module Apipie
476
476
 
477
477
  if swagger_def[:type] == "array"
478
478
  swagger_def[:items] = {type: "string"}
479
+ enum = param_desc.options.fetch(:in, [])
480
+
481
+ swagger_def[:items][:enum] = enum if enum.any?
479
482
  end
480
483
 
481
484
  if swagger_def[:type] == "enum"
@@ -504,7 +507,8 @@ module Apipie
504
507
  end
505
508
 
506
509
  if !in_schema
507
- swagger_def[:in] = param_desc.options.fetch(:in, @default_value_for_param_in)
510
+ # the "name" and "in" keys can only be set on root parameters (non-nested)
511
+ swagger_def[:in] = @default_value_for_param_in if name.present?
508
512
  swagger_def[:required] = param_desc.required if param_desc.required
509
513
  end
510
514
 
@@ -1,3 +1,3 @@
1
1
  module Apipie
2
- VERSION = "0.6.0"
2
+ VERSION = "0.7.0"
3
3
  end
@@ -274,6 +274,12 @@ class UsersController < ApplicationController
274
274
  render :plain => 'nothing to see here'
275
275
  end
276
276
 
277
+ api :GET, '/users/in_departments', 'show users from specific departments'
278
+ param :departments, Array, in: ["finance", "operations", "sales", "marketing", "HR"], default_value: ['sales']
279
+ def get_in_departments
280
+ render :plain => 'nothing to see here'
281
+ end
282
+
277
283
  api :GET, '/users/desc_from_file', 'desc from file'
278
284
  document 'users/desc_from_file.md'
279
285
  def desc_from_file
@@ -14,5 +14,12 @@ describe Apipie::FileHandler do
14
14
  it { expect(file_handler.match? path).to be_falsy }
15
15
  it { expect { file_handler.match? path }.to_not raise_error }
16
16
  end
17
+
18
+ context 'when the path contans an invalid byte sequence in UTF-8' do
19
+ let(:path) { "%B6" }
20
+
21
+ it { expect(file_handler.match? path).to be_falsy }
22
+ it { expect { file_handler.match? path }.to_not raise_error }
23
+ end
17
24
  end
18
25
  end
@@ -51,6 +51,17 @@ describe 'rake tasks' do
51
51
  expect(param[field]).to eq(value)
52
52
  end
53
53
 
54
+ def expect_array_param_def(http_method, path, param_name, value)
55
+ params = apidoc_swagger["paths"][path][http_method]["parameters"]
56
+ param = params.select { |p| p if p["name"] == param_name }[0]
57
+
58
+ expect(param['type']).to eq('array')
59
+ expect(param['items']).to eq(
60
+ 'type' => 'string',
61
+ 'enum' => value
62
+ )
63
+ end
64
+
54
65
  def expect_tags_def(http_method, path, value)
55
66
  params = apidoc_swagger["paths"][path][http_method]["tags"]
56
67
  expect(params).to eq(value)
@@ -119,6 +130,10 @@ describe 'rake tasks' do
119
130
  expect_param_def("get", "/users/by_department", "department", "enum",
120
131
  ["finance", "operations", "sales", "marketing", "HR"])
121
132
 
133
+ expect_param_def("get", "/users/in_departments", "departments", "in", "query")
134
+ expect_array_param_def("get", "/users/in_departments", "departments",
135
+ ["finance", "operations", "sales", "marketing", "HR"])
136
+
122
137
  expect_tags_def("get", "/twitter_example/{id}/followers", %w[twitter_example following index search])
123
138
 
124
139
  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.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Pokorny
@@ -17,28 +17,28 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: '4.1'
20
+ version: '5.0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: '4.1'
27
+ version: '5.0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: activesupport
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: '4.1'
34
+ version: '5.0'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: '4.1'
41
+ version: '5.0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: rspec-rails
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -211,8 +211,8 @@ files:
211
211
  - config/locales/tr.yml
212
212
  - config/locales/zh-CN.yml
213
213
  - config/locales/zh-TW.yml
214
- - gemfiles/Gemfile.rails42
215
- - gemfiles/Gemfile.rails42.lock
214
+ - gemfiles/Gemfile.rails50
215
+ - gemfiles/Gemfile.rails51
216
216
  - gemfiles/Gemfile.rails52
217
217
  - gemfiles/Gemfile.rails60
218
218
  - gemfiles/Gemfile.rails61
@@ -350,14 +350,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
350
350
  requirements:
351
351
  - - ">="
352
352
  - !ruby/object:Gem::Version
353
- version: 2.0.0
353
+ version: 2.6.0
354
354
  required_rubygems_version: !ruby/object:Gem::Requirement
355
355
  requirements:
356
356
  - - ">="
357
357
  - !ruby/object:Gem::Version
358
358
  version: '0'
359
359
  requirements: []
360
- rubygems_version: 3.2.32
360
+ rubygems_version: 3.0.9
361
361
  signing_key:
362
362
  specification_version: 4
363
363
  summary: Rails REST API documentation tool
@@ -1,15 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gemspec path: '..'
4
-
5
- gem 'actionpack', '~> 4.2.5'
6
- gem 'activesupport', '~> 4.2.5'
7
- gem 'mime-types', '~> 2.99.3'
8
- gem 'sqlite3', '~> 1.3.6'
9
-
10
- if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.1.0')
11
- gem 'nokogiri', '~> 1.6.8'
12
- gem 'rdoc', '~> 4.2.2'
13
- end
14
-
15
- gem 'test_engine', path: '../spec/dummy/components/test_engine', group: :test
@@ -1,122 +0,0 @@
1
- PATH
2
- remote: ../spec/dummy/components/test_engine
3
- specs:
4
- test_engine (0.0.1)
5
-
6
- PATH
7
- remote: ..
8
- specs:
9
- apipie-rails (0.5.20)
10
- actionpack (>= 4.1)
11
- activesupport (>= 4.1)
12
-
13
- GEM
14
- remote: https://rubygems.org/
15
- specs:
16
- RedCloth (4.3.2)
17
- actionpack (4.2.11.3)
18
- actionview (= 4.2.11.3)
19
- activesupport (= 4.2.11.3)
20
- rack (~> 1.6)
21
- rack-test (~> 0.6.2)
22
- rails-dom-testing (~> 1.0, >= 1.0.5)
23
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
24
- actionview (4.2.11.3)
25
- activesupport (= 4.2.11.3)
26
- builder (~> 3.1)
27
- erubis (~> 2.7.0)
28
- rails-dom-testing (~> 1.0, >= 1.0.5)
29
- rails-html-sanitizer (~> 1.0, >= 1.0.3)
30
- activesupport (4.2.11.3)
31
- i18n (~> 0.7)
32
- minitest (~> 5.1)
33
- thread_safe (~> 0.3, >= 0.3.4)
34
- tzinfo (~> 1.1)
35
- addressable (2.8.0)
36
- public_suffix (>= 2.0.2, < 5.0)
37
- builder (3.2.4)
38
- concurrent-ruby (1.1.10)
39
- crass (1.0.6)
40
- diff-lcs (1.5.0)
41
- erubis (2.7.0)
42
- i18n (0.9.5)
43
- concurrent-ruby (~> 1.0)
44
- json-schema (2.8.1)
45
- addressable (>= 2.4)
46
- loofah (2.15.0)
47
- crass (~> 1.0.2)
48
- nokogiri (>= 1.5.9)
49
- maruku (0.7.3)
50
- mime-types (2.99.3)
51
- mini_portile2 (2.8.0)
52
- minitest (5.15.0)
53
- nokogiri (1.13.3)
54
- mini_portile2 (~> 2.8.0)
55
- racc (~> 1.4)
56
- psych (4.0.3)
57
- stringio
58
- public_suffix (4.0.6)
59
- racc (1.6.0)
60
- rack (1.6.13)
61
- rack-test (0.6.3)
62
- rack (>= 1.0)
63
- rails-deprecated_sanitizer (1.0.4)
64
- activesupport (>= 4.2.0.alpha)
65
- rails-dom-testing (1.0.9)
66
- activesupport (>= 4.2.0, < 5.0)
67
- nokogiri (~> 1.6)
68
- rails-deprecated_sanitizer (>= 1.0.1)
69
- rails-html-sanitizer (1.4.2)
70
- loofah (~> 2.3)
71
- railties (4.2.11.3)
72
- actionpack (= 4.2.11.3)
73
- activesupport (= 4.2.11.3)
74
- rake (>= 0.8.7)
75
- thor (>= 0.18.1, < 2.0)
76
- rake (13.0.6)
77
- rdoc (6.4.0)
78
- psych (>= 4.0.0)
79
- rspec-core (3.9.3)
80
- rspec-support (~> 3.9.3)
81
- rspec-expectations (3.9.4)
82
- diff-lcs (>= 1.2.0, < 2.0)
83
- rspec-support (~> 3.9.0)
84
- rspec-mocks (3.9.1)
85
- diff-lcs (>= 1.2.0, < 2.0)
86
- rspec-support (~> 3.9.0)
87
- rspec-rails (3.9.1)
88
- actionpack (>= 3.0)
89
- activesupport (>= 3.0)
90
- railties (>= 3.0)
91
- rspec-core (~> 3.9.0)
92
- rspec-expectations (~> 3.9.0)
93
- rspec-mocks (~> 3.9.0)
94
- rspec-support (~> 3.9.0)
95
- rspec-support (3.9.4)
96
- sqlite3 (1.3.13)
97
- stringio (3.0.1)
98
- thor (1.2.1)
99
- thread_safe (0.3.6)
100
- tzinfo (1.2.9)
101
- thread_safe (~> 0.1)
102
-
103
- PLATFORMS
104
- ruby
105
-
106
- DEPENDENCIES
107
- RedCloth
108
- actionpack (~> 4.2.5)
109
- activesupport (~> 4.2.5)
110
- apipie-rails!
111
- json-schema (~> 2.8)
112
- maruku
113
- mime-types (~> 2.99.3)
114
- minitest
115
- rake
116
- rdoc
117
- rspec-rails (~> 3.0)
118
- sqlite3 (~> 1.3.6)
119
- test_engine!
120
-
121
- BUNDLED WITH
122
- 1.17.3