darkhelmet-sinatra 0.9.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. data/AUTHORS +41 -0
  2. data/CHANGES +243 -0
  3. data/LICENSE +22 -0
  4. data/README.rdoc +535 -0
  5. data/Rakefile +136 -0
  6. data/compat/app_test.rb +301 -0
  7. data/compat/application_test.rb +334 -0
  8. data/compat/builder_test.rb +101 -0
  9. data/compat/compat_test.rb +12 -0
  10. data/compat/custom_error_test.rb +62 -0
  11. data/compat/erb_test.rb +136 -0
  12. data/compat/events_test.rb +78 -0
  13. data/compat/filter_test.rb +30 -0
  14. data/compat/haml_test.rb +233 -0
  15. data/compat/helper.rb +30 -0
  16. data/compat/mapped_error_test.rb +72 -0
  17. data/compat/pipeline_test.rb +71 -0
  18. data/compat/public/foo.xml +1 -0
  19. data/compat/sass_test.rb +57 -0
  20. data/compat/sessions_test.rb +39 -0
  21. data/compat/streaming_test.rb +133 -0
  22. data/compat/sym_params_test.rb +19 -0
  23. data/compat/template_test.rb +30 -0
  24. data/compat/use_in_file_templates_test.rb +47 -0
  25. data/compat/views/foo.builder +1 -0
  26. data/compat/views/foo.erb +1 -0
  27. data/compat/views/foo.haml +1 -0
  28. data/compat/views/foo.sass +2 -0
  29. data/compat/views/foo_layout.erb +2 -0
  30. data/compat/views/foo_layout.haml +2 -0
  31. data/compat/views/layout_test/foo.builder +1 -0
  32. data/compat/views/layout_test/foo.erb +1 -0
  33. data/compat/views/layout_test/foo.haml +1 -0
  34. data/compat/views/layout_test/foo.sass +2 -0
  35. data/compat/views/layout_test/layout.builder +3 -0
  36. data/compat/views/layout_test/layout.erb +1 -0
  37. data/compat/views/layout_test/layout.haml +1 -0
  38. data/compat/views/layout_test/layout.sass +2 -0
  39. data/compat/views/no_layout/no_layout.builder +1 -0
  40. data/compat/views/no_layout/no_layout.haml +1 -0
  41. data/lib/sinatra/base.rb +1007 -0
  42. data/lib/sinatra/compat.rb +252 -0
  43. data/lib/sinatra/images/404.png +0 -0
  44. data/lib/sinatra/images/500.png +0 -0
  45. data/lib/sinatra/main.rb +47 -0
  46. data/lib/sinatra/test/bacon.rb +19 -0
  47. data/lib/sinatra/test/rspec.rb +13 -0
  48. data/lib/sinatra/test/spec.rb +11 -0
  49. data/lib/sinatra/test/unit.rb +13 -0
  50. data/lib/sinatra/test.rb +121 -0
  51. data/lib/sinatra.rb +8 -0
  52. data/sinatra.gemspec +116 -0
  53. data/test/base_test.rb +112 -0
  54. data/test/builder_test.rb +64 -0
  55. data/test/data/reload_app_file.rb +3 -0
  56. data/test/erb_test.rb +81 -0
  57. data/test/extensions_test.rb +63 -0
  58. data/test/filter_test.rb +99 -0
  59. data/test/haml_test.rb +68 -0
  60. data/test/helper.rb +85 -0
  61. data/test/helpers_test.rb +467 -0
  62. data/test/mapped_error_test.rb +160 -0
  63. data/test/middleware_test.rb +60 -0
  64. data/test/options_test.rb +374 -0
  65. data/test/reload_test.rb +68 -0
  66. data/test/request_test.rb +18 -0
  67. data/test/response_test.rb +42 -0
  68. data/test/result_test.rb +98 -0
  69. data/test/routing_test.rb +712 -0
  70. data/test/sass_test.rb +36 -0
  71. data/test/server_test.rb +41 -0
  72. data/test/sinatra_test.rb +13 -0
  73. data/test/static_test.rb +65 -0
  74. data/test/templates_test.rb +88 -0
  75. data/test/test_test.rb +109 -0
  76. data/test/views/hello.builder +1 -0
  77. data/test/views/hello.erb +1 -0
  78. data/test/views/hello.haml +1 -0
  79. data/test/views/hello.sass +2 -0
  80. data/test/views/hello.test +1 -0
  81. data/test/views/layout2.builder +3 -0
  82. data/test/views/layout2.erb +2 -0
  83. data/test/views/layout2.haml +2 -0
  84. data/test/views/layout2.test +1 -0
  85. metadata +184 -0
data/test/sass_test.rb ADDED
@@ -0,0 +1,36 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ describe "Sass Templates" do
4
+ def sass_app(&block)
5
+ mock_app {
6
+ set :views, File.dirname(__FILE__) + '/views'
7
+ get '/', &block
8
+ }
9
+ get '/'
10
+ end
11
+
12
+ it 'renders inline Sass strings' do
13
+ sass_app { sass "#sass\n :background-color #FFF\n" }
14
+ assert ok?
15
+ assert_equal "#sass {\n background-color: #FFF; }\n", body
16
+ end
17
+
18
+ it 'renders .sass files in views path' do
19
+ sass_app { sass :hello }
20
+ assert ok?
21
+ assert_equal "#sass {\n background-color: #FFF; }\n", body
22
+ end
23
+
24
+ it 'ignores the layout option' do
25
+ sass_app { sass :hello, :layout => :layout2 }
26
+ assert ok?
27
+ assert_equal "#sass {\n background-color: #FFF; }\n", body
28
+ end
29
+
30
+ it "raises error if template not found" do
31
+ mock_app {
32
+ get('/') { sass :no_such_template }
33
+ }
34
+ assert_raise(Errno::ENOENT) { get('/') }
35
+ end
36
+ end
@@ -0,0 +1,41 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class Rack::Handler::Mock
4
+ extend Test::Unit::Assertions
5
+
6
+ def self.run(app, options={})
7
+ assert(app < Sinatra::Base)
8
+ assert_equal 9001, options[:Port]
9
+ assert_equal 'foo.local', options[:Host]
10
+ yield new
11
+ end
12
+
13
+ def stop
14
+ end
15
+ end
16
+
17
+ describe 'Sinatra::Base.run!' do
18
+ before do
19
+ mock_app {
20
+ set :server, 'mock'
21
+ set :host, 'foo.local'
22
+ set :port, 9001
23
+ }
24
+ $stdout = File.open('/dev/null', 'wb')
25
+ end
26
+
27
+ after { $stdout = STDOUT }
28
+
29
+ it "locates the appropriate Rack handler and calls ::run" do
30
+ @app.run!
31
+ end
32
+
33
+ it "sets options on the app before running" do
34
+ @app.run! :sessions => true
35
+ assert @app.sessions?
36
+ end
37
+
38
+ it "falls back on the next server handler when not found" do
39
+ @app.run! :server => %w[foo bar mock]
40
+ end
41
+ end
@@ -0,0 +1,13 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ describe 'Sinatra' do
4
+ it 'creates a new Sinatra::Base subclass on new' do
5
+ app =
6
+ Sinatra.new do
7
+ get '/' do
8
+ 'Hello World'
9
+ end
10
+ end
11
+ assert_same Sinatra::Base, app.superclass
12
+ end
13
+ end
@@ -0,0 +1,65 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ describe 'Static' do
4
+ before do
5
+ mock_app {
6
+ set :static, true
7
+ set :public, File.dirname(__FILE__)
8
+ }
9
+ end
10
+
11
+ it 'serves GET requests for files in the public directory' do
12
+ get "/#{File.basename(__FILE__)}"
13
+ assert ok?
14
+ assert_equal File.read(__FILE__), body
15
+ assert_equal File.size(__FILE__).to_s, response['Content-Length']
16
+ assert response.headers.include?('Last-Modified')
17
+ end
18
+
19
+ it 'produces a body that can be iterated over multiple times' do
20
+ env = Rack::MockRequest.env_for("/#{File.basename(__FILE__)}")
21
+ status, headers, body = @app.call(env)
22
+ buf1, buf2 = [], []
23
+ body.each { |part| buf1 << part }
24
+ body.each { |part| buf2 << part }
25
+ assert_equal buf1.join, buf2.join
26
+ assert_equal File.read(__FILE__), buf1.join
27
+ end
28
+
29
+ it 'serves HEAD requests for files in the public directory' do
30
+ head "/#{File.basename(__FILE__)}"
31
+ assert ok?
32
+ assert_equal '', body
33
+ assert_equal File.size(__FILE__).to_s, response['Content-Length']
34
+ assert response.headers.include?('Last-Modified')
35
+ end
36
+
37
+ it 'serves files in preference to custom routes' do
38
+ @app.get("/#{File.basename(__FILE__)}") { 'Hello World' }
39
+ get "/#{File.basename(__FILE__)}"
40
+ assert ok?
41
+ assert body != 'Hello World'
42
+ end
43
+
44
+ it 'does not serve directories' do
45
+ get "/"
46
+ assert not_found?
47
+ end
48
+
49
+ it 'passes to the next handler when the static option is disabled' do
50
+ @app.set :static, false
51
+ get "/#{File.basename(__FILE__)}"
52
+ assert not_found?
53
+ end
54
+
55
+ it 'passes to the next handler when the public option is nil' do
56
+ @app.set :public, nil
57
+ get "/#{File.basename(__FILE__)}"
58
+ assert not_found?
59
+ end
60
+
61
+ it '404s when a file is not found' do
62
+ get "/foobarbaz.txt"
63
+ assert not_found?
64
+ end
65
+ end
@@ -0,0 +1,88 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ describe 'Templating' do
4
+ def render_app(&block)
5
+ mock_app {
6
+ def render_test(template, data, options, &block)
7
+ inner = block ? block.call : ''
8
+ data + inner
9
+ end
10
+ set :views, File.dirname(__FILE__) + '/views'
11
+ get '/', &block
12
+ template(:layout3) { "Layout 3!\n" }
13
+ }
14
+ get '/'
15
+ end
16
+
17
+ def with_default_layout
18
+ layout = File.dirname(__FILE__) + '/views/layout.test'
19
+ File.open(layout, 'wb') { |io| io.write "Layout!\n" }
20
+ yield
21
+ ensure
22
+ File.unlink(layout) rescue nil
23
+ end
24
+
25
+ it 'renders String templates directly' do
26
+ render_app { render :test, 'Hello World' }
27
+ assert ok?
28
+ assert_equal 'Hello World', body
29
+ end
30
+
31
+ it 'renders Proc templates using the call result' do
32
+ render_app { render :test, Proc.new {'Hello World'} }
33
+ assert ok?
34
+ assert_equal 'Hello World', body
35
+ end
36
+
37
+ it 'looks up Symbol templates in views directory' do
38
+ render_app { render :test, :hello }
39
+ assert ok?
40
+ assert_equal "Hello World!\n", body
41
+ end
42
+
43
+ it 'uses the default layout template if not explicitly overridden' do
44
+ with_default_layout do
45
+ render_app { render :test, :hello }
46
+ assert ok?
47
+ assert_equal "Layout!\nHello World!\n", body
48
+ end
49
+ end
50
+
51
+ it 'uses the default layout template if not really overriden' do
52
+ with_default_layout do
53
+ render_app { render :test, :hello, :layout => true }
54
+ assert ok?
55
+ assert_equal "Layout!\nHello World!\n", body
56
+ end
57
+ end
58
+
59
+ it 'uses the layout template specified' do
60
+ render_app { render :test, :hello, :layout => :layout2 }
61
+ assert ok?
62
+ assert_equal "Layout 2!\nHello World!\n", body
63
+ end
64
+
65
+ it 'uses layout templates defined with the #template method' do
66
+ render_app { render :test, :hello, :layout => :layout3 }
67
+ assert ok?
68
+ assert_equal "Layout 3!\nHello World!\n", body
69
+ end
70
+
71
+ it 'loads templates from source file with use_in_file_templates!' do
72
+ mock_app {
73
+ use_in_file_templates!
74
+ }
75
+ assert_equal "this is foo\n\n", @app.templates[:foo]
76
+ assert_equal "X\n= yield\nX\n", @app.templates[:layout]
77
+ end
78
+ end
79
+
80
+ __END__
81
+
82
+ @@ foo
83
+ this is foo
84
+
85
+ @@ layout
86
+ X
87
+ = yield
88
+ X
data/test/test_test.rb ADDED
@@ -0,0 +1,109 @@
1
+ require 'yaml'
2
+ require File.dirname(__FILE__) + '/helper'
3
+
4
+ describe 'Sinatra::Test' do
5
+ def request
6
+ YAML.load(body)
7
+ end
8
+
9
+ def request_body
10
+ request['test.body']
11
+ end
12
+
13
+ def request_params
14
+ YAML.load(request['test.params'])
15
+ end
16
+
17
+ before do
18
+ mock_app {
19
+ %w[get head post put delete].each { |verb|
20
+ send(verb, '/') do
21
+ redirect '/redirected' if params[:redirect]
22
+ env.update('test.body' => request.body.read)
23
+ env.update('test.params' => params.to_yaml)
24
+ env.to_yaml
25
+ end
26
+ }
27
+
28
+ get '/redirected' do
29
+ "you've been redirected"
30
+ end
31
+ }
32
+ end
33
+
34
+ it 'allows GET/HEAD/POST/PUT/DELETE' do
35
+ get '/'
36
+ assert_equal('GET', request['REQUEST_METHOD'])
37
+
38
+ post '/'
39
+ assert_equal('POST', request['REQUEST_METHOD'])
40
+
41
+ put '/'
42
+ assert_equal('PUT', request['REQUEST_METHOD'])
43
+
44
+ delete '/'
45
+ assert_equal('DELETE', request['REQUEST_METHOD'])
46
+
47
+ head '/'
48
+ assert_equal('0', headers['Content-Length'])
49
+ end
50
+
51
+ it 'allows to specify a body' do
52
+ post '/', '42'
53
+ assert_equal '42', request_body
54
+ end
55
+
56
+ it 'allows to specify params' do
57
+ get '/', :foo => 'bar'
58
+ assert_equal 'bar', request_params['foo']
59
+ end
60
+
61
+ it 'supports nested params' do
62
+ get '/', :foo => { :x => 'y', :chunky => 'bacon' }
63
+ assert_equal "y", request_params['foo']['x']
64
+ assert_equal "bacon", request_params['foo']['chunky']
65
+ end
66
+
67
+ it 'provides easy access to response status and body' do
68
+ get '/'
69
+ assert_equal 200, status
70
+ assert body =~ /^---/
71
+ end
72
+
73
+ it 'delegates methods to @response' do
74
+ get '/'
75
+ assert ok?
76
+ end
77
+
78
+ it 'follows redirect' do
79
+ get '/', :redirect => true
80
+ follow!
81
+ assert_equal "you've been redirected", body
82
+ end
83
+
84
+ it 'provides sugar for common HTTP headers' do
85
+ get '/', :env => { :accept => 'text/plain' }
86
+ assert_equal 'text/plain', request['HTTP_ACCEPT']
87
+
88
+ get '/', :env => { :agent => 'TATFT' }
89
+ assert_equal 'TATFT', request['HTTP_USER_AGENT']
90
+
91
+ get '/', :env => { :host => '1.2.3.4' }
92
+ assert_equal '1.2.3.4', request['HTTP_HOST']
93
+
94
+ get '/', :env => { :session => 'foo' }
95
+ assert_equal 'foo', request['HTTP_COOKIE']
96
+
97
+ get '/', :env => { :cookies => 'foo' }
98
+ assert_equal 'foo', request['HTTP_COOKIE']
99
+
100
+ get '/', :env => { :content_type => 'text/plain' }
101
+ assert_equal 'text/plain', request['CONTENT_TYPE']
102
+ end
103
+
104
+ def test_TestHarness
105
+ session = Sinatra::TestHarness.new(@app)
106
+ response = session.get('/')
107
+ assert_equal 200, response.status
108
+ end
109
+ end
@@ -0,0 +1 @@
1
+ xml.exclaim "You're my boy, #{@name}!"
@@ -0,0 +1 @@
1
+ Hello <%= 'World' %>
@@ -0,0 +1 @@
1
+ %h1 Hello From Haml
@@ -0,0 +1,2 @@
1
+ #sass
2
+ :background-color #FFF
@@ -0,0 +1 @@
1
+ Hello World!
@@ -0,0 +1,3 @@
1
+ xml.layout do
2
+ xml << yield
3
+ end
@@ -0,0 +1,2 @@
1
+ ERB Layout!
2
+ <%= yield %>
@@ -0,0 +1,2 @@
1
+ %h1 HAML Layout!
2
+ %p= yield
@@ -0,0 +1 @@
1
+ Layout 2!
metadata ADDED
@@ -0,0 +1,184 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: darkhelmet-sinatra
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0.5
5
+ platform: ruby
6
+ authors:
7
+ - Blake Mizerany
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-02-10 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rack
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.9.1
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: rack
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.9.1
34
+ - - <
35
+ - !ruby/object:Gem::Version
36
+ version: "1.0"
37
+ version:
38
+ description: Classy web-development dressed in a DSL
39
+ email: sinatrarb@googlegroups.com
40
+ executables: []
41
+
42
+ extensions: []
43
+
44
+ extra_rdoc_files:
45
+ - README.rdoc
46
+ - LICENSE
47
+ files:
48
+ - AUTHORS
49
+ - CHANGES
50
+ - LICENSE
51
+ - README.rdoc
52
+ - Rakefile
53
+ - compat/app_test.rb
54
+ - compat/application_test.rb
55
+ - compat/builder_test.rb
56
+ - compat/compat_test.rb
57
+ - compat/custom_error_test.rb
58
+ - compat/erb_test.rb
59
+ - compat/events_test.rb
60
+ - compat/filter_test.rb
61
+ - compat/haml_test.rb
62
+ - compat/helper.rb
63
+ - compat/mapped_error_test.rb
64
+ - compat/pipeline_test.rb
65
+ - compat/public/foo.xml
66
+ - compat/sass_test.rb
67
+ - compat/sessions_test.rb
68
+ - compat/streaming_test.rb
69
+ - compat/sym_params_test.rb
70
+ - compat/template_test.rb
71
+ - compat/use_in_file_templates_test.rb
72
+ - compat/views/foo.builder
73
+ - compat/views/foo.erb
74
+ - compat/views/foo.haml
75
+ - compat/views/foo.sass
76
+ - compat/views/foo_layout.erb
77
+ - compat/views/foo_layout.haml
78
+ - compat/views/layout_test/foo.builder
79
+ - compat/views/layout_test/foo.erb
80
+ - compat/views/layout_test/foo.haml
81
+ - compat/views/layout_test/foo.sass
82
+ - compat/views/layout_test/layout.builder
83
+ - compat/views/layout_test/layout.erb
84
+ - compat/views/layout_test/layout.haml
85
+ - compat/views/layout_test/layout.sass
86
+ - compat/views/no_layout/no_layout.builder
87
+ - compat/views/no_layout/no_layout.haml
88
+ - lib/sinatra.rb
89
+ - lib/sinatra/base.rb
90
+ - lib/sinatra/compat.rb
91
+ - lib/sinatra/images/404.png
92
+ - lib/sinatra/images/500.png
93
+ - lib/sinatra/main.rb
94
+ - lib/sinatra/test.rb
95
+ - lib/sinatra/test/bacon.rb
96
+ - lib/sinatra/test/rspec.rb
97
+ - lib/sinatra/test/spec.rb
98
+ - lib/sinatra/test/unit.rb
99
+ - sinatra.gemspec
100
+ - test/base_test.rb
101
+ - test/builder_test.rb
102
+ - test/data/reload_app_file.rb
103
+ - test/erb_test.rb
104
+ - test/extensions_test.rb
105
+ - test/filter_test.rb
106
+ - test/haml_test.rb
107
+ - test/helper.rb
108
+ - test/helpers_test.rb
109
+ - test/mapped_error_test.rb
110
+ - test/middleware_test.rb
111
+ - test/options_test.rb
112
+ - test/reload_test.rb
113
+ - test/request_test.rb
114
+ - test/response_test.rb
115
+ - test/result_test.rb
116
+ - test/routing_test.rb
117
+ - test/sass_test.rb
118
+ - test/server_test.rb
119
+ - test/sinatra_test.rb
120
+ - test/static_test.rb
121
+ - test/templates_test.rb
122
+ - test/test_test.rb
123
+ - test/views/hello.builder
124
+ - test/views/hello.erb
125
+ - test/views/hello.haml
126
+ - test/views/hello.sass
127
+ - test/views/hello.test
128
+ - test/views/layout2.builder
129
+ - test/views/layout2.erb
130
+ - test/views/layout2.haml
131
+ - test/views/layout2.test
132
+ has_rdoc: true
133
+ homepage: http://sinatra.rubyforge.org
134
+ post_install_message:
135
+ rdoc_options:
136
+ - --line-numbers
137
+ - --inline-source
138
+ - --title
139
+ - Sinatra
140
+ - --main
141
+ - README.rdoc
142
+ require_paths:
143
+ - lib
144
+ required_ruby_version: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: "0"
149
+ version:
150
+ required_rubygems_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: "0"
155
+ version:
156
+ requirements: []
157
+
158
+ rubyforge_project: sinatra
159
+ rubygems_version: 1.2.0
160
+ signing_key:
161
+ specification_version: 2
162
+ summary: Classy web-development dressed in a DSL
163
+ test_files:
164
+ - test/base_test.rb
165
+ - test/builder_test.rb
166
+ - test/erb_test.rb
167
+ - test/extensions_test.rb
168
+ - test/filter_test.rb
169
+ - test/haml_test.rb
170
+ - test/helpers_test.rb
171
+ - test/mapped_error_test.rb
172
+ - test/middleware_test.rb
173
+ - test/options_test.rb
174
+ - test/reload_test.rb
175
+ - test/request_test.rb
176
+ - test/response_test.rb
177
+ - test/result_test.rb
178
+ - test/routing_test.rb
179
+ - test/sass_test.rb
180
+ - test/server_test.rb
181
+ - test/sinatra_test.rb
182
+ - test/static_test.rb
183
+ - test/templates_test.rb
184
+ - test/test_test.rb