rack-api 0.1.1 → 0.1.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.
- data/Gemfile.lock +1 -1
- data/README.rdoc +1 -1
- data/lib/rack/api/middleware.rb +1 -0
- data/lib/rack/api/middleware/ssl.rb +21 -0
- data/lib/rack/api/runner.rb +1 -1
- data/lib/rack/api/version.rb +1 -1
- data/spec/rack-api/basic_auth_spec.rb +5 -5
- data/spec/rack-api/format_spec.rb +2 -2
- data/spec/rack-api/helpers_spec.rb +2 -2
- data/spec/rack-api/http_methods_spec.rb +1 -1
- data/spec/rack-api/inheritance_spec.rb +1 -1
- data/spec/rack-api/middlewares_spec.rb +3 -0
- data/spec/rack-api/params_spec.rb +3 -3
- data/spec/rack-api/ssl_spec.rb +21 -0
- data/spec/support/helpers.rb +4 -0
- data/spec/support/zomg_middleware.rb +10 -0
- metadata +6 -1
data/Gemfile.lock
CHANGED
data/README.rdoc
CHANGED
@@ -80,7 +80,7 @@ Then you can go to your spec file, say, <tt>spec/api_spec.rb</tt>. You need to d
|
|
80
80
|
|
81
81
|
it "renders status page" do
|
82
82
|
get "/api/v1/status"
|
83
|
-
|
83
|
+
last_response.body.should == {:status => "running"}.to_json
|
84
84
|
last_response.status.should == 200
|
85
85
|
end
|
86
86
|
end
|
data/lib/rack/api/middleware.rb
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Rack
|
2
|
+
class API
|
3
|
+
module Middleware
|
4
|
+
class SSL
|
5
|
+
def initialize(app)
|
6
|
+
@app = app
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
request = Rack::Request.new(env)
|
11
|
+
|
12
|
+
if env["rack.url_scheme"] == "https"
|
13
|
+
@app.call(env)
|
14
|
+
else
|
15
|
+
[400, {"Content-Type" => "text/plain"}, ["Only HTTPS requests are supported by now."]]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/rack/api/runner.rb
CHANGED
@@ -211,7 +211,7 @@ module Rack
|
|
211
211
|
builder.use Rack::API::Middleware::Format, option(:formats)
|
212
212
|
|
213
213
|
# Add middlewares to executation stack.
|
214
|
-
option(:middlewares, :
|
214
|
+
option(:middlewares, :merge).each {|middleware| builder.use(*middleware)}
|
215
215
|
|
216
216
|
# Apply helpers to app.
|
217
217
|
helpers = option(:helpers)
|
data/lib/rack/api/version.rb
CHANGED
@@ -43,7 +43,7 @@ describe Rack::API, "Basic Authentication" do
|
|
43
43
|
get "/v1/", {}, "HTTP_AUTHORIZATION" => basic_auth("admin", "test")
|
44
44
|
|
45
45
|
last_response.status.should == 200
|
46
|
-
|
46
|
+
last_response.body.should == {"success" => true}.to_json
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
@@ -52,7 +52,7 @@ describe Rack::API, "Basic Authentication" do
|
|
52
52
|
get "/v2/"
|
53
53
|
|
54
54
|
last_response.status.should == 200
|
55
|
-
|
55
|
+
last_response.body.should == {"success" => true}.to_json
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
@@ -69,17 +69,17 @@ describe Rack::API, "Basic Authentication" do
|
|
69
69
|
get "/v3/", {}, "HTTP_AUTHORIZATION" => basic_auth("john", "test")
|
70
70
|
|
71
71
|
last_response.status.should == 200
|
72
|
-
|
72
|
+
last_response.body.should == {"success" => true}.to_json
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
76
76
|
it "returns credentials" do
|
77
77
|
get "/v2/credentials", {}, "HTTP_AUTHORIZATION" => basic_auth("admin", "test")
|
78
|
-
|
78
|
+
last_response.body.should == ["admin", "test"].to_json
|
79
79
|
end
|
80
80
|
|
81
81
|
it "returns empty array when no credentials are provided" do
|
82
82
|
get "/v2/credentials"
|
83
|
-
|
83
|
+
last_response.body.should == [].to_json
|
84
84
|
end
|
85
85
|
end
|
@@ -62,14 +62,14 @@ describe Rack::API, "Format" do
|
|
62
62
|
get "/v1", :format => "json"
|
63
63
|
|
64
64
|
last_response.status.should == 200
|
65
|
-
|
65
|
+
last_response.body.should == {"success" => true}.to_json
|
66
66
|
end
|
67
67
|
|
68
68
|
it "renders when set through extension" do
|
69
69
|
get "/v1/users.json"
|
70
70
|
|
71
71
|
last_response.status.should == 200
|
72
|
-
|
72
|
+
last_response.body.should == {"users" => []}.to_json
|
73
73
|
end
|
74
74
|
|
75
75
|
it "sends header" do
|
@@ -23,11 +23,11 @@ describe Rack::API, "Helpers" do
|
|
23
23
|
|
24
24
|
it "adds module helper" do
|
25
25
|
get "/v1"
|
26
|
-
|
26
|
+
json(last_response.body).should include("module")
|
27
27
|
end
|
28
28
|
|
29
29
|
it "adds block helper" do
|
30
30
|
get "/v1"
|
31
|
-
|
31
|
+
json(last_response.body).should include("block")
|
32
32
|
end
|
33
33
|
end
|
@@ -17,7 +17,7 @@ describe Rack::API, "HTTP Methods" do
|
|
17
17
|
it "renders #{method}" do
|
18
18
|
send method, "/v1/#{method}"
|
19
19
|
last_response.status.should == 200
|
20
|
-
|
20
|
+
last_response.body.should == {method => true}.to_json
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -3,6 +3,8 @@ require "spec_helper"
|
|
3
3
|
describe Rack::API, "Middlewares" do
|
4
4
|
before do
|
5
5
|
Rack::API.app do
|
6
|
+
use ZOMGMiddleware
|
7
|
+
|
6
8
|
version :v1 do
|
7
9
|
use AwesomeMiddleware
|
8
10
|
get("/") {}
|
@@ -13,5 +15,6 @@ describe Rack::API, "Middlewares" do
|
|
13
15
|
it "sends custom headers" do
|
14
16
|
get "/v1"
|
15
17
|
last_response.headers["X-Awesome"].should == "U R Awesome"
|
18
|
+
last_response.headers["X-ZOMG"].should == "ZOMG!"
|
16
19
|
end
|
17
20
|
end
|
@@ -12,16 +12,16 @@ describe Rack::API, "Params" do
|
|
12
12
|
|
13
13
|
it "detects optional names from routing params" do
|
14
14
|
get "/v1/users/1.json"
|
15
|
-
|
15
|
+
json(last_response.body).should == {"id" => "1", "format" => "json"}
|
16
16
|
end
|
17
17
|
|
18
18
|
it "detects query string params" do
|
19
19
|
get "/v1/users/1?include=articles"
|
20
|
-
|
20
|
+
json(last_response.body).should == {"id" => "1", "include" => "articles"}
|
21
21
|
end
|
22
22
|
|
23
23
|
it "detects post params" do
|
24
24
|
post "/v1/users", :name => "John Doe"
|
25
|
-
|
25
|
+
last_response.body.should == {"name" => "John Doe"}.to_json
|
26
26
|
end
|
27
27
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Rack::API::Middleware::SSL do
|
4
|
+
let(:action) { proc {|env| [200, {}, ["success"]] } }
|
5
|
+
|
6
|
+
it "denies http requests" do
|
7
|
+
env = Rack::MockRequest.env_for("/v1", "rack.url_scheme" => "http")
|
8
|
+
status, headers, response = Rack::API::Middleware::SSL.new(action).call(env)
|
9
|
+
|
10
|
+
status.should == 400
|
11
|
+
headers["Content-Type"].should == "text/plain"
|
12
|
+
response.should include("Only HTTPS requests are supported by now.")
|
13
|
+
end
|
14
|
+
|
15
|
+
it "accepts https requests" do
|
16
|
+
env = Rack::MockRequest.env_for("/v1", "rack.url_scheme" => "https")
|
17
|
+
status, headers, response = Rack::API::Middleware::SSL.new(action).call(env)
|
18
|
+
|
19
|
+
status.should == 200
|
20
|
+
end
|
21
|
+
end
|
data/spec/support/helpers.rb
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: rack-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.1.
|
5
|
+
version: 0.1.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Nando Vieira
|
@@ -110,6 +110,7 @@ files:
|
|
110
110
|
- lib/rack/api/formatter/jsonp.rb
|
111
111
|
- lib/rack/api/middleware.rb
|
112
112
|
- lib/rack/api/middleware/format.rb
|
113
|
+
- lib/rack/api/middleware/ssl.rb
|
113
114
|
- lib/rack/api/response.rb
|
114
115
|
- lib/rack/api/runner.rb
|
115
116
|
- lib/rack/api/version.rb
|
@@ -126,11 +127,13 @@ files:
|
|
126
127
|
- spec/rack-api/runner_spec.rb
|
127
128
|
- spec/rack-api/settings_spec.rb
|
128
129
|
- spec/rack-api/short_circuit_spec.rb
|
130
|
+
- spec/rack-api/ssl_spec.rb
|
129
131
|
- spec/spec_helper.rb
|
130
132
|
- spec/support/awesome_middleware.rb
|
131
133
|
- spec/support/core_ext.rb
|
132
134
|
- spec/support/helpers.rb
|
133
135
|
- spec/support/myapp.rb
|
136
|
+
- spec/support/zomg_middleware.rb
|
134
137
|
homepage: http://rubygems.org/gems/rack-api
|
135
138
|
licenses: []
|
136
139
|
|
@@ -171,8 +174,10 @@ test_files:
|
|
171
174
|
- spec/rack-api/runner_spec.rb
|
172
175
|
- spec/rack-api/settings_spec.rb
|
173
176
|
- spec/rack-api/short_circuit_spec.rb
|
177
|
+
- spec/rack-api/ssl_spec.rb
|
174
178
|
- spec/spec_helper.rb
|
175
179
|
- spec/support/awesome_middleware.rb
|
176
180
|
- spec/support/core_ext.rb
|
177
181
|
- spec/support/helpers.rb
|
178
182
|
- spec/support/myapp.rb
|
183
|
+
- spec/support/zomg_middleware.rb
|