ramaze 2012.03.07 → 2012.04.14
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/.gems +12 -11
- data/.mailmap +1 -0
- data/README.md +3 -3
- data/examples/app/wiktacular/mkd/markdown/current.mkd +2 -2
- data/examples/app/wiktacular/mkd/testing/2007-07-21_18-46-01.mkd +11 -11
- data/examples/app/wiktacular/mkd/testing/2007-07-21_18-46-32.mkd +12 -12
- data/guide/general/special_thanks.md +1 -0
- data/guide/general/testing.md +188 -22
- data/lib/ramaze/cache/memcache.rb +2 -2
- data/lib/ramaze/cache/redis.rb +13 -9
- data/lib/ramaze/helper/paginate.rb +60 -15
- data/lib/ramaze/version.rb +1 -1
- data/ramaze.gemspec +1 -1
- data/spec/ramaze/cache/redis.rb +1 -5
- data/spec/ramaze/helper/paginate.rb +205 -0
- data/spec/ramaze/session/localmemcache.rb +58 -0
- data/spec/ramaze/session/lru.rb +58 -0
- data/spec/ramaze/session/memcache.rb +1 -1
- data/spec/ramaze/session/redis.rb +63 -0
- data/spec/ramaze/session/sequel.rb +60 -0
- metadata +205 -61
data/lib/ramaze/version.rb
CHANGED
data/ramaze.gemspec
CHANGED
|
@@ -7,7 +7,7 @@ path = File.expand_path('../', __FILE__)
|
|
|
7
7
|
Gem::Specification.new do |s|
|
|
8
8
|
s.name = 'ramaze'
|
|
9
9
|
s.version = Ramaze::VERSION
|
|
10
|
-
s.date = '2012-
|
|
10
|
+
s.date = '2012-04-14'
|
|
11
11
|
s.authors = ['Michael \'manveru\' Fellinger']
|
|
12
12
|
s.email = 'm.fellinger@gmail.com'
|
|
13
13
|
s.summary = 'Ramaze is a simple and modular web framework'
|
data/spec/ramaze/cache/redis.rb
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
# Copyright (c) 2011 Michael Fellinger m.fellinger@gmail.com
|
|
2
|
-
# All files in this distribution are subject to the terms of the MIT license.
|
|
3
|
-
|
|
4
1
|
require File.expand_path('../../../../spec/helper', __FILE__)
|
|
5
2
|
spec_require 'redis'
|
|
6
3
|
|
|
@@ -41,7 +38,7 @@ describe Ramaze::Cache::Redis do
|
|
|
41
38
|
should 'store with ttl' do
|
|
42
39
|
cache.store(:hello, @hello, :ttl => 0.2)
|
|
43
40
|
cache.fetch(:hello).should == @hello
|
|
44
|
-
sleep 0.
|
|
41
|
+
sleep 0.2
|
|
45
42
|
cache.fetch(:hello).should == nil
|
|
46
43
|
end
|
|
47
44
|
|
|
@@ -59,4 +56,3 @@ describe Ramaze::Cache::Redis do
|
|
|
59
56
|
klass.new.options[:answer].should == 42
|
|
60
57
|
end
|
|
61
58
|
end
|
|
62
|
-
|
|
@@ -16,6 +16,15 @@ class SpecHelperPaginateArray < Ramaze::Controller
|
|
|
16
16
|
pager.navigation
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
+
def custom_navigation
|
|
20
|
+
css = {:first => "TheFirst", :prev => "ThePrevious", :next => "TheNext",
|
|
21
|
+
:last => "TheLast", :number => "TheNumber",
|
|
22
|
+
:disabled =>"Severely Disabled", :current => "TheCurrent" }
|
|
23
|
+
|
|
24
|
+
pager = paginate(ALPHA, :css => css)
|
|
25
|
+
pager.navigation
|
|
26
|
+
end
|
|
27
|
+
|
|
19
28
|
def iteration
|
|
20
29
|
pager = paginate(ALPHA)
|
|
21
30
|
out = []
|
|
@@ -67,5 +76,201 @@ describe Ramaze::Helper::Paginate do
|
|
|
67
76
|
got = get('/array/iteration')
|
|
68
77
|
got.body.scan(/\w+/).should == SpecHelperPaginateArray::ALPHA.first(10)
|
|
69
78
|
end
|
|
79
|
+
|
|
80
|
+
it 'sets default css elements on page 1' do
|
|
81
|
+
doc = Hpricot(get('/array/navigation').body)
|
|
82
|
+
# Paginator outputs spans for disabled elements
|
|
83
|
+
# Since we're on the first page, the first two
|
|
84
|
+
# elements are spans, then a's
|
|
85
|
+
# Note that this is only valid for the first page since
|
|
86
|
+
# it doens't need lonks to first and prev
|
|
87
|
+
#
|
|
88
|
+
# Looking for spans first
|
|
89
|
+
spans = doc.search("//span")
|
|
90
|
+
first = spans.first[:class]
|
|
91
|
+
first.should == "first grey"
|
|
92
|
+
|
|
93
|
+
prev = spans[1][:class]
|
|
94
|
+
prev.should == "prev grey"
|
|
95
|
+
|
|
96
|
+
# Looking for a elements
|
|
97
|
+
as = doc.search("//a")
|
|
98
|
+
current = as.first[:class]
|
|
99
|
+
current.should == "current "
|
|
100
|
+
|
|
101
|
+
randomnumber = as[1][:class]
|
|
102
|
+
randomnumber.should == ""
|
|
103
|
+
|
|
104
|
+
nxt = as[3][:class]
|
|
105
|
+
nxt.should == "next"
|
|
106
|
+
|
|
107
|
+
last = as[4][:class]
|
|
108
|
+
last.should == "last"
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it 'sets default css elements on page 2' do
|
|
112
|
+
doc = Hpricot(get('/array/navigation?pager=2').body)
|
|
113
|
+
# Paginator outputs spans for disabled elements
|
|
114
|
+
# Since we're on the second page, none are disabled
|
|
115
|
+
# Note that this is only valid for the second page since
|
|
116
|
+
# it will have all the links, while 1 and 3 have some disabled
|
|
117
|
+
#
|
|
118
|
+
# Looking for a elements
|
|
119
|
+
as = doc.search("//a")
|
|
120
|
+
first = as.first[:class]
|
|
121
|
+
first.should == "first"
|
|
122
|
+
|
|
123
|
+
prev = as[1][:class]
|
|
124
|
+
prev.should == "prev"
|
|
125
|
+
|
|
126
|
+
pg1 = as[2][:class]
|
|
127
|
+
pg1.should == ""
|
|
128
|
+
|
|
129
|
+
current = as[3][:class]
|
|
130
|
+
current.should == "current "
|
|
131
|
+
|
|
132
|
+
pg3 = as[4][:class]
|
|
133
|
+
pg3.should == ""
|
|
134
|
+
|
|
135
|
+
nxt = as[5][:class]
|
|
136
|
+
nxt.should == "next"
|
|
137
|
+
|
|
138
|
+
last = as[6][:class]
|
|
139
|
+
last.should == "last"
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it 'sets default css elements on page 3' do
|
|
143
|
+
doc = Hpricot(get('/array/navigation?pager=3').body)
|
|
144
|
+
# Paginator outputs spans for disabled elements
|
|
145
|
+
# Since we're on the last page, last and next will be disabled
|
|
146
|
+
# Note that this is only valid for the third page
|
|
147
|
+
#
|
|
148
|
+
# Looking for a elements
|
|
149
|
+
as = doc.search("//a")
|
|
150
|
+
first = as.first[:class]
|
|
151
|
+
first.should == "first"
|
|
152
|
+
|
|
153
|
+
prev = as[1][:class]
|
|
154
|
+
prev.should == "prev"
|
|
155
|
+
|
|
156
|
+
pg1 = as[2][:class]
|
|
157
|
+
pg1.should == ""
|
|
158
|
+
|
|
159
|
+
pg2 = as[3][:class]
|
|
160
|
+
pg2.should == ""
|
|
161
|
+
|
|
162
|
+
current = as[4][:class]
|
|
163
|
+
current.should == "current "
|
|
164
|
+
|
|
165
|
+
# Looking for span elements
|
|
166
|
+
spans = doc.search("//span")
|
|
167
|
+
first = spans.first[:class]
|
|
168
|
+
first.should == "next grey"
|
|
169
|
+
|
|
170
|
+
last = spans[1][:class]
|
|
171
|
+
last.should == "last grey"
|
|
172
|
+
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
it 'sets our custom css elements for page 1' do
|
|
176
|
+
doc = Hpricot(get('/array/custom_navigation').body)
|
|
177
|
+
# Paginator outputs spans for disabled elements
|
|
178
|
+
# Since we're on the first page, the first two
|
|
179
|
+
# elements are spans, then a's
|
|
180
|
+
# Note that this is only valid for the first page since
|
|
181
|
+
# it doens't need lonks to first and prev
|
|
182
|
+
#
|
|
183
|
+
# Looking for spans first
|
|
184
|
+
spans = doc.search("//span")
|
|
185
|
+
first = spans.first[:class]
|
|
186
|
+
first.should.include? "TheFirst"
|
|
187
|
+
first.should.include? "Disabled"
|
|
188
|
+
first.should.include? "Severely"
|
|
189
|
+
|
|
190
|
+
prev = spans[1][:class]
|
|
191
|
+
prev.should.include? "Severely"
|
|
192
|
+
prev.should.include? "Disabled"
|
|
193
|
+
prev.should.include? "ThePrevious"
|
|
194
|
+
|
|
195
|
+
# Looking for a elements
|
|
196
|
+
as = doc.search("//a")
|
|
197
|
+
current = as.first[:class]
|
|
198
|
+
current.should.include? "TheCurrent"
|
|
199
|
+
current.should.include? "TheNumber"
|
|
200
|
+
|
|
201
|
+
randomnumber = as[1][:class]
|
|
202
|
+
randomnumber.should.include? "TheNumber"
|
|
203
|
+
|
|
204
|
+
nxt = as[3][:class]
|
|
205
|
+
nxt.should.include? "TheNext"
|
|
206
|
+
|
|
207
|
+
last = as[4][:class]
|
|
208
|
+
last.should.include? "TheLast"
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
it 'sets our custom css elements on page 2' do
|
|
212
|
+
doc = Hpricot(get('/array/custom_navigation?pager=2').body)
|
|
213
|
+
# Paginator outputs spans for disabled elements
|
|
214
|
+
# Since we're on the second page, none are disabled
|
|
215
|
+
# Note that this is only valid for the second page since
|
|
216
|
+
# it will have all the links, while 1 and 3 have some disabled
|
|
217
|
+
#
|
|
218
|
+
# Looking for a elements
|
|
219
|
+
as = doc.search("//a")
|
|
220
|
+
first = as.first[:class]
|
|
221
|
+
first.should == "TheFirst"
|
|
222
|
+
|
|
223
|
+
prev = as[1][:class]
|
|
224
|
+
prev.should == "ThePrevious"
|
|
225
|
+
|
|
226
|
+
pg1 = as[2][:class]
|
|
227
|
+
pg1.should == "TheNumber"
|
|
228
|
+
|
|
229
|
+
current = as[3][:class]
|
|
230
|
+
current.should == "TheCurrent TheNumber"
|
|
231
|
+
|
|
232
|
+
pg3 = as[4][:class]
|
|
233
|
+
pg3.should == "TheNumber"
|
|
234
|
+
|
|
235
|
+
nxt = as[5][:class]
|
|
236
|
+
nxt.should == "TheNext"
|
|
237
|
+
|
|
238
|
+
last = as[6][:class]
|
|
239
|
+
last.should == "TheLast"
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
it 'sets our custom css elements on page 3' do
|
|
243
|
+
doc = Hpricot(get('/array/custom_navigation?pager=3').body)
|
|
244
|
+
# Paginator outputs spans for disabled elements
|
|
245
|
+
# Since we're on the last page, last and next will be disabled
|
|
246
|
+
# Note that this is only valid for the third page
|
|
247
|
+
#
|
|
248
|
+
# Looking for a elements
|
|
249
|
+
as = doc.search("//a")
|
|
250
|
+
first = as.first[:class]
|
|
251
|
+
first.should == "TheFirst"
|
|
252
|
+
|
|
253
|
+
prev = as[1][:class]
|
|
254
|
+
prev.should == "ThePrevious"
|
|
255
|
+
|
|
256
|
+
pg1 = as[2][:class]
|
|
257
|
+
pg1.should == "TheNumber"
|
|
258
|
+
|
|
259
|
+
pg2 = as[3][:class]
|
|
260
|
+
pg2.should == "TheNumber"
|
|
261
|
+
|
|
262
|
+
current = as[4][:class]
|
|
263
|
+
current.should == "TheCurrent TheNumber"
|
|
264
|
+
|
|
265
|
+
# Looking for span elements
|
|
266
|
+
spans = doc.search("//span")
|
|
267
|
+
first = spans.first[:class]
|
|
268
|
+
first.should == "TheNext Severely Disabled"
|
|
269
|
+
|
|
270
|
+
last = spans[1][:class]
|
|
271
|
+
last.should == "TheLast Severely Disabled"
|
|
272
|
+
|
|
273
|
+
end
|
|
274
|
+
|
|
70
275
|
end
|
|
71
276
|
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
require File.expand_path('../../../../spec/helper', __FILE__)
|
|
2
|
+
spec_require 'sequel'
|
|
3
|
+
|
|
4
|
+
class SpecSession < Ramaze::Controller
|
|
5
|
+
map '/'
|
|
6
|
+
engine :None
|
|
7
|
+
|
|
8
|
+
def index
|
|
9
|
+
'No session here'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def init
|
|
13
|
+
session[:counter] = 0
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def view
|
|
17
|
+
session[:counter]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def increment
|
|
21
|
+
session[:counter] += 1
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def decrement
|
|
25
|
+
session[:counter] -= 1
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def reset
|
|
29
|
+
session.clear
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
Ramaze::Cache.options.session = Ramaze::Cache::LocalMemCache
|
|
34
|
+
|
|
35
|
+
describe 'Sessions with Ramaze::Cache::LocalMemCache' do
|
|
36
|
+
behaves_like :rack_test
|
|
37
|
+
|
|
38
|
+
should 'initiate session as needed' do
|
|
39
|
+
get '/'
|
|
40
|
+
last_response.body.should == 'No session here'
|
|
41
|
+
last_response['Set-Cookie'].should == nil
|
|
42
|
+
|
|
43
|
+
get('/init')
|
|
44
|
+
last_response.body.should == '0'
|
|
45
|
+
|
|
46
|
+
1.upto(10) do |n|
|
|
47
|
+
get('/increment').body.should == n.to_s
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
get('/reset')
|
|
51
|
+
get('/view').body.should == ''
|
|
52
|
+
get('/init').body.should == '0'
|
|
53
|
+
|
|
54
|
+
-1.downto(-10) do |n|
|
|
55
|
+
get('/decrement').body.should == n.to_s
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
require File.expand_path('../../../../spec/helper', __FILE__)
|
|
2
|
+
spec_require 'sequel'
|
|
3
|
+
|
|
4
|
+
class SpecSession < Ramaze::Controller
|
|
5
|
+
map '/'
|
|
6
|
+
engine :None
|
|
7
|
+
|
|
8
|
+
def index
|
|
9
|
+
'No session here'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def init
|
|
13
|
+
session[:counter] = 0
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def view
|
|
17
|
+
session[:counter]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def increment
|
|
21
|
+
session[:counter] += 1
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def decrement
|
|
25
|
+
session[:counter] -= 1
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def reset
|
|
29
|
+
session.clear
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
Ramaze::Cache.options.session = Ramaze::Cache::LRU
|
|
34
|
+
|
|
35
|
+
describe 'Sessions with Ramaze::Cache::LRU' do
|
|
36
|
+
behaves_like :rack_test
|
|
37
|
+
|
|
38
|
+
should 'initiate session as needed' do
|
|
39
|
+
get '/'
|
|
40
|
+
last_response.body.should == 'No session here'
|
|
41
|
+
last_response['Set-Cookie'].should == nil
|
|
42
|
+
|
|
43
|
+
get('/init')
|
|
44
|
+
last_response.body.should == '0'
|
|
45
|
+
|
|
46
|
+
1.upto(10) do |n|
|
|
47
|
+
get('/increment').body.should == n.to_s
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
get('/reset')
|
|
51
|
+
get('/view').body.should == ''
|
|
52
|
+
get('/init').body.should == '0'
|
|
53
|
+
|
|
54
|
+
-1.downto(-10) do |n|
|
|
55
|
+
get('/decrement').body.should == n.to_s
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
require File.expand_path('../../../../spec/helper', __FILE__)
|
|
2
|
+
spec_require 'redis'
|
|
3
|
+
|
|
4
|
+
spec_precondition 'Redis is running' do
|
|
5
|
+
cache = Redis.new
|
|
6
|
+
cache['active'] = true
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
class SpecSession < Ramaze::Controller
|
|
10
|
+
map '/'
|
|
11
|
+
engine :None
|
|
12
|
+
|
|
13
|
+
def index
|
|
14
|
+
'No session here'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def init
|
|
18
|
+
session[:counter] = 0
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def view
|
|
22
|
+
session[:counter]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def increment
|
|
26
|
+
session[:counter] += 1
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def decrement
|
|
30
|
+
session[:counter] -= 1
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def reset
|
|
34
|
+
session.clear
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
Ramaze::Cache.options.session = Ramaze::Cache::Redis
|
|
39
|
+
|
|
40
|
+
describe 'Sessions with Ramaze::Cache::Redis' do
|
|
41
|
+
behaves_like :rack_test
|
|
42
|
+
|
|
43
|
+
should 'initiate session as needed' do
|
|
44
|
+
get '/'
|
|
45
|
+
last_response.body.should == 'No session here'
|
|
46
|
+
last_response['Set-Cookie'].should == nil
|
|
47
|
+
|
|
48
|
+
get('/init')
|
|
49
|
+
last_response.body.should == '0'
|
|
50
|
+
|
|
51
|
+
1.upto(10) do |n|
|
|
52
|
+
get('/increment').body.should == n.to_s
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
get('/reset')
|
|
56
|
+
get('/view').body.should == ''
|
|
57
|
+
get('/init').body.should == '0'
|
|
58
|
+
|
|
59
|
+
-1.downto(-10) do |n|
|
|
60
|
+
get('/decrement').body.should == n.to_s
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require File.expand_path('../../../../spec/helper', __FILE__)
|
|
2
|
+
spec_require 'sequel'
|
|
3
|
+
|
|
4
|
+
class SpecSession < Ramaze::Controller
|
|
5
|
+
map '/'
|
|
6
|
+
engine :None
|
|
7
|
+
|
|
8
|
+
def index
|
|
9
|
+
'No session here'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def init
|
|
13
|
+
session[:counter] = 0
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def view
|
|
17
|
+
session[:counter]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def increment
|
|
21
|
+
session[:counter] += 1
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def decrement
|
|
25
|
+
session[:counter] -= 1
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def reset
|
|
29
|
+
session.clear
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
Ramaze::Cache.options.session = Ramaze::Cache::Sequel.using(
|
|
34
|
+
:connection => Sequel.sqlite(':memory:')
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
describe 'Sessions with Ramaze::Cache::Sequel' do
|
|
38
|
+
behaves_like :rack_test
|
|
39
|
+
|
|
40
|
+
should 'initiate session as needed' do
|
|
41
|
+
get '/'
|
|
42
|
+
last_response.body.should == 'No session here'
|
|
43
|
+
last_response['Set-Cookie'].should == nil
|
|
44
|
+
|
|
45
|
+
get('/init')
|
|
46
|
+
last_response.body.should == '0'
|
|
47
|
+
|
|
48
|
+
1.upto(10) do |n|
|
|
49
|
+
get('/increment').body.should == n.to_s
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
get('/reset')
|
|
53
|
+
get('/view').body.should == ''
|
|
54
|
+
get('/init').body.should == '0'
|
|
55
|
+
|
|
56
|
+
-1.downto(-10) do |n|
|
|
57
|
+
get('/decrement').body.should == n.to_s
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|