sinatra-controllers 0.1.2 → 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.
@@ -0,0 +1 @@
1
+ * 0.2.0 add scoping
@@ -1,14 +1,18 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sinatra-controllers (0.1.2)
4
+ sinatra-controllers (0.2.0)
5
5
  sinatra (>= 1.0.0)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
+ awesome_print (0.3.1)
11
+ haml (3.0.25)
10
12
  minitest (2.0.2)
11
13
  rack (1.2.2)
14
+ rack-test (0.5.7)
15
+ rack (>= 1.0)
12
16
  sinatra (1.2.1)
13
17
  rack (~> 1.1)
14
18
  tilt (>= 1.2.2, < 2.0)
@@ -19,8 +23,11 @@ PLATFORMS
19
23
  ruby
20
24
 
21
25
  DEPENDENCIES
26
+ awesome_print
22
27
  bundler (>= 1.0.0)
28
+ haml
23
29
  minitest (~> 2.0.0)
30
+ rack-test (~> 0.5.7)
24
31
  sinatra (>= 1.0.0)
25
32
  sinatra-controllers!
26
33
  watchr
@@ -57,4 +57,28 @@ register is optional here.
57
57
  end
58
58
  end
59
59
 
60
+ You can also use scopes for your own defined path, either because you're
61
+ unhappy with your classname, or because you just want to:
60
62
 
63
+ class Fringe < Sinatra::Controller
64
+ def get_walternet
65
+ 'scopes'
66
+ end
67
+ def peter
68
+ 'more scopes'
69
+ end
70
+ def index
71
+ 'index still if you want'
72
+ end
73
+ end
74
+
75
+ Sinatra::Controllers.register(Fringe, :scope => 'fringe') do
76
+ get 'peter', :peter
77
+ get '/', :index
78
+ end
79
+
80
+ this enables the following routes
81
+
82
+ get '/fringe/walternet'
83
+ get '/fringe/peter'
84
+ get '/'
@@ -25,16 +25,22 @@ module Sinatra
25
25
  @opts = opts
26
26
  end
27
27
 
28
- def route(verb, path, action, opts={})
28
+ def route(verb, path, action)
29
29
  aklass = klass # need this so it will stay in scope for closure
30
30
  block = proc { aklass.new(params, request).send action }
31
+ if path[0] != '/'
32
+ path = '/' + File.join(opts[:scope], path)
33
+ end
31
34
  Sinatra::Application.send verb, path, &block
32
35
  end
33
36
 
34
37
  def parse
35
38
  klass.instance_methods.each do |meth|
36
- next unless meth =~ /^(get|post|delete|put)_(.*)$/
37
- route $1,"/#{klass.to_s.downcase}/#{$2.downcase}", meth
39
+ verb,name = meth.to_s.scan(/^(get|post|delete|put)_(.*)$/).flatten
40
+ next unless verb
41
+ scope = '/' + (opts[:scope] || klass.to_s.downcase)
42
+ scope.gsub!(%r{^/+},'/')
43
+ route verb,"#{scope}/#{name.downcase}", meth
38
44
  end
39
45
  end
40
46
 
@@ -1,5 +1,5 @@
1
1
  module Sinatra
2
2
  module Controllers
3
- VERSION = "0.1.2"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -18,6 +18,10 @@ Gem::Specification.new do |s|
18
18
  s.add_development_dependency "bundler", ">= 1.0.0"
19
19
  s.add_development_dependency "minitest", "~> 2.0.0"
20
20
  s.add_development_dependency "watchr"
21
+ s.add_development_dependency "rack-test", "~> 0.5.7"
22
+ s.add_development_dependency "awesome_print"
23
+ s.add_development_dependency "haml"
24
+
21
25
 
22
26
  s.files = `git ls-files`.split("\n")
23
27
  s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
@@ -1,28 +1,68 @@
1
- require 'rack/test'
2
- require 'test/unit'
3
- require 'minitest/autorun'
4
- require 'ap'
5
- require './test/fixtures/sinatra_application'
6
-
7
- class Pride
8
- def print o
9
- case o
10
- when /0 errors/i
11
- Kernel.print o.green
12
- when /(e|f)/i
13
- Kernel.print o.red
14
- else
15
- Kernel.print o.green
16
- end
17
- end
18
- def puts o = ''
19
- if o=~ /([1-9]+ failures)/
20
- o.sub!(/([1-9]+ failures)/, '\1'.red)
21
- end
22
- Kernel.puts o
1
+ require './test/helper'
2
+
3
+ class Blah < Sinatra::Controller
4
+ def help
5
+ @blah = 'message' + params.inspect
6
+ haml :foo
7
+ end
8
+ def test
9
+ params.inspect
10
+ end
11
+
12
+ def flames
13
+ 'heat'
14
+ end
15
+
16
+ def requested
17
+ request.inspect
18
+ end
19
+
20
+ def racket
21
+ 'posted'
22
+ end
23
+
24
+ def everything
25
+ 'wiped'
26
+ end
27
+ def fringe
28
+ @fringe = "Anna Torv"
29
+ haml :fringe
30
+ end
31
+ def take
32
+ params[:arg]
33
+ end
34
+ end
35
+
36
+ class Help < Sinatra::Controller
37
+ def help
38
+ 'another help'
39
+ end
40
+ def get_index
41
+ 'help found'
23
42
  end
24
43
  end
25
- MiniTest::Unit.output = Pride.new
44
+
45
+ Sinatra::Controllers.register(Help) do
46
+ get '/help', :help
47
+ end
48
+
49
+ Sinatra::Controllers.register(Blah) do
50
+ get '/request', :requested
51
+ get '/', :help
52
+ get '/test/:id', :test
53
+ post '/racket', :racket
54
+ put '/flame', :flames
55
+ delete '/all', :everything
56
+ get '/fringe', :fringe
57
+ get '/take/:arg', :take
58
+ end
59
+
60
+
61
+
62
+ # regular path should work too
63
+ get '/regular' do
64
+ 'flames'
65
+ end
26
66
 
27
67
  class ClassicMappingTest < MiniTest::Unit::TestCase
28
68
  include Rack::Test::Methods
@@ -97,33 +137,3 @@ class ClassicMappingTest < MiniTest::Unit::TestCase
97
137
  assert_equal true, (last_response.body =~ /123/) != nil
98
138
  end
99
139
  end
100
-
101
- require 'minitest/spec'
102
- describe "without defined route block" do
103
- include Rack::Test::Methods
104
- def app
105
- @app = Sinatra::Application
106
- @app.set :environment, :test
107
- @app
108
- end
109
- it "should respond to get" do
110
- get '/welcome/index'
111
- last_response.status.must_equal 200
112
- last_response.body.must_match /route test/
113
- end
114
- it "should respond to put" do
115
- put '/welcome/update'
116
- last_response.status.must_equal 200
117
- last_response.body.must_match /walternet/
118
- end
119
- it "should respond to post" do
120
- post '/welcome/peter'
121
- last_response.status.must_equal 200
122
- last_response.body.must_match /amber/
123
- end
124
- it "should respond to delete" do
125
- delete '/welcome/universe'
126
- last_response.status.must_equal 200
127
- last_response.body.must_match /destroy/
128
- end
129
- end
@@ -0,0 +1,29 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'rack/test'
4
+ require 'test/unit'
5
+ require 'minitest/autorun'
6
+ require 'awesome_print'
7
+ require 'sinatra'
8
+ require 'sinatra-controllers'
9
+
10
+ class Pride
11
+ def print o
12
+ case o
13
+ when /0 errors/i
14
+ Kernel.print o.green
15
+ when /(e|f)/i
16
+ Kernel.print o.red
17
+ else
18
+ Kernel.print o.green
19
+ end
20
+ end
21
+ def puts o = ''
22
+ if o=~ /([1-9]+ failures)/
23
+ o.sub!(/([1-9]+ failures)/, '\1'.red)
24
+ end
25
+ Kernel.puts o
26
+ end
27
+ end
28
+ MiniTest::Unit.output = Pride.new
29
+
@@ -0,0 +1,47 @@
1
+ require './test/helper'
2
+ require 'minitest/spec'
3
+
4
+ class Welcome < Sinatra::Controller
5
+ def get_index
6
+ 'route test'
7
+ end
8
+ def put_update
9
+ 'walternet'
10
+ end
11
+ def post_peter
12
+ 'amber'
13
+ end
14
+ def delete_universe
15
+ 'destroy'
16
+ end
17
+ end
18
+ Sinatra::Controllers.register(Welcome)
19
+
20
+ describe "without defined route block" do
21
+ include Rack::Test::Methods
22
+ def app
23
+ @app = Sinatra::Application
24
+ @app.set :environment, :test
25
+ @app
26
+ end
27
+ it "should respond to get" do
28
+ get '/welcome/index'
29
+ last_response.status.must_equal 200
30
+ last_response.body.must_match /route test/
31
+ end
32
+ it "should respond to put" do
33
+ put '/welcome/update'
34
+ last_response.status.must_equal 200
35
+ last_response.body.must_match /walternet/
36
+ end
37
+ it "should respond to post" do
38
+ post '/welcome/peter'
39
+ last_response.status.must_equal 200
40
+ last_response.body.must_match /amber/
41
+ end
42
+ it "should respond to delete" do
43
+ delete '/welcome/universe'
44
+ last_response.status.must_equal 200
45
+ last_response.body.must_match /destroy/
46
+ end
47
+ end
@@ -0,0 +1,47 @@
1
+ require './test/helper'
2
+ require 'minitest/spec'
3
+
4
+ class Show70 < Sinatra::Controller
5
+ def get_kelso
6
+ 'michael'
7
+ end
8
+ end
9
+
10
+ class Seinfeld < Sinatra::Controller
11
+ def get_cosmo
12
+ 'kramer'
13
+ end
14
+ def george
15
+ 'bald'
16
+ end
17
+ end
18
+
19
+ Sinatra::Controllers.register(Show70, :scope => '/70s_show')
20
+ # make sure we don't need leading slash
21
+ Sinatra::Controllers.register(Seinfeld, :scope => 'seinfeld') do
22
+ get 'costanza', :george
23
+ end
24
+
25
+ describe "with defined scope" do
26
+ include Rack::Test::Methods
27
+ def app
28
+ @app = Sinatra::Application
29
+ @app.set :environment, :test
30
+ @app
31
+ end
32
+ it "should use correct scope" do
33
+ get '/70s_show/kelso'
34
+ last_response.status.must_equal 200
35
+ last_response.body.must_equal 'michael'
36
+ end
37
+ it "should use correct scope without leading slash using no block" do
38
+ get '/seinfeld/cosmo'
39
+ last_response.status.must_equal 200
40
+ last_response.body.must_equal 'kramer'
41
+ end
42
+ it "should use correct scope without leading slash for block" do
43
+ get '/seinfeld/costanza'
44
+ last_response.status.must_equal 200
45
+ last_response.body.must_equal 'bald'
46
+ end
47
+ end
File without changes
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
8
7
  - 2
9
- version: 0.1.2
8
+ - 0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Daniel Bretoi
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-04-06 00:00:00 -07:00
17
+ date: 2011-04-07 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -75,6 +75,47 @@ dependencies:
75
75
  version: "0"
76
76
  type: :development
77
77
  version_requirements: *id004
78
+ - !ruby/object:Gem::Dependency
79
+ name: rack-test
80
+ prerelease: false
81
+ requirement: &id005 !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ~>
85
+ - !ruby/object:Gem::Version
86
+ segments:
87
+ - 0
88
+ - 5
89
+ - 7
90
+ version: 0.5.7
91
+ type: :development
92
+ version_requirements: *id005
93
+ - !ruby/object:Gem::Dependency
94
+ name: awesome_print
95
+ prerelease: false
96
+ requirement: &id006 !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ segments:
102
+ - 0
103
+ version: "0"
104
+ type: :development
105
+ version_requirements: *id006
106
+ - !ruby/object:Gem::Dependency
107
+ name: haml
108
+ prerelease: false
109
+ requirement: &id007 !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ segments:
115
+ - 0
116
+ version: "0"
117
+ type: :development
118
+ version_requirements: *id007
78
119
  description: Adds controllers to Sinatra
79
120
  email: []
80
121
 
@@ -86,6 +127,7 @@ extra_rdoc_files: []
86
127
 
87
128
  files:
88
129
  - .gitignore
130
+ - CHANGELOG
89
131
  - Gemfile
90
132
  - Gemfile.lock
91
133
  - README.rdoc
@@ -94,9 +136,11 @@ files:
94
136
  - lib/sinatra-controllers/version.rb
95
137
  - sinatra-controllers.gemspec
96
138
  - test/controller_test.rb
97
- - test/fixtures/sinatra_application.rb
98
- - test/fixtures/views/foo.haml
99
- - test/fixtures/views/fringe.haml
139
+ - test/helper.rb
140
+ - test/no_block_test.rb
141
+ - test/path_defined_test.rb
142
+ - test/views/foo.haml
143
+ - test/views/fringe.haml
100
144
  - test/watchr.rb
101
145
  has_rdoc: true
102
146
  homepage: https://github.com/danielb2/sinatra-controllers
@@ -134,7 +178,9 @@ specification_version: 3
134
178
  summary: Adds controllers to Sinatra
135
179
  test_files:
136
180
  - test/controller_test.rb
137
- - test/fixtures/sinatra_application.rb
138
- - test/fixtures/views/foo.haml
139
- - test/fixtures/views/fringe.haml
181
+ - test/helper.rb
182
+ - test/no_block_test.rb
183
+ - test/path_defined_test.rb
184
+ - test/views/foo.haml
185
+ - test/views/fringe.haml
140
186
  - test/watchr.rb
@@ -1,86 +0,0 @@
1
- require 'sinatra'
2
- class Sinatra::Application
3
- def env
4
- @env.update('SCRIPT_NAME' => '/test')
5
- end
6
- end
7
- require 'sinatra-controllers'
8
-
9
- class Blah < Sinatra::Controller
10
- def help
11
- @blah = 'message' + params.inspect
12
- haml :foo
13
- end
14
- def test
15
- params.inspect
16
- end
17
-
18
- def flames
19
- 'heat'
20
- end
21
-
22
- def requested
23
- request.inspect
24
- end
25
-
26
- def racket
27
- 'posted'
28
- end
29
-
30
- def everything
31
- 'wiped'
32
- end
33
- def fringe
34
- @fringe = "Anna Torv"
35
- haml :fringe
36
- end
37
- def take
38
- params[:arg]
39
- end
40
- end
41
-
42
- class Help < Sinatra::Controller
43
- def help
44
- 'another help'
45
- end
46
- def get_index
47
- 'help found'
48
- end
49
- end
50
-
51
- class Welcome < Sinatra::Controller
52
- def get_index
53
- 'route test'
54
- end
55
- def put_update
56
- 'walternet'
57
- end
58
- def post_peter
59
- 'amber'
60
- end
61
- def delete_universe
62
- 'destroy'
63
- end
64
- end
65
-
66
- Sinatra::Controllers.register(Welcome)
67
-
68
- Sinatra::Controllers.register(Help) do
69
- get '/help', :help
70
- end
71
-
72
- Sinatra::Controllers.register(Blah) do
73
- get '/request', :requested
74
- get '/', :help
75
- get '/test/:id', :test
76
- post '/racket', :racket
77
- put '/flame', :flames
78
- delete '/all', :everything
79
- get '/fringe', :fringe
80
- get '/take/:arg', :take
81
- end
82
-
83
- # regular paths should work too
84
- get '/regular' do
85
- 'flames'
86
- end