Dex_Rack 0.1.9 → 0.2.0
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/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
|