darkhelmet-sinatra 0.9.1.1 → 0.10.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. data/AUTHORS +2 -0
  2. data/CHANGES +180 -0
  3. data/LICENSE +1 -1
  4. data/README.jp.rdoc +552 -0
  5. data/README.rdoc +177 -38
  6. data/Rakefile +18 -25
  7. data/lib/sinatra.rb +1 -2
  8. data/lib/sinatra/base.rb +405 -305
  9. data/lib/sinatra/main.rb +5 -24
  10. data/lib/sinatra/showexceptions.rb +303 -0
  11. data/lib/sinatra/tilt.rb +509 -0
  12. data/sinatra.gemspec +21 -51
  13. data/test/base_test.rb +123 -93
  14. data/test/builder_test.rb +2 -1
  15. data/test/contest.rb +64 -0
  16. data/test/erb_test.rb +1 -1
  17. data/test/erubis_test.rb +82 -0
  18. data/test/extensions_test.rb +24 -8
  19. data/test/filter_test.rb +99 -3
  20. data/test/haml_test.rb +25 -3
  21. data/test/helper.rb +43 -48
  22. data/test/helpers_test.rb +500 -424
  23. data/test/mapped_error_test.rb +163 -137
  24. data/test/middleware_test.rb +3 -3
  25. data/test/request_test.rb +16 -1
  26. data/test/response_test.rb +2 -2
  27. data/test/result_test.rb +1 -1
  28. data/test/route_added_hook_test.rb +59 -0
  29. data/test/routing_test.rb +170 -22
  30. data/test/sass_test.rb +44 -1
  31. data/test/server_test.rb +19 -13
  32. data/test/sinatra_test.rb +1 -1
  33. data/test/static_test.rb +9 -2
  34. data/test/templates_test.rb +78 -11
  35. data/test/views/error.builder +3 -0
  36. data/test/views/error.erb +3 -0
  37. data/test/views/error.erubis +3 -0
  38. data/test/views/error.haml +3 -0
  39. data/test/views/error.sass +2 -0
  40. data/test/views/foo/hello.test +1 -0
  41. data/test/views/hello.erubis +1 -0
  42. data/test/views/layout2.erubis +2 -0
  43. metadata +37 -55
  44. data/compat/app_test.rb +0 -282
  45. data/compat/application_test.rb +0 -262
  46. data/compat/builder_test.rb +0 -101
  47. data/compat/compat_test.rb +0 -12
  48. data/compat/custom_error_test.rb +0 -62
  49. data/compat/erb_test.rb +0 -136
  50. data/compat/events_test.rb +0 -78
  51. data/compat/filter_test.rb +0 -30
  52. data/compat/haml_test.rb +0 -233
  53. data/compat/helper.rb +0 -30
  54. data/compat/mapped_error_test.rb +0 -72
  55. data/compat/pipeline_test.rb +0 -45
  56. data/compat/public/foo.xml +0 -1
  57. data/compat/sass_test.rb +0 -57
  58. data/compat/sessions_test.rb +0 -42
  59. data/compat/streaming_test.rb +0 -133
  60. data/compat/sym_params_test.rb +0 -19
  61. data/compat/template_test.rb +0 -30
  62. data/compat/use_in_file_templates_test.rb +0 -47
  63. data/compat/views/foo.builder +0 -1
  64. data/compat/views/foo.erb +0 -1
  65. data/compat/views/foo.haml +0 -1
  66. data/compat/views/foo.sass +0 -2
  67. data/compat/views/foo_layout.erb +0 -2
  68. data/compat/views/foo_layout.haml +0 -2
  69. data/compat/views/layout_test/foo.builder +0 -1
  70. data/compat/views/layout_test/foo.erb +0 -1
  71. data/compat/views/layout_test/foo.haml +0 -1
  72. data/compat/views/layout_test/foo.sass +0 -2
  73. data/compat/views/layout_test/layout.builder +0 -3
  74. data/compat/views/layout_test/layout.erb +0 -1
  75. data/compat/views/layout_test/layout.haml +0 -1
  76. data/compat/views/layout_test/layout.sass +0 -2
  77. data/compat/views/no_layout/no_layout.builder +0 -1
  78. data/compat/views/no_layout/no_layout.haml +0 -1
  79. data/lib/sinatra/compat.rb +0 -250
  80. data/lib/sinatra/test.rb +0 -126
  81. data/lib/sinatra/test/bacon.rb +0 -19
  82. data/lib/sinatra/test/rspec.rb +0 -13
  83. data/lib/sinatra/test/spec.rb +0 -11
  84. data/lib/sinatra/test/unit.rb +0 -13
  85. data/test/data/reload_app_file.rb +0 -3
  86. data/test/options_test.rb +0 -374
  87. data/test/reload_test.rb +0 -68
  88. data/test/test_test.rb +0 -144
@@ -1,6 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/helper'
2
+ require 'sass'
2
3
 
3
- describe "Sass Templates" do
4
+ class SassTest < Test::Unit::TestCase
4
5
  def sass_app(&block)
5
6
  mock_app {
6
7
  set :views, File.dirname(__FILE__) + '/views'
@@ -33,4 +34,46 @@ describe "Sass Templates" do
33
34
  }
34
35
  assert_raise(Errno::ENOENT) { get('/') }
35
36
  end
37
+
38
+ it "passes SASS options to the Sass engine" do
39
+ sass_app {
40
+ sass "#sass\n :background-color #FFF\n :color #000\n", :style => :compact
41
+ }
42
+ assert ok?
43
+ assert_equal "#sass { background-color: #FFF; color: #000; }\n", body
44
+ end
45
+
46
+ it "passes default SASS options to the Sass engine" do
47
+ mock_app {
48
+ set :sass, {:style => :compact} # default Sass style is :nested
49
+ get '/' do
50
+ sass "#sass\n :background-color #FFF\n :color #000\n"
51
+ end
52
+ }
53
+ get '/'
54
+ assert ok?
55
+ assert_equal "#sass { background-color: #FFF; color: #000; }\n", body
56
+ end
57
+
58
+ it "merges the default SASS options with the overrides and passes them to the Sass engine" do
59
+ mock_app {
60
+ set :sass, {:style => :compact, :attribute_syntax => :alternate } # default Sass attribute_syntax is :normal (with : in front)
61
+ get '/' do
62
+ sass "#sass\n background-color: #FFF\n color: #000\n"
63
+ end
64
+ get '/raised' do
65
+ sass "#sass\n :background-color #FFF\n :color #000\n", :style => :expanded # retains global attribute_syntax settings
66
+ end
67
+ get '/expanded_normal' do
68
+ sass "#sass\n :background-color #FFF\n :color #000\n", :style => :expanded, :attribute_syntax => :normal
69
+ end
70
+ }
71
+ get '/'
72
+ assert ok?
73
+ assert_equal "#sass { background-color: #FFF; color: #000; }\n", body
74
+ assert_raise(Sass::SyntaxError) { get('/raised') }
75
+ get '/expanded_normal'
76
+ assert ok?
77
+ assert_equal "#sass {\n background-color: #FFF;\n color: #000;\n}\n", body
78
+ end
36
79
  end
@@ -1,21 +1,25 @@
1
1
  require File.dirname(__FILE__) + '/helper'
2
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
3
+ module Rack::Handler
4
+ class Mock
5
+ extend Test::Unit::Assertions
6
+
7
+ def self.run(app, options={})
8
+ assert(app < Sinatra::Base)
9
+ assert_equal 9001, options[:Port]
10
+ assert_equal 'foo.local', options[:Host]
11
+ yield new
12
+ end
13
+
14
+ def stop
15
+ end
11
16
  end
12
17
 
13
- def stop
14
- end
18
+ register 'mock', 'Rack::Handler::Mock'
15
19
  end
16
20
 
17
- describe 'Sinatra::Base.run!' do
18
- before do
21
+ class ServerTest < Test::Unit::TestCase
22
+ setup do
19
23
  mock_app {
20
24
  set :server, 'mock'
21
25
  set :host, 'foo.local'
@@ -24,7 +28,9 @@ describe 'Sinatra::Base.run!' do
24
28
  $stdout = File.open('/dev/null', 'wb')
25
29
  end
26
30
 
27
- after { $stdout = STDOUT }
31
+ def teardown
32
+ $stdout = STDOUT
33
+ end
28
34
 
29
35
  it "locates the appropriate Rack handler and calls ::run" do
30
36
  @app.run!
@@ -1,6 +1,6 @@
1
1
  require File.dirname(__FILE__) + '/helper'
2
2
 
3
- describe 'Sinatra' do
3
+ class SinatraTest < Test::Unit::TestCase
4
4
  it 'creates a new Sinatra::Base subclass on new' do
5
5
  app =
6
6
  Sinatra.new do
@@ -1,7 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/helper'
2
2
 
3
- describe 'Static' do
4
- before do
3
+ class StaticTest < Test::Unit::TestCase
4
+ setup do
5
5
  mock_app {
6
6
  set :static, true
7
7
  set :public, File.dirname(__FILE__)
@@ -34,6 +34,13 @@ describe 'Static' do
34
34
  assert response.headers.include?('Last-Modified')
35
35
  end
36
36
 
37
+ %w[POST PUT DELETE].each do |verb|
38
+ it "does not serve #{verb} requests" do
39
+ send verb.downcase, "/#{File.basename(__FILE__)}"
40
+ assert_equal 404, status
41
+ end
42
+ end
43
+
37
44
  it 'serves files in preference to custom routes' do
38
45
  @app.get("/#{File.basename(__FILE__)}") { 'Hello World' }
39
46
  get "/#{File.basename(__FILE__)}"
@@ -1,12 +1,20 @@
1
1
  require File.dirname(__FILE__) + '/helper'
2
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
3
+ class TestTemplate < Tilt::Template
4
+ def compile!
5
+ end
6
+
7
+ def evaluate(scope, locals={}, &block)
8
+ inner = block ? block.call : ''
9
+ data + inner
10
+ end
11
+
12
+ Tilt.register 'test', self
13
+ end
14
+
15
+ class TemplatesTest < Test::Unit::TestCase
16
+ def render_app(base=Sinatra::Base, &block)
17
+ mock_app(base) {
10
18
  set :views, File.dirname(__FILE__) + '/views'
11
19
  get '/', &block
12
20
  template(:layout3) { "Layout 3!\n" }
@@ -68,15 +76,74 @@ describe 'Templating' do
68
76
  assert_equal "Layout 3!\nHello World!\n", body
69
77
  end
70
78
 
71
- it 'loads templates from source file with use_in_file_templates!' do
79
+ it 'loads templates from source file with inline_templates enabled' do
72
80
  mock_app {
73
- use_in_file_templates!
81
+ enable :inline_templates
74
82
  }
75
- assert_equal "this is foo\n\n", @app.templates[:foo]
76
- assert_equal "X\n= yield\nX\n", @app.templates[:layout]
83
+ assert_equal "this is foo\n\n", @app.templates[:foo][0]
84
+ assert_equal "X\n= yield\nX\n", @app.templates[:layout][0]
85
+ end
86
+
87
+ it 'loads templates from specified views directory' do
88
+ render_app { render :test, :hello, :views => options.views + '/foo' }
89
+
90
+ assert_equal "from another views directory\n", body
91
+ end
92
+
93
+ test 'use_in_file_templates simply ignores IO errors' do
94
+ assert_nothing_raised {
95
+ mock_app {
96
+ set :inline_templates, '/foo/bar'
97
+ }
98
+ }
99
+
100
+ assert @app.templates.empty?
101
+ end
102
+
103
+ it 'passes locals to the layout' do
104
+ mock_app {
105
+ template :my_layout do
106
+ 'Hello <%= name %>!<%= yield %>'
107
+ end
108
+
109
+ get '/' do
110
+ erb '<p>content</p>', { :layout => :my_layout }, { :name => 'Mike'}
111
+ end
112
+ }
113
+
114
+ get '/'
115
+ assert ok?
116
+ assert_equal 'Hello Mike!<p>content</p>', body
117
+ end
118
+
119
+ it 'loads templates defined in subclasses' do
120
+ base = Class.new(Sinatra::Base)
121
+ base.template(:foo) { 'bar' }
122
+ render_app(base) { render :test, :foo }
123
+ assert ok?
124
+ assert_equal 'bar', body
125
+ end
126
+
127
+ it 'uses templates in superclasses before subclasses' do
128
+ base = Class.new(Sinatra::Base)
129
+ base.template(:foo) { 'template in superclass' }
130
+ assert_equal 'template in superclass', base.templates[:foo].first.call
131
+
132
+ mock_app(base) {
133
+ set :views, File.dirname(__FILE__) + '/views'
134
+ template(:foo) { 'template in subclass' }
135
+ get('/') { render :test, :foo }
136
+ }
137
+ assert_equal 'template in subclass', @app.templates[:foo].first.call
138
+
139
+ get '/'
140
+ assert ok?
141
+ assert_equal 'template in subclass', body
77
142
  end
78
143
  end
79
144
 
145
+ # __END__ : this is not the real end of the script.
146
+
80
147
  __END__
81
148
 
82
149
  @@ foo
@@ -0,0 +1,3 @@
1
+ xml.error do
2
+ raise "goodbye"
3
+ end
@@ -0,0 +1,3 @@
1
+ Hello <%= 'World' %>
2
+ <% raise 'Goodbye' unless defined?(french) && french %>
3
+ <% raise 'Au revoir' if defined?(french) && french %>
@@ -0,0 +1,3 @@
1
+ Hello <%= 'World' %>
2
+ <% raise 'Goodbye' unless defined?(french) && french %>
3
+ <% raise 'Au revoir' if defined?(french) && french %>
@@ -0,0 +1,3 @@
1
+ %h1 Hello From Haml
2
+ = raise 'goodbye' unless defined?(french) && french
3
+ = raise 'au revoir' if defined?(french) && french
@@ -0,0 +1,2 @@
1
+ #sass
2
+ +argle-bargle
@@ -0,0 +1 @@
1
+ from another views directory
@@ -0,0 +1 @@
1
+ Hello <%= 'World' %>
@@ -0,0 +1,2 @@
1
+ ERubis Layout!
2
+ <%= yield %>
metadata CHANGED
@@ -1,15 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: darkhelmet-sinatra
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1.1
4
+ version: 0.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Blake Mizerany
8
+ - Ryan Tomayko
9
+ - Simon Rozet
8
10
  autorequire:
9
11
  bindir: bin
10
12
  cert_chain: []
11
13
 
12
- date: 2009-03-09 00:00:00 -07:00
14
+ date: 2009-12-13 00:00:00 -07:00
13
15
  default_executable:
14
16
  dependencies:
15
17
  - !ruby/object:Gem::Dependency
@@ -20,21 +22,31 @@ dependencies:
20
22
  requirements:
21
23
  - - ">="
22
24
  - !ruby/object:Gem::Version
23
- version: 0.9.1
25
+ version: "1.0"
24
26
  version:
25
27
  - !ruby/object:Gem::Dependency
26
- name: rack
27
- type: :runtime
28
+ name: shotgun
29
+ type: :development
28
30
  version_requirement:
29
31
  version_requirements: !ruby/object:Gem::Requirement
30
32
  requirements:
31
33
  - - ">="
32
34
  - !ruby/object:Gem::Version
33
- version: 0.9.1
35
+ version: "0.3"
34
36
  - - <
35
37
  - !ruby/object:Gem::Version
36
38
  version: "1.0"
37
39
  version:
40
+ - !ruby/object:Gem::Dependency
41
+ name: rack-test
42
+ type: :development
43
+ version_requirement:
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: 0.3.0
49
+ version:
38
50
  description: Classy web-development dressed in a DSL
39
51
  email: sinatrarb@googlegroups.com
40
52
  executables: []
@@ -48,59 +60,22 @@ files:
48
60
  - AUTHORS
49
61
  - CHANGES
50
62
  - LICENSE
63
+ - README.jp.rdoc
51
64
  - README.rdoc
52
65
  - 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
66
  - lib/sinatra.rb
89
67
  - lib/sinatra/base.rb
90
- - lib/sinatra/compat.rb
91
68
  - lib/sinatra/images/404.png
92
69
  - lib/sinatra/images/500.png
93
70
  - 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
71
+ - lib/sinatra/showexceptions.rb
72
+ - lib/sinatra/tilt.rb
99
73
  - sinatra.gemspec
100
74
  - test/base_test.rb
101
75
  - test/builder_test.rb
102
- - test/data/reload_app_file.rb
76
+ - test/contest.rb
103
77
  - test/erb_test.rb
78
+ - test/erubis_test.rb
104
79
  - test/extensions_test.rb
105
80
  - test/filter_test.rb
106
81
  - test/haml_test.rb
@@ -108,29 +83,37 @@ files:
108
83
  - test/helpers_test.rb
109
84
  - test/mapped_error_test.rb
110
85
  - test/middleware_test.rb
111
- - test/options_test.rb
112
- - test/reload_test.rb
113
86
  - test/request_test.rb
114
87
  - test/response_test.rb
115
88
  - test/result_test.rb
89
+ - test/route_added_hook_test.rb
116
90
  - test/routing_test.rb
117
91
  - test/sass_test.rb
118
92
  - test/server_test.rb
119
93
  - test/sinatra_test.rb
120
94
  - test/static_test.rb
121
95
  - test/templates_test.rb
122
- - test/test_test.rb
96
+ - test/views/error.builder
97
+ - test/views/error.erb
98
+ - test/views/error.erubis
99
+ - test/views/error.haml
100
+ - test/views/error.sass
101
+ - test/views/foo/hello.test
123
102
  - test/views/hello.builder
124
103
  - test/views/hello.erb
104
+ - test/views/hello.erubis
125
105
  - test/views/hello.haml
126
106
  - test/views/hello.sass
127
107
  - test/views/hello.test
128
108
  - test/views/layout2.builder
129
109
  - test/views/layout2.erb
110
+ - test/views/layout2.erubis
130
111
  - test/views/layout2.haml
131
112
  - test/views/layout2.test
132
113
  has_rdoc: true
133
114
  homepage: http://sinatra.rubyforge.org
115
+ licenses: []
116
+
134
117
  post_install_message:
135
118
  rdoc_options:
136
119
  - --line-numbers
@@ -156,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
139
  requirements: []
157
140
 
158
141
  rubyforge_project: sinatra
159
- rubygems_version: 1.2.0
142
+ rubygems_version: 1.3.5
160
143
  signing_key:
161
144
  specification_version: 2
162
145
  summary: Classy web-development dressed in a DSL
@@ -164,21 +147,20 @@ test_files:
164
147
  - test/base_test.rb
165
148
  - test/builder_test.rb
166
149
  - test/erb_test.rb
150
+ - test/erubis_test.rb
167
151
  - test/extensions_test.rb
168
152
  - test/filter_test.rb
169
153
  - test/haml_test.rb
170
154
  - test/helpers_test.rb
171
155
  - test/mapped_error_test.rb
172
156
  - test/middleware_test.rb
173
- - test/options_test.rb
174
- - test/reload_test.rb
175
157
  - test/request_test.rb
176
158
  - test/response_test.rb
177
159
  - test/result_test.rb
160
+ - test/route_added_hook_test.rb
178
161
  - test/routing_test.rb
179
162
  - test/sass_test.rb
180
163
  - test/server_test.rb
181
164
  - test/sinatra_test.rb
182
165
  - test/static_test.rb
183
166
  - test/templates_test.rb
184
- - test/test_test.rb