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.
- data/CHANGELOG +925 -0
- data/CONTRIBUTORS +93 -0
- data/PUBLIC_CHANGELOG +85 -0
- data/Rakefile +18 -28
- data/bin/merb +34 -5
- data/lib/merb-core/autoload.rb +2 -3
- data/lib/merb-core/bootloader.rb +60 -66
- data/lib/merb-core/config.rb +7 -1
- data/lib/merb-core/controller/abstract_controller.rb +35 -21
- data/lib/merb-core/controller/merb_controller.rb +15 -42
- data/lib/merb-core/controller/mixins/authentication.rb +42 -6
- data/lib/merb-core/controller/mixins/conditional_get.rb +83 -0
- data/lib/merb-core/controller/mixins/render.rb +3 -3
- data/lib/merb-core/core_ext/kernel.rb +6 -19
- data/lib/merb-core/dispatch/cookies.rb +96 -80
- data/lib/merb-core/dispatch/default_exception/views/index.html.erb +2 -0
- data/lib/merb-core/dispatch/request.rb +18 -16
- data/lib/merb-core/dispatch/router/route.rb +6 -0
- data/lib/merb-core/dispatch/router.rb +4 -1
- data/lib/merb-core/dispatch/session/container.rb +64 -0
- data/lib/merb-core/dispatch/session/cookie.rb +91 -101
- data/lib/merb-core/dispatch/session/memcached.rb +38 -174
- data/lib/merb-core/dispatch/session/memory.rb +62 -208
- data/lib/merb-core/dispatch/session/store_container.rb +145 -0
- data/lib/merb-core/dispatch/session.rb +174 -48
- data/lib/merb-core/rack/middleware/conditional_get.rb +14 -8
- data/lib/merb-core/rack/middleware/csrf.rb +73 -0
- data/lib/merb-core/rack.rb +1 -0
- data/lib/merb-core/script.rb +112 -0
- data/lib/merb-core/server.rb +2 -0
- data/lib/merb-core/tasks/merb_rake_helper.rb +25 -0
- data/lib/merb-core/test/helpers/request_helper.rb +40 -3
- data/lib/merb-core/test/run_specs.rb +4 -3
- data/lib/merb-core/vendor/facets/inflect.rb +7 -10
- data/lib/merb-core/version.rb +1 -1
- data/lib/merb-core.rb +11 -40
- data/spec/private/core_ext/kernel_spec.rb +0 -11
- data/spec/private/dispatch/fixture/log/merb_test.log +893 -0
- data/spec/private/router/fixture/log/merb_test.log +12 -1728
- data/spec/private/router/route_spec.rb +4 -0
- data/spec/private/router/router_spec.rb +8 -0
- data/spec/private/vendor/facets/plural_spec.rb +1 -1
- data/spec/private/vendor/facets/singular_spec.rb +1 -1
- data/spec/public/abstract_controller/controllers/display.rb +8 -2
- data/spec/public/abstract_controller/controllers/filters.rb +18 -0
- data/spec/public/abstract_controller/display_spec.rb +6 -2
- data/spec/public/abstract_controller/filter_spec.rb +4 -0
- data/spec/public/controller/authentication_spec.rb +114 -43
- data/spec/public/controller/base_spec.rb +8 -0
- data/spec/public/controller/conditional_get_spec.rb +100 -0
- data/spec/public/controller/config/init.rb +1 -1
- data/spec/public/controller/controllers/authentication.rb +29 -0
- data/spec/public/controller/controllers/base.rb +13 -0
- data/spec/public/controller/controllers/conditional_get.rb +35 -0
- data/spec/public/controller/controllers/cookies.rb +10 -1
- data/spec/public/controller/cookies_spec.rb +38 -9
- data/spec/public/controller/spec_helper.rb +1 -0
- data/spec/public/controller/url_spec.rb +70 -1
- data/spec/public/directory_structure/directory/log/merb_test.log +461 -0
- data/spec/public/rack/conditinal_get_middleware_spec.rb +77 -89
- data/spec/public/rack/csrf_middleware_spec.rb +70 -0
- data/spec/public/reloading/directory/log/merb_test.log +52 -0
- data/spec/public/request/request_spec.rb +19 -1
- data/spec/public/router/fixation_spec.rb +26 -4
- data/spec/public/router/fixture/log/merb_test.log +234 -30332
- data/spec/public/session/controllers/sessions.rb +52 -0
- data/spec/public/session/cookie_session_spec.rb +73 -0
- data/spec/public/session/memcached_session_spec.rb +31 -0
- data/spec/public/session/memory_session_spec.rb +28 -0
- data/spec/public/session/multiple_sessions_spec.rb +74 -0
- data/spec/public/session/no_session_spec.rb +12 -0
- data/spec/public/session/session_spec.rb +91 -0
- data/spec/public/test/controllers/spec_helper_controller.rb +2 -1
- data/spec/public/test/request_helper_spec.rb +15 -0
- data/spec/spec_helper.rb +2 -2
- metadata +23 -5
- data/spec/private/dispatch/cookies_spec.rb +0 -219
- 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
|