sinatra_simple_router 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.md +10 -8
- data/lib/sinatra_simple_router/controller.rb +16 -0
- data/lib/sinatra_simple_router/version.rb +1 -1
- data/spec/sinatra_simple_router/controller_spec.rb +30 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MzNjMTU0NDRhYTNmYTE5NTRiZjkxZTdhMjVkZGEyNzk4YjMzMjM4OQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZWNhY2Q3NjQ2MmJkNGZlYWRiZDg5ZGVjN2NhYTY3M2Q4OWU3ZGVkYg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NWFkNjU4YTljZDM5NmJlYmIwNTgxNWE1MTAwNTc3ZDY2OTk3YzgyMjhkMWIz
|
10
|
+
NzIwYTAyNTRmNzVmZjQzNDJiODg1NDlmYTA3ZmMxMzc3MDc4MDUyN2MwNjVi
|
11
|
+
YzljMjlkMmYzZWUyNzJkM2Q3YmQzOGYyNTA1NDRlZjc3MjhjNjg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NTk3YzM0N2MzN2Y1ZDAzNzZhNzJiNGJmYjVjNjBkZGJlZjhmOTk0YjAxZTQ4
|
14
|
+
NzNjMWNmZGQ4ZmU2MmMxODk3YjJkNjE2MWExZjU1ZWRhMGQ3ZGYxNDA1YjVi
|
15
|
+
NDNkNDU1NzFiMDE2ZTY5NWZhMWYxNTk2MGNmOWM1NzI2ZGYwZmU=
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# SinatraSimpleRouter
|
2
2
|
|
3
|
-
Simple routing abstraction
|
3
|
+
Simple routing abstraction for Sinatra applications.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -35,20 +35,22 @@ class UsersController < SinatraSimpleRouter::Controller
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
+
class ItemsController < SinatraSimpleRouter::Controller
|
39
|
+
def show
|
40
|
+
@item = Item.find(params[:id])
|
41
|
+
render json: @item
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
38
45
|
class Application < Sinatra::Base
|
39
46
|
include SinatraSimpleRouter
|
40
|
-
|
47
|
+
|
41
48
|
match :get, "/users/:id", UsersController, :show
|
42
49
|
match :patch, "/users/:id", UsersController, :update
|
50
|
+
match :get, "/items/:id.json", ItemsController, :show
|
43
51
|
end
|
44
52
|
```
|
45
53
|
|
46
|
-
## Missing features
|
47
|
-
|
48
|
-
- Support before/after filters
|
49
|
-
- Named routes + Helpers
|
50
|
-
- Support more than one method (such as: match [:patch, :put] ...)
|
51
|
-
|
52
54
|
## Contributing
|
53
55
|
|
54
56
|
1. Fork it
|
@@ -4,6 +4,22 @@ module SinatraSimpleRouter
|
|
4
4
|
@app = app
|
5
5
|
end
|
6
6
|
|
7
|
+
def render(options = {})
|
8
|
+
if code=options[:status].to_i and code > 0
|
9
|
+
status code
|
10
|
+
end
|
11
|
+
|
12
|
+
if html=options[:html]
|
13
|
+
content_type "text/html"
|
14
|
+
body html.to_s
|
15
|
+
elsif json=options[:json]
|
16
|
+
content_type "application/json"
|
17
|
+
body json.to_json
|
18
|
+
else
|
19
|
+
raise ArgumentError.new("Unknown format in #{options.keys.sort}")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
7
23
|
def method_missing(method, *args, &block)
|
8
24
|
if @app.respond_to?(method)
|
9
25
|
(self.instance_variables - [:"@app"]).each do |v|
|
@@ -3,10 +3,37 @@ require "sinatra_simple_router"
|
|
3
3
|
|
4
4
|
module SinatraSimpleRouter
|
5
5
|
describe Controller do
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
let(:app) { double("App", body: "") }
|
7
|
+
let(:controller) { ItemsController.new(app) }
|
8
|
+
|
9
|
+
describe "#render" do
|
10
|
+
let(:content) { double("Content") }
|
11
|
+
let(:json) { double("JSON") }
|
12
|
+
|
13
|
+
it "renders json" do
|
14
|
+
expect(app).to receive(:content_type).with("application/json")
|
15
|
+
expect(app).to receive(:body).with(json)
|
16
|
+
expect(content).to receive(:to_json).and_return(json)
|
17
|
+
|
18
|
+
controller.render json: content
|
19
|
+
end
|
20
|
+
|
21
|
+
it "renders html" do
|
22
|
+
expect(app).to receive(:content_type).with("text/html")
|
23
|
+
expect(app).to receive(:body).with(content)
|
24
|
+
expect(content).to receive(:to_s).and_return(content)
|
9
25
|
|
26
|
+
controller.render html: content
|
27
|
+
end
|
28
|
+
|
29
|
+
it "sets the status" do
|
30
|
+
app.stub(:content_type)
|
31
|
+
expect(app).to receive(:status).with(201)
|
32
|
+
controller.render html: "", status: 201
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "method delegation" do
|
10
37
|
context "when the method is present in the Sinatra class" do
|
11
38
|
it "delegates to the class" do
|
12
39
|
expect(app).to receive(:body)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra_simple_router
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- elvio
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-09-
|
11
|
+
date: 2013-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|