sinatra_simple_router 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MzNjMTU0NDRhYTNmYTE5NTRiZjkxZTdhMjVkZGEyNzk4YjMzMjM4OQ==
4
+ NzdlNDVmMGY3OGYzYTU5NjZjYTk1YWFhZTFhZTYxNmYzNzY5NjY4OQ==
5
5
  data.tar.gz: !binary |-
6
- ZWNhY2Q3NjQ2MmJkNGZlYWRiZDg5ZGVjN2NhYTY3M2Q4OWU3ZGVkYg==
7
- !binary "U0hBNTEy":
6
+ YWU2ODZiZTZjZTZmMzIxOTBmNjIyZjU4MzIwZGJmZDBlN2Q0MzAzZA==
7
+ SHA512:
8
8
  metadata.gz: !binary |-
9
- NWFkNjU4YTljZDM5NmJlYmIwNTgxNWE1MTAwNTc3ZDY2OTk3YzgyMjhkMWIz
10
- NzIwYTAyNTRmNzVmZjQzNDJiODg1NDlmYTA3ZmMxMzc3MDc4MDUyN2MwNjVi
11
- YzljMjlkMmYzZWUyNzJkM2Q3YmQzOGYyNTA1NDRlZjc3MjhjNjg=
9
+ MDgxOTdhZmY3NDkzOTVjMTFiMjVmMzE1MmY0NzU2YjEzZDkwODQzZTY1Zjlk
10
+ ZTM5NzU4YjhmNGQ1NGY5Y2YyMDNjNjQ1ZGMzYmI5NDY3OTdkMDBmOGUzMDBl
11
+ ZGFhZGRlMDNjYmY2NzgyM2Q4MGY2NzBmZDA5Yjc1ZmVkNGJlMDQ=
12
12
  data.tar.gz: !binary |-
13
- NTk3YzM0N2MzN2Y1ZDAzNzZhNzJiNGJmYjVjNjBkZGJlZjhmOTk0YjAxZTQ4
14
- NzNjMWNmZGQ4ZmU2MmMxODk3YjJkNjE2MWExZjU1ZWRhMGQ3ZGYxNDA1YjVi
15
- NDNkNDU1NzFiMDE2ZTY5NWZhMWYxNTk2MGNmOWM1NzI2ZGYwZmU=
13
+ ODZkMTRhYzhlMjJkOTc0ZjAxMTVjM2I1ZjFlMzI2MTZkMGE1MDdjM2Y3Y2M4
14
+ MGI5Njk1OWFlMDMwNTEzMTQyYWMwN2RmNTk3OGMwNmQ4MjZjNjBlZmE3YjY4
15
+ OGQzZTQwZTFhYjc3OGQ5NzFlOTNkM2QzNmM5NDc3Yjg1YjFhNjg=
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ notifications:
5
+ email: false
data/LICENSE.txt CHANGED
@@ -19,4 +19,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
19
  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
20
  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
21
  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,6 +1,9 @@
1
1
  # SinatraSimpleRouter
2
2
 
3
- Simple routing abstraction for Sinatra applications.
3
+ [![Build Status](https://travis-ci.org/elvio/sinatra_simple_router.png)](https://travis-ci.org/elvio/sinatra_simple_router)
4
+ [![RubyGem](https://badge.fury.io/rb/sinatra_simple_router.png)](https://rubygems.org/gems/sinatra_simple_router)
5
+
6
+ Simple routing abstraction for Sinatra applications.
4
7
 
5
8
  ## Installation
6
9
 
@@ -22,19 +25,27 @@ Or install it yourself as:
22
25
  require "sinatra"
23
26
  require "sinatra_simple_router"
24
27
 
25
- class UsersController < SinatraSimpleRouter::Controller
26
- def show
27
- @user = User.find(params[:id])
28
- erb :"users/show"
28
+ class OrdersController
29
+ def initialize(app)
30
+ @app = app
29
31
  end
30
-
31
- def update
32
- @user = User.find(params[:id])
33
- @user.update_attributes(params[:user])
34
- redirect "/users/#{@user.id}"
32
+
33
+ def show
34
+ @order = Order.find(params[:id])
35
+ @app.content_type "application/json"
36
+ @app.body @order.to_json
35
37
  end
36
38
  end
37
39
 
40
+ class Application < Sinatra::Base
41
+ include SinatraSimpleRouter
42
+ match :get, "/orders/:id.json", OrdersController, :show
43
+ end
44
+ ```
45
+
46
+ ### SinatraSimpleRouter::Controller
47
+
48
+ ```ruby
38
49
  class ItemsController < SinatraSimpleRouter::Controller
39
50
  def show
40
51
  @item = Item.find(params[:id])
@@ -44,13 +55,45 @@ end
44
55
 
45
56
  class Application < Sinatra::Base
46
57
  include SinatraSimpleRouter
47
-
48
- match :get, "/users/:id", UsersController, :show
49
- match :patch, "/users/:id", UsersController, :update
50
58
  match :get, "/items/:id.json", ItemsController, :show
51
59
  end
52
60
  ```
53
61
 
62
+ ### Versioning URLs
63
+
64
+ ```ruby
65
+ require "sinatra"
66
+ require "sinatra_simple_router"
67
+
68
+ class V1::ItemsController < SinatraSimpleRouter::Controller
69
+ def show
70
+ @item = Item.find(params[:id])
71
+ render json: @item
72
+ end
73
+ end
74
+
75
+ class V2::ItemsController < SinatraSimpleRouter::Controller
76
+ def show
77
+ @item = Item.find(params[:id])
78
+ render json: ItemDecorator.new(@item).to_json
79
+ end
80
+ end
81
+
82
+ class Application < Sinatra::Base
83
+ include SinatraSimpleRouter
84
+
85
+ # maps '/v1/items/:id.json' to V1::ItemsController
86
+ version :v1 do
87
+ match :get, "/items/:id.json", V1::ItemsController, :show
88
+ end
89
+
90
+ # maps '/v2/items/:id.json' to V2::ItemsController
91
+ version :v2 do
92
+ match :get, "/items/:id.json", V2::ItemsController, :show
93
+ end
94
+ end
95
+ ```
96
+
54
97
  ## Contributing
55
98
 
56
99
  1. Fork it
data/Rakefile CHANGED
@@ -23,5 +23,4 @@ RSpec::Core::RakeTask.new("spec") do |spec|
23
23
  spec.pattern = "spec/**/*_spec.rb"
24
24
  end
25
25
 
26
- task :default => :spec
27
-
26
+ task :default => :spec
@@ -4,19 +4,18 @@ 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
7
+ def render(attrs = {})
8
+ code = attrs[:status].to_i
9
+ status(code) if code > 0
11
10
 
12
- if html=options[:html]
11
+ if attrs[:html]
13
12
  content_type "text/html"
14
- body html.to_s
15
- elsif json=options[:json]
13
+ body attrs[:html].to_s
14
+ elsif attrs[:json]
16
15
  content_type "application/json"
17
- body json.to_json
16
+ body attrs[:json].to_json
18
17
  else
19
- raise ArgumentError.new("Unknown format in #{options.keys.sort}")
18
+ raise ArgumentError.new("Unknown format in #{attrs.inspect}")
20
19
  end
21
20
  end
22
21
 
@@ -1,3 +1,3 @@
1
1
  module SinatraSimpleRouter
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -12,9 +12,20 @@ module SinatraSimpleRouter
12
12
 
13
13
  module ClassMethods
14
14
  def match(method, path, klass, action)
15
+ if @version
16
+ path = "/#{@version}#{path}"
17
+ end
18
+
19
+ puts "Registering: #{path}"
15
20
  send(method, path) do
16
21
  klass.new(self).send(action)
17
22
  end
18
23
  end
24
+
25
+ def version(version, &block)
26
+ @version = version
27
+ instance_eval(&block)
28
+ @version = nil
29
+ end
19
30
  end
20
31
  end
@@ -18,14 +18,18 @@ module SinatraSimpleRouter
18
18
  end
19
19
 
20
20
  describe ".match" do
21
- before do
22
- MyApplication.match(:get, "/", UsersController, :index)
23
- end
24
-
25
21
  it "dispatches the route to the controller class and action" do
26
- request = Rack::MockRequest.new(MyApplication)
22
+ request = Rack::MockRequest.new(SimpleApplication)
27
23
  response = request.get("/")
28
- expect(response.body).to eq("it works")
24
+ expect(response.body).to eq("index")
25
+ end
26
+ end
27
+
28
+ describe ".version" do
29
+ it "uses the specified version as prefix" do
30
+ request = Rack::MockRequest.new(VersionedApplication)
31
+ response = request.post("/v1/subscribe")
32
+ expect(response.body).to eq("subscribe")
29
33
  end
30
34
  end
31
35
  end
data/spec/spec_helper.rb CHANGED
@@ -10,15 +10,28 @@ module SinatraSimpleRouter
10
10
  end
11
11
 
12
12
  def index
13
- "it works"
13
+ "index"
14
+ end
15
+
16
+ def subscribe
17
+ "subscribe"
14
18
  end
15
19
  end
16
20
 
17
21
  class ItemsController < Controller
18
22
  end
19
23
 
20
- class MyApplication < Sinatra::Base
24
+ class SimpleApplication < Sinatra::Base
21
25
  include SinatraSimpleRouter
26
+ match(:get, "/", UsersController, :index)
27
+ end
28
+
29
+ class VersionedApplication < Sinatra::Base
30
+ include SinatraSimpleRouter
31
+
32
+ version :v1 do
33
+ match(:post, "/subscribe", UsersController, :subscribe)
34
+ end
22
35
  end
23
36
 
24
37
  class HasAncestor < Sinatra::Base
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.3
4
+ version: 0.0.4
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-26 00:00:00.000000000 Z
11
+ date: 2014-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -74,6 +74,7 @@ extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
76
  - .gitignore
77
+ - .travis.yml
77
78
  - Gemfile
78
79
  - LICENSE.txt
79
80
  - README.md
@@ -105,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
106
  version: '0'
106
107
  requirements: []
107
108
  rubyforge_project:
108
- rubygems_version: 2.0.0
109
+ rubygems_version: 2.2.1
109
110
  signing_key:
110
111
  specification_version: 4
111
112
  summary: Simple routing and controller abstraction to Sinatra applications