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 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
- recent
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 page
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
- redirect to("/#{r[:id]}"), 302
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
- nav[:prev_url] = "/recent/#{nav[:prev]}" if nav[:prev]
118
- nav[:next_url] = "/recent/#{nav[:next]}" if nav[:next]
119
- nav[:next_url] = "/" if nav[:next] == nav[:total]
120
-
121
- vars = nav.merge(
122
- Hash[
123
- :title => "Dex List",
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
@@ -1,5 +1,5 @@
1
1
  require "sinatra/base"
2
2
 
3
3
  class Dex_Rack < Sinatra::Base
4
- VERSION = "0.1.9"
4
+ VERSION = "0.2.0"
5
5
  end
@@ -30,12 +30,16 @@ end
30
30
 
31
31
  div.recent_nav! {
32
32
 
33
- if vars[:prev_url]
34
- a(:href=>vars[:prev_url]) { "<< Back in Time" }
35
- end
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
- if vars[:next_url]
38
- a(:href=>vars[:next_url]) { "Forward In Time >>" }
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
- should_render %!No exceptions!
45
+ renders %r!No exceptions!
46
46
  end
47
47
 
48
48
  it "renders a recent list of 10" do
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
- }
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
- id = Dex.insert(except "rand err")
105
- get "/#{id}/toggle"
106
- Dex.filter(:id=>id).first[:status]
107
- .should == 1
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
- id = Dex.insert(except "rand err")
112
- get "/#{id}/toggle"
113
- should_redirect_to "/#{id}", 302
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
- should_redirect_to "/"
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.1.9
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 00:00:00.000000000 Z
12
+ date: 2012-05-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bacon