sinatra 0.9.6 → 1.0.a

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sinatra might be problematic. Click here for more details.

Files changed (67) hide show
  1. data/CHANGES +83 -29
  2. data/README.jp.rdoc +552 -0
  3. data/README.rdoc +31 -9
  4. data/Rakefile +73 -91
  5. data/lib/sinatra.rb +0 -1
  6. data/lib/sinatra/base.rb +248 -269
  7. data/lib/sinatra/main.rb +3 -11
  8. data/lib/sinatra/tilt.rb +509 -0
  9. data/sinatra.gemspec +15 -49
  10. data/test/erubis_test.rb +82 -0
  11. data/test/extensions_test.rb +1 -1
  12. data/test/filter_test.rb +125 -3
  13. data/test/helpers_test.rb +59 -2
  14. data/test/mapped_error_test.rb +31 -0
  15. data/test/middleware_test.rb +1 -1
  16. data/test/request_test.rb +15 -0
  17. data/test/routing_test.rb +76 -0
  18. data/test/{options_test.rb → settings_test.rb} +46 -50
  19. data/test/static_test.rb +13 -0
  20. data/test/templates_test.rb +43 -10
  21. data/test/views/error.erubis +3 -0
  22. data/test/views/hello.erubis +1 -0
  23. data/test/views/layout2.erubis +2 -0
  24. metadata +61 -88
  25. data/compat/app_test.rb +0 -282
  26. data/compat/application_test.rb +0 -262
  27. data/compat/builder_test.rb +0 -101
  28. data/compat/compat_test.rb +0 -12
  29. data/compat/custom_error_test.rb +0 -62
  30. data/compat/erb_test.rb +0 -136
  31. data/compat/events_test.rb +0 -78
  32. data/compat/filter_test.rb +0 -30
  33. data/compat/haml_test.rb +0 -237
  34. data/compat/helper.rb +0 -34
  35. data/compat/mapped_error_test.rb +0 -72
  36. data/compat/pipeline_test.rb +0 -45
  37. data/compat/public/foo.xml +0 -1
  38. data/compat/sass_test.rb +0 -67
  39. data/compat/sessions_test.rb +0 -42
  40. data/compat/streaming_test.rb +0 -133
  41. data/compat/sym_params_test.rb +0 -18
  42. data/compat/template_test.rb +0 -30
  43. data/compat/use_in_file_templates_test.rb +0 -47
  44. data/compat/views/foo.builder +0 -1
  45. data/compat/views/foo.erb +0 -1
  46. data/compat/views/foo.haml +0 -1
  47. data/compat/views/foo.sass +0 -2
  48. data/compat/views/foo_layout.erb +0 -2
  49. data/compat/views/foo_layout.haml +0 -2
  50. data/compat/views/layout_test/foo.builder +0 -1
  51. data/compat/views/layout_test/foo.erb +0 -1
  52. data/compat/views/layout_test/foo.haml +0 -1
  53. data/compat/views/layout_test/foo.sass +0 -2
  54. data/compat/views/layout_test/layout.builder +0 -3
  55. data/compat/views/layout_test/layout.erb +0 -1
  56. data/compat/views/layout_test/layout.haml +0 -1
  57. data/compat/views/layout_test/layout.sass +0 -2
  58. data/compat/views/no_layout/no_layout.builder +0 -1
  59. data/compat/views/no_layout/no_layout.haml +0 -1
  60. data/lib/sinatra/compat.rb +0 -258
  61. data/lib/sinatra/test.rb +0 -129
  62. data/lib/sinatra/test/bacon.rb +0 -19
  63. data/lib/sinatra/test/rspec.rb +0 -13
  64. data/lib/sinatra/test/spec.rb +0 -11
  65. data/lib/sinatra/test/unit.rb +0 -13
  66. data/test/render_backtrace_test.rb +0 -145
  67. data/test/test_test.rb +0 -155
@@ -1,45 +0,0 @@
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 "should add middleware with use" do
27
- block = Proc.new { |env| }
28
- @app.use UpcaseMiddleware
29
- @app.use UpcaseMiddleware, "foo", "bar"
30
- @app.use UpcaseMiddleware, "foo", "bar", &block
31
- @app.send(:middleware).should.include([UpcaseMiddleware, [], nil])
32
- @app.send(:middleware).should.include([UpcaseMiddleware, ["foo", "bar"], nil])
33
- @app.send(:middleware).should.include([UpcaseMiddleware, ["foo", "bar"], block])
34
- end
35
-
36
- specify "should run middleware added with use" do
37
- get('/foo') { "FAIL!" }
38
- get('/FOO') { "PASS!" }
39
- use UpcaseMiddleware
40
- get_it '/foo'
41
- should.be.ok
42
- body.should.equal "PASS!"
43
- end
44
-
45
- end
@@ -1 +0,0 @@
1
- <foo></foo>
@@ -1,67 +0,0 @@
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
- it "passes :sass option to the Sass engine" do
56
- get '/' do
57
- sass "#sass\n :background-color #FFF\n :color #000\n", :sass => {:style => :compact}
58
- end
59
-
60
- get_it '/'
61
- should.be.ok
62
- body.should.equal "#sass { background-color: #FFF; color: #000; }\n"
63
- end
64
-
65
- end
66
-
67
- end
@@ -1,42 +0,0 @@
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
- set_option :environment, :not_test # necessary because sessions are disabled
25
-
26
- get '/foo' do
27
- session[:test] = true
28
- "asdf"
29
- end
30
-
31
- get '/bar' do
32
- session[:test] == true ? "true" : "false"
33
- end
34
-
35
- get_it '/foo', :env => { :host => 'foo.sinatrarb.com' }
36
- assert ok?
37
- assert include?('Set-Cookie')
38
-
39
- set_option :environment, :test
40
- end
41
-
42
- end
@@ -1,133 +0,0 @@
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
- # Deprecated. Use: ConditionalGet middleware.
66
- specify "are not served when If-Modified-Since matches" do
67
- last_modified = File.mtime(Sinatra.application.options.public + '/foo.xml')
68
- @request = Rack::MockRequest.new(Sinatra.application)
69
- @response = @request.get('/foo.xml', 'HTTP_IF_MODIFIED_SINCE' => last_modified.httpdate)
70
- status.should.equal 304
71
- body.should.be.empty
72
- end
73
-
74
- specify "should omit Content-Disposition headers" do
75
- get_it('/foo.xml')
76
- should.be.ok
77
- headers['Content-Disposition'].should.be.nil
78
- headers['Content-Transfer-Encoding'].should.be.nil
79
- end
80
-
81
- specify "should be served even if their path is url escaped" do
82
- get_it('/fo%6f.xml')
83
- should.be.ok
84
- body.should.equal "<foo></foo>\n"
85
- end
86
-
87
- end
88
-
89
- context "SendData" do
90
-
91
- setup do
92
- Sinatra.application = nil
93
- end
94
-
95
- # Deprecated. send_data is going away.
96
- specify "should send the data with options" do
97
- get '/' do
98
- send_data 'asdf', :status => 500
99
- end
100
-
101
- get_it '/'
102
-
103
- should.be.server_error
104
- body.should.equal 'asdf'
105
- end
106
-
107
- # Deprecated. The Content-Disposition is no longer handled by sendfile.
108
- specify "should include a Content-Disposition header" do
109
- get '/' do
110
- send_file File.dirname(__FILE__) + '/public/foo.xml',
111
- :disposition => 'attachment'
112
- end
113
-
114
- get_it '/'
115
-
116
- should.be.ok
117
- headers['Content-Disposition'].should.not.be.nil
118
- headers['Content-Disposition'].should.equal 'attachment; filename="foo.xml"'
119
- end
120
-
121
- specify "should include a Content-Disposition header when :disposition set to attachment" do
122
- get '/' do
123
- send_file File.dirname(__FILE__) + '/public/foo.xml',
124
- :disposition => 'attachment'
125
- end
126
-
127
- get_it '/'
128
-
129
- should.be.ok
130
- headers['Content-Disposition'].should.not.be.nil
131
- headers['Content-Disposition'].should.equal 'attachment; filename="foo.xml"'
132
- end
133
- end
@@ -1,18 +0,0 @@
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
- end
18
-
@@ -1,30 +0,0 @@
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
@@ -1,47 +0,0 @@
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
-
@@ -1 +0,0 @@
1
- xml.exclaim "You rock #{@name}!"
@@ -1 +0,0 @@
1
- You rock <%= @name %>!
@@ -1 +0,0 @@
1
- == You rock #{@name}!
@@ -1,2 +0,0 @@
1
- #sass
2
- :background_color #FFF
@@ -1,2 +0,0 @@
1
- <%= @title %>
2
- Hi <%= yield %>
@@ -1,2 +0,0 @@
1
- == #{@title}
2
- == Hi #{yield}
@@ -1 +0,0 @@
1
- xml.this "is foo!"
@@ -1 +0,0 @@
1
- This is foo!
@@ -1 +0,0 @@
1
- This is foo!
@@ -1,2 +0,0 @@
1
- #sass
2
- :background_color #FFF
@@ -1,3 +0,0 @@
1
- xml.layout do
2
- xml << yield
3
- end
@@ -1 +0,0 @@
1
- x <%= yield %> x
@@ -1 +0,0 @@
1
- == x #{yield} x
@@ -1,2 +0,0 @@
1
- b0rked!
2
- = yield
@@ -1 +0,0 @@
1
- xml.foo "No Layout!"
@@ -1 +0,0 @@
1
- %h1 No Layout!