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