grape 1.1.0 → 1.2.5

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.
Files changed (111) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +128 -43
  3. data/LICENSE +1 -1
  4. data/README.md +394 -47
  5. data/UPGRADING.md +111 -0
  6. data/grape.gemspec +3 -1
  7. data/lib/grape.rb +98 -66
  8. data/lib/grape/api.rb +136 -175
  9. data/lib/grape/api/instance.rb +280 -0
  10. data/lib/grape/config.rb +32 -0
  11. data/lib/grape/dsl/callbacks.rb +20 -0
  12. data/lib/grape/dsl/desc.rb +39 -7
  13. data/lib/grape/dsl/inside_route.rb +12 -6
  14. data/lib/grape/dsl/middleware.rb +7 -0
  15. data/lib/grape/dsl/parameters.rb +9 -4
  16. data/lib/grape/dsl/routing.rb +5 -1
  17. data/lib/grape/dsl/validations.rb +4 -3
  18. data/lib/grape/eager_load.rb +18 -0
  19. data/lib/grape/endpoint.rb +42 -26
  20. data/lib/grape/error_formatter.rb +1 -1
  21. data/lib/grape/exceptions/base.rb +9 -1
  22. data/lib/grape/exceptions/invalid_response.rb +9 -0
  23. data/lib/grape/exceptions/validation_errors.rb +4 -2
  24. data/lib/grape/formatter.rb +1 -1
  25. data/lib/grape/locale/en.yml +2 -0
  26. data/lib/grape/middleware/auth/base.rb +2 -4
  27. data/lib/grape/middleware/base.rb +2 -0
  28. data/lib/grape/middleware/error.rb +9 -4
  29. data/lib/grape/middleware/helpers.rb +10 -0
  30. data/lib/grape/middleware/stack.rb +1 -1
  31. data/lib/grape/middleware/versioner/header.rb +4 -4
  32. data/lib/grape/parser.rb +1 -1
  33. data/lib/grape/request.rb +1 -1
  34. data/lib/grape/router/attribute_translator.rb +2 -0
  35. data/lib/grape/router/route.rb +2 -2
  36. data/lib/grape/util/base_inheritable.rb +34 -0
  37. data/lib/grape/util/endpoint_configuration.rb +6 -0
  38. data/lib/grape/util/inheritable_values.rb +5 -25
  39. data/lib/grape/util/lazy_block.rb +25 -0
  40. data/lib/grape/util/lazy_value.rb +95 -0
  41. data/lib/grape/util/reverse_stackable_values.rb +7 -36
  42. data/lib/grape/util/stackable_values.rb +19 -22
  43. data/lib/grape/validations/attributes_iterator.rb +5 -3
  44. data/lib/grape/validations/multiple_attributes_iterator.rb +11 -0
  45. data/lib/grape/validations/params_scope.rb +20 -14
  46. data/lib/grape/validations/single_attribute_iterator.rb +13 -0
  47. data/lib/grape/validations/types/custom_type_coercer.rb +1 -1
  48. data/lib/grape/validations/types/file.rb +1 -1
  49. data/lib/grape/validations/validator_factory.rb +6 -11
  50. data/lib/grape/validations/validators/all_or_none.rb +6 -13
  51. data/lib/grape/validations/validators/as.rb +2 -3
  52. data/lib/grape/validations/validators/at_least_one_of.rb +5 -13
  53. data/lib/grape/validations/validators/base.rb +11 -10
  54. data/lib/grape/validations/validators/coerce.rb +4 -0
  55. data/lib/grape/validations/validators/default.rb +1 -1
  56. data/lib/grape/validations/validators/exactly_one_of.rb +6 -23
  57. data/lib/grape/validations/validators/multiple_params_base.rb +14 -10
  58. data/lib/grape/validations/validators/mutual_exclusion.rb +6 -18
  59. data/lib/grape/validations/validators/same_as.rb +23 -0
  60. data/lib/grape/version.rb +1 -1
  61. data/spec/grape/api/defines_boolean_in_params_spec.rb +37 -0
  62. data/spec/grape/api/routes_with_requirements_spec.rb +59 -0
  63. data/spec/grape/api_remount_spec.rb +466 -0
  64. data/spec/grape/api_spec.rb +379 -1
  65. data/spec/grape/config_spec.rb +17 -0
  66. data/spec/grape/dsl/desc_spec.rb +40 -16
  67. data/spec/grape/dsl/middleware_spec.rb +8 -0
  68. data/spec/grape/dsl/routing_spec.rb +10 -0
  69. data/spec/grape/endpoint_spec.rb +40 -4
  70. data/spec/grape/exceptions/base_spec.rb +65 -0
  71. data/spec/grape/exceptions/invalid_response_spec.rb +11 -0
  72. data/spec/grape/exceptions/validation_errors_spec.rb +6 -4
  73. data/spec/grape/integration/rack_spec.rb +22 -6
  74. data/spec/grape/middleware/auth/dsl_spec.rb +3 -3
  75. data/spec/grape/middleware/base_spec.rb +8 -0
  76. data/spec/grape/middleware/exception_spec.rb +1 -1
  77. data/spec/grape/middleware/formatter_spec.rb +15 -5
  78. data/spec/grape/middleware/versioner/header_spec.rb +6 -0
  79. data/spec/grape/named_api_spec.rb +19 -0
  80. data/spec/grape/request_spec.rb +24 -0
  81. data/spec/grape/validations/multiple_attributes_iterator_spec.rb +29 -0
  82. data/spec/grape/validations/params_scope_spec.rb +184 -8
  83. data/spec/grape/validations/single_attribute_iterator_spec.rb +33 -0
  84. data/spec/grape/validations/validators/all_or_none_spec.rb +138 -30
  85. data/spec/grape/validations/validators/at_least_one_of_spec.rb +173 -29
  86. data/spec/grape/validations/validators/coerce_spec.rb +10 -2
  87. data/spec/grape/validations/validators/exactly_one_of_spec.rb +202 -38
  88. data/spec/grape/validations/validators/mutual_exclusion_spec.rb +184 -27
  89. data/spec/grape/validations/validators/same_as_spec.rb +63 -0
  90. data/spec/grape/validations_spec.rb +33 -21
  91. data/spec/spec_helper.rb +4 -1
  92. metadata +35 -23
  93. data/Appraisals +0 -32
  94. data/Dangerfile +0 -2
  95. data/Gemfile +0 -33
  96. data/Gemfile.lock +0 -231
  97. data/Guardfile +0 -10
  98. data/RELEASING.md +0 -111
  99. data/Rakefile +0 -25
  100. data/benchmark/simple.rb +0 -27
  101. data/benchmark/simple_with_type_coercer.rb +0 -22
  102. data/gemfiles/multi_json.gemfile +0 -35
  103. data/gemfiles/multi_xml.gemfile +0 -35
  104. data/gemfiles/rack_1.5.2.gemfile +0 -35
  105. data/gemfiles/rack_edge.gemfile +0 -35
  106. data/gemfiles/rails_3.gemfile +0 -36
  107. data/gemfiles/rails_4.gemfile +0 -35
  108. data/gemfiles/rails_5.gemfile +0 -35
  109. data/gemfiles/rails_edge.gemfile +0 -35
  110. data/pkg/grape-0.17.0.gem +0 -0
  111. data/pkg/grape-0.19.0.gem +0 -0
data/Guardfile DELETED
@@ -1,10 +0,0 @@
1
- guard :rspec, all_on_start: true, cmd: 'bundle exec rspec' do
2
- watch(%r{^spec/.+_spec\.rb$})
3
- watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
4
- watch('spec/spec_helper.rb') { 'spec' }
5
- end
6
-
7
- guard :rubocop do
8
- watch(/.+\.rb$/)
9
- watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
10
- end
@@ -1,111 +0,0 @@
1
- Releasing Grape
2
- ===============
3
-
4
- There're no particular rules about when to release Grape. Release bug fixes frequently, features not so frequently and breaking API changes rarely.
5
-
6
- ### Release
7
-
8
- Run tests, check that all tests succeed locally.
9
-
10
- ```
11
- bundle install
12
- rake
13
- ```
14
-
15
- Check that the last build succeeded in [Travis CI](https://travis-ci.org/ruby-grape/grape) for all supported platforms.
16
-
17
- Those with r/w permissions to the [master Grape repository](https://github.com/ruby-grape/grape) generally have large Grape-based projects. Point one to Grape HEAD and run all your API tests to catch any obvious regressions.
18
-
19
- ```
20
- gem grape, github: 'ruby-grape/grape'
21
- ```
22
-
23
- Increment the version, modify [lib/grape/version.rb](lib/grape/version.rb).
24
-
25
- * Increment the third number if the release has bug fixes and/or very minor features, only (eg. change `0.5.1` to `0.5.2`).
26
- * Increment the second number if the release contains major features or breaking API changes (eg. change `0.5.1` to `0.6.0`).
27
-
28
- Modify the "Stable Release" section in [README.md](README.md). Change the text to reflect that this is going to be the documentation for a stable release. Remove references to the previous release of Grape. Keep the file open, you'll have to undo this change after the release.
29
-
30
- ```
31
- ## Stable Release
32
-
33
- You're reading the documentation for the stable release of Grape, 0.6.0.
34
- ```
35
-
36
- Change "Next Release" in [CHANGELOG.md](CHANGELOG.md) to the new version.
37
-
38
- ```
39
- #### 0.6.0 (9/16/2013)
40
- ```
41
-
42
- Remove the line with "Your contribution here.", since there will be no more contributions to this release.
43
-
44
- Commit your changes.
45
-
46
- ```
47
- git add README.md CHANGELOG.md lib/grape/version.rb
48
- git commit -m "Preparing for release, 0.6.0."
49
- git push origin master
50
- ```
51
-
52
- Release.
53
-
54
- ```
55
- $ rake release
56
-
57
- grape 0.6.0 built to pkg/grape-0.6.0.gem.
58
- Tagged v0.6.0.
59
- Pushed git commits and tags.
60
- Pushed grape 0.6.0 to rubygems.org.
61
- ```
62
-
63
- ### Prepare for the Next Version
64
-
65
- Modify the "Stable Release" section in [README.md](README.md). Change the text to reflect that this is going to be the next release.
66
-
67
- ```
68
- ## Stable Release
69
-
70
- You're reading the documentation for the next release of Grape, which should be 0.6.1.
71
- The current stable release is [0.6.0](https://github.com/ruby-grape/grape/blob/v0.6.0/README.md).
72
- ```
73
-
74
- Add the next release to [CHANGELOG.md](CHANGELOG.md).
75
-
76
- ```
77
- #### 0.6.1 (Next)
78
-
79
- * Your contribution here.
80
- ```
81
-
82
- Bump the minor version in lib/grape/version.rb.
83
-
84
- ```ruby
85
- module Grape
86
- VERSION = '0.6.1'
87
- end
88
- ```
89
-
90
- Commit your changes.
91
-
92
- ```
93
- git add CHANGELOG.md README.md lib/grape/version.rb
94
- git commit -m "Preparing for next development iteration, 0.6.1."
95
- git push origin master
96
- ```
97
-
98
- ### Make an Announcement
99
-
100
- Make an announcement on the [ruby-grape@googlegroups.com](mailto:ruby-grape@googlegroups.com) mailing list. The general format is as follows.
101
-
102
- ```
103
- Grape 0.6.0 has been released.
104
-
105
- There were 8 contributors to this release, not counting documentation.
106
-
107
- Please note the breaking API change in ...
108
-
109
- [copy/paste CHANGELOG here]
110
-
111
- ```
data/Rakefile DELETED
@@ -1,25 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- Bundler.setup :default, :test, :development
4
-
5
- Bundler::GemHelper.install_tasks
6
-
7
- require 'rspec/core/rake_task'
8
- RSpec::Core::RakeTask.new(:spec) do |spec|
9
- spec.pattern = 'spec/**/*_spec.rb'
10
- spec.exclude_pattern = 'spec/integration/**/*_spec.rb'
11
- end
12
-
13
- RSpec::Core::RakeTask.new(:rcov) do |spec|
14
- spec.pattern = 'spec/**/*_spec.rb'
15
- spec.rcov = true
16
- end
17
-
18
- task :spec
19
-
20
- require 'rainbow/ext/string' unless String.respond_to?(:color)
21
-
22
- require 'rubocop/rake_task'
23
- RuboCop::RakeTask.new
24
-
25
- task default: %i[rubocop spec]
@@ -1,27 +0,0 @@
1
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
- require 'grape'
3
- require 'benchmark/ips'
4
-
5
- class API < Grape::API
6
- prefix :api
7
- version 'v1', using: :path
8
- get '/' do
9
- 'hello'
10
- end
11
- end
12
-
13
- options = {
14
- method: 'GET'
15
- }
16
-
17
- env = Rack::MockRequest.env_for('/api/v1', options)
18
-
19
- 10.times do |i|
20
- env["HTTP_HEADER#{i}"] = '123'
21
- end
22
-
23
- Benchmark.ips do |ips|
24
- ips.report('simple') do
25
- API.call env
26
- end
27
- end
@@ -1,22 +0,0 @@
1
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
- require 'grape'
3
- require 'benchmark/ips'
4
-
5
- api = Class.new(Grape::API) do
6
- prefix :api
7
- version 'v1', using: :path
8
- params do
9
- requires :param, type: Array[String]
10
- end
11
- get '/' do
12
- 'hello'
13
- end
14
- end
15
-
16
- env = Rack::MockRequest.env_for('/api/v1?param=value', method: 'GET')
17
-
18
- Benchmark.ips do |ips|
19
- ips.report('simple_with_type_coercer') do
20
- api.call(env)
21
- end
22
- end
@@ -1,35 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source 'https://rubygems.org'
4
-
5
- gem 'multi_json', require: 'multi_json'
6
-
7
- group :development, :test do
8
- gem 'bundler'
9
- gem 'hashie'
10
- gem 'rake'
11
- gem 'rubocop', '0.51.0'
12
- end
13
-
14
- group :development do
15
- gem 'appraisal'
16
- gem 'benchmark-ips'
17
- gem 'guard'
18
- gem 'guard-rspec'
19
- gem 'guard-rubocop'
20
- end
21
-
22
- group :test do
23
- gem 'cookiejar'
24
- gem 'coveralls', '~> 0.8.17', require: false
25
- gem 'danger-toc', '~> 0.1.2'
26
- gem 'grape-entity', '~> 0.6'
27
- gem 'maruku'
28
- gem 'mime-types'
29
- gem 'rack-jsonp', require: 'rack/jsonp'
30
- gem 'rack-test', '~> 0.6.3'
31
- gem 'rspec', '~> 3.0'
32
- gem 'ruby-grape-danger', '~> 0.1.0', require: false
33
- end
34
-
35
- gemspec path: '../'
@@ -1,35 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source 'https://rubygems.org'
4
-
5
- gem 'multi_xml', require: 'multi_xml'
6
-
7
- group :development, :test do
8
- gem 'bundler'
9
- gem 'hashie'
10
- gem 'rake'
11
- gem 'rubocop', '0.51.0'
12
- end
13
-
14
- group :development do
15
- gem 'appraisal'
16
- gem 'benchmark-ips'
17
- gem 'guard'
18
- gem 'guard-rspec'
19
- gem 'guard-rubocop'
20
- end
21
-
22
- group :test do
23
- gem 'cookiejar'
24
- gem 'coveralls', '~> 0.8.17', require: false
25
- gem 'danger-toc', '~> 0.1.2'
26
- gem 'grape-entity', '~> 0.6'
27
- gem 'maruku'
28
- gem 'mime-types'
29
- gem 'rack-jsonp', require: 'rack/jsonp'
30
- gem 'rack-test', '~> 0.6.3'
31
- gem 'rspec', '~> 3.0'
32
- gem 'ruby-grape-danger', '~> 0.1.0', require: false
33
- end
34
-
35
- gemspec path: '../'
@@ -1,35 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source 'https://rubygems.org'
4
-
5
- gem 'rack', '1.5.2'
6
-
7
- group :development, :test do
8
- gem 'bundler'
9
- gem 'hashie'
10
- gem 'rake'
11
- gem 'rubocop', '0.51.0'
12
- end
13
-
14
- group :development do
15
- gem 'appraisal'
16
- gem 'benchmark-ips'
17
- gem 'guard'
18
- gem 'guard-rspec'
19
- gem 'guard-rubocop'
20
- end
21
-
22
- group :test do
23
- gem 'cookiejar'
24
- gem 'coveralls', '~> 0.8.17', require: false
25
- gem 'danger-toc', '~> 0.1.2'
26
- gem 'grape-entity', '~> 0.6'
27
- gem 'maruku'
28
- gem 'mime-types'
29
- gem 'rack-jsonp', require: 'rack/jsonp'
30
- gem 'rack-test', '~> 0.6.3'
31
- gem 'rspec', '~> 3.0'
32
- gem 'ruby-grape-danger', '~> 0.1.0', require: false
33
- end
34
-
35
- gemspec path: '../'
@@ -1,35 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source 'https://rubygems.org'
4
-
5
- gem 'rack', github: 'rack/rack'
6
-
7
- group :development, :test do
8
- gem 'bundler'
9
- gem 'hashie'
10
- gem 'rake'
11
- gem 'rubocop', '0.51.0'
12
- end
13
-
14
- group :development do
15
- gem 'appraisal'
16
- gem 'benchmark-ips'
17
- gem 'guard'
18
- gem 'guard-rspec'
19
- gem 'guard-rubocop'
20
- end
21
-
22
- group :test do
23
- gem 'cookiejar'
24
- gem 'coveralls', '~> 0.8.17', require: false
25
- gem 'danger-toc', '~> 0.1.2'
26
- gem 'grape-entity', '~> 0.6'
27
- gem 'maruku'
28
- gem 'mime-types'
29
- gem 'rack-jsonp', require: 'rack/jsonp'
30
- gem 'rack-test', '~> 0.6.3'
31
- gem 'rspec', '~> 3.0'
32
- gem 'ruby-grape-danger', '~> 0.1.0', require: false
33
- end
34
-
35
- gemspec path: '../'
@@ -1,36 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source 'https://rubygems.org'
4
-
5
- gem 'rails', '3.2.19'
6
- gem 'rack-cache', '<= 1.2'
7
-
8
- group :development, :test do
9
- gem 'bundler'
10
- gem 'hashie'
11
- gem 'rake'
12
- gem 'rubocop', '0.51.0'
13
- end
14
-
15
- group :development do
16
- gem 'appraisal'
17
- gem 'benchmark-ips'
18
- gem 'guard'
19
- gem 'guard-rspec'
20
- gem 'guard-rubocop'
21
- end
22
-
23
- group :test do
24
- gem 'cookiejar'
25
- gem 'coveralls', '~> 0.8.17', require: false
26
- gem 'danger-toc', '~> 0.1.2'
27
- gem 'grape-entity', '~> 0.6'
28
- gem 'maruku'
29
- gem 'mime-types'
30
- gem 'rack-jsonp', require: 'rack/jsonp'
31
- gem 'rack-test', '~> 0.6.3'
32
- gem 'rspec', '~> 3.0'
33
- gem 'ruby-grape-danger', '~> 0.1.0', require: false
34
- end
35
-
36
- gemspec path: '../'
@@ -1,35 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source 'https://rubygems.org'
4
-
5
- gem 'rails', '4.1.6'
6
-
7
- group :development, :test do
8
- gem 'bundler'
9
- gem 'hashie'
10
- gem 'rake'
11
- gem 'rubocop', '0.51.0'
12
- end
13
-
14
- group :development do
15
- gem 'appraisal'
16
- gem 'benchmark-ips'
17
- gem 'guard'
18
- gem 'guard-rspec'
19
- gem 'guard-rubocop'
20
- end
21
-
22
- group :test do
23
- gem 'cookiejar'
24
- gem 'coveralls', '~> 0.8.17', require: false
25
- gem 'danger-toc', '~> 0.1.2'
26
- gem 'grape-entity', '~> 0.6'
27
- gem 'maruku'
28
- gem 'mime-types'
29
- gem 'rack-jsonp', require: 'rack/jsonp'
30
- gem 'rack-test', '~> 0.6.3'
31
- gem 'rspec', '~> 3.0'
32
- gem 'ruby-grape-danger', '~> 0.1.0', require: false
33
- end
34
-
35
- gemspec path: '../'
@@ -1,35 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source 'https://rubygems.org'
4
-
5
- gem 'rails', '5.0.0'
6
-
7
- group :development, :test do
8
- gem 'bundler'
9
- gem 'hashie'
10
- gem 'rake'
11
- gem 'rubocop', '0.51.0'
12
- end
13
-
14
- group :development do
15
- gem 'appraisal'
16
- gem 'benchmark-ips'
17
- gem 'guard'
18
- gem 'guard-rspec'
19
- gem 'guard-rubocop'
20
- end
21
-
22
- group :test do
23
- gem 'cookiejar'
24
- gem 'coveralls', '~> 0.8.17', require: false
25
- gem 'danger-toc', '~> 0.1.2'
26
- gem 'grape-entity', '~> 0.6'
27
- gem 'maruku'
28
- gem 'mime-types'
29
- gem 'rack-jsonp', require: 'rack/jsonp'
30
- gem 'rack-test', '~> 0.6.3'
31
- gem 'rspec', '~> 3.0'
32
- gem 'ruby-grape-danger', '~> 0.1.0', require: false
33
- end
34
-
35
- gemspec path: '../'