rtomayko-sinatra 0.3.3 → 0.8.9
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/AUTHORS +40 -0
- data/CHANGES +167 -0
- data/README.rdoc +104 -98
- data/Rakefile +27 -9
- data/{test → compat}/app_test.rb +11 -10
- data/{test → compat}/application_test.rb +10 -5
- data/compat/builder_test.rb +101 -0
- data/{test → compat}/custom_error_test.rb +0 -0
- data/compat/erb_test.rb +136 -0
- data/{test → compat}/events_test.rb +12 -2
- data/compat/filter_test.rb +30 -0
- data/compat/haml_test.rb +233 -0
- data/compat/helper.rb +21 -0
- data/compat/mapped_error_test.rb +72 -0
- data/{test → compat}/pipeline_test.rb +9 -4
- data/{test → compat}/public/foo.xml +0 -0
- data/compat/sass_test.rb +57 -0
- data/{test → compat}/sessions_test.rb +0 -0
- data/{test → compat}/streaming_test.rb +4 -1
- data/{test → compat}/sym_params_test.rb +0 -0
- data/{test → compat}/template_test.rb +0 -0
- data/{test → compat}/use_in_file_templates_test.rb +0 -0
- data/{test → compat}/views/foo.builder +0 -0
- data/{test → compat}/views/foo.erb +0 -0
- data/{test → compat}/views/foo.haml +0 -0
- data/{test → compat}/views/foo.sass +0 -0
- data/{test → compat}/views/foo_layout.erb +0 -0
- data/{test → compat}/views/foo_layout.haml +0 -0
- data/{test → compat}/views/layout_test/foo.builder +0 -0
- data/{test → compat}/views/layout_test/foo.erb +0 -0
- data/{test → compat}/views/layout_test/foo.haml +0 -0
- data/{test → compat}/views/layout_test/foo.sass +0 -0
- data/{test → compat}/views/layout_test/layout.builder +0 -0
- data/{test → compat}/views/layout_test/layout.erb +0 -0
- data/{test → compat}/views/layout_test/layout.haml +0 -0
- data/{test → compat}/views/layout_test/layout.sass +0 -0
- data/{test → compat}/views/no_layout/no_layout.builder +0 -0
- data/{test → compat}/views/no_layout/no_layout.haml +0 -0
- data/lib/sinatra/base.rb +818 -0
- data/lib/sinatra/compat.rb +239 -0
- data/{images → lib/sinatra/images}/404.png +0 -0
- data/{images → lib/sinatra/images}/500.png +0 -0
- data/lib/sinatra/main.rb +48 -0
- data/lib/sinatra/test/rspec.rb +1 -9
- data/lib/sinatra/test/spec.rb +1 -9
- data/lib/sinatra/test/unit.rb +3 -5
- data/lib/sinatra/test.rb +112 -0
- data/lib/sinatra.rb +3 -1486
- data/sinatra.gemspec +66 -36
- data/test/base_test.rb +72 -0
- data/test/builder_test.rb +56 -89
- data/test/data/reload_app_file.rb +3 -0
- data/test/erb_test.rb +44 -125
- data/test/filter_test.rb +29 -20
- data/test/haml_test.rb +57 -218
- data/test/helpers_test.rb +368 -0
- data/test/mapped_error_test.rb +141 -49
- data/test/middleware_test.rb +63 -0
- data/test/options_test.rb +103 -0
- data/test/reload_test.rb +65 -0
- data/test/request_test.rb +11 -0
- data/test/result_test.rb +92 -0
- data/test/routing_test.rb +338 -0
- data/test/sass_test.rb +33 -50
- data/test/sinatra_test.rb +15 -0
- data/test/static_test.rb +60 -0
- data/test/templates_test.rb +92 -0
- data/test/views/hello.builder +1 -0
- data/test/views/hello.erb +1 -0
- data/test/views/hello.haml +1 -0
- data/test/views/hello.sass +2 -0
- data/test/views/hello.test +1 -0
- data/test/views/layout2.builder +3 -0
- data/test/views/layout2.erb +2 -0
- data/test/views/layout2.haml +2 -0
- data/test/views/layout2.test +1 -0
- metadata +78 -48
- data/ChangeLog +0 -96
- data/lib/sinatra/test/methods.rb +0 -76
- data/test/event_context_test.rb +0 -15
- data/test/helper.rb +0 -9
data/{test → compat}/app_test.rb
RENAMED
@@ -108,7 +108,9 @@ context "Sinatra" do
|
|
108
108
|
end
|
109
109
|
|
110
110
|
specify "renders a body with a redirect" do
|
111
|
-
|
111
|
+
helpers do
|
112
|
+
def foo ; 'blah' ; end
|
113
|
+
end
|
112
114
|
get "/" do
|
113
115
|
redirect 'foo', :foo
|
114
116
|
end
|
@@ -130,13 +132,10 @@ context "Sinatra" do
|
|
130
132
|
end
|
131
133
|
|
132
134
|
specify "stop sets content and ends event" do
|
133
|
-
|
134
|
-
Sinatra::EventContext.any_instance.expects(:foo).never
|
135
|
-
|
136
135
|
get '/set_body' do
|
137
136
|
stop 'Hello!'
|
138
137
|
stop 'World!'
|
139
|
-
|
138
|
+
fail 'stop should have halted'
|
140
139
|
end
|
141
140
|
|
142
141
|
get_it '/set_body'
|
@@ -146,8 +145,13 @@ context "Sinatra" do
|
|
146
145
|
|
147
146
|
end
|
148
147
|
|
149
|
-
|
150
|
-
|
148
|
+
# Deprecated. WTF was going on here? What's the 1 in [:foo, 1] do?
|
149
|
+
xspecify "should set status then call helper with a var" do
|
150
|
+
helpers do
|
151
|
+
def foo
|
152
|
+
'bah!'
|
153
|
+
end
|
154
|
+
end
|
151
155
|
|
152
156
|
get '/set_body' do
|
153
157
|
stop [404, [:foo, 1]]
|
@@ -252,8 +256,6 @@ context "Sinatra" do
|
|
252
256
|
assert_equal 'puted', body
|
253
257
|
end
|
254
258
|
|
255
|
-
# Some Ajax libraries downcase the _method parameter value. Make
|
256
|
-
# sure we can handle that.
|
257
259
|
specify "rewrites POSTs with lowercase _method param to PUT" do
|
258
260
|
put '/' do
|
259
261
|
'puted'
|
@@ -262,7 +264,6 @@ context "Sinatra" do
|
|
262
264
|
body.should.equal 'puted'
|
263
265
|
end
|
264
266
|
|
265
|
-
# Ignore any _method parameters specified in GET requests or on the query string in POST requests.
|
266
267
|
specify "does not rewrite GETs with _method param to PUT" do
|
267
268
|
get '/' do
|
268
269
|
'getted'
|
@@ -16,7 +16,8 @@ context "Looking up a request" do
|
|
16
16
|
Sinatra.application = nil
|
17
17
|
end
|
18
18
|
|
19
|
-
|
19
|
+
# Deprecated. The lookup method is no longer used.
|
20
|
+
xspecify "returns what's at the end" do
|
20
21
|
block = Proc.new { 'Hello' }
|
21
22
|
get '/', &block
|
22
23
|
|
@@ -31,7 +32,8 @@ context "Looking up a request" do
|
|
31
32
|
result.block.should.be block
|
32
33
|
end
|
33
34
|
|
34
|
-
|
35
|
+
# Deprecated. The lookup method is no longer used.
|
36
|
+
xspecify "takes params in path" do
|
35
37
|
block = Proc.new { 'Hello' }
|
36
38
|
get '/:foo', &block
|
37
39
|
|
@@ -83,7 +85,8 @@ context "An app returns" do
|
|
83
85
|
|
84
86
|
end
|
85
87
|
|
86
|
-
|
88
|
+
# Deprecated. The body method no longer halts.
|
89
|
+
xspecify "the body set if set before the last" do
|
87
90
|
|
88
91
|
get '/' do
|
89
92
|
body 'Blake'
|
@@ -142,14 +145,16 @@ end
|
|
142
145
|
|
143
146
|
context "Default Application Configuration" do
|
144
147
|
|
145
|
-
|
148
|
+
# Sinatra::ServerError is no longer used
|
149
|
+
xspecify "includes 404 and 500 error handlers" do
|
146
150
|
Sinatra.application.errors.should.include(Sinatra::ServerError)
|
147
151
|
Sinatra.application.errors[Sinatra::ServerError].should.not.be.nil
|
148
152
|
Sinatra.application.errors.should.include(Sinatra::NotFound)
|
149
153
|
Sinatra.application.errors[Sinatra::NotFound].should.not.be.nil
|
150
154
|
end
|
151
155
|
|
152
|
-
|
156
|
+
# Deprecated. No such thing as a Static event anymore.
|
157
|
+
xspecify "includes Static event" do
|
153
158
|
assert Sinatra.application.events[:get].any? { |e| Sinatra::Static === e }
|
154
159
|
end
|
155
160
|
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
context "Builder" do
|
4
|
+
|
5
|
+
setup do
|
6
|
+
Sinatra.application = nil
|
7
|
+
end
|
8
|
+
|
9
|
+
context "without layouts" do
|
10
|
+
|
11
|
+
setup do
|
12
|
+
Sinatra.application = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
specify "should render" do
|
16
|
+
|
17
|
+
get '/no_layout' do
|
18
|
+
builder 'xml.instruct!'
|
19
|
+
end
|
20
|
+
|
21
|
+
get_it '/no_layout'
|
22
|
+
should.be.ok
|
23
|
+
body.should == %(<?xml version="1.0" encoding="UTF-8"?>\n)
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
specify "should render inline block" do
|
28
|
+
|
29
|
+
get '/no_layout_and_inlined' do
|
30
|
+
@name = "Frank & Mary"
|
31
|
+
builder do |xml|
|
32
|
+
xml.couple @name
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
get_it '/no_layout_and_inlined'
|
37
|
+
should.be.ok
|
38
|
+
body.should == %(<couple>Frank & Mary</couple>\n)
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
context "Templates (in general)" do
|
47
|
+
|
48
|
+
setup do
|
49
|
+
Sinatra.application = nil
|
50
|
+
end
|
51
|
+
|
52
|
+
specify "are read from files if Symbols" do
|
53
|
+
|
54
|
+
get '/from_file' do
|
55
|
+
@name = 'Blue'
|
56
|
+
builder :foo, :views_directory => File.dirname(__FILE__) + "/views"
|
57
|
+
end
|
58
|
+
|
59
|
+
get_it '/from_file'
|
60
|
+
should.be.ok
|
61
|
+
body.should.equal %(<exclaim>You rock Blue!</exclaim>\n)
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
specify "use layout.ext by default if available" do
|
66
|
+
|
67
|
+
get '/' do
|
68
|
+
builder :foo, :views_directory => File.dirname(__FILE__) + "/views/layout_test"
|
69
|
+
end
|
70
|
+
|
71
|
+
get_it '/'
|
72
|
+
should.be.ok
|
73
|
+
body.should.equal "<layout>\n<this>is foo!</this>\n</layout>\n"
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
specify "renders without layout" do
|
78
|
+
|
79
|
+
get '/' do
|
80
|
+
builder :no_layout, :views_directory => File.dirname(__FILE__) + "/views/no_layout"
|
81
|
+
end
|
82
|
+
|
83
|
+
get_it '/'
|
84
|
+
should.be.ok
|
85
|
+
body.should.equal "<foo>No Layout!</foo>\n"
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
specify "raises error if template not found" do
|
90
|
+
|
91
|
+
get '/' do
|
92
|
+
builder :not_found
|
93
|
+
end
|
94
|
+
|
95
|
+
lambda { get_it '/' }.should.raise(Errno::ENOENT)
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
File without changes
|
data/compat/erb_test.rb
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
context "Erb" do
|
4
|
+
|
5
|
+
setup do
|
6
|
+
Sinatra.application = nil
|
7
|
+
end
|
8
|
+
|
9
|
+
context "without layouts" do
|
10
|
+
|
11
|
+
setup do
|
12
|
+
Sinatra.application = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
specify "should render" do
|
16
|
+
|
17
|
+
get '/no_layout' do
|
18
|
+
erb '<%= 1 + 1 %>'
|
19
|
+
end
|
20
|
+
|
21
|
+
get_it '/no_layout'
|
22
|
+
should.be.ok
|
23
|
+
body.should == '2'
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
specify "should take an options hash with :locals set with a string" do
|
28
|
+
get '/locals' do
|
29
|
+
erb '<%= foo %>', :locals => {:foo => "Bar"}
|
30
|
+
end
|
31
|
+
|
32
|
+
get_it '/locals'
|
33
|
+
should.be.ok
|
34
|
+
body.should == 'Bar'
|
35
|
+
end
|
36
|
+
|
37
|
+
specify "should take an options hash with :locals set with a complex object" do
|
38
|
+
get '/locals-complex' do
|
39
|
+
erb '<%= foo[0] %>', :locals => {:foo => ["foo", "bar", "baz"]}
|
40
|
+
end
|
41
|
+
|
42
|
+
get_it '/locals-complex'
|
43
|
+
should.be.ok
|
44
|
+
body.should == 'foo'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "with layouts" do
|
49
|
+
|
50
|
+
setup do
|
51
|
+
Sinatra.application = nil
|
52
|
+
end
|
53
|
+
|
54
|
+
specify "can be inline" do
|
55
|
+
|
56
|
+
layout do
|
57
|
+
%Q{This is <%= yield %>!}
|
58
|
+
end
|
59
|
+
|
60
|
+
get '/lay' do
|
61
|
+
erb 'Blake'
|
62
|
+
end
|
63
|
+
|
64
|
+
get_it '/lay'
|
65
|
+
should.be.ok
|
66
|
+
body.should.equal 'This is Blake!'
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
specify "can use named layouts" do
|
71
|
+
|
72
|
+
layout :pretty do
|
73
|
+
%Q{<h1><%= yield %></h1>}
|
74
|
+
end
|
75
|
+
|
76
|
+
get '/pretty' do
|
77
|
+
erb 'Foo', :layout => :pretty
|
78
|
+
end
|
79
|
+
|
80
|
+
get '/not_pretty' do
|
81
|
+
erb 'Bar'
|
82
|
+
end
|
83
|
+
|
84
|
+
get_it '/pretty'
|
85
|
+
body.should.equal '<h1>Foo</h1>'
|
86
|
+
|
87
|
+
get_it '/not_pretty'
|
88
|
+
body.should.equal 'Bar'
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
specify "can be read from a file if they're not inlined" do
|
93
|
+
|
94
|
+
get '/foo' do
|
95
|
+
@title = 'Welcome to the Hello Program'
|
96
|
+
erb 'Blake', :layout => :foo_layout,
|
97
|
+
:views_directory => File.dirname(__FILE__) + "/views"
|
98
|
+
end
|
99
|
+
|
100
|
+
get_it '/foo'
|
101
|
+
body.should.equal "Welcome to the Hello Program\nHi Blake\n"
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
context "Templates (in general)" do
|
108
|
+
|
109
|
+
specify "are read from files if Symbols" do
|
110
|
+
|
111
|
+
get '/from_file' do
|
112
|
+
@name = 'Alena'
|
113
|
+
erb :foo, :views_directory => File.dirname(__FILE__) + "/views"
|
114
|
+
end
|
115
|
+
|
116
|
+
get_it '/from_file'
|
117
|
+
|
118
|
+
body.should.equal 'You rock Alena!'
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
specify "use layout.ext by default if available" do
|
123
|
+
|
124
|
+
get '/layout_from_file' do
|
125
|
+
erb :foo, :views_directory => File.dirname(__FILE__) + "/views/layout_test"
|
126
|
+
end
|
127
|
+
|
128
|
+
get_it '/layout_from_file'
|
129
|
+
should.be.ok
|
130
|
+
body.should.equal "x This is foo! x \n"
|
131
|
+
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
@@ -9,9 +9,19 @@ context "Simple Events" do
|
|
9
9
|
})
|
10
10
|
end
|
11
11
|
|
12
|
+
class MockResult < Struct.new(:block, :params)
|
13
|
+
end
|
14
|
+
|
12
15
|
def invoke_simple(path, request_path, &b)
|
13
|
-
|
14
|
-
|
16
|
+
params = nil
|
17
|
+
mock_app {
|
18
|
+
get path do
|
19
|
+
params = self.params
|
20
|
+
b.call if b
|
21
|
+
end
|
22
|
+
}
|
23
|
+
get_it request_path
|
24
|
+
MockResult.new(b, params)
|
15
25
|
end
|
16
26
|
|
17
27
|
specify "return last value" do
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
context "before filters" do
|
4
|
+
|
5
|
+
setup do
|
6
|
+
Sinatra.application = nil
|
7
|
+
@app = Sinatra.application
|
8
|
+
end
|
9
|
+
|
10
|
+
specify "should be executed in the order defined" do
|
11
|
+
invoked = 0x0
|
12
|
+
@app.before { invoked = 0x01 }
|
13
|
+
@app.before { invoked |= 0x02 }
|
14
|
+
@app.get('/') { 'Hello World' }
|
15
|
+
get_it '/'
|
16
|
+
should.be.ok
|
17
|
+
body.should.be == 'Hello World'
|
18
|
+
invoked.should.be == 0x03
|
19
|
+
end
|
20
|
+
|
21
|
+
specify "should be capable of modifying the request" do
|
22
|
+
@app.get('/foo') { 'foo' }
|
23
|
+
@app.get('/bar') { 'bar' }
|
24
|
+
@app.before { request.path_info = '/bar' }
|
25
|
+
get_it '/foo'
|
26
|
+
should.be.ok
|
27
|
+
body.should.be == 'bar'
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
data/compat/haml_test.rb
ADDED
@@ -0,0 +1,233 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
context "Haml" do
|
4
|
+
|
5
|
+
setup do
|
6
|
+
Sinatra.application = nil
|
7
|
+
end
|
8
|
+
|
9
|
+
context "without layouts" do
|
10
|
+
|
11
|
+
setup do
|
12
|
+
Sinatra.application = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
specify "should render" do
|
16
|
+
|
17
|
+
get '/no_layout' do
|
18
|
+
haml '== #{1+1}'
|
19
|
+
end
|
20
|
+
|
21
|
+
get_it '/no_layout'
|
22
|
+
should.be.ok
|
23
|
+
body.should == "2\n"
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "with layouts" do
|
29
|
+
|
30
|
+
setup do
|
31
|
+
Sinatra.application = nil
|
32
|
+
end
|
33
|
+
|
34
|
+
specify "can be inline" do
|
35
|
+
|
36
|
+
layout do
|
37
|
+
'== This is #{yield}!'
|
38
|
+
end
|
39
|
+
|
40
|
+
get '/lay' do
|
41
|
+
haml 'Blake'
|
42
|
+
end
|
43
|
+
|
44
|
+
get_it '/lay'
|
45
|
+
should.be.ok
|
46
|
+
body.should.equal "This is Blake\n!\n"
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
specify "can use named layouts" do
|
51
|
+
|
52
|
+
layout :pretty do
|
53
|
+
'%h1== #{yield}'
|
54
|
+
end
|
55
|
+
|
56
|
+
get '/pretty' do
|
57
|
+
haml 'Foo', :layout => :pretty
|
58
|
+
end
|
59
|
+
|
60
|
+
get '/not_pretty' do
|
61
|
+
haml 'Bar'
|
62
|
+
end
|
63
|
+
|
64
|
+
get_it '/pretty'
|
65
|
+
body.should.equal "<h1>Foo</h1>\n"
|
66
|
+
|
67
|
+
get_it '/not_pretty'
|
68
|
+
body.should.equal "Bar\n"
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
specify "can be read from a file if they're not inlined" do
|
73
|
+
|
74
|
+
get '/foo' do
|
75
|
+
@title = 'Welcome to the Hello Program'
|
76
|
+
haml 'Blake', :layout => :foo_layout,
|
77
|
+
:views_directory => File.dirname(__FILE__) + "/views"
|
78
|
+
end
|
79
|
+
|
80
|
+
get_it '/foo'
|
81
|
+
body.should.equal "Welcome to the Hello Program\nHi Blake\n"
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
specify "can be read from file and layout from text" do
|
86
|
+
get '/foo' do
|
87
|
+
haml 'Test', :layout => '== Foo #{yield}'
|
88
|
+
end
|
89
|
+
|
90
|
+
get_it '/foo'
|
91
|
+
|
92
|
+
body.should.equal "Foo Test\n"
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
context "Templates (in general)" do
|
98
|
+
|
99
|
+
setup do
|
100
|
+
Sinatra.application = nil
|
101
|
+
end
|
102
|
+
|
103
|
+
specify "are read from files if Symbols" do
|
104
|
+
|
105
|
+
get '/from_file' do
|
106
|
+
@name = 'Alena'
|
107
|
+
haml :foo, :views_directory => File.dirname(__FILE__) + "/views"
|
108
|
+
end
|
109
|
+
|
110
|
+
get_it '/from_file'
|
111
|
+
|
112
|
+
body.should.equal "You rock Alena!\n"
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
specify "use layout.ext by default if available" do
|
117
|
+
|
118
|
+
get '/' do
|
119
|
+
haml :foo, :views_directory => File.dirname(__FILE__) + "/views/layout_test"
|
120
|
+
end
|
121
|
+
|
122
|
+
get_it '/'
|
123
|
+
should.be.ok
|
124
|
+
body.should.equal "x This is foo!\n x\n"
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
specify "renders without layout" do
|
129
|
+
|
130
|
+
get '/' do
|
131
|
+
haml :no_layout, :views_directory => File.dirname(__FILE__) + "/views/no_layout"
|
132
|
+
end
|
133
|
+
|
134
|
+
get_it '/'
|
135
|
+
should.be.ok
|
136
|
+
body.should.equal "<h1>No Layout!</h1>\n"
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
specify "can render with no layout" do
|
141
|
+
layout do
|
142
|
+
"X\n= yield\nX"
|
143
|
+
end
|
144
|
+
|
145
|
+
get '/' do
|
146
|
+
haml 'blake', :layout => false
|
147
|
+
end
|
148
|
+
|
149
|
+
get_it '/'
|
150
|
+
|
151
|
+
body.should.equal "blake\n"
|
152
|
+
end
|
153
|
+
|
154
|
+
specify "raises error if template not found" do
|
155
|
+
get '/' do
|
156
|
+
haml :not_found
|
157
|
+
end
|
158
|
+
|
159
|
+
lambda { get_it '/' }.should.raise(Errno::ENOENT)
|
160
|
+
end
|
161
|
+
|
162
|
+
specify "use layout.ext by default if available" do
|
163
|
+
|
164
|
+
template :foo do
|
165
|
+
'asdf'
|
166
|
+
end
|
167
|
+
|
168
|
+
get '/' do
|
169
|
+
haml :foo, :layout => false,
|
170
|
+
:views_directory => File.dirname(__FILE__) + "/views/layout_test"
|
171
|
+
end
|
172
|
+
|
173
|
+
get_it '/'
|
174
|
+
should.be.ok
|
175
|
+
body.should.equal "asdf\n"
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
end
|
180
|
+
|
181
|
+
describe 'Options passed to the HAML interpreter' do
|
182
|
+
setup do
|
183
|
+
Sinatra.application = nil
|
184
|
+
end
|
185
|
+
|
186
|
+
specify 'are empty be default' do
|
187
|
+
|
188
|
+
get '/' do
|
189
|
+
haml 'foo'
|
190
|
+
end
|
191
|
+
|
192
|
+
Haml::Engine.expects(:new).with('foo', {}).returns(stub(:render => 'foo'))
|
193
|
+
|
194
|
+
get_it '/'
|
195
|
+
should.be.ok
|
196
|
+
|
197
|
+
end
|
198
|
+
|
199
|
+
specify 'can be configured by passing :options to haml' do
|
200
|
+
|
201
|
+
get '/' do
|
202
|
+
haml 'foo', :options => {:format => :html4}
|
203
|
+
end
|
204
|
+
|
205
|
+
Haml::Engine.expects(:new).with('foo', {:format => :html4}).returns(stub(:render => 'foo'))
|
206
|
+
|
207
|
+
get_it '/'
|
208
|
+
should.be.ok
|
209
|
+
|
210
|
+
end
|
211
|
+
|
212
|
+
specify 'can be configured using set_option :haml' do
|
213
|
+
|
214
|
+
configure do
|
215
|
+
set_option :haml, :format => :html4,
|
216
|
+
:escape_html => true
|
217
|
+
end
|
218
|
+
|
219
|
+
get '/' do
|
220
|
+
haml 'foo'
|
221
|
+
end
|
222
|
+
|
223
|
+
Haml::Engine.expects(:new).with('foo', {:format => :html4,
|
224
|
+
:escape_html => true}).returns(stub(:render => 'foo'))
|
225
|
+
|
226
|
+
get_it '/'
|
227
|
+
should.be.ok
|
228
|
+
|
229
|
+
end
|
230
|
+
|
231
|
+
end
|
232
|
+
|
233
|
+
end
|
data/compat/helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'mocha'
|
3
|
+
|
4
|
+
# disable warnings in compat specs.
|
5
|
+
$VERBOSE = nil
|
6
|
+
|
7
|
+
$:.unshift File.dirname(File.dirname(__FILE__)) + "/lib"
|
8
|
+
|
9
|
+
ENV['RACK_ENV'] ||= 'test'
|
10
|
+
|
11
|
+
require 'sinatra'
|
12
|
+
require 'sinatra/test'
|
13
|
+
require 'sinatra/test/unit'
|
14
|
+
require 'sinatra/test/spec'
|
15
|
+
|
16
|
+
class Test::Unit::TestCase
|
17
|
+
def setup
|
18
|
+
@app = lambda { |env| Sinatra::Application.call(env) }
|
19
|
+
end
|
20
|
+
include Sinatra::Test
|
21
|
+
end
|