darkhelmet-sinatra 0.9.0.5

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.
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