grape 1.0.1 → 1.0.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.
Potentially problematic release.
This version of grape might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/Appraisals +1 -1
- data/CHANGELOG.md +18 -0
- data/Dangerfile +1 -0
- data/Gemfile +9 -10
- data/Gemfile.lock +42 -40
- data/LICENSE +1 -1
- data/README.md +89 -40
- data/Rakefile +1 -46
- data/gemfiles/multi_json.gemfile +9 -10
- data/gemfiles/multi_xml.gemfile +9 -10
- data/gemfiles/rack_1.5.2.gemfile +9 -10
- data/gemfiles/rack_edge.gemfile +9 -10
- data/gemfiles/rails_3.gemfile +9 -10
- data/gemfiles/rails_4.gemfile +9 -10
- data/gemfiles/rails_5.gemfile +9 -10
- data/gemfiles/rails_edge.gemfile +9 -10
- data/grape.gemspec +3 -3
- data/lib/grape/api.rb +2 -2
- data/lib/grape/dsl/inside_route.rb +30 -10
- data/lib/grape/dsl/routing.rb +1 -1
- data/lib/grape/dsl/settings.rb +6 -6
- data/lib/grape/endpoint.rb +1 -1
- data/lib/grape/exceptions/incompatible_option_values.rb +0 -1
- data/lib/grape/exceptions/invalid_accept_header.rb +0 -1
- data/lib/grape/exceptions/invalid_formatter.rb +0 -1
- data/lib/grape/exceptions/invalid_message_body.rb +0 -1
- data/lib/grape/exceptions/invalid_version_header.rb +0 -1
- data/lib/grape/exceptions/invalid_versioner_option.rb +0 -1
- data/lib/grape/exceptions/invalid_with_option_for_represent.rb +0 -1
- data/lib/grape/exceptions/method_not_allowed.rb +0 -1
- data/lib/grape/exceptions/missing_group_type.rb +0 -1
- data/lib/grape/exceptions/missing_mime_type.rb +0 -1
- data/lib/grape/exceptions/missing_option.rb +0 -1
- data/lib/grape/exceptions/missing_vendor_option.rb +0 -1
- data/lib/grape/exceptions/unknown_options.rb +0 -1
- data/lib/grape/exceptions/unknown_parameter.rb +0 -1
- data/lib/grape/exceptions/unknown_validator.rb +0 -1
- data/lib/grape/exceptions/unsupported_group_type.rb +0 -1
- data/lib/grape/namespace.rb +1 -1
- data/lib/grape/router.rb +2 -0
- data/lib/grape/router/pattern.rb +1 -1
- data/lib/grape/router/route.rb +14 -14
- data/lib/grape/validations/params_scope.rb +3 -4
- data/lib/grape/validations/types.rb +14 -1
- data/lib/grape/validations/types/build_coercer.rb +8 -0
- data/lib/grape/validations/types/custom_type_coercer.rb +1 -1
- data/lib/grape/validations/types/custom_type_collection_coercer.rb +71 -0
- data/lib/grape/validations/validators/allow_blank.rb +1 -1
- data/lib/grape/validations/validators/base.rb +1 -0
- data/lib/grape/validations/validators/coerce.rb +6 -0
- data/lib/grape/version.rb +1 -1
- data/pkg/grape-1.0.1.gem +0 -0
- data/spec/grape/api_spec.rb +22 -12
- data/spec/grape/dsl/inside_route_spec.rb +1 -1
- data/spec/grape/dsl/parameters_spec.rb +5 -5
- data/spec/grape/dsl/settings_spec.rb +2 -2
- data/spec/grape/endpoint_spec.rb +25 -12
- data/spec/grape/entity_spec.rb +1 -1
- data/spec/grape/exceptions/invalid_formatter_spec.rb +0 -1
- data/spec/grape/exceptions/invalid_versioner_option_spec.rb +0 -1
- data/spec/grape/exceptions/missing_option_spec.rb +0 -1
- data/spec/grape/exceptions/unknown_options_spec.rb +1 -2
- data/spec/grape/exceptions/unknown_validator_spec.rb +0 -1
- data/spec/grape/exceptions/validation_errors_spec.rb +1 -1
- data/spec/grape/middleware/exception_spec.rb +36 -12
- data/spec/grape/middleware/formatter_spec.rb +1 -1
- data/spec/grape/middleware/versioner/header_spec.rb +1 -1
- data/spec/grape/middleware/versioner/param_spec.rb +1 -1
- data/spec/grape/middleware/versioner/path_spec.rb +1 -1
- data/spec/grape/path_spec.rb +3 -3
- data/spec/grape/util/inheritable_setting_spec.rb +2 -2
- data/spec/grape/util/reverse_stackable_values_spec.rb +13 -13
- data/spec/grape/util/stackable_values_spec.rb +13 -13
- data/spec/grape/util/strict_hash_configuration_spec.rb +1 -1
- data/spec/grape/validations/params_scope_spec.rb +19 -7
- data/spec/grape/validations/validators/all_or_none_spec.rb +1 -1
- data/spec/grape/validations/validators/at_least_one_of_spec.rb +1 -1
- data/spec/grape/validations/validators/coerce_spec.rb +94 -13
- data/spec/grape/validations/validators/default_spec.rb +40 -0
- data/spec/grape/validations/validators/exactly_one_of_spec.rb +1 -1
- data/spec/grape/validations/validators/mutual_exclusion_spec.rb +1 -1
- data/spec/grape/validations/validators/values_spec.rb +3 -3
- data/spec/grape/validations_spec.rb +9 -9
- data/spec/shared/versioning_examples.rb +58 -0
- data/spec/support/content_type_helpers.rb +1 -1
- metadata +26 -24
data/Rakefile
CHANGED
@@ -22,49 +22,4 @@ require 'rainbow/ext/string' unless String.respond_to?(:color)
|
|
22
22
|
require 'rubocop/rake_task'
|
23
23
|
RuboCop::RakeTask.new
|
24
24
|
|
25
|
-
task default: [
|
26
|
-
|
27
|
-
begin
|
28
|
-
require 'yard'
|
29
|
-
DOC_FILES = ['lib/**/*.rb', 'README.md'].freeze
|
30
|
-
|
31
|
-
YARD::Rake::YardocTask.new(:doc) do |t|
|
32
|
-
t.files = DOC_FILES
|
33
|
-
end
|
34
|
-
|
35
|
-
namespace :doc do
|
36
|
-
YARD::Rake::YardocTask.new(:pages) do |t|
|
37
|
-
t.files = DOC_FILES
|
38
|
-
t.options = ['-o', '../grape.doc/docs']
|
39
|
-
end
|
40
|
-
|
41
|
-
namespace :pages do
|
42
|
-
desc 'Check out gh-pages.'
|
43
|
-
task :checkout do
|
44
|
-
dir = File.dirname(__FILE__) + '/../grape.doc'
|
45
|
-
unless Dir.exist?(dir)
|
46
|
-
Dir.mkdir(dir)
|
47
|
-
Dir.chdir(dir) do
|
48
|
-
system('git init')
|
49
|
-
system('git remote add origin git@github.com:ruby-grape/grape.git')
|
50
|
-
system('git pull')
|
51
|
-
system('git checkout gh-pages')
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
desc 'Generate and publish YARD docs to GitHub pages.'
|
57
|
-
task publish: ['doc:pages:checkout', 'doc:pages'] do
|
58
|
-
Dir.chdir(File.dirname(__FILE__) + '/../grape.doc') do
|
59
|
-
system('git checkout gh-pages')
|
60
|
-
system('git add .')
|
61
|
-
system('git add -u')
|
62
|
-
system("git commit -m 'Generating docs for version #{Grape::VERSION}.'")
|
63
|
-
system('git push origin gh-pages')
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
rescue LoadError # rubocop:disable Lint/HandleExceptions
|
69
|
-
# ignore
|
70
|
-
end
|
25
|
+
task default: %i[rubocop spec]
|
data/gemfiles/multi_json.gemfile
CHANGED
@@ -6,31 +6,30 @@ gem 'multi_json', require: 'multi_json'
|
|
6
6
|
|
7
7
|
group :development, :test do
|
8
8
|
gem 'bundler'
|
9
|
-
gem 'rake'
|
10
|
-
gem 'rubocop', '0.47.0'
|
11
9
|
gem 'hashie'
|
10
|
+
gem 'rake'
|
11
|
+
gem 'rubocop', '0.51.0'
|
12
12
|
end
|
13
13
|
|
14
14
|
group :development do
|
15
|
+
gem 'appraisal'
|
16
|
+
gem 'benchmark-ips'
|
15
17
|
gem 'guard'
|
16
18
|
gem 'guard-rspec'
|
17
19
|
gem 'guard-rubocop'
|
18
|
-
gem 'yard'
|
19
|
-
gem 'appraisal'
|
20
|
-
gem 'benchmark-ips'
|
21
|
-
gem 'redcarpet'
|
22
20
|
end
|
23
21
|
|
24
22
|
group :test do
|
23
|
+
gem 'cookiejar'
|
24
|
+
gem 'coveralls', '~> 0.8.17', require: false
|
25
|
+
gem 'danger-toc', '~> 0.1.0'
|
25
26
|
gem 'grape-entity', '~> 0.6'
|
26
27
|
gem 'maruku'
|
28
|
+
gem 'mime-types'
|
29
|
+
gem 'rack-jsonp', require: 'rack/jsonp'
|
27
30
|
gem 'rack-test', '~> 0.6.3'
|
28
31
|
gem 'rspec', '~> 3.0'
|
29
|
-
gem 'cookiejar'
|
30
|
-
gem 'rack-jsonp', require: 'rack/jsonp'
|
31
|
-
gem 'mime-types'
|
32
32
|
gem 'ruby-grape-danger', '~> 0.1.0', require: false
|
33
|
-
gem 'coveralls', '~> 0.8.17', require: false
|
34
33
|
end
|
35
34
|
|
36
35
|
gemspec path: '../'
|
data/gemfiles/multi_xml.gemfile
CHANGED
@@ -6,31 +6,30 @@ gem 'multi_xml', require: 'multi_xml'
|
|
6
6
|
|
7
7
|
group :development, :test do
|
8
8
|
gem 'bundler'
|
9
|
-
gem 'rake'
|
10
|
-
gem 'rubocop', '0.47.0'
|
11
9
|
gem 'hashie'
|
10
|
+
gem 'rake'
|
11
|
+
gem 'rubocop', '0.51.0'
|
12
12
|
end
|
13
13
|
|
14
14
|
group :development do
|
15
|
+
gem 'appraisal'
|
16
|
+
gem 'benchmark-ips'
|
15
17
|
gem 'guard'
|
16
18
|
gem 'guard-rspec'
|
17
19
|
gem 'guard-rubocop'
|
18
|
-
gem 'yard'
|
19
|
-
gem 'appraisal'
|
20
|
-
gem 'benchmark-ips'
|
21
|
-
gem 'redcarpet'
|
22
20
|
end
|
23
21
|
|
24
22
|
group :test do
|
23
|
+
gem 'cookiejar'
|
24
|
+
gem 'coveralls', '~> 0.8.17', require: false
|
25
|
+
gem 'danger-toc', '~> 0.1.0'
|
25
26
|
gem 'grape-entity', '~> 0.6'
|
26
27
|
gem 'maruku'
|
28
|
+
gem 'mime-types'
|
29
|
+
gem 'rack-jsonp', require: 'rack/jsonp'
|
27
30
|
gem 'rack-test', '~> 0.6.3'
|
28
31
|
gem 'rspec', '~> 3.0'
|
29
|
-
gem 'cookiejar'
|
30
|
-
gem 'rack-jsonp', require: 'rack/jsonp'
|
31
|
-
gem 'mime-types'
|
32
32
|
gem 'ruby-grape-danger', '~> 0.1.0', require: false
|
33
|
-
gem 'coveralls', '~> 0.8.17', require: false
|
34
33
|
end
|
35
34
|
|
36
35
|
gemspec path: '../'
|
data/gemfiles/rack_1.5.2.gemfile
CHANGED
@@ -6,31 +6,30 @@ gem 'rack', '1.5.2'
|
|
6
6
|
|
7
7
|
group :development, :test do
|
8
8
|
gem 'bundler'
|
9
|
-
gem 'rake'
|
10
|
-
gem 'rubocop', '0.47.0'
|
11
9
|
gem 'hashie'
|
10
|
+
gem 'rake'
|
11
|
+
gem 'rubocop', '0.51.0'
|
12
12
|
end
|
13
13
|
|
14
14
|
group :development do
|
15
|
+
gem 'appraisal'
|
16
|
+
gem 'benchmark-ips'
|
15
17
|
gem 'guard'
|
16
18
|
gem 'guard-rspec'
|
17
19
|
gem 'guard-rubocop'
|
18
|
-
gem 'yard'
|
19
|
-
gem 'appraisal'
|
20
|
-
gem 'benchmark-ips'
|
21
|
-
gem 'redcarpet'
|
22
20
|
end
|
23
21
|
|
24
22
|
group :test do
|
23
|
+
gem 'cookiejar'
|
24
|
+
gem 'coveralls', '~> 0.8.17', require: false
|
25
|
+
gem 'danger-toc', '~> 0.1.0'
|
25
26
|
gem 'grape-entity', '~> 0.6'
|
26
27
|
gem 'maruku'
|
28
|
+
gem 'mime-types'
|
29
|
+
gem 'rack-jsonp', require: 'rack/jsonp'
|
27
30
|
gem 'rack-test', '~> 0.6.3'
|
28
31
|
gem 'rspec', '~> 3.0'
|
29
|
-
gem 'cookiejar'
|
30
|
-
gem 'rack-jsonp', require: 'rack/jsonp'
|
31
|
-
gem 'mime-types'
|
32
32
|
gem 'ruby-grape-danger', '~> 0.1.0', require: false
|
33
|
-
gem 'coveralls', '~> 0.8.17', require: false
|
34
33
|
end
|
35
34
|
|
36
35
|
gemspec path: '../'
|
data/gemfiles/rack_edge.gemfile
CHANGED
@@ -6,31 +6,30 @@ gem 'rack', github: 'rack/rack'
|
|
6
6
|
|
7
7
|
group :development, :test do
|
8
8
|
gem 'bundler'
|
9
|
-
gem 'rake'
|
10
|
-
gem 'rubocop', '0.47.0'
|
11
9
|
gem 'hashie'
|
10
|
+
gem 'rake'
|
11
|
+
gem 'rubocop', '0.51.0'
|
12
12
|
end
|
13
13
|
|
14
14
|
group :development do
|
15
|
+
gem 'appraisal'
|
16
|
+
gem 'benchmark-ips'
|
15
17
|
gem 'guard'
|
16
18
|
gem 'guard-rspec'
|
17
19
|
gem 'guard-rubocop'
|
18
|
-
gem 'yard'
|
19
|
-
gem 'appraisal'
|
20
|
-
gem 'benchmark-ips'
|
21
|
-
gem 'redcarpet'
|
22
20
|
end
|
23
21
|
|
24
22
|
group :test do
|
23
|
+
gem 'cookiejar'
|
24
|
+
gem 'coveralls', '~> 0.8.17', require: false
|
25
|
+
gem 'danger-toc', '~> 0.1.0'
|
25
26
|
gem 'grape-entity', '~> 0.6'
|
26
27
|
gem 'maruku'
|
28
|
+
gem 'mime-types'
|
29
|
+
gem 'rack-jsonp', require: 'rack/jsonp'
|
27
30
|
gem 'rack-test', '~> 0.6.3'
|
28
31
|
gem 'rspec', '~> 3.0'
|
29
|
-
gem 'cookiejar'
|
30
|
-
gem 'rack-jsonp', require: 'rack/jsonp'
|
31
|
-
gem 'mime-types'
|
32
32
|
gem 'ruby-grape-danger', '~> 0.1.0', require: false
|
33
|
-
gem 'coveralls', '~> 0.8.17', require: false
|
34
33
|
end
|
35
34
|
|
36
35
|
gemspec path: '../'
|
data/gemfiles/rails_3.gemfile
CHANGED
@@ -7,31 +7,30 @@ gem 'rack-cache', '<= 1.2'
|
|
7
7
|
|
8
8
|
group :development, :test do
|
9
9
|
gem 'bundler'
|
10
|
-
gem 'rake'
|
11
|
-
gem 'rubocop', '0.47.0'
|
12
10
|
gem 'hashie'
|
11
|
+
gem 'rake'
|
12
|
+
gem 'rubocop', '0.51.0'
|
13
13
|
end
|
14
14
|
|
15
15
|
group :development do
|
16
|
+
gem 'appraisal'
|
17
|
+
gem 'benchmark-ips'
|
16
18
|
gem 'guard'
|
17
19
|
gem 'guard-rspec'
|
18
20
|
gem 'guard-rubocop'
|
19
|
-
gem 'yard'
|
20
|
-
gem 'appraisal'
|
21
|
-
gem 'benchmark-ips'
|
22
|
-
gem 'redcarpet'
|
23
21
|
end
|
24
22
|
|
25
23
|
group :test do
|
24
|
+
gem 'cookiejar'
|
25
|
+
gem 'coveralls', '~> 0.8.17', require: false
|
26
|
+
gem 'danger-toc', '~> 0.1.0'
|
26
27
|
gem 'grape-entity', '~> 0.6'
|
27
28
|
gem 'maruku'
|
29
|
+
gem 'mime-types'
|
30
|
+
gem 'rack-jsonp', require: 'rack/jsonp'
|
28
31
|
gem 'rack-test', '~> 0.6.3'
|
29
32
|
gem 'rspec', '~> 3.0'
|
30
|
-
gem 'cookiejar'
|
31
|
-
gem 'rack-jsonp', require: 'rack/jsonp'
|
32
|
-
gem 'mime-types'
|
33
33
|
gem 'ruby-grape-danger', '~> 0.1.0', require: false
|
34
|
-
gem 'coveralls', '~> 0.8.17', require: false
|
35
34
|
end
|
36
35
|
|
37
36
|
gemspec path: '../'
|
data/gemfiles/rails_4.gemfile
CHANGED
@@ -6,31 +6,30 @@ gem 'rails', '4.1.6'
|
|
6
6
|
|
7
7
|
group :development, :test do
|
8
8
|
gem 'bundler'
|
9
|
-
gem 'rake'
|
10
|
-
gem 'rubocop', '0.47.0'
|
11
9
|
gem 'hashie'
|
10
|
+
gem 'rake'
|
11
|
+
gem 'rubocop', '0.51.0'
|
12
12
|
end
|
13
13
|
|
14
14
|
group :development do
|
15
|
+
gem 'appraisal'
|
16
|
+
gem 'benchmark-ips'
|
15
17
|
gem 'guard'
|
16
18
|
gem 'guard-rspec'
|
17
19
|
gem 'guard-rubocop'
|
18
|
-
gem 'yard'
|
19
|
-
gem 'appraisal'
|
20
|
-
gem 'benchmark-ips'
|
21
|
-
gem 'redcarpet'
|
22
20
|
end
|
23
21
|
|
24
22
|
group :test do
|
23
|
+
gem 'cookiejar'
|
24
|
+
gem 'coveralls', '~> 0.8.17', require: false
|
25
|
+
gem 'danger-toc', '~> 0.1.0'
|
25
26
|
gem 'grape-entity', '~> 0.6'
|
26
27
|
gem 'maruku'
|
28
|
+
gem 'mime-types'
|
29
|
+
gem 'rack-jsonp', require: 'rack/jsonp'
|
27
30
|
gem 'rack-test', '~> 0.6.3'
|
28
31
|
gem 'rspec', '~> 3.0'
|
29
|
-
gem 'cookiejar'
|
30
|
-
gem 'rack-jsonp', require: 'rack/jsonp'
|
31
|
-
gem 'mime-types'
|
32
32
|
gem 'ruby-grape-danger', '~> 0.1.0', require: false
|
33
|
-
gem 'coveralls', '~> 0.8.17', require: false
|
34
33
|
end
|
35
34
|
|
36
35
|
gemspec path: '../'
|
data/gemfiles/rails_5.gemfile
CHANGED
@@ -6,31 +6,30 @@ gem 'rails', '5.0.0'
|
|
6
6
|
|
7
7
|
group :development, :test do
|
8
8
|
gem 'bundler'
|
9
|
-
gem 'rake'
|
10
|
-
gem 'rubocop', '0.47.0'
|
11
9
|
gem 'hashie'
|
10
|
+
gem 'rake'
|
11
|
+
gem 'rubocop', '0.51.0'
|
12
12
|
end
|
13
13
|
|
14
14
|
group :development do
|
15
|
+
gem 'appraisal'
|
16
|
+
gem 'benchmark-ips'
|
15
17
|
gem 'guard'
|
16
18
|
gem 'guard-rspec'
|
17
19
|
gem 'guard-rubocop'
|
18
|
-
gem 'yard'
|
19
|
-
gem 'appraisal'
|
20
|
-
gem 'benchmark-ips'
|
21
|
-
gem 'redcarpet'
|
22
20
|
end
|
23
21
|
|
24
22
|
group :test do
|
23
|
+
gem 'cookiejar'
|
24
|
+
gem 'coveralls', '~> 0.8.17', require: false
|
25
|
+
gem 'danger-toc', '~> 0.1.0'
|
25
26
|
gem 'grape-entity', '~> 0.6'
|
26
27
|
gem 'maruku'
|
28
|
+
gem 'mime-types'
|
29
|
+
gem 'rack-jsonp', require: 'rack/jsonp'
|
27
30
|
gem 'rack-test', '~> 0.6.3'
|
28
31
|
gem 'rspec', '~> 3.0'
|
29
|
-
gem 'cookiejar'
|
30
|
-
gem 'rack-jsonp', require: 'rack/jsonp'
|
31
|
-
gem 'mime-types'
|
32
32
|
gem 'ruby-grape-danger', '~> 0.1.0', require: false
|
33
|
-
gem 'coveralls', '~> 0.8.17', require: false
|
34
33
|
end
|
35
34
|
|
36
35
|
gemspec path: '../'
|
data/gemfiles/rails_edge.gemfile
CHANGED
@@ -6,31 +6,30 @@ gem 'arel', github: 'rails/arel'
|
|
6
6
|
|
7
7
|
group :development, :test do
|
8
8
|
gem 'bundler'
|
9
|
-
gem 'rake'
|
10
|
-
gem 'rubocop', '0.47.0'
|
11
9
|
gem 'hashie'
|
10
|
+
gem 'rake'
|
11
|
+
gem 'rubocop', '0.51.0'
|
12
12
|
end
|
13
13
|
|
14
14
|
group :development do
|
15
|
+
gem 'appraisal'
|
16
|
+
gem 'benchmark-ips'
|
15
17
|
gem 'guard'
|
16
18
|
gem 'guard-rspec'
|
17
19
|
gem 'guard-rubocop'
|
18
|
-
gem 'yard'
|
19
|
-
gem 'appraisal'
|
20
|
-
gem 'benchmark-ips'
|
21
|
-
gem 'redcarpet'
|
22
20
|
end
|
23
21
|
|
24
22
|
group :test do
|
23
|
+
gem 'cookiejar'
|
24
|
+
gem 'coveralls', '~> 0.8.17', require: false
|
25
|
+
gem 'danger-toc', '~> 0.1.0'
|
25
26
|
gem 'grape-entity', '~> 0.6'
|
26
27
|
gem 'maruku'
|
28
|
+
gem 'mime-types'
|
29
|
+
gem 'rack-jsonp', require: 'rack/jsonp'
|
27
30
|
gem 'rack-test', '~> 0.6.3'
|
28
31
|
gem 'rspec', '~> 3.0'
|
29
|
-
gem 'cookiejar'
|
30
|
-
gem 'rack-jsonp', require: 'rack/jsonp'
|
31
|
-
gem 'mime-types'
|
32
32
|
gem 'ruby-grape-danger', '~> 0.1.0', require: false
|
33
|
-
gem 'coveralls', '~> 0.8.17', require: false
|
34
33
|
end
|
35
34
|
|
36
35
|
gemspec path: '../'
|
data/grape.gemspec
CHANGED
@@ -12,12 +12,12 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.description = 'A Ruby framework for rapid API development with great conventions.'
|
13
13
|
s.license = 'MIT'
|
14
14
|
|
15
|
-
s.add_runtime_dependency '
|
15
|
+
s.add_runtime_dependency 'activesupport'
|
16
|
+
s.add_runtime_dependency 'builder'
|
16
17
|
s.add_runtime_dependency 'mustermann-grape', '~> 1.0.0'
|
18
|
+
s.add_runtime_dependency 'rack', '>= 1.3.0'
|
17
19
|
s.add_runtime_dependency 'rack-accept'
|
18
|
-
s.add_runtime_dependency 'activesupport'
|
19
20
|
s.add_runtime_dependency 'virtus', '>= 1.0.0'
|
20
|
-
s.add_runtime_dependency 'builder'
|
21
21
|
|
22
22
|
s.files = Dir['**/*'].keep_if { |file| File.file?(file) }
|
23
23
|
s.test_files = Dir['spec/**/*']
|
data/lib/grape/api.rb
CHANGED
@@ -161,7 +161,7 @@ module Grape
|
|
161
161
|
route_settings[:endpoint] = route.app
|
162
162
|
|
163
163
|
# using the :any shorthand produces [nil] for route methods, substitute all manually
|
164
|
-
route_settings[:methods] = %w
|
164
|
+
route_settings[:methods] = %w[GET PUT POST DELETE PATCH HEAD OPTIONS] if route_settings[:methods].include?('*')
|
165
165
|
end
|
166
166
|
end
|
167
167
|
|
@@ -195,7 +195,7 @@ module Grape
|
|
195
195
|
# Generate a route that returns an HTTP 405 response for a user defined
|
196
196
|
# path on methods not specified
|
197
197
|
def generate_not_allowed_method(pattern, allowed_methods: [], **attributes)
|
198
|
-
not_allowed_methods = %w
|
198
|
+
not_allowed_methods = %w[GET PUT POST DELETE PATCH HEAD] - allowed_methods
|
199
199
|
not_allowed_methods << Grape::Http::Headers::OPTIONS if self.class.namespace_inheritable(:do_not_route_options)
|
200
200
|
|
201
201
|
return if not_allowed_methods.empty?
|
@@ -47,9 +47,20 @@ module Grape
|
|
47
47
|
|
48
48
|
def declared_hash(passed_params, options, declared_params)
|
49
49
|
declared_params.each_with_object(passed_params.class.new) do |declared_param, memo|
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
if declared_param.is_a?(Hash)
|
51
|
+
declared_param.each_pair do |declared_parent_param, declared_children_params|
|
52
|
+
next unless options[:include_missing] || passed_params.key?(declared_parent_param)
|
53
|
+
|
54
|
+
passed_children_params = passed_params[declared_parent_param] || passed_params.class.new
|
55
|
+
memo_key = optioned_param_key(declared_parent_param, options)
|
56
|
+
|
57
|
+
memo[memo_key] = handle_passed_param(declared_parent_param, passed_children_params) do
|
58
|
+
declared(passed_children_params, options, declared_children_params)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
else
|
62
|
+
# If it is not a Hash then it does not have children.
|
63
|
+
# Find its value or set it to nil.
|
53
64
|
has_alias = route_setting(:aliased_params) && route_setting(:aliased_params).find { |current| current[declared_param] }
|
54
65
|
param_alias = has_alias[declared_param] if has_alias
|
55
66
|
|
@@ -60,17 +71,26 @@ module Grape
|
|
60
71
|
else
|
61
72
|
memo[optioned_param_key(declared_param, options)] = passed_params[declared_param]
|
62
73
|
end
|
63
|
-
else
|
64
|
-
declared_param.each_pair do |declared_parent_param, declared_children_params|
|
65
|
-
next unless options[:include_missing] || passed_params.key?(declared_parent_param)
|
66
|
-
|
67
|
-
passed_children_params = passed_params[declared_parent_param] || passed_params.class.new
|
68
|
-
memo[optioned_param_key(declared_parent_param, options)] = declared(passed_children_params, options, declared_children_params)
|
69
|
-
end
|
70
74
|
end
|
71
75
|
end
|
72
76
|
end
|
73
77
|
|
78
|
+
def handle_passed_param(declared_param, passed_children_params, &_block)
|
79
|
+
should_be_empty_array?(declared_param, passed_children_params) ? [] : yield
|
80
|
+
end
|
81
|
+
|
82
|
+
def should_be_empty_array?(declared_param, passed_children_params)
|
83
|
+
declared_param_is_array?(declared_param) && passed_children_params.empty?
|
84
|
+
end
|
85
|
+
|
86
|
+
def declared_param_is_array?(declared_param)
|
87
|
+
route_options_params[declared_param.to_s] && route_options_params[declared_param.to_s][:type] == 'Array'
|
88
|
+
end
|
89
|
+
|
90
|
+
def route_options_params
|
91
|
+
options[:route_options][:params] || {}
|
92
|
+
end
|
93
|
+
|
74
94
|
def optioned_param_key(declared_param, options)
|
75
95
|
options[:stringify] ? declared_param.to_s : declared_param.to_sym
|
76
96
|
end
|