caboose-cms 0.2.16 → 0.2.17
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.
- 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
|