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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NDgyNDZmMmVhZDBiMjQ2NGVmODgxMDI4NjAyYWRhMzg2NTEyNTRhNg==
4
+ MGFhZWRjYWIzMDIxNjk5YjUyNDU4NDQ1YjNmZDc5MWQ5MzdiNmM0NA==
5
5
  data.tar.gz: !binary |-
6
- N2Q3Mzg3NTBkNjIzYmYzMDlkZDc1YTlkY2I2ZTk2YjM4N2IwNTgyNQ==
6
+ N2NlNTFjNDQ4Mzc5OGI2NzIwM2VmZGZkMGRjMDlkMDA5Njg0MDExNw==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YjQyODY1ZDk1ZTI2MzgwMTBlYjRmYzA1MWM0MDJmNDQ0MGEyZTViNWM1ZWY5
10
- YzBkMzJjMWM4NDg3YmYzNWNiY2ZkZGRhY2ZkMzRiNTQ0ZDhlNDY2NGQxNTlk
11
- YzgxYjlhZjdlYTg3ZDQwYWE4YjYyNDJjZDhiODYwYmIxN2Q4ZGM=
9
+ NGUxMGY2NjQ5MWYzZjIwOTk4MmI2MDY3ZjRjMGY5NjkzM2IxOTlhZGVlNDg3
10
+ M2M2NGVlOTY1OWZhZmZiNjk4NDI2YzA5ZjU1NGY5NTI2ZDk1ZWIyMmQ5NWU5
11
+ MTYwYmUxYTMyMzE2OTBjMzVlYmZjYWUyNjJhNjM2OGUwM2VjYTM=
12
12
  data.tar.gz: !binary |-
13
- N2ExZmUzMDViMDdkNTYwODEwZjIwYTY3ZWU3NmUxOWZhMGNmNTE5OTkzMGEx
14
- ODU0YTJkNDQzY2Q4OGViYjZmOWJiNzAwNTZjYzc3NTE2MzE0OTM1MjJkNzBm
15
- YTIyYmE2YzZhZGUwMzUwZmIzNDYxMTNhNDNjMzM0OTM5ZWM5Nzc=
13
+ Yzk4NWQxN2IwODM1YWEzNzdlZTA3ZGM4ZjQyMDRjYjJjMGE0YTIwYzMyOGFh
14
+ NTliM2U5NzJjYWRkM2Q0NDdkYWNhY2Q4ZTE0NTcyNzBlZjU2NTEwNGE3ZGI3
15
+ MzMyMGVlNTg0NTU3NzUxMzAyNGEzN2U5YTRkYjg5NmUzMmQ5MTI=
@@ -141,11 +141,27 @@ module Caboose
141
141
  end
142
142
 
143
143
  def where
144
- vars = {}
144
+ sql = []
145
+ values = []
145
146
  @params.each do |k,v|
146
- vars[k] = v if !v.nil? && v.length > 0
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
- return vars
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'] ? ' &uarr;' : ' &darr;') : ''
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
@@ -1,3 +1,3 @@
1
1
  module Caboose
2
- VERSION = '0.2.16'
2
+ VERSION = '0.2.17'
3
3
  end
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.16
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