padrino-core 0.12.0 → 0.12.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/lib/padrino-core.rb +4 -4
  3. data/lib/padrino-core/application.rb +6 -195
  4. data/lib/padrino-core/application/application_setup.rb +199 -0
  5. data/lib/padrino-core/application/routing.rb +66 -25
  6. data/lib/padrino-core/cli/base.rb +8 -5
  7. data/lib/padrino-core/cli/rake.rb +12 -9
  8. data/lib/padrino-core/loader.rb +1 -1
  9. data/lib/padrino-core/logger.rb +25 -0
  10. data/lib/padrino-core/mounter.rb +8 -3
  11. data/lib/padrino-core/reloader.rb +2 -2
  12. data/lib/padrino-core/server.rb +50 -17
  13. data/lib/padrino-core/version.rb +1 -1
  14. data/padrino-core.gemspec +2 -10
  15. data/test/fixtures/apps/demo_app.rb +7 -0
  16. data/test/fixtures/apps/demo_demo.rb +7 -0
  17. data/test/helper.rb +6 -37
  18. data/test/test_application.rb +12 -13
  19. data/test/test_core.rb +12 -13
  20. data/test/test_csrf_protection.rb +49 -23
  21. data/test/test_dependencies.rb +7 -7
  22. data/test/test_filters.rb +41 -17
  23. data/test/test_flash.rb +24 -24
  24. data/test/test_locale.rb +1 -1
  25. data/test/test_logger.rb +39 -27
  26. data/test/test_mounter.rb +34 -20
  27. data/test/test_reloader_complex.rb +5 -6
  28. data/test/test_reloader_simple.rb +23 -20
  29. data/test/test_reloader_system.rb +10 -7
  30. data/test/test_restful_routing.rb +1 -1
  31. data/test/test_router.rb +7 -7
  32. data/test/test_routing.rb +177 -141
  33. metadata +14 -53
  34. data/lib/padrino-core/application/rendering.rb +0 -325
  35. data/lib/padrino-core/application/rendering/extensions/erubis.rb +0 -68
  36. data/lib/padrino-core/application/rendering/extensions/haml.rb +0 -29
  37. data/lib/padrino-core/application/rendering/extensions/slim.rb +0 -21
  38. data/lib/padrino-core/locale/cs.yml +0 -33
  39. data/lib/padrino-core/locale/da.yml +0 -33
  40. data/lib/padrino-core/locale/de.yml +0 -33
  41. data/lib/padrino-core/locale/en.yml +0 -33
  42. data/lib/padrino-core/locale/es.yml +0 -33
  43. data/lib/padrino-core/locale/fr.yml +0 -33
  44. data/lib/padrino-core/locale/hu.yml +0 -33
  45. data/lib/padrino-core/locale/it.yml +0 -39
  46. data/lib/padrino-core/locale/ja.yml +0 -33
  47. data/lib/padrino-core/locale/lv.yml +0 -33
  48. data/lib/padrino-core/locale/nl.yml +0 -33
  49. data/lib/padrino-core/locale/no.yml +0 -33
  50. data/lib/padrino-core/locale/pl.yml +0 -33
  51. data/lib/padrino-core/locale/pt_br.yml +0 -39
  52. data/lib/padrino-core/locale/ro.yml +0 -33
  53. data/lib/padrino-core/locale/ru.yml +0 -34
  54. data/lib/padrino-core/locale/sv.yml +0 -33
  55. data/lib/padrino-core/locale/tr.yml +0 -33
  56. data/lib/padrino-core/locale/uk.yml +0 -33
  57. data/lib/padrino-core/locale/zh_cn.yml +0 -33
  58. data/lib/padrino-core/locale/zh_tw.yml +0 -33
  59. data/lib/padrino-core/support_lite.rb +0 -259
  60. data/test/fixtures/apps/.components +0 -6
  61. data/test/fixtures/apps/.gitignore +0 -7
  62. data/test/fixtures/apps/render.rb +0 -13
  63. data/test/fixtures/apps/views/blog/post.erb +0 -1
  64. data/test/fixtures/layouts/layout.erb +0 -1
  65. data/test/mini_shoulda.rb +0 -45
  66. data/test/test_rendering.rb +0 -606
  67. data/test/test_rendering_extensions.rb +0 -14
  68. data/test/test_support_lite.rb +0 -56
data/test/test_filters.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/helper')
2
2
 
3
3
  describe "Filters" do
4
- should "filters by accept header" do
4
+ it 'should filters by accept header' do
5
5
  mock_app do
6
6
  get '/foo', :provides => [:xml, :js] do
7
7
  request.env['HTTP_ACCEPT']
@@ -30,7 +30,7 @@ describe "Filters" do
30
30
  assert_equal 406, status
31
31
  end
32
32
 
33
- should "allow passing & halting in before filters" do
33
+ it 'should allow passing & halting in before filters' do
34
34
  mock_app do
35
35
  controller do
36
36
  before { env['QUERY_STRING'] == 'secret' or pass }
@@ -58,7 +58,7 @@ describe "Filters" do
58
58
  assert_equal "index", body
59
59
  end
60
60
 
61
- should 'scope filters in the given controller' do
61
+ it 'should scope filters in the given controller' do
62
62
  mock_app do
63
63
  before { @global = 'global' }
64
64
  after { @global = nil }
@@ -88,7 +88,7 @@ describe "Filters" do
88
88
  assert_equal "global", body
89
89
  end
90
90
 
91
- should 'be able to access params in a before filter' do
91
+ it 'should be able to access params in a before filter' do
92
92
  username_from_before_filter = nil
93
93
 
94
94
  mock_app do
@@ -103,7 +103,7 @@ describe "Filters" do
103
103
  assert_equal 'josh', username_from_before_filter
104
104
  end
105
105
 
106
- should "be able to access params normally when a before filter is specified" do
106
+ it 'should be able to access params normally when a before filter is specified' do
107
107
  mock_app do
108
108
  before { }
109
109
  get :index do
@@ -114,7 +114,7 @@ describe "Filters" do
114
114
  assert_equal '{"test"=>"what"}', body
115
115
  end
116
116
 
117
- should "be able to filter based on a path" do
117
+ it 'should be able to filter based on a path' do
118
118
  mock_app do
119
119
  before('/') { @test = "#{@test}before"}
120
120
  get :index do
@@ -130,7 +130,7 @@ describe "Filters" do
130
130
  assert_equal '', body
131
131
  end
132
132
 
133
- should "be able to filter based on a symbol" do
133
+ it 'should be able to filter based on a symbol' do
134
134
  mock_app do
135
135
  before(:index) { @test = 'before'}
136
136
  get :index do
@@ -146,7 +146,7 @@ describe "Filters" do
146
146
  assert_equal '', body
147
147
  end
148
148
 
149
- should "be able to filter based on a symbol for a controller" do
149
+ it 'should be able to filter based on a symbol for a controller' do
150
150
  mock_app do
151
151
  controller :foo do
152
152
  before(:test) { @test = 'foo'}
@@ -167,7 +167,7 @@ describe "Filters" do
167
167
  assert_equal 'bar response', body
168
168
  end
169
169
 
170
- should "be able to filter based on a symbol or path" do
170
+ it 'should be able to filter based on a symbol or path' do
171
171
  mock_app do
172
172
  before(:index, '/main') { @test = 'before'}
173
173
  get :index do
@@ -183,7 +183,7 @@ describe "Filters" do
183
183
  assert_equal 'before', body
184
184
  end
185
185
 
186
- should "be able to filter based on a symbol or regexp" do
186
+ it 'should be able to filter based on a symbol or regexp' do
187
187
  mock_app do
188
188
  before(:index, /main/) { @test = 'before'}
189
189
  get :index do
@@ -204,7 +204,7 @@ describe "Filters" do
204
204
  assert_equal '', body
205
205
  end
206
206
 
207
- should "be able to filter excluding based on a symbol" do
207
+ it 'should be able to filter excluding based on a symbol' do
208
208
  mock_app do
209
209
  before(:except => :index) { @test = 'before'}
210
210
  get :index do
@@ -220,7 +220,31 @@ describe "Filters" do
220
220
  assert_equal 'before', body
221
221
  end
222
222
 
223
- should "be able to filter based on a request param" do
223
+ it 'should be able to filter excluding based on a symbol when specify the multiple routes and use nested controller' do
224
+ mock_app do
225
+ controller :test, :nested do
226
+ before(:except => [:test1, :test2]) { @long = 'long'}
227
+ before(:except => [:test1]) { @short = 'short'}
228
+ get :test1 do
229
+ "#{@long} #{@short} normal"
230
+ end
231
+ get :test2 do
232
+ "#{@long} #{@short} normal"
233
+ end
234
+ get :test3 do
235
+ "#{@long} #{@short} normal"
236
+ end
237
+ end
238
+ end
239
+ get '/test/nested/test1'
240
+ assert_equal ' normal', body
241
+ get '/test/nested/test2'
242
+ assert_equal ' short normal', body
243
+ get '/test/nested/test3'
244
+ assert_equal 'long short normal', body
245
+ end
246
+
247
+ it 'should be able to filter based on a request param' do
224
248
  mock_app do
225
249
  before(:agent => /IE/) { @test = 'before'}
226
250
  get :index do
@@ -233,7 +257,7 @@ describe "Filters" do
233
257
  assert_equal 'before', body
234
258
  end
235
259
 
236
- should "be able to filter based on a symbol or path in multiple controller" do
260
+ it 'should be able to filter based on a symbol or path in multiple controller' do
237
261
  mock_app do
238
262
  controllers :foo do
239
263
  before(:index, '/foo/main') { @test = 'before' }
@@ -264,7 +288,7 @@ describe "Filters" do
264
288
  assert_equal 'also before', body
265
289
  end
266
290
 
267
- should "call before filters even if there was no match" do
291
+ it 'should call before filters even if there was no match' do
268
292
  test = nil
269
293
  mock_app do
270
294
  before(:index, '/foo') { test = 'before' }
@@ -276,7 +300,7 @@ describe "Filters" do
276
300
  assert_equal 'before', test
277
301
  end
278
302
 
279
- should "call before filters only once" do
303
+ it 'should call before filters only once' do
280
304
  once = ''
281
305
  mock_app do
282
306
  error 500 do
@@ -294,7 +318,7 @@ describe "Filters" do
294
318
  assert_equal 'before', once
295
319
  end
296
320
 
297
- should 'catch exceptions in before filters' do
321
+ it 'should catch exceptions in before filters' do
298
322
  doodle = nil
299
323
  mock_app do
300
324
  after do
@@ -316,7 +340,7 @@ describe "Filters" do
316
340
  assert_equal nil, doodle
317
341
  end
318
342
 
319
- should 'catch exceptions in after filters if no exceptions caught before' do
343
+ it 'should catch exceptions in after filters if no exceptions caught before' do
320
344
  doodle = ''
321
345
  mock_app do
322
346
  after do
data/test/test_flash.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/helper')
2
2
 
3
3
  describe Padrino::Flash do
4
- context 'storage' do
4
+ describe 'storage' do
5
5
  before do
6
6
  @storage = Padrino::Flash::Storage.new(
7
7
  :success => 'Success msg',
@@ -13,53 +13,53 @@ describe Padrino::Flash do
13
13
  @storage[:two] = 'Two msg'
14
14
  end
15
15
 
16
- should 'acts like hash' do
16
+ it 'should acts like hash' do
17
17
  assert_respond_to @storage, :[]
18
18
  end
19
19
 
20
- should 'know its size' do
20
+ it 'should know its size' do
21
21
  assert_equal 4, @storage.length
22
22
  assert_equal @storage.length, @storage.size
23
23
  end
24
24
 
25
- should 'sweep its content' do
25
+ it 'should sweep its content' do
26
26
  assert_equal 2, @storage.sweep.size
27
27
  assert_empty @storage.sweep
28
28
  end
29
29
 
30
- should 'discard everything' do
30
+ it 'should discard everything' do
31
31
  assert_empty @storage.discard.sweep
32
32
  end
33
33
 
34
- should 'discard specified key' do
34
+ it 'should discard specified key' do
35
35
  assert_equal 1, @storage.discard(:one).sweep.size
36
36
  end
37
37
 
38
- should 'keep everything' do
38
+ it 'should keep everything' do
39
39
  assert_equal 2, @storage.sweep.keep.sweep.size
40
40
  end
41
41
 
42
- should 'keep only specified key' do
42
+ it 'should keep only specified key' do
43
43
  assert_equal 1, @storage.sweep.keep(:one).sweep.size
44
44
  end
45
45
 
46
- should 'not know the values you set right away' do
46
+ it 'should not know the values you set right away' do
47
47
  @storage[:foo] = 'bar'
48
48
  assert_nil @storage[:foo]
49
49
  end
50
50
 
51
- should 'knows the values you set next time' do
51
+ it 'should knows the values you set next time' do
52
52
  @storage[:foo] = 'bar'
53
53
  @storage.sweep
54
54
  assert_equal 'bar', @storage[:foo]
55
55
  end
56
56
 
57
- should 'set values for now' do
57
+ it 'should set values for now' do
58
58
  @storage.now[:foo] = 'bar'
59
59
  assert_equal 'bar', @storage[:foo]
60
60
  end
61
61
 
62
- should 'forgets values you set only for now next time' do
62
+ it 'should forgets values you set only for now next time' do
63
63
  @storage.now[:foo] = 'bar'
64
64
  @storage.sweep
65
65
  assert_nil @storage[:foo]
@@ -97,42 +97,42 @@ describe Padrino::Flash do
97
97
  end
98
98
  end
99
99
 
100
- context 'padrino application without sessions' do
100
+ describe 'padrino application without sessions' do
101
101
  before { mock_app(&routes) }
102
102
 
103
- should 'show nothing' do
103
+ it 'should show nothing' do
104
104
  get '/'
105
105
  assert_equal '{}', body
106
106
  end
107
107
 
108
- should 'set a flash' do
108
+ it 'should set a flash' do
109
109
  post '/', :foo => :bar
110
110
  assert_equal '{:foo=>"bar"}', body
111
111
  end
112
112
  end
113
113
 
114
- context 'padrino application with sessions' do
114
+ describe 'padrino application with sessions' do
115
115
  before do
116
116
  mock_app { enable :sessions; class_eval(&routes) }
117
117
  end
118
118
 
119
- should 'be sure have sessions enabled' do
119
+ it 'should be sure have sessions enabled' do
120
120
  assert @app.sessions
121
121
  get '/session'
122
122
  assert_equal 'true', body
123
123
  end
124
124
 
125
- should 'show nothing' do
125
+ it 'should show nothing' do
126
126
  get '/'
127
127
  assert_equal '{}', body
128
128
  end
129
129
 
130
- should 'set a flash' do
130
+ it 'should set a flash' do
131
131
  post '/', :foo => :bar
132
132
  assert_equal '{:foo=>"bar"}', body
133
133
  end
134
134
 
135
- should 'get a flash' do
135
+ it 'should get a flash' do
136
136
  post '/', :foo => :bar
137
137
  get '/', :key => :foo
138
138
  assert_equal 'bar', body
@@ -140,26 +140,26 @@ describe Padrino::Flash do
140
140
  assert_equal '{}', body
141
141
  end
142
142
 
143
- should 'follow redirects with flash' do
143
+ it 'should follow redirects with flash' do
144
144
  get '/redirect'
145
145
  follow_redirect!
146
146
  assert_equal 'redirected!', body
147
147
  assert 301, status
148
148
  end
149
149
 
150
- should 'set success' do
150
+ it 'should set success' do
151
151
  get '/success'
152
152
  get '/', :key => :success
153
153
  assert_equal 'Yup', body
154
154
  end
155
155
 
156
- should 'set error' do
156
+ it 'should set error' do
157
157
  get '/error'
158
158
  get '/', :key => :error
159
159
  assert_equal 'Arg', body
160
160
  end
161
161
 
162
- should 'set notice' do
162
+ it 'should set notice' do
163
163
  get '/notice'
164
164
  get '/', :key => :notice
165
165
  assert_equal 'Mmm', body
data/test/test_locale.rb CHANGED
@@ -4,7 +4,7 @@ describe "Locales" do
4
4
  Dir[File.expand_path("../../lib/padrino-core/locale/*.yml", __FILE__)].each do |file|
5
5
  base_original = YAML.load_file(file)
6
6
  name = File.basename(file, '.yml')
7
- should "should have correct locale for #{name}" do
7
+ it "should should have correct locale for #{name}" do
8
8
  base = base_original[name]['date']['formats']
9
9
  assert base['default'].present?
10
10
  assert base['short'].present?
data/test/test_logger.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/helper')
2
- require 'lumberjack'
3
2
  require 'logger'
4
3
 
5
4
  describe "PadrinoLogger" do
@@ -14,21 +13,21 @@ describe "PadrinoLogger" do
14
13
  @logger = Padrino::Logger.new(options.merge(:stream => @log))
15
14
  end
16
15
 
17
- context 'for logger functionality' do
16
+ describe 'for logger functionality' do
18
17
 
19
- context 'check stream config' do
18
+ describe 'check stream config' do
20
19
 
21
- should 'use stdout if stream is nil' do
20
+ it 'should use stdout if stream is nil' do
22
21
  Padrino::Logger::Config[:test][:stream] = nil
23
22
  Padrino::Logger.setup!
24
23
  assert_equal $stdout, Padrino.logger.log
25
24
  end
26
25
 
27
- should 'use StringIO as default for test' do
26
+ it 'should use StringIO as default for test' do
28
27
  assert_instance_of StringIO, Padrino.logger.log
29
28
  end
30
29
 
31
- should 'use a custom stream' do
30
+ it 'should use a custom stream' do
32
31
  my_stream = StringIO.new
33
32
  Padrino::Logger::Config[:test][:stream] = my_stream
34
33
  Padrino::Logger.setup!
@@ -36,17 +35,17 @@ describe "PadrinoLogger" do
36
35
  end
37
36
  end
38
37
 
39
- should 'log something' do
38
+ it 'should log something' do
40
39
  setup_logger(:log_level => :error)
41
40
  @logger.error "You log this error?"
42
41
  assert_match(/You log this error?/, @log.string)
43
42
  @logger.debug "You don't log this error!"
44
- assert_no_match(/You don't log this error!/, @log.string)
43
+ refute_match(/You don't log this error!/, @log.string)
45
44
  @logger << "Yep this can be logged"
46
45
  assert_match(/Yep this can be logged/, @log.string)
47
46
  end
48
47
 
49
- should 'respond to #write for Rack::CommonLogger' do
48
+ it 'should respond to #write for Rack::CommonLogger' do
50
49
  setup_logger(:log_level => :error)
51
50
  @logger.error "Error message"
52
51
  assert_match /Error message/, @log.string
@@ -56,7 +55,7 @@ describe "PadrinoLogger" do
56
55
  assert_match /log via alias/, @log.string
57
56
  end
58
57
 
59
- should 'log an application' do
58
+ it 'should log an application' do
60
59
  mock_app do
61
60
  enable :logging
62
61
  get("/"){ "Foo" }
@@ -66,7 +65,7 @@ describe "PadrinoLogger" do
66
65
  assert_match /GET/, Padrino.logger.log.string
67
66
  end
68
67
 
69
- should 'log an application\'s status code' do
68
+ it 'should log an application\'s status code' do
70
69
  mock_app do
71
70
  enable :logging
72
71
  get("/"){ "Foo" }
@@ -75,8 +74,8 @@ describe "PadrinoLogger" do
75
74
  assert_match /\e\[1m200\e\[0m OK/, Padrino.logger.log.string
76
75
  end
77
76
 
78
- context "static asset logging" do
79
- should 'not log static assets by default' do
77
+ describe "static asset logging" do
78
+ it 'should not log static assets by default' do
80
79
  mock_app do
81
80
  enable :logging
82
81
  get("/images/something.png"){ env["sinatra.static_file"] = '/public/images/something.png'; "Foo" }
@@ -86,7 +85,7 @@ describe "PadrinoLogger" do
86
85
  assert_match "", Padrino.logger.log.string
87
86
  end
88
87
 
89
- should 'allow turning on static assets logging' do
88
+ it 'should allow turning on static assets logging' do
90
89
  Padrino.logger.instance_eval{ @log_static = true }
91
90
  mock_app do
92
91
  enable :logging
@@ -99,7 +98,7 @@ describe "PadrinoLogger" do
99
98
  end
100
99
  end
101
100
 
102
- context "health-check requests logging" do
101
+ describe "health-check requests logging" do
103
102
  def access_to_mock_app
104
103
  mock_app do
105
104
  enable :logging
@@ -108,7 +107,7 @@ describe "PadrinoLogger" do
108
107
  get "/"
109
108
  end
110
109
 
111
- should 'output under debug level' do
110
+ it 'should output under debug level' do
112
111
  Padrino.logger.instance_eval{ @level = Padrino::Logger::Levels[:debug] }
113
112
  access_to_mock_app
114
113
  assert_match /\e\[36m DEBUG\e\[0m/, Padrino.logger.log.string
@@ -117,7 +116,7 @@ describe "PadrinoLogger" do
117
116
  access_to_mock_app
118
117
  assert_match /\e\[36m DEBUG\e\[0m/, Padrino.logger.log.string
119
118
  end
120
- should 'not output over debug level' do
119
+ it 'should not output over debug level' do
121
120
  Padrino.logger.instance_eval{ @level = Padrino::Logger::Levels[:info] }
122
121
  access_to_mock_app
123
122
  assert_equal '', Padrino.logger.log.string
@@ -130,19 +129,32 @@ describe "PadrinoLogger" do
130
129
  end
131
130
  end
132
131
 
133
- describe "alternate logger: Lumberjack" do
132
+ describe "alternate logger" do
133
+ class FancyLogger
134
+ attr_accessor :level, :log
135
+ def initialize(buf)
136
+ self.log = buf
137
+ self.level = 0
138
+ end
139
+ def add(level, text)
140
+ self.log << text
141
+ end
142
+ end
143
+
134
144
  def setup_logger
135
145
  @log = StringIO.new
136
- Padrino.logger = Lumberjack::Logger.new(@log, :level => :debug)
146
+ Padrino.logger = FancyLogger.new(@log)
137
147
  end
138
148
 
139
- should "annotate the logger to support additional Padrino fancyness" do
149
+ it 'should annotate the logger to support additional Padrino fancyness' do
140
150
  setup_logger
141
151
  Padrino.logger.debug("Debug message")
142
152
  assert_match(/Debug message/, @log.string)
153
+ Padrino.logger.exception(Exception.new 'scary message')
154
+ assert_match(/Exception - scary message/, @log.string)
143
155
  end
144
156
 
145
- should "colorize log output after colorize! is called" do
157
+ it 'should colorize log output after colorize! is called' do
146
158
  setup_logger
147
159
  Padrino.logger.colorize!
148
160
 
@@ -162,13 +174,13 @@ describe "alternate logger: stdlib logger" do
162
174
  Padrino.logger = Logger.new(@log)
163
175
  end
164
176
 
165
- should "annotate the logger to support additional Padrino fancyness" do
177
+ it 'should annotate the logger to support additional Padrino fancyness' do
166
178
  setup_logger
167
179
  Padrino.logger.debug("Debug message")
168
180
  assert_match(/Debug message/, @log.string)
169
181
  end
170
182
 
171
- should "colorize log output after colorize! is called" do
183
+ it 'should colorize log output after colorize! is called' do
172
184
  setup_logger
173
185
  Padrino.logger.colorize!
174
186
 
@@ -190,16 +202,16 @@ describe "options :colorize_logging" do
190
202
  end
191
203
  get "/"
192
204
  end
193
- context 'default' do
194
- should 'use colorize logging' do
205
+ describe 'default' do
206
+ it 'should use colorize logging' do
195
207
  Padrino::Logger.setup!
196
208
 
197
209
  access_to_mock_app
198
210
  assert_match /\e\[1m200\e\[0m OK/, Padrino.logger.log.string
199
211
  end
200
212
  end
201
- context 'set value is false' do
202
- should 'not use colorize logging' do
213
+ describe 'set value is false' do
214
+ it 'should not use colorize logging' do
203
215
  Padrino::Logger::Config[:test][:colorize_logging] = false
204
216
  Padrino::Logger.setup!
205
217