rack-api 1.0.2 → 1.1.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.
- data/Gemfile +2 -0
- data/Gemfile.lock +39 -34
- data/lib/rack/api/controller.rb +1 -1
- data/lib/rack/api/runner.rb +7 -5
- data/lib/rack/api/version.rb +2 -2
- data/rack-api.gemspec +5 -3
- data/spec/rack-api/http_methods_spec.rb +2 -0
- data/spec/rack-api/method_delegation_spec.rb +6 -0
- data/spec/rack-api/runner_spec.rb +7 -6
- data/spec/rack-api/separators_spec.rb +44 -0
- data/spec/rack-api/url_for_spec.rb +1 -1
- data/spec/spec_helper.rb +4 -0
- metadata +47 -23
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,53 +1,58 @@
|
|
1
|
+
GIT
|
2
|
+
remote: https://github.com/brynary/rack-test.git
|
3
|
+
revision: cab8eb929b45d9e32474fad1b6806c2ab8f6bea8
|
4
|
+
specs:
|
5
|
+
rack-test (0.6.1)
|
6
|
+
rack (>= 1.0)
|
7
|
+
|
1
8
|
PATH
|
2
9
|
remote: .
|
3
10
|
specs:
|
4
|
-
rack-api (1.0
|
5
|
-
activesupport (>= 3.0
|
11
|
+
rack-api (1.1.0)
|
12
|
+
activesupport (>= 3.0)
|
13
|
+
i18n
|
6
14
|
rack (>= 1.0.0)
|
7
15
|
rack-mount (>= 0.6.0)
|
8
16
|
|
9
17
|
GEM
|
10
18
|
remote: http://rubygems.org/
|
11
19
|
specs:
|
12
|
-
activesupport (3.
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
+
activesupport (3.2.2)
|
21
|
+
i18n (~> 0.6)
|
22
|
+
multi_json (~> 1.0)
|
23
|
+
awesome_print (1.0.2)
|
24
|
+
coderay (1.0.5)
|
25
|
+
diff-lcs (1.1.3)
|
26
|
+
i18n (0.6.0)
|
27
|
+
method_source (0.7.1)
|
28
|
+
multi_json (1.2.0)
|
29
|
+
pry (0.9.8.4)
|
30
|
+
coderay (~> 1.0.5)
|
31
|
+
method_source (~> 0.7.1)
|
32
|
+
slop (>= 2.4.4, < 3)
|
33
|
+
rack (1.4.1)
|
34
|
+
rack-mount (0.8.3)
|
20
35
|
rack (>= 1.0.0)
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
rspec-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
rspec-
|
31
|
-
|
32
|
-
rspec-mocks (2.6.0)
|
33
|
-
ruby-debug-base19 (0.11.25)
|
34
|
-
columnize (>= 0.3.1)
|
35
|
-
linecache19 (>= 0.5.11)
|
36
|
-
ruby_core_source (>= 0.1.4)
|
37
|
-
ruby-debug19 (0.11.6)
|
38
|
-
columnize (>= 0.3.1)
|
39
|
-
linecache19 (>= 0.5.11)
|
40
|
-
ruby-debug-base19 (>= 0.11.19)
|
41
|
-
ruby_core_source (0.1.5)
|
42
|
-
archive-tar-minitar (>= 0.5.2)
|
36
|
+
rake (0.9.2.2)
|
37
|
+
redis (2.2.2)
|
38
|
+
rspec (2.9.0)
|
39
|
+
rspec-core (~> 2.9.0)
|
40
|
+
rspec-expectations (~> 2.9.0)
|
41
|
+
rspec-mocks (~> 2.9.0)
|
42
|
+
rspec-core (2.9.0)
|
43
|
+
rspec-expectations (2.9.0)
|
44
|
+
diff-lcs (~> 1.1.3)
|
45
|
+
rspec-mocks (2.9.0)
|
46
|
+
slop (2.4.4)
|
43
47
|
|
44
48
|
PLATFORMS
|
45
49
|
ruby
|
46
50
|
|
47
51
|
DEPENDENCIES
|
52
|
+
awesome_print
|
53
|
+
pry
|
48
54
|
rack-api!
|
49
|
-
rack-test
|
55
|
+
rack-test!
|
50
56
|
rake (~> 0.9)
|
51
57
|
redis (~> 2.2.0)
|
52
58
|
rspec (~> 2.6)
|
53
|
-
ruby-debug19
|
data/lib/rack/api/controller.rb
CHANGED
data/lib/rack/api/runner.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
module Rack
|
2
2
|
class API
|
3
3
|
class Runner
|
4
|
-
HTTP_METHODS = %w[get post put delete head]
|
4
|
+
HTTP_METHODS = %w[get post put delete head patch options]
|
5
5
|
|
6
6
|
DELEGATE_METHODS = %w[
|
7
7
|
version use prefix basic_auth rescue_from
|
8
8
|
helper respond_to default_url_options
|
9
|
-
get post put delete head
|
9
|
+
get post put delete head patch options
|
10
10
|
]
|
11
11
|
|
12
12
|
attr_accessor :settings
|
@@ -214,7 +214,7 @@ module Rack
|
|
214
214
|
# path are recognized.
|
215
215
|
#
|
216
216
|
# You're better off using all verb shortcut methods. Implemented verbs are
|
217
|
-
# +get+, +post+, +put+, +delete+ and +
|
217
|
+
# +get+, +post+, +put+, +delete+, +head+ and +patch+.
|
218
218
|
#
|
219
219
|
# class MyAPI < Rack::API
|
220
220
|
# version "v1" do
|
@@ -250,7 +250,9 @@ module Rack
|
|
250
250
|
# your world will explode.
|
251
251
|
#
|
252
252
|
def route(method, path, requirements = {}, &block)
|
253
|
-
|
253
|
+
separator = requirements.delete(:separator) { %w[ / . ? ] }
|
254
|
+
|
255
|
+
path = Rack::Mount::Strexp.compile mount_path(path), requirements, separator
|
254
256
|
controller_class = Controller
|
255
257
|
|
256
258
|
if requirements[:to]
|
@@ -274,7 +276,7 @@ module Rack
|
|
274
276
|
#
|
275
277
|
# rescue_from ActiveRecord::RecordNotFound, :status => 404
|
276
278
|
# rescue_from Exception, :status => 500
|
277
|
-
# rescue_from Exception do
|
279
|
+
# rescue_from Exception do |error|
|
278
280
|
# $logger.error error.inspect
|
279
281
|
# [500, {"Content-Type" => "text/plain"}, []]
|
280
282
|
# end
|
data/lib/rack/api/version.rb
CHANGED
data/rack-api.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
require "rack/api"
|
3
|
+
require "rack/api/version"
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "rack-api"
|
@@ -19,10 +19,12 @@ Gem::Specification.new do |s|
|
|
19
19
|
|
20
20
|
s.add_dependency "rack", ">= 1.0.0"
|
21
21
|
s.add_dependency "rack-mount", ">= 0.6.0"
|
22
|
-
s.add_dependency "activesupport", ">= 3.0
|
22
|
+
s.add_dependency "activesupport", ">= 3.0"
|
23
|
+
s.add_dependency "i18n"
|
23
24
|
s.add_development_dependency "rspec", "~> 2.6"
|
24
25
|
s.add_development_dependency "rack-test", "~> 0.5.7"
|
25
26
|
s.add_development_dependency "redis", "~> 2.2.0"
|
26
27
|
s.add_development_dependency "rake", "~> 0.9"
|
27
|
-
s.add_development_dependency "
|
28
|
+
s.add_development_dependency "pry"
|
29
|
+
s.add_development_dependency "awesome_print"
|
28
30
|
end
|
@@ -3,6 +3,10 @@ require "spec_helper"
|
|
3
3
|
describe Rack::API, "delegators" do
|
4
4
|
subject { Rack::API }
|
5
5
|
|
6
|
+
specify "sanity check for delegate methods" do
|
7
|
+
Rack::API::Runner::DELEGATE_METHODS.size.should == 15
|
8
|
+
end
|
9
|
+
|
6
10
|
it { should respond_to(:version) }
|
7
11
|
it { should respond_to(:use) }
|
8
12
|
it { should respond_to(:prefix) }
|
@@ -15,4 +19,6 @@ describe Rack::API, "delegators" do
|
|
15
19
|
it { should respond_to(:put) }
|
16
20
|
it { should respond_to(:delete) }
|
17
21
|
it { should respond_to(:head) }
|
22
|
+
it { should respond_to(:patch) }
|
23
|
+
it { should respond_to(:options) }
|
18
24
|
end
|
@@ -1,17 +1,14 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Rack::API::Runner do
|
4
|
-
specify "sanity check for delegate methods" do
|
5
|
-
# remember to update spec/method_delegation_spec.rb
|
6
|
-
Rack::API::Runner::DELEGATE_METHODS.size.should == 13
|
7
|
-
end
|
8
|
-
|
9
4
|
it "responds to http methods" do
|
10
5
|
subject.should respond_to(:get)
|
11
6
|
subject.should respond_to(:post)
|
12
7
|
subject.should respond_to(:put)
|
13
8
|
subject.should respond_to(:delete)
|
14
9
|
subject.should respond_to(:head)
|
10
|
+
subject.should respond_to(:options)
|
11
|
+
subject.should respond_to(:patch)
|
15
12
|
end
|
16
13
|
|
17
14
|
it "sets available formats" do
|
@@ -50,7 +47,11 @@ describe Rack::API::Runner do
|
|
50
47
|
:handler => proc {}
|
51
48
|
}
|
52
49
|
|
53
|
-
Rack::API::Controller
|
50
|
+
Rack::API::Controller
|
51
|
+
.should_receive(:new)
|
52
|
+
.with(hash_including(expected))
|
53
|
+
.and_return(mock.as_null_object)
|
54
|
+
|
54
55
|
subject.version("v1") do
|
55
56
|
respond_to :fffuuu
|
56
57
|
prefix "api"
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Rack::API, "separators" do
|
4
|
+
before do
|
5
|
+
Rack::API.app do
|
6
|
+
get("/no-dots/:name(.:format)") { params }
|
7
|
+
get("/dots/:name", :separator => %w[/?]) { params }
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
context "/no-dots/:name" do
|
12
|
+
it "stops on /" do
|
13
|
+
get "/no-dots/foo/"
|
14
|
+
last_response.body.should == {:name => "foo"}.to_json
|
15
|
+
end
|
16
|
+
|
17
|
+
it "stops on ?" do
|
18
|
+
get "/no-dots/foo?a=1"
|
19
|
+
last_response.body.should == {:a => "1", :name => "foo"}.to_json
|
20
|
+
end
|
21
|
+
|
22
|
+
it "stops on ." do
|
23
|
+
get "/no-dots/foo.json"
|
24
|
+
last_response.body.should == {:name => "foo", :format => "json"}.to_json
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "/dots/:name" do
|
29
|
+
it "stops on /" do
|
30
|
+
get "/dots/foo/"
|
31
|
+
last_response.body.should == {:name => "foo"}.to_json
|
32
|
+
end
|
33
|
+
|
34
|
+
it "stops on ?" do
|
35
|
+
get "/dots/foo?a=1"
|
36
|
+
last_response.body.should == {:a => "1", :name => "foo"}.to_json
|
37
|
+
end
|
38
|
+
|
39
|
+
it "stops on ." do
|
40
|
+
get "/dots/foo.json"
|
41
|
+
last_response.body.should == {:name => "foo.json"}.to_json
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -54,7 +54,7 @@ describe Rack::API::Controller, "#url_for" do
|
|
54
54
|
|
55
55
|
it "adds query string" do
|
56
56
|
actual = subject.url_for(:format => :json, :filters => [:name, :age])
|
57
|
-
actual.should == "http://example.org/v1?filters
|
57
|
+
actual.should == "http://example.org/v1?filters%5B%5D=name&filters%5B%5D=age&format=json"
|
58
58
|
end
|
59
59
|
|
60
60
|
it "uses host from request" do
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-03-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|
16
|
-
requirement: &
|
16
|
+
requirement: &70274063249420 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70274063249420
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rack-mount
|
27
|
-
requirement: &
|
27
|
+
requirement: &70274063248740 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,21 +32,32 @@ dependencies:
|
|
32
32
|
version: 0.6.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70274063248740
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: activesupport
|
38
|
-
requirement: &
|
38
|
+
requirement: &70274063248280 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 3.0
|
43
|
+
version: '3.0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70274063248280
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: i18n
|
49
|
+
requirement: &70274063247900 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70274063247900
|
47
58
|
- !ruby/object:Gem::Dependency
|
48
59
|
name: rspec
|
49
|
-
requirement: &
|
60
|
+
requirement: &70274063247320 !ruby/object:Gem::Requirement
|
50
61
|
none: false
|
51
62
|
requirements:
|
52
63
|
- - ~>
|
@@ -54,10 +65,10 @@ dependencies:
|
|
54
65
|
version: '2.6'
|
55
66
|
type: :development
|
56
67
|
prerelease: false
|
57
|
-
version_requirements: *
|
68
|
+
version_requirements: *70274063247320
|
58
69
|
- !ruby/object:Gem::Dependency
|
59
70
|
name: rack-test
|
60
|
-
requirement: &
|
71
|
+
requirement: &70274063246820 !ruby/object:Gem::Requirement
|
61
72
|
none: false
|
62
73
|
requirements:
|
63
74
|
- - ~>
|
@@ -65,10 +76,10 @@ dependencies:
|
|
65
76
|
version: 0.5.7
|
66
77
|
type: :development
|
67
78
|
prerelease: false
|
68
|
-
version_requirements: *
|
79
|
+
version_requirements: *70274063246820
|
69
80
|
- !ruby/object:Gem::Dependency
|
70
81
|
name: redis
|
71
|
-
requirement: &
|
82
|
+
requirement: &70274063246340 !ruby/object:Gem::Requirement
|
72
83
|
none: false
|
73
84
|
requirements:
|
74
85
|
- - ~>
|
@@ -76,10 +87,10 @@ dependencies:
|
|
76
87
|
version: 2.2.0
|
77
88
|
type: :development
|
78
89
|
prerelease: false
|
79
|
-
version_requirements: *
|
90
|
+
version_requirements: *70274063246340
|
80
91
|
- !ruby/object:Gem::Dependency
|
81
92
|
name: rake
|
82
|
-
requirement: &
|
93
|
+
requirement: &70274063245860 !ruby/object:Gem::Requirement
|
83
94
|
none: false
|
84
95
|
requirements:
|
85
96
|
- - ~>
|
@@ -87,10 +98,21 @@ dependencies:
|
|
87
98
|
version: '0.9'
|
88
99
|
type: :development
|
89
100
|
prerelease: false
|
90
|
-
version_requirements: *
|
101
|
+
version_requirements: *70274063245860
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: pry
|
104
|
+
requirement: &70274063245480 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *70274063245480
|
91
113
|
- !ruby/object:Gem::Dependency
|
92
|
-
name:
|
93
|
-
requirement: &
|
114
|
+
name: awesome_print
|
115
|
+
requirement: &70274063245020 !ruby/object:Gem::Requirement
|
94
116
|
none: false
|
95
117
|
requirements:
|
96
118
|
- - ! '>='
|
@@ -98,7 +120,7 @@ dependencies:
|
|
98
120
|
version: '0'
|
99
121
|
type: :development
|
100
122
|
prerelease: false
|
101
|
-
version_requirements: *
|
123
|
+
version_requirements: *70274063245020
|
102
124
|
description: Create web app APIs that respond to one or more formats using an elegant
|
103
125
|
DSL.
|
104
126
|
email:
|
@@ -154,6 +176,7 @@ files:
|
|
154
176
|
- spec/rack-api/paths_spec.rb
|
155
177
|
- spec/rack-api/rescue_from_spec.rb
|
156
178
|
- spec/rack-api/runner_spec.rb
|
179
|
+
- spec/rack-api/separators_spec.rb
|
157
180
|
- spec/rack-api/settings_spec.rb
|
158
181
|
- spec/rack-api/short_circuit_spec.rb
|
159
182
|
- spec/rack-api/ssl_spec.rb
|
@@ -179,7 +202,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
179
202
|
version: '0'
|
180
203
|
segments:
|
181
204
|
- 0
|
182
|
-
hash: -
|
205
|
+
hash: -2011021662254464063
|
183
206
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
184
207
|
none: false
|
185
208
|
requirements:
|
@@ -188,10 +211,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
188
211
|
version: '0'
|
189
212
|
segments:
|
190
213
|
- 0
|
191
|
-
hash: -
|
214
|
+
hash: -2011021662254464063
|
192
215
|
requirements: []
|
193
216
|
rubyforge_project:
|
194
|
-
rubygems_version: 1.8.
|
217
|
+
rubygems_version: 1.8.11
|
195
218
|
signing_key:
|
196
219
|
specification_version: 3
|
197
220
|
summary: Create web app APIs that respond to one or more formats using an elegant
|
@@ -211,6 +234,7 @@ test_files:
|
|
211
234
|
- spec/rack-api/paths_spec.rb
|
212
235
|
- spec/rack-api/rescue_from_spec.rb
|
213
236
|
- spec/rack-api/runner_spec.rb
|
237
|
+
- spec/rack-api/separators_spec.rb
|
214
238
|
- spec/rack-api/settings_spec.rb
|
215
239
|
- spec/rack-api/short_circuit_spec.rb
|
216
240
|
- spec/rack-api/ssl_spec.rb
|