Dex_Rack 0.1.1 → 0.1.2
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/version.rb +1 -1
- data/lib/Dex_Rack.rb +104 -90
- data/spec/Dex_App.rb +37 -0
- metadata +2 -2
data/lib/Dex_Rack/version.rb
CHANGED
data/lib/Dex_Rack.rb
CHANGED
@@ -13,7 +13,7 @@ class Dex_Rack
|
|
13
13
|
use Rack::Lint
|
14
14
|
|
15
15
|
set :public_folder, RACK_DIR + "/public"
|
16
|
-
set :views_folder,
|
16
|
+
set :views_folder, RACK_DIR + "/views"
|
17
17
|
|
18
18
|
# use Rack::Static, \
|
19
19
|
# :urls=>%w{ /stylesheets/ /javascripts/ /images/ /index.html }, \
|
@@ -80,115 +80,129 @@ class Dex_Rack
|
|
80
80
|
redirect to("/"), 302
|
81
81
|
end
|
82
82
|
|
83
|
-
|
84
|
-
|
83
|
+
module Base # ============================================
|
84
|
+
|
85
|
+
%w{ dex dex? }.each { |m|
|
86
|
+
eval %~
|
85
87
|
def #{m} *args
|
86
88
|
settings.#{m}(*args)
|
87
89
|
end
|
88
|
-
|
89
|
-
|
90
|
+
~
|
91
|
+
}
|
90
92
|
|
91
|
-
|
92
|
-
|
93
|
+
def count
|
94
|
+
@count ||= dex.count
|
95
|
+
end
|
93
96
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
nav[:next_url] = "/recent/#{nav[:next]}" if nav[:next]
|
98
|
-
nav[:next_url] = "/" if nav[:next] == nav[:total]
|
99
|
-
|
100
|
-
vars = nav.merge(
|
101
|
-
Hash[
|
102
|
-
:title => "Dex List",
|
103
|
-
:list => dex.limit(nav[:limit], nav[:offset]).to_a.reverse,
|
104
|
-
:app => self
|
105
|
-
])
|
106
|
-
|
107
|
-
layout(vars, :index)
|
108
|
-
end
|
97
|
+
def list_recent limit, offset
|
98
|
+
dex.limit(limit, offset).to_a.reverse
|
99
|
+
end
|
109
100
|
|
110
|
-
|
111
|
-
|
112
|
-
mab = Markaby::Builder.new
|
113
|
-
file = File.join(settings.views_folder, "/layout.rb")
|
114
|
-
vars[:view_file] = File.join(settings.views_folder, "#{file_name}.rb" )
|
115
|
-
vars[:app] = self
|
116
|
-
mab.instance_eval {
|
117
|
-
eval File.read(file), nil, file, 1
|
118
|
-
}
|
119
|
-
mab.to_s
|
120
|
-
end
|
101
|
+
def recent page = :last, limit = 10
|
102
|
+
nav = page_nav( count, limit, page)
|
121
103
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
"
|
126
|
-
|
127
|
-
|
104
|
+
return redirect(to('/'), 302) if !nav
|
105
|
+
|
106
|
+
nav[:prev_url] = "/recent/#{nav[:prev]}" if nav[:prev]
|
107
|
+
nav[:next_url] = "/recent/#{nav[:next]}" if nav[:next]
|
108
|
+
nav[:next_url] = "/" if nav[:next] == nav[:total]
|
109
|
+
|
110
|
+
vars = nav.merge(
|
111
|
+
Hash[
|
112
|
+
:title => "Dex List",
|
113
|
+
:list => dex.limit(nav[:limit], nav[:offset]).to_a.reverse,
|
114
|
+
:app => self
|
115
|
+
])
|
116
|
+
|
117
|
+
layout(vars, :index)
|
118
|
+
end
|
119
|
+
|
120
|
+
def layout vars, file_name
|
121
|
+
Markaby::Builder.set(:indent, 2)
|
122
|
+
mab = Markaby::Builder.new
|
123
|
+
file = File.join(settings.views_folder, "/layout.rb")
|
124
|
+
vars[:view_file] = File.join(settings.views_folder, "#{file_name}.rb" )
|
125
|
+
vars[:app] = self
|
126
|
+
mab.instance_eval {
|
127
|
+
eval File.read(file), nil, file, 1
|
128
|
+
}
|
129
|
+
mab.to_s
|
128
130
|
end
|
129
|
-
end
|
130
131
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
132
|
+
def status_to_word num
|
133
|
+
case num
|
134
|
+
when 0
|
135
|
+
"Unresolved"
|
136
|
+
when 1
|
137
|
+
"Resolved"
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def backtrace_to_html s
|
142
|
+
last_file = nil
|
143
|
+
str = ""
|
144
|
+
s.split("\n").map { |l|
|
145
|
+
file, num, code = l.split(':')
|
146
|
+
str.<< %!
|
137
147
|
<div class="line">
|
138
148
|
<span class="num">#{CGI::escapeHTML num}</span>
|
139
149
|
<span class="code">#{CGI::escapeHTML code}</span>
|
140
150
|
</div>!
|
141
|
-
|
151
|
+
str.<< %!
|
142
152
|
<div class="file">#{CGI::escapeHTML file}</div>
|
143
|
-
|
144
|
-
|
145
|
-
last_file = file
|
146
|
-
str
|
147
|
-
}.join
|
148
|
-
end
|
153
|
+
! if file != last_file
|
149
154
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
155
|
+
last_file = file
|
156
|
+
str
|
157
|
+
}.join
|
158
|
+
end
|
159
|
+
|
160
|
+
def human_time t
|
161
|
+
target = Time.now.utc.to_i - t.to_i
|
162
|
+
if target < 61
|
163
|
+
return "<1m ago"
|
164
|
+
else
|
165
|
+
ChronicDuration.output(target, :format=>:short).sub(/\d+s\Z/, '') + " ago"
|
166
|
+
end
|
156
167
|
end
|
157
|
-
end
|
158
168
|
|
159
|
-
|
160
|
-
|
169
|
+
def page_nav count, div, page = :last
|
170
|
+
count = count.to_i
|
161
171
|
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
172
|
+
div = div.to_i
|
173
|
+
total = ( count / Float(div) ).ceil
|
174
|
+
page = total if page == :last
|
175
|
+
page = page.to_i
|
176
|
+
|
177
|
+
if count > 0
|
178
|
+
if total < 1 || page < 1 || page > total || div < 2
|
179
|
+
return nil
|
180
|
+
end
|
170
181
|
end
|
182
|
+
|
183
|
+
n = page + 1
|
184
|
+
n = nil if n > total
|
185
|
+
p = page - 1
|
186
|
+
p = nil if p < 1
|
187
|
+
offset = div * (page - 1)
|
188
|
+
offset = 0 if offset < 1
|
189
|
+
|
190
|
+
Hash[
|
191
|
+
|
192
|
+
:total => total,
|
193
|
+
:next => n,
|
194
|
+
:prev => p,
|
195
|
+
:page => page,
|
196
|
+
|
197
|
+
:count => count,
|
198
|
+
:limit => div,
|
199
|
+
:offset => offset
|
200
|
+
|
201
|
+
]
|
171
202
|
end
|
172
203
|
|
173
|
-
|
174
|
-
n = nil if n > total
|
175
|
-
p = page - 1
|
176
|
-
p = nil if p < 1
|
177
|
-
offset = div * (page - 1)
|
178
|
-
offset = 0 if offset < 1
|
179
|
-
|
180
|
-
Hash[
|
181
|
-
|
182
|
-
:total => total,
|
183
|
-
:next => n,
|
184
|
-
:prev => p,
|
185
|
-
:page => page,
|
186
|
-
|
187
|
-
:count => count,
|
188
|
-
:limit => div,
|
189
|
-
:offset => offset
|
190
|
-
|
191
|
-
]
|
192
|
-
end
|
204
|
+
end # === Base =======================================================
|
193
205
|
|
206
|
+
include Base
|
207
|
+
|
194
208
|
end # === class Dex_Rack
|
data/spec/Dex_App.rb
CHANGED
@@ -1,4 +1,41 @@
|
|
1
1
|
|
2
|
+
describe "Dex_Rack" do
|
3
|
+
|
4
|
+
it "has methods that can be overridden" do
|
5
|
+
m = Module.new {
|
6
|
+
def recent *args
|
7
|
+
'ok'
|
8
|
+
end
|
9
|
+
|
10
|
+
}
|
11
|
+
|
12
|
+
d = Class.new(Dex_Rack) {
|
13
|
+
|
14
|
+
include m
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
end
|
18
|
+
|
19
|
+
get "/new-recent" do
|
20
|
+
recent
|
21
|
+
end
|
22
|
+
|
23
|
+
}
|
24
|
+
|
25
|
+
def self.app
|
26
|
+
@app
|
27
|
+
end
|
28
|
+
|
29
|
+
@app = d
|
30
|
+
get "/new-recent"
|
31
|
+
|
32
|
+
last_response.body.should == 'ok'
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end # === Dex_Rack
|
37
|
+
|
38
|
+
|
2
39
|
describe "get /" do
|
3
40
|
|
4
41
|
behaves_like 'Test DB'
|
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.
|
4
|
+
version: 0.1.2
|
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-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bacon
|