Dex_Rack 0.1.9 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/Dex_Rack.rb +32 -20
- data/lib/Dex_Rack/version.rb +1 -1
- data/lib/Dex_Rack/views/index.rb +9 -5
- data/spec/Dex_App.rb +29 -15
- data/spec/lib/main.rb +1 -12
- metadata +2 -2
data/lib/Dex_Rack.rb
CHANGED
@@ -12,6 +12,7 @@ class Dex_Rack
|
|
12
12
|
|
13
13
|
set :dex, ( Dex.db("/tmp/dex.rack.sample.db") && Dex )
|
14
14
|
|
15
|
+
enable :sessions
|
15
16
|
use Rack::Lint
|
16
17
|
|
17
18
|
set :public_folder, RACK_DIR + "/public"
|
@@ -28,14 +29,26 @@ class Dex_Rack
|
|
28
29
|
end
|
29
30
|
|
30
31
|
get "/" do
|
31
|
-
|
32
|
+
nav = page_nav( count, 10, :last)
|
33
|
+
nav[:link_to_list] = true
|
34
|
+
|
35
|
+
results = Hash[
|
36
|
+
:title => "Dex List",
|
37
|
+
:list => dex.filter(:status => 0),
|
38
|
+
:app => self
|
39
|
+
]
|
40
|
+
layout nav.merge(results), :index
|
32
41
|
end
|
33
42
|
|
34
43
|
get "/recent/:page" do | page |
|
35
|
-
recent
|
44
|
+
layout recent(page), :index
|
36
45
|
end
|
37
46
|
|
38
47
|
get '/:id' do | id |
|
48
|
+
if request.referer
|
49
|
+
session[:page_list] = request.referer
|
50
|
+
end
|
51
|
+
|
39
52
|
r = find_id( id )
|
40
53
|
pass unless r
|
41
54
|
|
@@ -66,7 +79,9 @@ class Dex_Rack
|
|
66
79
|
r = dex.filter(:id=>id).first
|
67
80
|
s = r[:status] == 0 ? 1 : 0
|
68
81
|
dex.filter(:id=>id).update(:status=>s)
|
69
|
-
|
82
|
+
|
83
|
+
page = session[:page_list] || "/#{r[:id]}"
|
84
|
+
redirect to(page), 302
|
70
85
|
end
|
71
86
|
|
72
87
|
get "/:id/delete" do | id |
|
@@ -104,28 +119,19 @@ class Dex_Rack
|
|
104
119
|
def find_id id
|
105
120
|
r = dex.filter(:id=>id).first
|
106
121
|
end
|
107
|
-
|
108
|
-
def list_recent limit, offset
|
109
|
-
dex.limit(limit, offset).to_a.reverse
|
110
|
-
end
|
111
122
|
|
112
123
|
def recent page = :last, limit = 10
|
113
124
|
nav = page_nav( count, limit, page)
|
114
125
|
|
115
126
|
return redirect(to('/'), 302) if !nav
|
116
127
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
:list => list_recent(nav[:limit], nav[:offset]),
|
125
|
-
:app => self
|
126
|
-
])
|
127
|
-
|
128
|
-
layout(vars, :index)
|
128
|
+
results = Hash[
|
129
|
+
:title => "Dex List",
|
130
|
+
:list => dex.limit(nav[:limit], nav[:offset]).to_a.reverse,
|
131
|
+
:app => self
|
132
|
+
]
|
133
|
+
|
134
|
+
nav.merge results
|
129
135
|
end
|
130
136
|
|
131
137
|
def layout vars, file_name
|
@@ -183,7 +189,7 @@ class Dex_Rack
|
|
183
189
|
offset = div * (page - 1)
|
184
190
|
offset = 0 if offset < 1
|
185
191
|
|
186
|
-
Hash[
|
192
|
+
page_nav_urls Hash[
|
187
193
|
|
188
194
|
:total => total,
|
189
195
|
:next => n,
|
@@ -197,6 +203,12 @@ class Dex_Rack
|
|
197
203
|
]
|
198
204
|
end
|
199
205
|
|
206
|
+
def page_nav_urls nav
|
207
|
+
nav[:prev_url] = "/recent/#{nav[:prev]}" if nav[:prev]
|
208
|
+
nav[:next_url] = "/recent/#{nav[:next]}" if nav[:next]
|
209
|
+
nav[:last_url] = "/recent/#{nav[:total]}"
|
210
|
+
nav
|
211
|
+
end
|
200
212
|
end # === Base =======================================================
|
201
213
|
|
202
214
|
include Base
|
data/lib/Dex_Rack/version.rb
CHANGED
data/lib/Dex_Rack/views/index.rb
CHANGED
@@ -30,12 +30,16 @@ end
|
|
30
30
|
|
31
31
|
div.recent_nav! {
|
32
32
|
|
33
|
-
if vars[:
|
34
|
-
a(:href=>vars[:
|
35
|
-
|
33
|
+
if vars[:app].request.path_info == '/'
|
34
|
+
a(:href=>vars[:last_url]) { "<< Full list" }
|
35
|
+
else
|
36
|
+
if vars[:prev_url]
|
37
|
+
a(:href=>vars[:prev_url]) { "<< Back in Time" }
|
38
|
+
end
|
36
39
|
|
37
|
-
|
38
|
-
|
40
|
+
if vars[:next_url]
|
41
|
+
a(:href=>vars[:next_url]) { "Forward In Time >>" }
|
42
|
+
end
|
39
43
|
end
|
40
44
|
|
41
45
|
}
|
data/spec/Dex_App.rb
CHANGED
@@ -42,16 +42,23 @@ describe "get /" do
|
|
42
42
|
|
43
43
|
it "renders message when there are no exceptions" do
|
44
44
|
get "/"
|
45
|
-
|
45
|
+
renders %r!No exceptions!
|
46
46
|
end
|
47
47
|
|
48
48
|
it "renders a recent list of 10" do
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
49
|
+
5.times { |i| Dex.insert except("Err: #{i}") }
|
50
|
+
|
51
|
+
get "/"
|
52
|
+
5.times { |i|
|
53
|
+
last_response.body.should.match %r!Err: #{i}!
|
54
|
+
}
|
55
|
+
end
|
56
|
+
|
57
|
+
it "renders a link to the last page of results" do
|
58
|
+
15.times { |i| Dex.insert except("Err: #{i}") }
|
59
|
+
get "/"
|
60
|
+
renders %r!/recent/2">!
|
61
|
+
renders %r!Full list\ *</a>!
|
55
62
|
end
|
56
63
|
|
57
64
|
end # === get /
|
@@ -101,16 +108,23 @@ describe "get /:id/toggle" do
|
|
101
108
|
behaves_like 'Test DB'
|
102
109
|
|
103
110
|
it "updates status of record" do
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
111
|
+
id = Dex.insert(except "rand err")
|
112
|
+
get "/#{id}/toggle"
|
113
|
+
Dex.filter(:id=>id).first[:status]
|
114
|
+
.should == 1
|
108
115
|
end
|
109
116
|
|
110
117
|
it "redirects to /:id 302" do
|
111
|
-
|
112
|
-
|
113
|
-
|
118
|
+
id = Dex.insert(except "rand err")
|
119
|
+
get "/#{id}/toggle"
|
120
|
+
redirects_to 302, "/#{id}"
|
121
|
+
end
|
122
|
+
|
123
|
+
it "redirects to PAGE_LIST 302 if set in session" do
|
124
|
+
id = Dex.insert( except "rand err")
|
125
|
+
get "/#{id}", {}, {'HTTP_REFERER'=>"/page/list"}
|
126
|
+
get "/#{id}/toggle"
|
127
|
+
redirects_to 302, "/page/list"
|
114
128
|
end
|
115
129
|
|
116
130
|
end # === put /:id/status
|
@@ -130,7 +144,7 @@ describe "get /:id/delete" do
|
|
130
144
|
Dex.insert(except("Deleted"))
|
131
145
|
r = Dex.recent(1)
|
132
146
|
get "/#{r[:id]}/delete"
|
133
|
-
|
147
|
+
redirects_to "/"
|
134
148
|
end
|
135
149
|
|
136
150
|
end # === delete /:id
|
data/spec/lib/main.rb
CHANGED
@@ -39,24 +39,13 @@ shared "Test DB" do
|
|
39
39
|
end
|
40
40
|
|
41
41
|
class Bacon::Context
|
42
|
+
|
42
43
|
include Rack::Test::Methods
|
43
44
|
|
44
45
|
def app
|
45
46
|
Dex_Rack
|
46
47
|
end
|
47
48
|
|
48
|
-
def should_render txt
|
49
|
-
last_response.should.be.ok
|
50
|
-
r = txt.respond_to?(:~) ? txt : %r!#{txt}!
|
51
|
-
last_response.body.should.match r
|
52
|
-
end
|
53
|
-
|
54
|
-
def should_redirect_to url, status = 303
|
55
|
-
last_response.status.should == status
|
56
|
-
last_response['Location'].sub( %r!http://(www.)?example.(com|org)!, '' )
|
57
|
-
.should == url
|
58
|
-
end
|
59
|
-
|
60
49
|
end # === class Bacon::Context
|
61
50
|
|
62
51
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Dex_Rack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bacon
|