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 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