caboose-cms 0.2.16 → 0.2.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/app/models/caboose/page_bar_generator.rb +19 -3
- data/app/models/caboose/pager.rb +166 -0
- data/lib/caboose/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MGFhZWRjYWIzMDIxNjk5YjUyNDU4NDQ1YjNmZDc5MWQ5MzdiNmM0NA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
N2NlNTFjNDQ4Mzc5OGI2NzIwM2VmZGZkMGRjMDlkMDA5Njg0MDExNw==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NGUxMGY2NjQ5MWYzZjIwOTk4MmI2MDY3ZjRjMGY5NjkzM2IxOTlhZGVlNDg3
|
10
|
+
M2M2NGVlOTY1OWZhZmZiNjk4NDI2YzA5ZjU1NGY5NTI2ZDk1ZWIyMmQ5NWU5
|
11
|
+
MTYwYmUxYTMyMzE2OTBjMzVlYmZjYWUyNjJhNjM2OGUwM2VjYTM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
Yzk4NWQxN2IwODM1YWEzNzdlZTA3ZGM4ZjQyMDRjYjJjMGE0YTIwYzMyOGFh
|
14
|
+
NTliM2U5NzJjYWRkM2Q0NDdkYWNhY2Q4ZTE0NTcyNzBlZjU2NTEwNGE3ZGI3
|
15
|
+
MzMyMGVlNTg0NTU3NzUxMzAyNGEzN2U5YTRkYjg5NmUzMmQ5MTI=
|
@@ -141,11 +141,27 @@ module Caboose
|
|
141
141
|
end
|
142
142
|
|
143
143
|
def where
|
144
|
-
|
144
|
+
sql = []
|
145
|
+
values = []
|
145
146
|
@params.each do |k,v|
|
146
|
-
|
147
|
+
next if v.nil? || v.length == 0
|
148
|
+
if k.ends_with?('_gte')
|
149
|
+
sql << "`#{k[0..-5]}` >= ?"
|
150
|
+
elsif k.ends_with?('_gt')
|
151
|
+
sql << "`#{k[0..-4]}` > ?"
|
152
|
+
elsif k.ends_with?('_lte')
|
153
|
+
sql << "`#{k[0..-5]}` <= ?"
|
154
|
+
elsif k.ends_with?('_lt')
|
155
|
+
sql << "`#{k[0..-4]}` < ?"
|
156
|
+
else
|
157
|
+
sql << "`#{k}` = ?"
|
158
|
+
end
|
159
|
+
values << v
|
147
160
|
end
|
148
|
-
|
161
|
+
sql_str = sql.join(' and ')
|
162
|
+
sql = [sql_str]
|
163
|
+
values.each { |v| sql << v }
|
164
|
+
return sql
|
149
165
|
end
|
150
166
|
|
151
167
|
def limit
|
@@ -0,0 +1,166 @@
|
|
1
|
+
module Caboose
|
2
|
+
class Pager
|
3
|
+
#
|
4
|
+
# Parameters:
|
5
|
+
# params: array of key/value pairs that must include the following:
|
6
|
+
# base_url: url without querystring onto which the parameters are added.
|
7
|
+
# itemCount: Total number of items.
|
8
|
+
#
|
9
|
+
# In addition, the following parameters are not required but may be
|
10
|
+
# included in the array:
|
11
|
+
# itemsPerPage: Number of items you want to show per page. Defaults to 10 if not present.
|
12
|
+
# page: Current page number. Defaults to 0 if not present.
|
13
|
+
#
|
14
|
+
attr_accessor :params, :options
|
15
|
+
|
16
|
+
def initialize(post_get, params = nil, options = nil)
|
17
|
+
|
18
|
+
params = {} if params.nil?
|
19
|
+
options = {} if options.nil?
|
20
|
+
|
21
|
+
# Note: a few keys are required:
|
22
|
+
# base_url, page, itemCount, itemsPerPage
|
23
|
+
@params = {}
|
24
|
+
@options = {
|
25
|
+
'model' => '',
|
26
|
+
'sort' => '',
|
27
|
+
'desc' => false,
|
28
|
+
'base_url' => '',
|
29
|
+
'page' => 1,
|
30
|
+
'item_count' => 0,
|
31
|
+
'items_per_page' => 10
|
32
|
+
}
|
33
|
+
params.each { |key, val| @params[key] = val }
|
34
|
+
options.each { |key, val| @options[key] = val }
|
35
|
+
@params.each { |key, val| @params[key] = post_get[key].nil? ? val : post_get[key] }
|
36
|
+
@options.each { |key, val| @options[key] = post_get[key].nil? ? val : post_get[key] }
|
37
|
+
@options['item_count'] = @options['model'].constantize.where(where).count
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
def ok(val)
|
42
|
+
return false if val.nil?
|
43
|
+
return true if val.is_a? Array
|
44
|
+
return true if val.is_a? Hash
|
45
|
+
return true if val.is_a? Integer
|
46
|
+
return true if val.is_a? Fixnum
|
47
|
+
return true if val.is_a? Float
|
48
|
+
return true if val.is_a? Bignum
|
49
|
+
return true if val.is_a? TrueClass
|
50
|
+
return true if val.is_a? FalseClass
|
51
|
+
return false if val == ""
|
52
|
+
return true
|
53
|
+
end
|
54
|
+
|
55
|
+
def items
|
56
|
+
return @options['model'].constantize.where(where).limit(limit).offset(offset).reorder(reorder).all
|
57
|
+
end
|
58
|
+
|
59
|
+
def generate
|
60
|
+
|
61
|
+
# Check for necessary parameter values
|
62
|
+
return false if !ok(@options['base_url']) # Error: base_url is required for the page bar generator to work.
|
63
|
+
return false if !ok(@options['item_count']) # Error: itemCount is required for the page bar generator to work.
|
64
|
+
|
65
|
+
# Set default parameter values if not present
|
66
|
+
@options['items_per_page'] = 10 if @options["items_per_page"].nil?
|
67
|
+
@options['page'] = 1 if @options["page"].nil?
|
68
|
+
|
69
|
+
# Variables to make the search form work
|
70
|
+
vars = get_vars()
|
71
|
+
page = @options["page"].to_i
|
72
|
+
|
73
|
+
Caboose.log(@options)
|
74
|
+
|
75
|
+
# Max links to show (must be odd)
|
76
|
+
total_links = 5
|
77
|
+
prev_page = page - 1
|
78
|
+
next_page = page + 1
|
79
|
+
total_pages = (@options['item_count'].to_f / @options['items_per_page'].to_f).ceil
|
80
|
+
|
81
|
+
if (total_pages < total_links)
|
82
|
+
start = 1
|
83
|
+
stop = total_pages
|
84
|
+
else
|
85
|
+
start = page - (total_links/2).floor
|
86
|
+
start = 1 if start < 1
|
87
|
+
stop = start + total_links - 1
|
88
|
+
|
89
|
+
if (stop > total_pages)
|
90
|
+
stop = total_pages
|
91
|
+
start = stop - total_links
|
92
|
+
start = 1 if start < 1
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
base_url = @params['base_url']
|
97
|
+
str = ''
|
98
|
+
str << "<p>Results: showing page #{page} of #{total_pages}</p>\n"
|
99
|
+
|
100
|
+
if (total_pages > 1)
|
101
|
+
str << "<div class='page_links'>\n"
|
102
|
+
if (page > 1)
|
103
|
+
str << "<a href='#{base_url}?#{vars}&page=#{prev_page}'>Previous</a>"
|
104
|
+
end
|
105
|
+
for i in start..stop
|
106
|
+
if (page != i)
|
107
|
+
str << "<a href='#{base_url}?#{vars}&page=#{i}'>#{i}</a>"
|
108
|
+
else
|
109
|
+
str << "<span class='current_page'>#{i}</span>"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
if (page < total_pages)
|
113
|
+
str << "<a href='#{base_url}?#{vars}&page=#{next_page}'>Next</a>"
|
114
|
+
end
|
115
|
+
str << "</div>\n"
|
116
|
+
end
|
117
|
+
|
118
|
+
return str
|
119
|
+
end
|
120
|
+
|
121
|
+
def get_vars()
|
122
|
+
vars = []
|
123
|
+
@params.each do |k,v|
|
124
|
+
vars.push("#{k}=#{v}") if !v.nil? && v.length > 0
|
125
|
+
end
|
126
|
+
return URI.escape(vars.join('&'))
|
127
|
+
end
|
128
|
+
|
129
|
+
def sortable_table_headings(cols)
|
130
|
+
vars = get_vars()
|
131
|
+
str = ''
|
132
|
+
|
133
|
+
# key = sort field, value = text to display
|
134
|
+
cols.each do |sort, text|
|
135
|
+
desc = @options['sort'] == sort ? (@options['desc'] ? 0 : 1) : 0
|
136
|
+
arrow = @options['sort'] == sort ? (@options['desc'] ? ' ↑' : ' ↓') : ''
|
137
|
+
link = @options['base_url'] + "?#{vars}&sort=#{sort}&desc=#{desc}"
|
138
|
+
str += "<th><a href='#{link}'>#{text}#{arrow}</a></th>\n"
|
139
|
+
end
|
140
|
+
return str
|
141
|
+
end
|
142
|
+
|
143
|
+
def where
|
144
|
+
vars = {}
|
145
|
+
@params.each do |k,v|
|
146
|
+
vars[k] = v if !v.nil? && v.length > 0
|
147
|
+
end
|
148
|
+
return vars
|
149
|
+
end
|
150
|
+
|
151
|
+
def limit
|
152
|
+
return @options['items_per_page'].to_i
|
153
|
+
end
|
154
|
+
|
155
|
+
def offset
|
156
|
+
return (@options['page'].to_i - 1) * @options['items_per_page'].to_i
|
157
|
+
end
|
158
|
+
|
159
|
+
def reorder
|
160
|
+
if (!@options['sort'].nil? && @options['sort'].length > 0)
|
161
|
+
return @options['sort']
|
162
|
+
end
|
163
|
+
return "id"
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
data/lib/caboose/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caboose-cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Barry
|
@@ -180,6 +180,7 @@ files:
|
|
180
180
|
- app/models/caboose/page_bar_generator.rb
|
181
181
|
- app/models/caboose/page_permission.rb
|
182
182
|
- app/models/caboose/page_plugin.rb
|
183
|
+
- app/models/caboose/pager.rb
|
183
184
|
- app/models/caboose/permission.rb
|
184
185
|
- app/models/caboose/permission_plugin.rb
|
185
186
|
- app/models/caboose/role.rb
|