Syd-sinatra 0.3.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/ChangeLog +78 -0
- data/LICENSE +22 -0
- data/README.rdoc +523 -0
- data/Rakefile +162 -0
- data/images/404.png +0 -0
- data/images/500.png +0 -0
- data/lib/sinatra/test/methods.rb +76 -0
- data/lib/sinatra/test/rspec.rb +10 -0
- data/lib/sinatra/test/spec.rb +10 -0
- data/lib/sinatra/test/unit.rb +13 -0
- data/lib/sinatra.rb +1470 -0
- data/sinatra.gemspec +77 -0
- data/test/app_test.rb +299 -0
- data/test/application_test.rb +318 -0
- data/test/builder_test.rb +101 -0
- data/test/custom_error_test.rb +62 -0
- data/test/erb_test.rb +136 -0
- data/test/event_context_test.rb +15 -0
- data/test/events_test.rb +65 -0
- data/test/filter_test.rb +30 -0
- data/test/haml_test.rb +233 -0
- data/test/helper.rb +7 -0
- data/test/mapped_error_test.rb +72 -0
- data/test/pipeline_test.rb +66 -0
- data/test/public/foo.xml +1 -0
- data/test/sass_test.rb +57 -0
- data/test/sessions_test.rb +39 -0
- data/test/streaming_test.rb +118 -0
- data/test/sym_params_test.rb +19 -0
- data/test/template_test.rb +30 -0
- data/test/use_in_file_templates_test.rb +47 -0
- data/test/views/foo.builder +1 -0
- data/test/views/foo.erb +1 -0
- data/test/views/foo.haml +1 -0
- data/test/views/foo.sass +2 -0
- data/test/views/foo_layout.erb +2 -0
- data/test/views/foo_layout.haml +2 -0
- data/test/views/layout_test/foo.builder +1 -0
- data/test/views/layout_test/foo.erb +1 -0
- data/test/views/layout_test/foo.haml +1 -0
- data/test/views/layout_test/foo.sass +2 -0
- data/test/views/layout_test/layout.builder +3 -0
- data/test/views/layout_test/layout.erb +1 -0
- data/test/views/layout_test/layout.haml +1 -0
- data/test/views/layout_test/layout.sass +2 -0
- data/test/views/no_layout/no_layout.builder +1 -0
- data/test/views/no_layout/no_layout.haml +1 -0
- metadata +129 -0
@@ -0,0 +1,72 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
class FooError < RuntimeError; end
|
4
|
+
|
5
|
+
context "Mapped errors" do
|
6
|
+
|
7
|
+
setup do
|
8
|
+
Sinatra.application = nil
|
9
|
+
Sinatra.application.options.raise_errors = false
|
10
|
+
end
|
11
|
+
|
12
|
+
specify "are rescued and run in context" do
|
13
|
+
|
14
|
+
error FooError do
|
15
|
+
'MAPPED ERROR!'
|
16
|
+
end
|
17
|
+
|
18
|
+
get '/' do
|
19
|
+
raise FooError
|
20
|
+
end
|
21
|
+
|
22
|
+
get_it '/'
|
23
|
+
|
24
|
+
should.be.server_error
|
25
|
+
body.should.equal 'MAPPED ERROR!'
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
specify "renders empty if no each method on result" do
|
30
|
+
|
31
|
+
error FooError do
|
32
|
+
nil
|
33
|
+
end
|
34
|
+
|
35
|
+
get '/' do
|
36
|
+
raise FooError
|
37
|
+
end
|
38
|
+
|
39
|
+
get_it '/'
|
40
|
+
|
41
|
+
should.be.server_error
|
42
|
+
body.should.be.empty
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
specify "doesn't override status if set" do
|
47
|
+
|
48
|
+
error FooError do
|
49
|
+
status(200)
|
50
|
+
end
|
51
|
+
|
52
|
+
get '/' do
|
53
|
+
raise FooError
|
54
|
+
end
|
55
|
+
|
56
|
+
get_it '/'
|
57
|
+
|
58
|
+
should.be.ok
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
specify "raises errors when the raise_errors option is set" do
|
63
|
+
Sinatra.application.options.raise_errors = true
|
64
|
+
error FooError do
|
65
|
+
end
|
66
|
+
get '/' do
|
67
|
+
raise FooError
|
68
|
+
end
|
69
|
+
assert_raises(FooError) { get_it('/') }
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
class UpcaseMiddleware
|
4
|
+
def initialize(app, *args, &block)
|
5
|
+
@app = app
|
6
|
+
@args = args
|
7
|
+
@block = block
|
8
|
+
end
|
9
|
+
def call(env)
|
10
|
+
env['PATH_INFO'] = env['PATH_INFO'].to_s.upcase
|
11
|
+
@app.call(env)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "Middleware Pipelines" do
|
16
|
+
|
17
|
+
setup do
|
18
|
+
Sinatra.application = nil
|
19
|
+
@app = Sinatra.application
|
20
|
+
end
|
21
|
+
|
22
|
+
teardown do
|
23
|
+
Sinatra.application = nil
|
24
|
+
end
|
25
|
+
|
26
|
+
specify "includes default middleware with options set" do
|
27
|
+
@app.set_options :sessions => true, :logging => true
|
28
|
+
@app.send(:optional_middleware).should.include([Rack::Session::Cookie, [], nil])
|
29
|
+
@app.send(:optional_middleware).should.include([Rack::CommonLogger, [], nil])
|
30
|
+
end
|
31
|
+
|
32
|
+
specify "does not include default middleware with options unset" do
|
33
|
+
@app.set_options :sessions => false, :logging => false
|
34
|
+
@app.send(:optional_middleware).should.not.include([Rack::Session::Cookie, [], nil])
|
35
|
+
@app.send(:optional_middleware).should.not.include([Rack::CommonLogger, [], nil])
|
36
|
+
end
|
37
|
+
|
38
|
+
specify "includes only optional middleware when no explicit middleware added" do
|
39
|
+
@app.set_options :sessions => true, :logging => true
|
40
|
+
@app.send(:middleware).should.equal @app.send(:optional_middleware)
|
41
|
+
end
|
42
|
+
|
43
|
+
specify "should clear middleware before reload" do
|
44
|
+
@app.clearables.should.include(@app.send(:explicit_middleware))
|
45
|
+
end
|
46
|
+
|
47
|
+
specify "should add middleware with use" do
|
48
|
+
block = Proc.new { |env| }
|
49
|
+
@app.use UpcaseMiddleware
|
50
|
+
@app.use UpcaseMiddleware, "foo", "bar"
|
51
|
+
@app.use UpcaseMiddleware, "foo", "bar", &block
|
52
|
+
@app.send(:middleware).should.include([UpcaseMiddleware, [], nil])
|
53
|
+
@app.send(:middleware).should.include([UpcaseMiddleware, ["foo", "bar"], nil])
|
54
|
+
@app.send(:middleware).should.include([UpcaseMiddleware, ["foo", "bar"], block])
|
55
|
+
end
|
56
|
+
|
57
|
+
specify "should run middleware added with use" do
|
58
|
+
get('/foo') { "FAIL!" }
|
59
|
+
get('/FOO') { "PASS!" }
|
60
|
+
use UpcaseMiddleware
|
61
|
+
get_it '/foo'
|
62
|
+
should.be.ok
|
63
|
+
body.should.equal "PASS!"
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
data/test/public/foo.xml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
<foo></foo>
|
data/test/sass_test.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
context "Sass" do
|
4
|
+
|
5
|
+
setup do
|
6
|
+
Sinatra.application = nil
|
7
|
+
end
|
8
|
+
|
9
|
+
context "Templates (in general)" do
|
10
|
+
|
11
|
+
setup do
|
12
|
+
Sinatra.application = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
specify "are read from files if Symbols" do
|
16
|
+
|
17
|
+
get '/from_file' do
|
18
|
+
sass :foo, :views_directory => File.dirname(__FILE__) + "/views"
|
19
|
+
end
|
20
|
+
|
21
|
+
get_it '/from_file'
|
22
|
+
should.be.ok
|
23
|
+
body.should.equal "#sass {\n background_color: #FFF; }\n"
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
specify "raise an error if template not found" do
|
28
|
+
get '/' do
|
29
|
+
sass :not_found
|
30
|
+
end
|
31
|
+
|
32
|
+
lambda { get_it '/' }.should.raise(Errno::ENOENT)
|
33
|
+
end
|
34
|
+
|
35
|
+
specify "ignore default layout file with .sass extension" do
|
36
|
+
get '/' do
|
37
|
+
sass :foo, :views_directory => File.dirname(__FILE__) + "/views/layout_test"
|
38
|
+
end
|
39
|
+
|
40
|
+
get_it '/'
|
41
|
+
should.be.ok
|
42
|
+
body.should.equal "#sass {\n background_color: #FFF; }\n"
|
43
|
+
end
|
44
|
+
|
45
|
+
specify "ignore explicitly specified layout file" do
|
46
|
+
get '/' do
|
47
|
+
sass :foo, :layout => :layout, :views_directory => File.dirname(__FILE__) + "/views/layout_test"
|
48
|
+
end
|
49
|
+
|
50
|
+
get_it '/'
|
51
|
+
should.be.ok
|
52
|
+
body.should.equal "#sass {\n background_color: #FFF; }\n"
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
context "Sessions" do
|
4
|
+
|
5
|
+
setup { Sinatra.application = nil }
|
6
|
+
|
7
|
+
specify "should be off by default" do
|
8
|
+
get '/asdf' do
|
9
|
+
session[:test] = true
|
10
|
+
"asdf"
|
11
|
+
end
|
12
|
+
|
13
|
+
get '/test' do
|
14
|
+
session[:test] == true ? "true" : "false"
|
15
|
+
end
|
16
|
+
|
17
|
+
get_it '/asdf', {}, 'HTTP_HOST' => 'foo.sinatrarb.com'
|
18
|
+
assert ok?
|
19
|
+
assert !include?('Set-Cookie')
|
20
|
+
end
|
21
|
+
|
22
|
+
specify "should be able to store data accross requests" do
|
23
|
+
set_option :sessions, true
|
24
|
+
|
25
|
+
get '/foo' do
|
26
|
+
session[:test] = true
|
27
|
+
"asdf"
|
28
|
+
end
|
29
|
+
|
30
|
+
get '/bar' do
|
31
|
+
session[:test] == true ? "true" : "false"
|
32
|
+
end
|
33
|
+
|
34
|
+
get_it '/foo', :env => { :host => 'foo.sinatrarb.com' }
|
35
|
+
assert ok?
|
36
|
+
assert include?('Set-Cookie')
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
context "Static files (by default)" do
|
4
|
+
|
5
|
+
setup do
|
6
|
+
Sinatra.application = nil
|
7
|
+
Sinatra.application.options.public = File.dirname(__FILE__) + '/public'
|
8
|
+
end
|
9
|
+
|
10
|
+
specify "are served from root/public" do
|
11
|
+
get_it '/foo.xml'
|
12
|
+
should.be.ok
|
13
|
+
headers['Content-Length'].should.equal '12'
|
14
|
+
headers['Content-Type'].should.equal 'application/xml'
|
15
|
+
body.should.equal "<foo></foo>\n"
|
16
|
+
end
|
17
|
+
|
18
|
+
specify "are not served when verb is not GET or HEAD" do
|
19
|
+
post_it '/foo.xml'
|
20
|
+
# these should actually be giving back a 405 Method Not Allowed but that
|
21
|
+
# complicates the routing logic quite a bit.
|
22
|
+
should.be.not_found
|
23
|
+
status.should.equal 404
|
24
|
+
end
|
25
|
+
|
26
|
+
specify "are served when verb is HEAD but missing a body" do
|
27
|
+
head_it '/foo.xml'
|
28
|
+
should.be.ok
|
29
|
+
headers['Content-Length'].should.equal '12'
|
30
|
+
headers['Content-Type'].should.equal 'application/xml'
|
31
|
+
body.should.equal ""
|
32
|
+
end
|
33
|
+
|
34
|
+
# static files override dynamic/internal events and ...
|
35
|
+
specify "are served when conflicting events exists" do
|
36
|
+
get '/foo.xml' do
|
37
|
+
'this is not foo.xml!'
|
38
|
+
end
|
39
|
+
get_it '/foo.xml'
|
40
|
+
should.be.ok
|
41
|
+
body.should.equal "<foo></foo>\n"
|
42
|
+
end
|
43
|
+
|
44
|
+
specify "are irrelevant when request_method is not GET/HEAD" do
|
45
|
+
put '/foo.xml' do
|
46
|
+
'putted!'
|
47
|
+
end
|
48
|
+
put_it '/foo.xml'
|
49
|
+
should.be.ok
|
50
|
+
body.should.equal 'putted!'
|
51
|
+
|
52
|
+
get_it '/foo.xml'
|
53
|
+
should.be.ok
|
54
|
+
body.should.equal "<foo></foo>\n"
|
55
|
+
end
|
56
|
+
|
57
|
+
specify "include a Last-Modified header" do
|
58
|
+
last_modified = File.mtime(Sinatra.application.options.public + '/foo.xml')
|
59
|
+
get_it('/foo.xml')
|
60
|
+
should.be.ok
|
61
|
+
body.should.not.be.empty
|
62
|
+
headers['Last-Modified'].should.equal last_modified.httpdate
|
63
|
+
end
|
64
|
+
|
65
|
+
specify "are not served when If-Modified-Since matches" do
|
66
|
+
last_modified = File.mtime(Sinatra.application.options.public + '/foo.xml')
|
67
|
+
@request = Rack::MockRequest.new(Sinatra.application)
|
68
|
+
@response = @request.get('/foo.xml', 'HTTP_IF_MODIFIED_SINCE' => last_modified.httpdate)
|
69
|
+
status.should.equal 304
|
70
|
+
body.should.be.empty
|
71
|
+
end
|
72
|
+
|
73
|
+
specify "should omit Content-Disposition headers" do
|
74
|
+
get_it('/foo.xml')
|
75
|
+
should.be.ok
|
76
|
+
headers['Content-Disposition'].should.be.nil
|
77
|
+
headers['Content-Transfer-Encoding'].should.be.nil
|
78
|
+
end
|
79
|
+
|
80
|
+
specify "should be served even if their path is url escaped" do
|
81
|
+
get_it('/fo%6f.xml')
|
82
|
+
should.be.ok
|
83
|
+
body.should.equal "<foo></foo>\n"
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
context "SendData" do
|
89
|
+
|
90
|
+
setup do
|
91
|
+
Sinatra.application = nil
|
92
|
+
end
|
93
|
+
|
94
|
+
specify "should send the data with options" do
|
95
|
+
get '/' do
|
96
|
+
send_data 'asdf', :status => 500
|
97
|
+
end
|
98
|
+
|
99
|
+
get_it '/'
|
100
|
+
|
101
|
+
should.be.server_error
|
102
|
+
body.should.equal 'asdf'
|
103
|
+
end
|
104
|
+
|
105
|
+
specify "should include a Content-Disposition header" do
|
106
|
+
get '/' do
|
107
|
+
send_file File.dirname(__FILE__) + '/public/foo.xml'
|
108
|
+
end
|
109
|
+
|
110
|
+
get_it '/'
|
111
|
+
|
112
|
+
should.be.ok
|
113
|
+
headers['Content-Disposition'].should.not.be.nil
|
114
|
+
headers['Content-Disposition'].should.equal 'attachment; filename="foo.xml"'
|
115
|
+
headers['Content-Transfer-Encoding'].should.equal 'binary'
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
context "Symbol Params" do
|
4
|
+
|
5
|
+
setup do
|
6
|
+
Sinatra.application = nil
|
7
|
+
end
|
8
|
+
|
9
|
+
specify "should be accessable as Strings or Symbols" do
|
10
|
+
get '/' do
|
11
|
+
params[:foo] + params['foo']
|
12
|
+
end
|
13
|
+
|
14
|
+
get_it '/', :foo => "X"
|
15
|
+
assert_equal('XX', body)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
context "Templates" do
|
4
|
+
|
5
|
+
specify "are read from files if Symbols" do
|
6
|
+
|
7
|
+
get '/from_file' do
|
8
|
+
@name = 'Alena'
|
9
|
+
erb :foo, :views_directory => File.dirname(__FILE__) + "/views"
|
10
|
+
end
|
11
|
+
|
12
|
+
get_it '/from_file'
|
13
|
+
|
14
|
+
body.should.equal 'You rock Alena!'
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
specify "use layout.ext by default if available" do
|
19
|
+
|
20
|
+
get '/layout_from_file' do
|
21
|
+
erb :foo, :views_directory => File.dirname(__FILE__) + "/views/layout_test"
|
22
|
+
end
|
23
|
+
|
24
|
+
get_it '/layout_from_file'
|
25
|
+
should.be.ok
|
26
|
+
body.should.equal "x This is foo! x \n"
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
context "Rendering in file templates" do
|
4
|
+
|
5
|
+
setup do
|
6
|
+
Sinatra.application = nil
|
7
|
+
use_in_file_templates!
|
8
|
+
end
|
9
|
+
|
10
|
+
specify "should set template" do
|
11
|
+
assert Sinatra.application.templates[:foo]
|
12
|
+
end
|
13
|
+
|
14
|
+
specify "should set layout" do
|
15
|
+
assert Sinatra.application.templates[:layout]
|
16
|
+
end
|
17
|
+
|
18
|
+
specify "should render without layout if specified" do
|
19
|
+
get '/' do
|
20
|
+
haml :foo, :layout => false
|
21
|
+
end
|
22
|
+
|
23
|
+
get_it '/'
|
24
|
+
assert_equal "this is foo\n", body
|
25
|
+
end
|
26
|
+
|
27
|
+
specify "should render with layout if specified" do
|
28
|
+
get '/' do
|
29
|
+
haml :foo
|
30
|
+
end
|
31
|
+
|
32
|
+
get_it '/'
|
33
|
+
assert_equal "X\nthis is foo\nX\n", body
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
__END__
|
39
|
+
|
40
|
+
@@ foo
|
41
|
+
this is foo
|
42
|
+
|
43
|
+
@@ layout
|
44
|
+
X
|
45
|
+
= yield
|
46
|
+
X
|
47
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
xml.exclaim "You rock #{@name}!"
|
data/test/views/foo.erb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
You rock <%= @name %>!
|
data/test/views/foo.haml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
== You rock #{@name}!
|
data/test/views/foo.sass
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
xml.this "is foo!"
|
@@ -0,0 +1 @@
|
|
1
|
+
This is foo!
|
@@ -0,0 +1 @@
|
|
1
|
+
This is foo!
|
@@ -0,0 +1 @@
|
|
1
|
+
x <%= yield %> x
|
@@ -0,0 +1 @@
|
|
1
|
+
== x #{yield} x
|
@@ -0,0 +1 @@
|
|
1
|
+
xml.foo "No Layout!"
|
@@ -0,0 +1 @@
|
|
1
|
+
%h1 No Layout!
|
metadata
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: Syd-sinatra
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Blake Mizerany
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-11-02 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rack
|
17
|
+
version_requirement:
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.4.0
|
23
|
+
version:
|
24
|
+
description: Classy web-development dressed in a DSL
|
25
|
+
email:
|
26
|
+
executables: []
|
27
|
+
|
28
|
+
extensions: []
|
29
|
+
|
30
|
+
extra_rdoc_files:
|
31
|
+
- README.rdoc
|
32
|
+
- LICENSE
|
33
|
+
files:
|
34
|
+
- ChangeLog
|
35
|
+
- LICENSE
|
36
|
+
- README.rdoc
|
37
|
+
- Rakefile
|
38
|
+
- images/404.png
|
39
|
+
- images/500.png
|
40
|
+
- lib/sinatra.rb
|
41
|
+
- lib/sinatra/test/methods.rb
|
42
|
+
- lib/sinatra/test/rspec.rb
|
43
|
+
- lib/sinatra/test/spec.rb
|
44
|
+
- lib/sinatra/test/unit.rb
|
45
|
+
- sinatra.gemspec
|
46
|
+
- test/app_test.rb
|
47
|
+
- test/application_test.rb
|
48
|
+
- test/builder_test.rb
|
49
|
+
- test/custom_error_test.rb
|
50
|
+
- test/erb_test.rb
|
51
|
+
- test/event_context_test.rb
|
52
|
+
- test/events_test.rb
|
53
|
+
- test/filter_test.rb
|
54
|
+
- test/haml_test.rb
|
55
|
+
- test/helper.rb
|
56
|
+
- test/mapped_error_test.rb
|
57
|
+
- test/pipeline_test.rb
|
58
|
+
- test/public/foo.xml
|
59
|
+
- test/sass_test.rb
|
60
|
+
- test/sessions_test.rb
|
61
|
+
- test/streaming_test.rb
|
62
|
+
- test/sym_params_test.rb
|
63
|
+
- test/template_test.rb
|
64
|
+
- test/use_in_file_templates_test.rb
|
65
|
+
- test/views/foo.builder
|
66
|
+
- test/views/foo.erb
|
67
|
+
- test/views/foo.haml
|
68
|
+
- test/views/foo.sass
|
69
|
+
- test/views/foo_layout.erb
|
70
|
+
- test/views/foo_layout.haml
|
71
|
+
- test/views/layout_test/foo.builder
|
72
|
+
- test/views/layout_test/foo.erb
|
73
|
+
- test/views/layout_test/foo.haml
|
74
|
+
- test/views/layout_test/foo.sass
|
75
|
+
- test/views/layout_test/layout.builder
|
76
|
+
- test/views/layout_test/layout.erb
|
77
|
+
- test/views/layout_test/layout.haml
|
78
|
+
- test/views/layout_test/layout.sass
|
79
|
+
- test/views/no_layout/no_layout.builder
|
80
|
+
- test/views/no_layout/no_layout.haml
|
81
|
+
has_rdoc: true
|
82
|
+
homepage: http://sinatra.rubyforge.org
|
83
|
+
post_install_message:
|
84
|
+
rdoc_options:
|
85
|
+
- --line-numbers
|
86
|
+
- --inline-source
|
87
|
+
- --title
|
88
|
+
- Sinatra
|
89
|
+
- --main
|
90
|
+
- README.rdoc
|
91
|
+
require_paths:
|
92
|
+
- lib
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: "0"
|
98
|
+
version:
|
99
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: "0"
|
104
|
+
version:
|
105
|
+
requirements: []
|
106
|
+
|
107
|
+
rubyforge_project: sinatra
|
108
|
+
rubygems_version: 1.2.0
|
109
|
+
signing_key:
|
110
|
+
specification_version: 2
|
111
|
+
summary: Classy web-development dressed in a DSL
|
112
|
+
test_files:
|
113
|
+
- test/app_test.rb
|
114
|
+
- test/application_test.rb
|
115
|
+
- test/builder_test.rb
|
116
|
+
- test/custom_error_test.rb
|
117
|
+
- test/erb_test.rb
|
118
|
+
- test/event_context_test.rb
|
119
|
+
- test/events_test.rb
|
120
|
+
- test/filter_test.rb
|
121
|
+
- test/haml_test.rb
|
122
|
+
- test/mapped_error_test.rb
|
123
|
+
- test/pipeline_test.rb
|
124
|
+
- test/sass_test.rb
|
125
|
+
- test/sessions_test.rb
|
126
|
+
- test/streaming_test.rb
|
127
|
+
- test/sym_params_test.rb
|
128
|
+
- test/template_test.rb
|
129
|
+
- test/use_in_file_templates_test.rb
|