grape 1.1.0 → 1.2.5

Sign up to get free protection for your applications and to get access to all the features.
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: '../'