magic_grid 0.11.0 → 0.11.1
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/magic_grid/collection.rb +11 -1
- data/lib/magic_grid/definition.rb +8 -3
- data/lib/magic_grid/helpers.rb +3 -3
- data/lib/magic_grid/version.rb +1 -1
- data/spec/helpers_spec.rb +60 -2
- metadata +3 -3
@@ -17,7 +17,7 @@ module MagicGrid
|
|
17
17
|
@paginations = []
|
18
18
|
end
|
19
19
|
|
20
|
-
delegate :map, :count, :to => :collection
|
20
|
+
delegate :quoted_table_name, :map, :count, :to => :collection
|
21
21
|
|
22
22
|
attr_accessor :grid
|
23
23
|
attr_reader :current_page, :original_count, :total_pages
|
@@ -31,6 +31,10 @@ module MagicGrid
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
def column_names
|
35
|
+
@collection.table.columns.map {|c| c.name}
|
36
|
+
end
|
37
|
+
|
34
38
|
def quote_column_name(col)
|
35
39
|
@collection.connection.quote_column_name(col.to_s)
|
36
40
|
end
|
@@ -75,6 +79,7 @@ module MagicGrid
|
|
75
79
|
end
|
76
80
|
|
77
81
|
def apply_sort(col, dir)
|
82
|
+
@reduced_collection = nil
|
78
83
|
@sorts << "#{col} #{dir}"
|
79
84
|
self
|
80
85
|
end
|
@@ -84,6 +89,7 @@ module MagicGrid
|
|
84
89
|
end
|
85
90
|
|
86
91
|
def apply_search(q)
|
92
|
+
@reduced_collection = nil
|
87
93
|
@searches << q
|
88
94
|
self
|
89
95
|
end
|
@@ -101,6 +107,7 @@ module MagicGrid
|
|
101
107
|
|
102
108
|
def apply_filter(filters = {})
|
103
109
|
if @collection.respond_to? :where
|
110
|
+
@reduced_collection = nil
|
104
111
|
@filters << filters
|
105
112
|
end
|
106
113
|
self
|
@@ -108,6 +115,7 @@ module MagicGrid
|
|
108
115
|
|
109
116
|
def apply_filter_callback(callback)
|
110
117
|
if callback.respond_to? :call
|
118
|
+
@reduced_collection = nil
|
111
119
|
@filter_callbacks << callback
|
112
120
|
end
|
113
121
|
self
|
@@ -118,12 +126,14 @@ module MagicGrid
|
|
118
126
|
end
|
119
127
|
|
120
128
|
def apply_post_filter
|
129
|
+
@reduced_collection = nil
|
121
130
|
@post_filters << :post_filter
|
122
131
|
self
|
123
132
|
end
|
124
133
|
|
125
134
|
def apply_pagination(current_page, per_page)
|
126
135
|
if per_page
|
136
|
+
@reduced_collection = nil
|
127
137
|
@paginations << {:current_page => current_page, :per_page => per_page}
|
128
138
|
end
|
129
139
|
self
|
@@ -6,6 +6,10 @@ module MagicGrid
|
|
6
6
|
attr_reader :columns, :magic_id, :options, :params,
|
7
7
|
:current_sort_col, :current_order, :default_order, :per_page
|
8
8
|
|
9
|
+
def magic_collection
|
10
|
+
@collection
|
11
|
+
end
|
12
|
+
|
9
13
|
def collection
|
10
14
|
@collection.collection
|
11
15
|
end
|
@@ -64,9 +68,10 @@ module MagicGrid
|
|
64
68
|
begin
|
65
69
|
#if @collection.respond_to? :table
|
66
70
|
table_name = @collection.quoted_table_name
|
67
|
-
table_columns = @collection.
|
71
|
+
table_columns = @collection.column_names
|
68
72
|
rescue
|
69
|
-
|
73
|
+
msg = "Given collection doesn't respond to :quoted_table_name or :table well: "
|
74
|
+
MagicGrid.logger.debug("#{msg} - #{$!}")
|
70
75
|
table_name = nil
|
71
76
|
table_columns = @columns.each_index.to_a
|
72
77
|
end
|
@@ -81,7 +86,7 @@ module MagicGrid
|
|
81
86
|
c[:id] = i
|
82
87
|
i += 1
|
83
88
|
if c.key?(:col) and c[:col].is_a?(Symbol) and table_columns.include?(c[:col])
|
84
|
-
c[:sql] = "#{table_name}.#{@collection.
|
89
|
+
c[:sql] = "#{table_name}.#{@collection.quote_column_name(c[:col].to_s)}" unless c.key?(:sql)
|
85
90
|
end
|
86
91
|
c[:label] = c[:col].to_s.titleize if not c.key? :label
|
87
92
|
hash << c[:label]
|
data/lib/magic_grid/helpers.rb
CHANGED
@@ -227,11 +227,11 @@ module MagicGrid
|
|
227
227
|
def magic_paginate(collection, opts={})
|
228
228
|
if respond_to? :will_paginate
|
229
229
|
# WillPaginate
|
230
|
-
will_paginate collection, opts
|
230
|
+
will_paginate collection.collection, opts
|
231
231
|
#alias_method :magic_paginate, :will_paginate
|
232
232
|
elsif respond_to? :paginate
|
233
233
|
#Kaminari, or something else..
|
234
|
-
paginate collection, opts
|
234
|
+
paginate collection.collection, opts
|
235
235
|
#alias_method :magic_paginate, :paginate
|
236
236
|
else
|
237
237
|
("<!-- page #{collection.current_page} of #{collection.total_pages} -->" +
|
@@ -243,7 +243,7 @@ module MagicGrid
|
|
243
243
|
content_tag('tr') do
|
244
244
|
content_tag('td', :class => 'full-width ui-widget-header magic-pager',
|
245
245
|
:colspan => grid.columns.count) do
|
246
|
-
pager = magic_paginate(grid.
|
246
|
+
pager = magic_paginate(grid.magic_collection,
|
247
247
|
:param_name => grid.param_key(:page),
|
248
248
|
:params => base_params
|
249
249
|
)
|
data/lib/magic_grid/version.rb
CHANGED
data/spec/helpers_spec.rb
CHANGED
@@ -20,15 +20,27 @@ def fake_connection
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
def fake_active_record_collection(table_name = 'some_table'
|
23
|
+
def fake_active_record_collection(table_name = 'some_table',
|
24
|
+
columns = [:name, :description])
|
25
|
+
|
26
|
+
columns = columns.map { |c|
|
27
|
+
double.tap do |col|
|
28
|
+
col.stub(:name) { c }
|
29
|
+
end
|
30
|
+
}
|
24
31
|
(1..1000).to_a.tap do |c|
|
25
32
|
c.stub(:connection => fake_connection)
|
33
|
+
c.stub(:quoted_table_name => table_name)
|
26
34
|
c.stub(:table_name => table_name)
|
27
35
|
c.stub(:where) { c }
|
36
|
+
c.stub(:table) {
|
37
|
+
double.tap do |t|
|
38
|
+
t.stub(:columns) { columns }
|
39
|
+
end
|
40
|
+
}
|
28
41
|
end
|
29
42
|
end
|
30
43
|
|
31
|
-
|
32
44
|
describe MagicGrid::Helpers do
|
33
45
|
|
34
46
|
# Let's use the helpers the way they're meant to be used!
|
@@ -252,6 +264,52 @@ describe MagicGrid::Helpers do
|
|
252
264
|
end
|
253
265
|
end
|
254
266
|
end
|
267
|
+
|
268
|
+
context "sorting" do
|
269
|
+
let(:sortable_collection) {
|
270
|
+
columns = column_list.map { |c|
|
271
|
+
double.tap do |col|
|
272
|
+
col.stub(:name) { c }
|
273
|
+
end
|
274
|
+
}
|
275
|
+
collection = fake_active_record_collection.tap do |c|
|
276
|
+
c.stub(:table) {
|
277
|
+
double.tap do |t|
|
278
|
+
t.stub(:columns) { columns }
|
279
|
+
end
|
280
|
+
}
|
281
|
+
end
|
282
|
+
}
|
283
|
+
it "should render sortable column headers when a collection is sortable" do
|
284
|
+
grid = magic_grid(sortable_collection, column_list)
|
285
|
+
grid.should match_select("thead>tr>th.sorter>a>span.ui-icon", column_list.count)
|
286
|
+
end
|
287
|
+
|
288
|
+
# context "when a sort column is given" do
|
289
|
+
# let(:search_param) { 'foobar' }
|
290
|
+
# let(:controller) {
|
291
|
+
# make_controller.tap { |c|
|
292
|
+
# c.stub(:params) { {:grid_id_col => 1} }
|
293
|
+
# }
|
294
|
+
# }
|
295
|
+
# end
|
296
|
+
# context "when a sort order is given" do
|
297
|
+
# let(:controller) {
|
298
|
+
# make_controller.tap { |c|
|
299
|
+
# c.stub(:params) { {:grid_id_order => 1} }
|
300
|
+
# }
|
301
|
+
# }
|
302
|
+
# end
|
303
|
+
# context "when a sort order and column are given" do
|
304
|
+
# let(:search_param) { 'foobar' }
|
305
|
+
# let(:controller) {
|
306
|
+
# make_controller.tap { |c|
|
307
|
+
# c.stub(:params) { {:grid_id_q => 1} }
|
308
|
+
# }
|
309
|
+
# }
|
310
|
+
# end
|
311
|
+
end
|
312
|
+
|
255
313
|
end
|
256
314
|
|
257
315
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: magic_grid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -211,7 +211,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
211
211
|
version: '0'
|
212
212
|
segments:
|
213
213
|
- 0
|
214
|
-
hash:
|
214
|
+
hash: 4254976689102437121
|
215
215
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
216
216
|
none: false
|
217
217
|
requirements:
|
@@ -220,7 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
220
220
|
version: '0'
|
221
221
|
segments:
|
222
222
|
- 0
|
223
|
-
hash:
|
223
|
+
hash: 4254976689102437121
|
224
224
|
requirements: []
|
225
225
|
rubyforge_project:
|
226
226
|
rubygems_version: 1.8.23
|