merb-core 0.9.5 → 0.9.6

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 (78) hide show
  1. data/CHANGELOG +925 -0
  2. data/CONTRIBUTORS +93 -0
  3. data/PUBLIC_CHANGELOG +85 -0
  4. data/Rakefile +18 -28
  5. data/bin/merb +34 -5
  6. data/lib/merb-core/autoload.rb +2 -3
  7. data/lib/merb-core/bootloader.rb +60 -66
  8. data/lib/merb-core/config.rb +7 -1
  9. data/lib/merb-core/controller/abstract_controller.rb +35 -21
  10. data/lib/merb-core/controller/merb_controller.rb +15 -42
  11. data/lib/merb-core/controller/mixins/authentication.rb +42 -6
  12. data/lib/merb-core/controller/mixins/conditional_get.rb +83 -0
  13. data/lib/merb-core/controller/mixins/render.rb +3 -3
  14. data/lib/merb-core/core_ext/kernel.rb +6 -19
  15. data/lib/merb-core/dispatch/cookies.rb +96 -80
  16. data/lib/merb-core/dispatch/default_exception/views/index.html.erb +2 -0
  17. data/lib/merb-core/dispatch/request.rb +18 -16
  18. data/lib/merb-core/dispatch/router/route.rb +6 -0
  19. data/lib/merb-core/dispatch/router.rb +4 -1
  20. data/lib/merb-core/dispatch/session/container.rb +64 -0
  21. data/lib/merb-core/dispatch/session/cookie.rb +91 -101
  22. data/lib/merb-core/dispatch/session/memcached.rb +38 -174
  23. data/lib/merb-core/dispatch/session/memory.rb +62 -208
  24. data/lib/merb-core/dispatch/session/store_container.rb +145 -0
  25. data/lib/merb-core/dispatch/session.rb +174 -48
  26. data/lib/merb-core/rack/middleware/conditional_get.rb +14 -8
  27. data/lib/merb-core/rack/middleware/csrf.rb +73 -0
  28. data/lib/merb-core/rack.rb +1 -0
  29. data/lib/merb-core/script.rb +112 -0
  30. data/lib/merb-core/server.rb +2 -0
  31. data/lib/merb-core/tasks/merb_rake_helper.rb +25 -0
  32. data/lib/merb-core/test/helpers/request_helper.rb +40 -3
  33. data/lib/merb-core/test/run_specs.rb +4 -3
  34. data/lib/merb-core/vendor/facets/inflect.rb +7 -10
  35. data/lib/merb-core/version.rb +1 -1
  36. data/lib/merb-core.rb +11 -40
  37. data/spec/private/core_ext/kernel_spec.rb +0 -11
  38. data/spec/private/dispatch/fixture/log/merb_test.log +893 -0
  39. data/spec/private/router/fixture/log/merb_test.log +12 -1728
  40. data/spec/private/router/route_spec.rb +4 -0
  41. data/spec/private/router/router_spec.rb +8 -0
  42. data/spec/private/vendor/facets/plural_spec.rb +1 -1
  43. data/spec/private/vendor/facets/singular_spec.rb +1 -1
  44. data/spec/public/abstract_controller/controllers/display.rb +8 -2
  45. data/spec/public/abstract_controller/controllers/filters.rb +18 -0
  46. data/spec/public/abstract_controller/display_spec.rb +6 -2
  47. data/spec/public/abstract_controller/filter_spec.rb +4 -0
  48. data/spec/public/controller/authentication_spec.rb +114 -43
  49. data/spec/public/controller/base_spec.rb +8 -0
  50. data/spec/public/controller/conditional_get_spec.rb +100 -0
  51. data/spec/public/controller/config/init.rb +1 -1
  52. data/spec/public/controller/controllers/authentication.rb +29 -0
  53. data/spec/public/controller/controllers/base.rb +13 -0
  54. data/spec/public/controller/controllers/conditional_get.rb +35 -0
  55. data/spec/public/controller/controllers/cookies.rb +10 -1
  56. data/spec/public/controller/cookies_spec.rb +38 -9
  57. data/spec/public/controller/spec_helper.rb +1 -0
  58. data/spec/public/controller/url_spec.rb +70 -1
  59. data/spec/public/directory_structure/directory/log/merb_test.log +461 -0
  60. data/spec/public/rack/conditinal_get_middleware_spec.rb +77 -89
  61. data/spec/public/rack/csrf_middleware_spec.rb +70 -0
  62. data/spec/public/reloading/directory/log/merb_test.log +52 -0
  63. data/spec/public/request/request_spec.rb +19 -1
  64. data/spec/public/router/fixation_spec.rb +26 -4
  65. data/spec/public/router/fixture/log/merb_test.log +234 -30332
  66. data/spec/public/session/controllers/sessions.rb +52 -0
  67. data/spec/public/session/cookie_session_spec.rb +73 -0
  68. data/spec/public/session/memcached_session_spec.rb +31 -0
  69. data/spec/public/session/memory_session_spec.rb +28 -0
  70. data/spec/public/session/multiple_sessions_spec.rb +74 -0
  71. data/spec/public/session/no_session_spec.rb +12 -0
  72. data/spec/public/session/session_spec.rb +91 -0
  73. data/spec/public/test/controllers/spec_helper_controller.rb +2 -1
  74. data/spec/public/test/request_helper_spec.rb +15 -0
  75. data/spec/spec_helper.rb +2 -2
  76. metadata +23 -5
  77. data/spec/private/dispatch/cookies_spec.rb +0 -219
  78. data/spec/private/dispatch/session_mixin_spec.rb +0 -47
@@ -1,219 +0,0 @@
1
- require File.join(File.dirname(__FILE__), "spec_helper")
2
- Merb.start :environment => 'test'
3
- module CookiesSpecModule
4
-
5
- def cookie_time(time)
6
- time.gmtime.strftime(Merb::Const::COOKIE_EXPIRATION_FORMAT)
7
- end
8
- end
9
-
10
- describe Merb::Cookies do
11
- include CookiesSpecModule
12
-
13
- before do
14
- @_cookies = Mash.new
15
- @_headers = {}
16
- @cookies = Merb::Cookies.new(@_cookies, @_headers)
17
- end
18
-
19
- it "should respond to []" do
20
- @cookies.should respond_to(:[])
21
- end
22
-
23
- it "should respond to []=" do
24
- @cookies.should respond_to(:[]=)
25
- end
26
-
27
- it "should respond to delete" do
28
- @cookies.should respond_to(:delete)
29
- end
30
-
31
-
32
- describe "#set_cookie" do
33
- before :each do
34
- @expires = Time.now + 2 * (60*60*24*7)
35
- @escaped_expires = cookie_time(@expires)
36
- end
37
-
38
- it "accepts simple cookies that expire at end of session" do
39
- @cookies[:foo] = 'bar'
40
-
41
- hdr = @_headers['Set-Cookie'].first
42
- hdr.should =~ /foo=bar;/
43
- hdr.should =~ / path=\/;/
44
- @cookies[:foo].should == 'bar'
45
- end
46
-
47
- it "uses Mash, not Hash" do
48
- @cookies[:dozen] = {
49
- :value => 'twelve',
50
- :expires => @expires
51
- }
52
-
53
- @cookies[:dozen].should == 'twelve'
54
- @cookies['dozen'].should == 'twelve'
55
- end
56
-
57
- it "accepts cookies with expiry dates" do
58
- @cookies[:dozen] = {
59
- :value => 'twelve',
60
- :expires => @expires
61
- }
62
-
63
- hdr = @_headers['Set-Cookie'].first
64
-
65
- hdr.should =~ /dozen=twelve;/
66
- hdr.should =~ / expires=#{cookie_time(@expires)};/
67
- end
68
-
69
-
70
- it "accepts cookies with domain" do
71
- domain = 'wiki.merbivore.com'
72
-
73
- @cookies[:dozen] = {
74
- :value => 'twelve',
75
- :expires => @expires,
76
- :domain => domain
77
- }
78
-
79
- hdr = @_headers['Set-Cookie'].first
80
-
81
- hdr.should =~ /dozen=twelve;/
82
- hdr.should =~ / domain=#{domain};/
83
- end
84
-
85
-
86
- it "uses / as default path" do
87
- Merb::Controller.should_receive(:_session_cookie_domain).and_return("session.cookie.domain")
88
- @cookies.set_cookie(:dozen, 'twelve', :expires => @expires)
89
-
90
- hdr = @_headers['Set-Cookie'].first
91
- hdr.should =~ / domain=session.cookie.domain;/
92
- end
93
-
94
-
95
- it "uses / as default path" do
96
- @cookies[:dozen] = {
97
- :value => 'twelve',
98
- :expires => @expires
99
- }
100
-
101
- hdr = @_headers['Set-Cookie'].first
102
- hdr.should =~ / path=\/;/
103
- end
104
-
105
-
106
- it "accepts cookies with path" do
107
- cookie_path = '/some/resource'
108
-
109
- @cookies[:dozen] = {
110
- :value => 'twelve',
111
- :expires => @expires,
112
- :path => cookie_path
113
- }
114
-
115
- hdr = @_headers['Set-Cookie'].first
116
- hdr.should =~ /dozen=twelve;/
117
- hdr.should =~ / path=#{cookie_path};/
118
- end
119
-
120
-
121
- it "accepts cookies with security flag" do
122
- @cookies[:dozen] = {
123
- :value => 'twelve',
124
- :expires => @expires,
125
- :secure => true
126
- }
127
-
128
- hdr = @_headers['Set-Cookie'].first
129
- hdr.should =~ /dozen=twelve;/
130
- hdr.should =~ / expires=#{cookie_time(@expires)};/
131
- hdr.should =~ / path=\/;/
132
- hdr.should =~ / secure$/
133
- end
134
-
135
- it "accepts cookies with security flag set to false" do
136
- @cookies[:dozen] = {
137
- :value => 'twelve',
138
- :expires => @expires,
139
- :secure => false
140
- }
141
-
142
- hdr = @_headers['Set-Cookie'].first
143
- hdr.should =~ /dozen=twelve;/
144
- hdr.should =~ / expires=#{cookie_time(@expires)};/
145
- hdr.should =~ / path=\/;/
146
- hdr.should =~ /;$/
147
- hdr.should_not =~ /secure/
148
- end
149
-
150
-
151
- it "accepts multiple cookies" do
152
- @cookies[:foo] = 'bar'
153
- @cookies[:dozen] = {
154
- :value => 'twelve',
155
- :expires => @expires
156
- }
157
-
158
- first = @_headers['Set-Cookie'].first
159
- second = @_headers['Set-Cookie'].last
160
-
161
- first.should =~ /foo=bar;/
162
- first.should =~ / path=\//
163
- second.should =~ /dozen=twelve;/
164
- second.should =~ / path=\//
165
- second.should =~ / expires=#{cookie_time(@expires)};/
166
-
167
- @cookies[:dozen].should == 'twelve'
168
- @cookies['dozen'].should == 'twelve'
169
- @cookies[:foo].should == 'bar'
170
- @cookies['foo'].should == 'bar'
171
- end
172
-
173
- it "leaves the value unescaped in the current request" do
174
- @cookies[:foo] = "100%"
175
-
176
- hdr = @_headers['Set-Cookie'].first
177
- hdr.should =~ /foo=100%25/
178
-
179
- @cookies[:foo].should == '100%'
180
- @cookies['foo'].should == '100%'
181
- end
182
-
183
- it "gives access to currently saved cookies" do
184
- @_cookies[:original] = 'accessible'
185
- @cookies[:original].should == 'accessible'
186
-
187
- @cookies[:foo] = 'bar'
188
- @cookies[:foo].should == 'bar'
189
- @cookies[:original].should == 'accessible'
190
- end
191
-
192
- it "overwrites old cookies with new cookies" do
193
- @_cookies[:foo] = 'bar'
194
- @cookies[:foo].should == 'bar'
195
-
196
- @cookies[:foo] = 'new'
197
- @cookies[:foo].should == 'new'
198
- end
199
- end
200
-
201
-
202
- describe "#delete" do
203
- it "allows deleting of cookies" do
204
- @_cookies[:foo] = 'bar'
205
- @cookies[:foo].should == 'bar'
206
-
207
- @cookies.delete(:foo)
208
- @cookies[:foo].should == nil
209
- end
210
-
211
- it 'sets cookie expiration time in the past' do
212
- @_cookies[:foo] = 'bar'
213
- @cookies[:foo].should == 'bar'
214
-
215
- @cookies.delete(:foo)
216
- @_headers['Set-Cookie'].first.should =~ /#{cookie_time(Time.at(0))}/
217
- end
218
- end
219
- end
@@ -1,47 +0,0 @@
1
- require File.join(File.dirname(__FILE__), "spec_helper")
2
- Merb.start :environment => "test"
3
-
4
- describe Merb::SessionMixin do
5
-
6
- before :each do
7
- @first_session_finalizer_executed = false
8
- @second_session_finalizer_executed = false
9
-
10
- @first_session_persisting_callback_executed = false
11
- @second_session_persisting_callback_executed = false
12
- end
13
-
14
- it "stores session finalizing callbacks in a collection" do
15
- Merb::SessionMixin.finalize_session_exception_callbacks do
16
- @first_session_finalizer_executed = true
17
- end
18
-
19
- Merb::SessionMixin.finalize_session_exception_callbacks do
20
- @second_session_finalizer_executed = true
21
- end
22
-
23
- Merb::SessionMixin.finalize_session_exception_callbacks.each { |callback| callback.call }
24
-
25
- @first_session_finalizer_executed.should == true
26
- @second_session_finalizer_executed.should == true
27
- end
28
-
29
- it "stores session persist callbacks in a collection" do
30
- Merb::SessionMixin.persist_exception_callbacks do
31
- @first_session_finalizer_executed = true
32
- end
33
-
34
- Merb::SessionMixin.persist_exception_callbacks do
35
- @second_session_finalizer_executed = true
36
- end
37
-
38
- Merb::SessionMixin.persist_exception_callbacks.each { |callback| callback.call }
39
-
40
- @first_session_finalizer_executed.should == true
41
- @second_session_finalizer_executed.should == true
42
- end
43
-
44
- it "generates random 32 character uuid string" do
45
- Merb::SessionMixin.rand_uuid.size.should == 32
46
- end
47
- end