grape 0.1.5 → 0.2.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.
Files changed (142) hide show
  1. data/.gitignore +13 -1
  2. data/.rspec +1 -1
  3. data/.travis.yml +1 -0
  4. data/Gemfile +10 -0
  5. data/Guardfile +15 -0
  6. data/README.markdown +472 -67
  7. data/grape.gemspec +4 -4
  8. data/lib/grape.rb +17 -5
  9. data/lib/grape/api.rb +227 -124
  10. data/lib/grape/cookies.rb +41 -0
  11. data/lib/grape/endpoint.rb +256 -27
  12. data/lib/grape/entity.rb +227 -0
  13. data/lib/grape/middleware/auth/oauth2.rb +1 -2
  14. data/lib/grape/middleware/base.rb +59 -6
  15. data/lib/grape/middleware/error.rb +15 -6
  16. data/lib/grape/middleware/filter.rb +17 -0
  17. data/lib/grape/middleware/formatter.rb +25 -31
  18. data/lib/grape/middleware/versioner.rb +20 -20
  19. data/lib/grape/middleware/versioner/header.rb +59 -0
  20. data/lib/grape/middleware/versioner/path.rb +42 -0
  21. data/lib/grape/route.rb +23 -0
  22. data/lib/grape/util/hash_stack.rb +100 -0
  23. data/lib/grape/version.rb +1 -1
  24. data/spec/grape/api_spec.rb +651 -162
  25. data/spec/grape/endpoint_spec.rb +216 -18
  26. data/spec/grape/entity_spec.rb +320 -0
  27. data/spec/grape/middleware/auth/basic_spec.rb +2 -2
  28. data/spec/grape/middleware/auth/digest_spec.rb +4 -6
  29. data/spec/grape/middleware/exception_spec.rb +1 -0
  30. data/spec/grape/middleware/formatter_spec.rb +81 -27
  31. data/spec/grape/middleware/versioner/header_spec.rb +148 -0
  32. data/spec/grape/middleware/versioner/path_spec.rb +40 -0
  33. data/spec/grape/middleware/versioner_spec.rb +6 -34
  34. data/spec/grape/util/hash_stack_spec.rb +133 -0
  35. data/spec/shared/versioning_examples.rb +77 -0
  36. data/spec/spec_helper.rb +11 -3
  37. data/spec/support/basic_auth_encode_helpers.rb +4 -0
  38. data/spec/support/rack_patch.rb +25 -0
  39. data/spec/support/versioned_helpers.rb +34 -0
  40. metadata +140 -241
  41. data/.yardoc/checksums +0 -13
  42. data/.yardoc/objects/Grape.dat +0 -0
  43. data/.yardoc/objects/Grape/API.dat +0 -0
  44. data/.yardoc/objects/Grape/API/auth_c.dat +0 -0
  45. data/.yardoc/objects/Grape/API/build_endpoint_c.dat +0 -0
  46. data/.yardoc/objects/Grape/API/call_c.dat +0 -0
  47. data/.yardoc/objects/Grape/API/compile_path_c.dat +0 -0
  48. data/.yardoc/objects/Grape/API/default_format_c.dat +0 -0
  49. data/.yardoc/objects/Grape/API/delete_c.dat +0 -0
  50. data/.yardoc/objects/Grape/API/get_c.dat +0 -0
  51. data/.yardoc/objects/Grape/API/group_c.dat +0 -0
  52. data/.yardoc/objects/Grape/API/head_c.dat +0 -0
  53. data/.yardoc/objects/Grape/API/helpers_c.dat +0 -0
  54. data/.yardoc/objects/Grape/API/http_basic_c.dat +0 -0
  55. data/.yardoc/objects/Grape/API/inherited_c.dat +0 -0
  56. data/.yardoc/objects/Grape/API/logger_c.dat +0 -0
  57. data/.yardoc/objects/Grape/API/namespace_c.dat +0 -0
  58. data/.yardoc/objects/Grape/API/nest_c.dat +0 -0
  59. data/.yardoc/objects/Grape/API/post_c.dat +0 -0
  60. data/.yardoc/objects/Grape/API/prefix_c.dat +0 -0
  61. data/.yardoc/objects/Grape/API/put_c.dat +0 -0
  62. data/.yardoc/objects/Grape/API/reset_21_c.dat +0 -0
  63. data/.yardoc/objects/Grape/API/resource_c.dat +0 -0
  64. data/.yardoc/objects/Grape/API/resources_c.dat +0 -0
  65. data/.yardoc/objects/Grape/API/route_c.dat +0 -0
  66. data/.yardoc/objects/Grape/API/route_set_c.dat +0 -0
  67. data/.yardoc/objects/Grape/API/scope_c.dat +0 -0
  68. data/.yardoc/objects/Grape/API/set_c.dat +0 -0
  69. data/.yardoc/objects/Grape/API/settings_c.dat +0 -0
  70. data/.yardoc/objects/Grape/API/settings_stack_c.dat +0 -0
  71. data/.yardoc/objects/Grape/API/version_c.dat +0 -0
  72. data/.yardoc/objects/Grape/Endpoint.dat +0 -0
  73. data/.yardoc/objects/Grape/Endpoint/block_3D_c.dat +0 -0
  74. data/.yardoc/objects/Grape/Endpoint/block_c.dat +0 -0
  75. data/.yardoc/objects/Grape/Endpoint/call_c.dat +0 -0
  76. data/.yardoc/objects/Grape/Endpoint/call_i.dat +0 -0
  77. data/.yardoc/objects/Grape/Endpoint/env_i.dat +0 -0
  78. data/.yardoc/objects/Grape/Endpoint/error_21_i.dat +0 -0
  79. data/.yardoc/objects/Grape/Endpoint/generate_c.dat +0 -0
  80. data/.yardoc/objects/Grape/Endpoint/header_i.dat +0 -0
  81. data/.yardoc/objects/Grape/Endpoint/params_i.dat +0 -0
  82. data/.yardoc/objects/Grape/Endpoint/request_i.dat +0 -0
  83. data/.yardoc/objects/Grape/Endpoint/status_i.dat +0 -0
  84. data/.yardoc/objects/Grape/Endpoint/version_i.dat +0 -0
  85. data/.yardoc/objects/Grape/Middleware.dat +0 -0
  86. data/.yardoc/objects/Grape/Middleware/Auth.dat +0 -0
  87. data/.yardoc/objects/Grape/Middleware/Auth/Basic.dat +0 -0
  88. data/.yardoc/objects/Grape/Middleware/Auth/Basic/authenticator_i.dat +0 -0
  89. data/.yardoc/objects/Grape/Middleware/Auth/Basic/basic_request_i.dat +0 -0
  90. data/.yardoc/objects/Grape/Middleware/Auth/Basic/before_i.dat +0 -0
  91. data/.yardoc/objects/Grape/Middleware/Auth/Basic/credentials_i.dat +0 -0
  92. data/.yardoc/objects/Grape/Middleware/Auth/Basic/initialize_i.dat +0 -0
  93. data/.yardoc/objects/Grape/Middleware/Auth/OAuth2.dat +0 -0
  94. data/.yardoc/objects/Grape/Middleware/Auth/OAuth2/before_i.dat +0 -0
  95. data/.yardoc/objects/Grape/Middleware/Auth/OAuth2/default_options_i.dat +0 -0
  96. data/.yardoc/objects/Grape/Middleware/Auth/OAuth2/error_out_i.dat +0 -0
  97. data/.yardoc/objects/Grape/Middleware/Auth/OAuth2/parse_authorization_header_i.dat +0 -0
  98. data/.yardoc/objects/Grape/Middleware/Auth/OAuth2/token_class_i.dat +0 -0
  99. data/.yardoc/objects/Grape/Middleware/Auth/OAuth2/verify_token_i.dat +0 -0
  100. data/.yardoc/objects/Grape/Middleware/Base.dat +0 -0
  101. data/.yardoc/objects/Grape/Middleware/Base/after_i.dat +0 -0
  102. data/.yardoc/objects/Grape/Middleware/Base/app_i.dat +0 -0
  103. data/.yardoc/objects/Grape/Middleware/Base/before_i.dat +0 -0
  104. data/.yardoc/objects/Grape/Middleware/Base/call_21_i.dat +0 -0
  105. data/.yardoc/objects/Grape/Middleware/Base/call_i.dat +0 -0
  106. data/.yardoc/objects/Grape/Middleware/Base/default_options_i.dat +0 -0
  107. data/.yardoc/objects/Grape/Middleware/Base/env_i.dat +0 -0
  108. data/.yardoc/objects/Grape/Middleware/Base/initialize_i.dat +0 -0
  109. data/.yardoc/objects/Grape/Middleware/Base/options_i.dat +0 -0
  110. data/.yardoc/objects/Grape/Middleware/Base/request_i.dat +0 -0
  111. data/.yardoc/objects/Grape/Middleware/Base/response_i.dat +0 -0
  112. data/.yardoc/objects/Grape/Middleware/Error.dat +0 -0
  113. data/.yardoc/objects/Grape/Middleware/Error/call_21_i.dat +0 -0
  114. data/.yardoc/objects/Grape/Middleware/Error/error_response_i.dat +0 -0
  115. data/.yardoc/objects/Grape/Middleware/Formatter.dat +0 -0
  116. data/.yardoc/objects/Grape/Middleware/Formatter/CONTENT_TYPES.dat +0 -0
  117. data/.yardoc/objects/Grape/Middleware/Formatter/after_i.dat +0 -0
  118. data/.yardoc/objects/Grape/Middleware/Formatter/before_i.dat +0 -0
  119. data/.yardoc/objects/Grape/Middleware/Formatter/content_types_i.dat +0 -0
  120. data/.yardoc/objects/Grape/Middleware/Formatter/default_options_i.dat +0 -0
  121. data/.yardoc/objects/Grape/Middleware/Formatter/encode_json_i.dat +0 -0
  122. data/.yardoc/objects/Grape/Middleware/Formatter/encode_txt_i.dat +0 -0
  123. data/.yardoc/objects/Grape/Middleware/Formatter/format_from_extension_i.dat +0 -0
  124. data/.yardoc/objects/Grape/Middleware/Formatter/format_from_header_i.dat +0 -0
  125. data/.yardoc/objects/Grape/Middleware/Formatter/headers_i.dat +0 -0
  126. data/.yardoc/objects/Grape/Middleware/Formatter/mime_array_i.dat +0 -0
  127. data/.yardoc/objects/Grape/Middleware/Formatter/mime_types_i.dat +0 -0
  128. data/.yardoc/objects/Grape/Middleware/Prefixer.dat +0 -0
  129. data/.yardoc/objects/Grape/Middleware/Prefixer/before_i.dat +0 -0
  130. data/.yardoc/objects/Grape/Middleware/Prefixer/prefix_i.dat +0 -0
  131. data/.yardoc/objects/Grape/Middleware/Versioner.dat +0 -0
  132. data/.yardoc/objects/Grape/Middleware/Versioner/before_i.dat +0 -0
  133. data/.yardoc/objects/Grape/Middleware/Versioner/default_options_i.dat +0 -0
  134. data/.yardoc/objects/Grape/MiddlewareStack.dat +0 -0
  135. data/.yardoc/objects/Grape/MiddlewareStack/initialize_i.dat +0 -0
  136. data/.yardoc/objects/Grape/MiddlewareStack/stack_i.dat +0 -0
  137. data/.yardoc/objects/Grape/MiddlewareStack/to_app_i.dat +0 -0
  138. data/.yardoc/objects/Grape/MiddlewareStack/use_i.dat +0 -0
  139. data/.yardoc/objects/root.dat +0 -0
  140. data/.yardoc/proxy_types +0 -2
  141. data/Gemfile.lock +0 -52
  142. data/autotest/discover.rb +0 -1
@@ -0,0 +1,133 @@
1
+ require 'spec_helper'
2
+
3
+ describe Grape::Util::HashStack do
4
+ let(:klass){ Grape::Util::HashStack }
5
+
6
+ describe '#get' do
7
+ it 'should find the first available key' do
8
+ subject[:abc] = 123
9
+ subject.push(:abc => 345)
10
+ subject.get(:abc).should == 345
11
+ end
12
+
13
+ it 'should be nil if the key has not been set' do
14
+ subject[:abc].should be_nil
15
+ end
16
+ end
17
+
18
+ describe '#set' do
19
+ it 'should set a value on the highest frame' do
20
+ subject.push
21
+ subject.set(:abc, 123)
22
+ subject.stack.last[:abc].should == 123
23
+ end
24
+ end
25
+
26
+ describe '#imbue' do
27
+ it 'should push a new value onto the end of an array' do
28
+ subject[:abc] = []
29
+ subject.imbue(:abc, [123])
30
+ subject.imbue(:abc, [456])
31
+ subject[:abc].should == [123, 456]
32
+ end
33
+
34
+ it 'should merge a hash that is passed' do
35
+ subject[:abc] = {:foo => 'bar'}
36
+ subject.imbue(:abc, {:baz => 'wich'})
37
+ subject[:abc].should == {:foo => 'bar', :baz => 'wich'}
38
+ end
39
+
40
+ it 'should set the value if not a hash or array' do
41
+ subject.imbue(:abc, 123)
42
+ subject[:abc].should == 123
43
+ end
44
+
45
+ it 'should be able to imbue an array without explicit setting' do
46
+ subject.imbue(:arr, [1])
47
+ subject.imbue(:arr, [2])
48
+ subject[:arr].should == [1,2]
49
+ end
50
+
51
+ it 'should be able to imbue a hash without explicit setting' do
52
+ subject.imbue(:hash, :foo => 'bar')
53
+ subject.imbue(:hash, :baz => 'wich')
54
+ subject[:hash].should == {:foo => 'bar', :baz => 'wich'}
55
+ end
56
+ end
57
+
58
+ describe '#push' do
59
+ it 'should return a HashStack' do
60
+ subject.push(klass.new).should be_kind_of(klass)
61
+ end
62
+
63
+ it 'should place the passed value on the top of the stack' do
64
+ subject.push(:abc => 123)
65
+ subject.stack.should == [{}, {:abc => 123}]
66
+ end
67
+
68
+ it 'should push an empty hash by default' do
69
+ subject[:abc] = 123
70
+ subject.push
71
+ subject.stack.should == [{:abc => 123}, {}]
72
+ end
73
+ end
74
+
75
+ describe '#pop' do
76
+ it 'should remove and return the top frame' do
77
+ subject.push(:abc => 123)
78
+ subject.pop.should == {:abc => 123}
79
+ subject.stack.size.should == 1
80
+ end
81
+ end
82
+
83
+ describe '#peek' do
84
+ it 'should return the top frame without removing it' do
85
+ subject.push(:abc => 123)
86
+ subject.peek.should == {:abc => 123}
87
+ subject.stack.size.should == 2
88
+ end
89
+ end
90
+
91
+ describe '#prepend' do
92
+ it 'should return a HashStack' do
93
+ subject.prepend(klass.new).should be_kind_of(klass)
94
+ end
95
+
96
+ it "should prepend a HashStack's stack onto its own stack" do
97
+ other = klass.new.push(:abc => 123)
98
+ subject.prepend(other).stack.should == [{}, {:abc => 123}, {}]
99
+ end
100
+ end
101
+
102
+ describe '#concat' do
103
+ it 'should return a HashStack' do
104
+ subject.concat(klass.new).should be_kind_of(klass)
105
+ end
106
+
107
+ it "should append a HashStack's stack onto its own stack" do
108
+ other = klass.new.push(:abc => 123)
109
+ subject.concat(other).stack.should == [{}, {}, {:abc => 123}]
110
+ end
111
+ end
112
+
113
+ describe '#update' do
114
+ it 'should merge! into the top frame' do
115
+ subject.update(:abc => 123)
116
+ subject.stack.should == [{:abc => 123}]
117
+ end
118
+
119
+ it 'should return a HashStack' do
120
+ subject.update(:abc => 123).should be_kind_of(klass)
121
+ end
122
+ end
123
+
124
+ describe '#clone' do
125
+ it 'should perform a deep copy' do
126
+ subject[:abc] = 123
127
+ subject.push :def => 234
128
+ clone = subject.clone
129
+ clone[:def] = 345
130
+ subject[:def].should == 234
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,77 @@
1
+ shared_examples_for "versioning" do
2
+ it 'should set the API version' do
3
+ subject.version 'v1', macro_options
4
+ subject.get :hello do
5
+ "Version: #{request.env['api.version']}"
6
+ end
7
+ versioned_get '/hello', 'v1', macro_options
8
+ last_response.body.should eql "Version: v1"
9
+ end
10
+
11
+ it 'should add the prefix before the API version' do
12
+ subject.prefix 'api'
13
+ subject.version 'v1', macro_options
14
+ subject.get :hello do
15
+ "Version: #{request.env['api.version']}"
16
+ end
17
+ versioned_get '/hello', 'v1', macro_options.merge(:prefix => 'api')
18
+ last_response.body.should eql "Version: v1"
19
+ end
20
+
21
+ it 'should be able to specify version as a nesting' do
22
+ subject.version 'v2', macro_options
23
+ subject.get '/awesome' do
24
+ "Radical"
25
+ end
26
+
27
+ subject.version 'v1', macro_options do
28
+ get '/legacy' do
29
+ "Totally"
30
+ end
31
+ end
32
+
33
+ versioned_get '/awesome', 'v1', macro_options
34
+ last_response.status.should eql 404
35
+
36
+ versioned_get '/awesome', 'v2', macro_options
37
+ last_response.status.should eql 200
38
+ versioned_get '/legacy', 'v1', macro_options
39
+ last_response.status.should eql 200
40
+ versioned_get '/legacy', 'v2', macro_options
41
+ last_response.status.should eql 404
42
+ end
43
+
44
+ it 'should be able to specify multiple versions' do
45
+ subject.version 'v1', 'v2', macro_options
46
+ subject.get 'awesome' do
47
+ "I exist"
48
+ end
49
+
50
+ versioned_get '/awesome', 'v1', macro_options
51
+ last_response.status.should eql 200
52
+ versioned_get '/awesome', 'v2', macro_options
53
+ last_response.status.should eql 200
54
+ versioned_get '/awesome', 'v3', macro_options
55
+ last_response.status.should eql 404
56
+ end
57
+
58
+ it 'should allow the same endpoint to be implemented for different versions' do
59
+ subject.version 'v2', macro_options
60
+ subject.get 'version' do
61
+ request.env['api.version']
62
+ end
63
+
64
+ subject.version 'v1', macro_options do
65
+ get 'version' do
66
+ "version " + request.env['api.version']
67
+ end
68
+ end
69
+
70
+ versioned_get '/version', 'v2', macro_options
71
+ last_response.status.should == 200
72
+ last_response.body.should == 'v2'
73
+ versioned_get '/version', 'v1', macro_options
74
+ last_response.status.should == 200
75
+ last_response.body.should == 'version v1'
76
+ end
77
+ end
@@ -1,5 +1,8 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'support'))
4
+
5
+ $stdout = StringIO.new
3
6
 
4
7
  require 'grape'
5
8
 
@@ -7,14 +10,19 @@ require 'rubygems'
7
10
  require 'bundler'
8
11
  Bundler.setup :default, :test
9
12
 
10
- require 'rspec'
11
13
  require 'rack/test'
14
+ require 'pry'
12
15
 
13
16
  require 'base64'
14
- def encode_basic(username, password)
15
- "Basic " + Base64.encode64("#{username}:#{password}")
17
+
18
+ require 'hashie/hash'
19
+
20
+ Dir["#{File.dirname(__FILE__)}/support/*.rb"].each do |file|
21
+ require file
16
22
  end
17
23
 
18
24
  RSpec.configure do |config|
19
25
  config.include Rack::Test::Methods
26
+ config.include Rack::Test::Methods::Patch
20
27
  end
28
+
@@ -0,0 +1,4 @@
1
+ def encode_basic_auth(username, password)
2
+ "Basic " + Base64.encode64("#{username}:#{password}")
3
+ end
4
+
@@ -0,0 +1,25 @@
1
+ unless Rack::Test::Session.method_defined?(:patch)
2
+ module Rack
3
+ module Test
4
+ module Methods
5
+ module Patch
6
+ extend Forwardable
7
+ def_delegators :current_session, *[:patch]
8
+ end
9
+ end
10
+ end
11
+ end
12
+
13
+ module Rack
14
+ module Test
15
+ class Session
16
+ def patch(uri, params = {}, env = {}, &block)
17
+ env = env_for(uri, env.merge(:method => "PATCH", :params => params))
18
+ process_request(uri, env, &block)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ else
24
+ raise LoadError, "Remove spec/support/rack_patch.rb | rack-test #{Rack::Test::VERSION} has a method patch"
25
+ end
@@ -0,0 +1,34 @@
1
+ # Versioning
2
+
3
+ # Returns the path with options[:version] prefixed if options[:using] is :path.
4
+ # Returns normal path otherwise.
5
+ def versioned_path(options = {})
6
+ case options[:using]
7
+ when :path
8
+ File.join('/', options[:prefix] || '', options[:version], options[:path])
9
+ when :header
10
+ File.join('/', options[:prefix] || '', options[:path])
11
+ else
12
+ raise ArgumentError.new("unknown versioning strategy: #{options[:using]}")
13
+ end
14
+ end
15
+
16
+ def versioned_headers(options)
17
+ case options[:using]
18
+ when :path
19
+ {} # no-op
20
+ when :header
21
+ {
22
+ 'HTTP_ACCEPT' => "application/vnd.#{options[:vendor]}-#{options[:version]}+#{options[:format]}"
23
+ }
24
+ else
25
+ raise ArgumentError.new("unknown versioning strategy: #{options[:using]}")
26
+ end
27
+ end
28
+
29
+ def versioned_get(path, version_name, version_options = {})
30
+ path = versioned_path(version_options.merge(:version => version_name, :path => path))
31
+ headers = versioned_headers(version_options.merge(:version => version_name))
32
+ get path, {}, headers
33
+ end
34
+
metadata CHANGED
@@ -1,296 +1,176 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: grape
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
4
5
  prerelease:
5
- version: 0.1.5
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Michael Bleigh
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-07-14 00:00:00 -05:00
14
- default_executable:
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
12
+ date: 2012-03-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
17
15
  name: rack
18
- prerelease: false
19
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70235092969660 !ruby/object:Gem::Requirement
20
17
  none: false
21
- requirements:
22
- - - ">="
23
- - !ruby/object:Gem::Version
24
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
25
22
  type: :runtime
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
28
- name: rack-mount
29
23
  prerelease: false
30
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70235092969660
25
+ - !ruby/object:Gem::Dependency
26
+ name: rack-mount
27
+ requirement: &70235092968600 !ruby/object:Gem::Requirement
31
28
  none: false
32
- requirements:
33
- - - ">="
34
- - !ruby/object:Gem::Version
35
- version: "0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
36
33
  type: :runtime
37
- version_requirements: *id002
38
- - !ruby/object:Gem::Dependency
39
- name: rack-jsonp
40
34
  prerelease: false
41
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *70235092968600
36
+ - !ruby/object:Gem::Dependency
37
+ name: multi_json
38
+ requirement: &70235092967620 !ruby/object:Gem::Requirement
42
39
  none: false
43
- requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: "0"
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
47
44
  type: :runtime
48
- version_requirements: *id003
49
- - !ruby/object:Gem::Dependency
50
- name: multi_json
51
45
  prerelease: false
52
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *70235092967620
47
+ - !ruby/object:Gem::Dependency
48
+ name: multi_xml
49
+ requirement: &70235092998440 !ruby/object:Gem::Requirement
53
50
  none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- version: "0"
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
58
55
  type: :runtime
59
- version_requirements: *id004
60
- - !ruby/object:Gem::Dependency
61
- name: multi_xml
62
56
  prerelease: false
63
- requirement: &id005 !ruby/object:Gem::Requirement
57
+ version_requirements: *70235092998440
58
+ - !ruby/object:Gem::Dependency
59
+ name: hashie
60
+ requirement: &70235092992580 !ruby/object:Gem::Requirement
64
61
  none: false
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: "0"
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: '1.2'
69
66
  type: :runtime
70
- version_requirements: *id005
71
- - !ruby/object:Gem::Dependency
72
- name: rake
73
67
  prerelease: false
74
- requirement: &id006 !ruby/object:Gem::Requirement
68
+ version_requirements: *70235092992580
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: &70235093020680 !ruby/object:Gem::Requirement
75
72
  none: false
76
- requirements:
77
- - - ">="
78
- - !ruby/object:Gem::Version
79
- version: "0"
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
80
77
  type: :development
81
- version_requirements: *id006
82
- - !ruby/object:Gem::Dependency
83
- name: maruku
84
78
  prerelease: false
85
- requirement: &id007 !ruby/object:Gem::Requirement
79
+ version_requirements: *70235093020680
80
+ - !ruby/object:Gem::Dependency
81
+ name: maruku
82
+ requirement: &70235093014740 !ruby/object:Gem::Requirement
86
83
  none: false
87
- requirements:
88
- - - ">="
89
- - !ruby/object:Gem::Version
90
- version: "0"
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
91
88
  type: :development
92
- version_requirements: *id007
93
- - !ruby/object:Gem::Dependency
94
- name: yard
95
89
  prerelease: false
96
- requirement: &id008 !ruby/object:Gem::Requirement
90
+ version_requirements: *70235093014740
91
+ - !ruby/object:Gem::Dependency
92
+ name: yard
93
+ requirement: &70235093028820 !ruby/object:Gem::Requirement
97
94
  none: false
98
- requirements:
99
- - - ">="
100
- - !ruby/object:Gem::Version
101
- version: "0"
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
102
99
  type: :development
103
- version_requirements: *id008
104
- - !ruby/object:Gem::Dependency
105
- name: rack-test
106
100
  prerelease: false
107
- requirement: &id009 !ruby/object:Gem::Requirement
101
+ version_requirements: *70235093028820
102
+ - !ruby/object:Gem::Dependency
103
+ name: rack-test
104
+ requirement: &70235093028060 !ruby/object:Gem::Requirement
108
105
  none: false
109
- requirements:
110
- - - ">="
111
- - !ruby/object:Gem::Version
112
- version: "0"
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
113
110
  type: :development
114
- version_requirements: *id009
115
- - !ruby/object:Gem::Dependency
116
- name: rspec
117
111
  prerelease: false
118
- requirement: &id010 !ruby/object:Gem::Requirement
112
+ version_requirements: *70235093028060
113
+ - !ruby/object:Gem::Dependency
114
+ name: rspec
115
+ requirement: &70235093027200 !ruby/object:Gem::Requirement
119
116
  none: false
120
- requirements:
117
+ requirements:
121
118
  - - ~>
122
- - !ruby/object:Gem::Version
123
- version: 2.6.0
124
- type: :development
125
- version_requirements: *id010
126
- - !ruby/object:Gem::Dependency
127
- name: json_pure
128
- prerelease: false
129
- requirement: &id011 !ruby/object:Gem::Requirement
130
- none: false
131
- requirements:
132
- - - ">="
133
- - !ruby/object:Gem::Version
134
- version: "0"
119
+ - !ruby/object:Gem::Version
120
+ version: '2.9'
135
121
  type: :development
136
- version_requirements: *id011
137
- - !ruby/object:Gem::Dependency
138
- name: ZenTest
139
122
  prerelease: false
140
- requirement: &id012 !ruby/object:Gem::Requirement
141
- none: false
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: "0"
146
- type: :development
147
- version_requirements: *id012
148
- - !ruby/object:Gem::Dependency
123
+ version_requirements: *70235093027200
124
+ - !ruby/object:Gem::Dependency
149
125
  name: bundler
150
- prerelease: false
151
- requirement: &id013 !ruby/object:Gem::Requirement
126
+ requirement: &70235093025280 !ruby/object:Gem::Requirement
152
127
  none: false
153
- requirements:
154
- - - ">="
155
- - !ruby/object:Gem::Version
156
- version: "0"
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
157
132
  type: :development
158
- version_requirements: *id013
133
+ prerelease: false
134
+ version_requirements: *70235093025280
159
135
  description: A Ruby framework for rapid API development with great conventions.
160
- email:
136
+ email:
161
137
  - michael@intridea.com
162
138
  executables: []
163
-
164
139
  extensions: []
165
-
166
140
  extra_rdoc_files: []
167
-
168
- files:
141
+ files:
169
142
  - .document
170
143
  - .gitignore
171
144
  - .rspec
172
145
  - .travis.yml
173
- - .yardoc/checksums
174
- - .yardoc/objects/Grape.dat
175
- - .yardoc/objects/Grape/API.dat
176
- - .yardoc/objects/Grape/API/auth_c.dat
177
- - .yardoc/objects/Grape/API/build_endpoint_c.dat
178
- - .yardoc/objects/Grape/API/call_c.dat
179
- - .yardoc/objects/Grape/API/compile_path_c.dat
180
- - .yardoc/objects/Grape/API/default_format_c.dat
181
- - .yardoc/objects/Grape/API/delete_c.dat
182
- - .yardoc/objects/Grape/API/get_c.dat
183
- - .yardoc/objects/Grape/API/group_c.dat
184
- - .yardoc/objects/Grape/API/head_c.dat
185
- - .yardoc/objects/Grape/API/helpers_c.dat
186
- - .yardoc/objects/Grape/API/http_basic_c.dat
187
- - .yardoc/objects/Grape/API/inherited_c.dat
188
- - .yardoc/objects/Grape/API/logger_c.dat
189
- - .yardoc/objects/Grape/API/namespace_c.dat
190
- - .yardoc/objects/Grape/API/nest_c.dat
191
- - .yardoc/objects/Grape/API/post_c.dat
192
- - .yardoc/objects/Grape/API/prefix_c.dat
193
- - .yardoc/objects/Grape/API/put_c.dat
194
- - .yardoc/objects/Grape/API/reset_21_c.dat
195
- - .yardoc/objects/Grape/API/resource_c.dat
196
- - .yardoc/objects/Grape/API/resources_c.dat
197
- - .yardoc/objects/Grape/API/route_c.dat
198
- - .yardoc/objects/Grape/API/route_set_c.dat
199
- - .yardoc/objects/Grape/API/scope_c.dat
200
- - .yardoc/objects/Grape/API/set_c.dat
201
- - .yardoc/objects/Grape/API/settings_c.dat
202
- - .yardoc/objects/Grape/API/settings_stack_c.dat
203
- - .yardoc/objects/Grape/API/version_c.dat
204
- - .yardoc/objects/Grape/Endpoint.dat
205
- - .yardoc/objects/Grape/Endpoint/block_3D_c.dat
206
- - .yardoc/objects/Grape/Endpoint/block_c.dat
207
- - .yardoc/objects/Grape/Endpoint/call_c.dat
208
- - .yardoc/objects/Grape/Endpoint/call_i.dat
209
- - .yardoc/objects/Grape/Endpoint/env_i.dat
210
- - .yardoc/objects/Grape/Endpoint/error_21_i.dat
211
- - .yardoc/objects/Grape/Endpoint/generate_c.dat
212
- - .yardoc/objects/Grape/Endpoint/header_i.dat
213
- - .yardoc/objects/Grape/Endpoint/params_i.dat
214
- - .yardoc/objects/Grape/Endpoint/request_i.dat
215
- - .yardoc/objects/Grape/Endpoint/status_i.dat
216
- - .yardoc/objects/Grape/Endpoint/version_i.dat
217
- - .yardoc/objects/Grape/Middleware.dat
218
- - .yardoc/objects/Grape/Middleware/Auth.dat
219
- - .yardoc/objects/Grape/Middleware/Auth/Basic.dat
220
- - .yardoc/objects/Grape/Middleware/Auth/Basic/authenticator_i.dat
221
- - .yardoc/objects/Grape/Middleware/Auth/Basic/basic_request_i.dat
222
- - .yardoc/objects/Grape/Middleware/Auth/Basic/before_i.dat
223
- - .yardoc/objects/Grape/Middleware/Auth/Basic/credentials_i.dat
224
- - .yardoc/objects/Grape/Middleware/Auth/Basic/initialize_i.dat
225
- - .yardoc/objects/Grape/Middleware/Auth/OAuth2.dat
226
- - .yardoc/objects/Grape/Middleware/Auth/OAuth2/before_i.dat
227
- - .yardoc/objects/Grape/Middleware/Auth/OAuth2/default_options_i.dat
228
- - .yardoc/objects/Grape/Middleware/Auth/OAuth2/error_out_i.dat
229
- - .yardoc/objects/Grape/Middleware/Auth/OAuth2/parse_authorization_header_i.dat
230
- - .yardoc/objects/Grape/Middleware/Auth/OAuth2/token_class_i.dat
231
- - .yardoc/objects/Grape/Middleware/Auth/OAuth2/verify_token_i.dat
232
- - .yardoc/objects/Grape/Middleware/Base.dat
233
- - .yardoc/objects/Grape/Middleware/Base/after_i.dat
234
- - .yardoc/objects/Grape/Middleware/Base/app_i.dat
235
- - .yardoc/objects/Grape/Middleware/Base/before_i.dat
236
- - .yardoc/objects/Grape/Middleware/Base/call_21_i.dat
237
- - .yardoc/objects/Grape/Middleware/Base/call_i.dat
238
- - .yardoc/objects/Grape/Middleware/Base/default_options_i.dat
239
- - .yardoc/objects/Grape/Middleware/Base/env_i.dat
240
- - .yardoc/objects/Grape/Middleware/Base/initialize_i.dat
241
- - .yardoc/objects/Grape/Middleware/Base/options_i.dat
242
- - .yardoc/objects/Grape/Middleware/Base/request_i.dat
243
- - .yardoc/objects/Grape/Middleware/Base/response_i.dat
244
- - .yardoc/objects/Grape/Middleware/Error.dat
245
- - .yardoc/objects/Grape/Middleware/Error/call_21_i.dat
246
- - .yardoc/objects/Grape/Middleware/Error/error_response_i.dat
247
- - .yardoc/objects/Grape/Middleware/Formatter.dat
248
- - .yardoc/objects/Grape/Middleware/Formatter/CONTENT_TYPES.dat
249
- - .yardoc/objects/Grape/Middleware/Formatter/after_i.dat
250
- - .yardoc/objects/Grape/Middleware/Formatter/before_i.dat
251
- - .yardoc/objects/Grape/Middleware/Formatter/content_types_i.dat
252
- - .yardoc/objects/Grape/Middleware/Formatter/default_options_i.dat
253
- - .yardoc/objects/Grape/Middleware/Formatter/encode_json_i.dat
254
- - .yardoc/objects/Grape/Middleware/Formatter/encode_txt_i.dat
255
- - .yardoc/objects/Grape/Middleware/Formatter/format_from_extension_i.dat
256
- - .yardoc/objects/Grape/Middleware/Formatter/format_from_header_i.dat
257
- - .yardoc/objects/Grape/Middleware/Formatter/headers_i.dat
258
- - .yardoc/objects/Grape/Middleware/Formatter/mime_array_i.dat
259
- - .yardoc/objects/Grape/Middleware/Formatter/mime_types_i.dat
260
- - .yardoc/objects/Grape/Middleware/Prefixer.dat
261
- - .yardoc/objects/Grape/Middleware/Prefixer/before_i.dat
262
- - .yardoc/objects/Grape/Middleware/Prefixer/prefix_i.dat
263
- - .yardoc/objects/Grape/Middleware/Versioner.dat
264
- - .yardoc/objects/Grape/Middleware/Versioner/before_i.dat
265
- - .yardoc/objects/Grape/Middleware/Versioner/default_options_i.dat
266
- - .yardoc/objects/Grape/MiddlewareStack.dat
267
- - .yardoc/objects/Grape/MiddlewareStack/initialize_i.dat
268
- - .yardoc/objects/Grape/MiddlewareStack/stack_i.dat
269
- - .yardoc/objects/Grape/MiddlewareStack/to_app_i.dat
270
- - .yardoc/objects/Grape/MiddlewareStack/use_i.dat
271
- - .yardoc/objects/root.dat
272
- - .yardoc/proxy_types
273
146
  - Gemfile
274
- - Gemfile.lock
147
+ - Guardfile
275
148
  - LICENSE
276
149
  - README.markdown
277
150
  - Rakefile
278
- - autotest/discover.rb
279
151
  - grape.gemspec
280
152
  - lib/grape.rb
281
153
  - lib/grape/api.rb
154
+ - lib/grape/cookies.rb
282
155
  - lib/grape/endpoint.rb
156
+ - lib/grape/entity.rb
283
157
  - lib/grape/middleware/auth/basic.rb
284
158
  - lib/grape/middleware/auth/digest.rb
285
159
  - lib/grape/middleware/auth/oauth2.rb
286
160
  - lib/grape/middleware/base.rb
287
161
  - lib/grape/middleware/error.rb
162
+ - lib/grape/middleware/filter.rb
288
163
  - lib/grape/middleware/formatter.rb
289
164
  - lib/grape/middleware/prefixer.rb
290
165
  - lib/grape/middleware/versioner.rb
166
+ - lib/grape/middleware/versioner/header.rb
167
+ - lib/grape/middleware/versioner/path.rb
168
+ - lib/grape/route.rb
169
+ - lib/grape/util/hash_stack.rb
291
170
  - lib/grape/version.rb
292
171
  - spec/grape/api_spec.rb
293
172
  - spec/grape/endpoint_spec.rb
173
+ - spec/grape/entity_spec.rb
294
174
  - spec/grape/middleware/auth/basic_spec.rb
295
175
  - spec/grape/middleware/auth/digest_spec.rb
296
176
  - spec/grape/middleware/auth/oauth2_spec.rb
@@ -299,40 +179,51 @@ files:
299
179
  - spec/grape/middleware/exception_spec.rb
300
180
  - spec/grape/middleware/formatter_spec.rb
301
181
  - spec/grape/middleware/prefixer_spec.rb
182
+ - spec/grape/middleware/versioner/header_spec.rb
183
+ - spec/grape/middleware/versioner/path_spec.rb
302
184
  - spec/grape/middleware/versioner_spec.rb
185
+ - spec/grape/util/hash_stack_spec.rb
303
186
  - spec/grape_spec.rb
187
+ - spec/shared/versioning_examples.rb
304
188
  - spec/spec_helper.rb
305
- has_rdoc: true
189
+ - spec/support/basic_auth_encode_helpers.rb
190
+ - spec/support/rack_patch.rb
191
+ - spec/support/versioned_helpers.rb
306
192
  homepage: https://github.com/intridea/grape
307
- licenses: []
308
-
193
+ licenses:
194
+ - MIT
309
195
  post_install_message:
310
196
  rdoc_options: []
311
-
312
- require_paths:
197
+ require_paths:
313
198
  - lib
314
- required_ruby_version: !ruby/object:Gem::Requirement
199
+ required_ruby_version: !ruby/object:Gem::Requirement
315
200
  none: false
316
- requirements:
317
- - - ">="
318
- - !ruby/object:Gem::Version
319
- version: "0"
320
- required_rubygems_version: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - ! '>='
203
+ - !ruby/object:Gem::Version
204
+ version: '0'
205
+ segments:
206
+ - 0
207
+ hash: -1598569611300110668
208
+ required_rubygems_version: !ruby/object:Gem::Requirement
321
209
  none: false
322
- requirements:
323
- - - ">="
324
- - !ruby/object:Gem::Version
325
- version: "0"
210
+ requirements:
211
+ - - ! '>='
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ segments:
215
+ - 0
216
+ hash: -1598569611300110668
326
217
  requirements: []
327
-
328
218
  rubyforge_project: grape
329
- rubygems_version: 1.6.2
219
+ rubygems_version: 1.8.11
330
220
  signing_key:
331
221
  specification_version: 3
332
222
  summary: A simple Ruby framework for building REST-like APIs.
333
- test_files:
223
+ test_files:
334
224
  - spec/grape/api_spec.rb
335
225
  - spec/grape/endpoint_spec.rb
226
+ - spec/grape/entity_spec.rb
336
227
  - spec/grape/middleware/auth/basic_spec.rb
337
228
  - spec/grape/middleware/auth/digest_spec.rb
338
229
  - spec/grape/middleware/auth/oauth2_spec.rb
@@ -341,6 +232,14 @@ test_files:
341
232
  - spec/grape/middleware/exception_spec.rb
342
233
  - spec/grape/middleware/formatter_spec.rb
343
234
  - spec/grape/middleware/prefixer_spec.rb
235
+ - spec/grape/middleware/versioner/header_spec.rb
236
+ - spec/grape/middleware/versioner/path_spec.rb
344
237
  - spec/grape/middleware/versioner_spec.rb
238
+ - spec/grape/util/hash_stack_spec.rb
345
239
  - spec/grape_spec.rb
240
+ - spec/shared/versioning_examples.rb
346
241
  - spec/spec_helper.rb
242
+ - spec/support/basic_auth_encode_helpers.rb
243
+ - spec/support/rack_patch.rb
244
+ - spec/support/versioned_helpers.rb
245
+ has_rdoc: