datagrid 1.6.1 → 1.6.2

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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/datagrid.gemspec +26 -164
  4. data/lib/datagrid/columns.rb +5 -10
  5. data/lib/datagrid/filters.rb +3 -6
  6. data/lib/datagrid/filters/base_filter.rb +8 -0
  7. data/lib/datagrid/form_builder.rb +14 -13
  8. data/lib/datagrid/version.rb +3 -0
  9. metadata +10 -196
  10. data/.document +0 -5
  11. data/.rspec +0 -1
  12. data/.travis.yml +0 -23
  13. data/Gemfile +0 -33
  14. data/Rakefile +0 -43
  15. data/VERSION +0 -1
  16. data/spec/datagrid/active_model_spec.rb +0 -33
  17. data/spec/datagrid/column_names_attribute_spec.rb +0 -86
  18. data/spec/datagrid/columns/column_spec.rb +0 -19
  19. data/spec/datagrid/columns_spec.rb +0 -592
  20. data/spec/datagrid/core_spec.rb +0 -210
  21. data/spec/datagrid/drivers/active_record_spec.rb +0 -79
  22. data/spec/datagrid/drivers/array_spec.rb +0 -106
  23. data/spec/datagrid/drivers/mongo_mapper_spec.rb +0 -101
  24. data/spec/datagrid/drivers/mongoid_spec.rb +0 -109
  25. data/spec/datagrid/drivers/sequel_spec.rb +0 -111
  26. data/spec/datagrid/filters/base_filter_spec.rb +0 -19
  27. data/spec/datagrid/filters/boolean_enum_filter_spec.rb +0 -5
  28. data/spec/datagrid/filters/composite_filters_spec.rb +0 -65
  29. data/spec/datagrid/filters/date_filter_spec.rb +0 -198
  30. data/spec/datagrid/filters/date_time_filter_spec.rb +0 -157
  31. data/spec/datagrid/filters/dynamic_filter_spec.rb +0 -175
  32. data/spec/datagrid/filters/enum_filter_spec.rb +0 -51
  33. data/spec/datagrid/filters/extended_boolean_filter_spec.rb +0 -46
  34. data/spec/datagrid/filters/float_filter_spec.rb +0 -15
  35. data/spec/datagrid/filters/integer_filter_spec.rb +0 -144
  36. data/spec/datagrid/filters/string_filter_spec.rb +0 -35
  37. data/spec/datagrid/filters_spec.rb +0 -332
  38. data/spec/datagrid/form_builder_spec.rb +0 -611
  39. data/spec/datagrid/helper_spec.rb +0 -683
  40. data/spec/datagrid/ordering_spec.rb +0 -150
  41. data/spec/datagrid/scaffold_spec.rb +0 -45
  42. data/spec/datagrid/stylesheet_spec.rb +0 -12
  43. data/spec/datagrid/utils_spec.rb +0 -19
  44. data/spec/datagrid_spec.rb +0 -94
  45. data/spec/spec_helper.rb +0 -123
  46. data/spec/support/active_record.rb +0 -38
  47. data/spec/support/configuration.rb +0 -28
  48. data/spec/support/i18n_helpers.rb +0 -6
  49. data/spec/support/matchers.rb +0 -101
  50. data/spec/support/mongo_mapper.rb +0 -32
  51. data/spec/support/mongoid.rb +0 -36
  52. data/spec/support/sequel.rb +0 -39
  53. data/spec/support/simple_report.rb +0 -64
  54. data/spec/support/test_partials/_actions.html.erb +0 -1
  55. data/spec/support/test_partials/client/datagrid/_form.html.erb +0 -13
  56. data/spec/support/test_partials/client/datagrid/_head.html.erb +0 -9
  57. data/spec/support/test_partials/client/datagrid/_order_for.html.erb +0 -11
  58. data/spec/support/test_partials/client/datagrid/_row.html.erb +0 -6
  59. data/spec/support/test_partials/client/datagrid/_table.html.erb +0 -19
  60. data/spec/support/test_partials/custom_checkboxes/_enum_checkboxes.html.erb +0 -1
  61. data/spec/support/test_partials/custom_form/_form.html.erb +0 -7
  62. data/spec/support/test_partials/custom_range/_range_filter.html.erb +0 -1
@@ -1,683 +0,0 @@
1
- require 'spec_helper'
2
- require "active_support/core_ext/hash"
3
- require "active_support/core_ext/object"
4
- require "action_controller"
5
-
6
- require 'datagrid/renderer'
7
-
8
- describe Datagrid::Helper do
9
- subject do
10
- action_view_template
11
- end
12
-
13
- before(:each) do
14
- allow(subject).to receive(:params).and_return({})
15
- allow(subject).to receive(:request) do
16
- Struct.new(:path, :query_parameters).new("/location", {})
17
- end
18
- allow(subject).to receive(:url_for) do |options|
19
- options.is_a?(String) ? options : ["/location", options.to_param.presence].compact.join('?')
20
- end
21
-
22
- end
23
-
24
- let(:group) { Group.create!(:name => "Pop") }
25
- let!(:entry) { Entry.create!(
26
- :group => group, :name => "Star", :disabled => false, :confirmed => false, :category => "first"
27
- ) }
28
- let(:grid) { SimpleReport.new }
29
-
30
- context "when grid has no records" do
31
- let(:grid) do
32
- test_report do
33
- scope { Entry.where("1 != 1") }
34
- column(:id)
35
- end
36
- end
37
-
38
- it "should show an empty table with dashes" do
39
- datagrid_table = subject.datagrid_table(grid)
40
-
41
- expect(datagrid_table).to match_css_pattern(
42
- "table.datagrid tr td.noresults" => 1
43
- )
44
- expect(datagrid_table).to include(I18n.t("datagrid.no_results"))
45
- end
46
- end
47
-
48
- describe ".datagrid_table" do
49
- it "should have grid class as html class on table" do
50
- expect(subject.datagrid_table(grid)).to match_css_pattern(
51
- "table.datagrid.simple_report" => 1
52
- )
53
- end
54
- it "should have namespaced grid class as html class on table" do
55
- module ::Ns23
56
- class TestGrid
57
- include Datagrid
58
- scope { Entry }
59
- column(:id)
60
- end
61
- end
62
- expect(subject.datagrid_table(::Ns23::TestGrid.new)).to match_css_pattern(
63
- "table.datagrid.ns23_test_grid" => 1
64
- )
65
- end
66
- it "should return data table html" do
67
- datagrid_table = subject.datagrid_table(grid)
68
-
69
- expect(datagrid_table).to match_css_pattern({
70
- "table.datagrid tr th.group div.order" => 1,
71
- "table.datagrid tr th.group" => /Group.*/,
72
- "table.datagrid tr th.name div.order" => 1,
73
- "table.datagrid tr th.name" => /Name.*/,
74
- "table.datagrid tr td.group" => "Pop",
75
- "table.datagrid tr td.name" => "Star"
76
- })
77
- end
78
-
79
- it "should support giving assets explicitly" do
80
- Entry.create!(entry.attributes.except("id"))
81
- datagrid_table = subject.datagrid_table(grid, [entry])
82
-
83
- expect(datagrid_table).to match_css_pattern({
84
- "table.datagrid tr th.group div.order" => 1,
85
- "table.datagrid tr th.group" => /Group.*/,
86
- "table.datagrid tr th.name div.order" => 1,
87
- "table.datagrid tr th.name" => /Name.*/,
88
- "table.datagrid tr td.group" => "Pop",
89
- "table.datagrid tr td.name" => "Star"
90
- })
91
- end
92
-
93
- it "should support no order given" do
94
- expect(subject.datagrid_table(grid, [entry], :order => false)).to match_css_pattern("table.datagrid th .order" => 0)
95
- end
96
-
97
- it "should support columns option" do
98
- expect(subject.datagrid_table(grid, [entry], :columns => [:name])).to match_css_pattern(
99
- "table.datagrid th.name" => 1,
100
- "table.datagrid td.name" => 1,
101
- "table.datagrid th.group" => 0,
102
- "table.datagrid td.group" => 0
103
- )
104
- end
105
-
106
- context "with column_names attribute" do
107
- let(:grid) do
108
- test_report(:column_names => "name") do
109
- scope { Entry }
110
- column(:name)
111
- column(:category)
112
- end
113
- end
114
-
115
- it "should output only given column names" do
116
- expect(subject.datagrid_table(grid, [entry])).to match_css_pattern(
117
- "table.datagrid th.name" => 1,
118
- "table.datagrid td.name" => 1,
119
- "table.datagrid th.category" => 0,
120
- "table.datagrid td.category" => 0
121
- )
122
- end
123
- end
124
-
125
- context "when grid has no columns" do
126
- let(:grid) do
127
- test_report do
128
- scope {Entry}
129
- end
130
- end
131
-
132
- it "should render no_columns message" do
133
- expect(subject.datagrid_table(grid, [entry])).to equal_to_dom("No columns selected")
134
- end
135
- end
136
-
137
- context 'with partials attribute' do
138
- let(:grid) do
139
- test_report do
140
- scope { Entry }
141
- column(:name)
142
- column(:category)
143
- end
144
- end
145
-
146
- it 'renders namespaced table partial' do
147
- rendered_partial = subject.datagrid_table(grid, [entry], {
148
- :partials => 'client/datagrid'
149
- })
150
- expect(rendered_partial).to include 'Namespaced table partial.'
151
- expect(rendered_partial).to include 'Namespaced row partial.'
152
- expect(rendered_partial).to include 'Namespaced head partial.'
153
- expect(rendered_partial).to include 'Namespaced order_for partial.'
154
- end
155
- end
156
-
157
- context "when scope is enumerator" do
158
- let(:grid) do
159
- test_report do
160
- scope { ['a', 'b'].to_enum }
161
- column(:name) do |value|
162
- value
163
- end
164
- end
165
- end
166
- it "should render table" do
167
- expect(subject.datagrid_table(grid)).to match_css_pattern(
168
- "table.datagrid th.name" => 1,
169
- "table.datagrid td.name" => 2,
170
- )
171
- end
172
- end
173
- context "when scope is lazy enumerator" do
174
- before(:each) do
175
- pending("not supported by ruby < 2.0") if RUBY_VERSION < '2.0'
176
- end
177
- let(:grid) do
178
- test_report do
179
- scope { ['a', 'b'].lazy }
180
- column(:name) do |value|
181
- value
182
- end
183
- end
184
- end
185
- it "should render table" do
186
- expect(subject.datagrid_table(grid)).to match_css_pattern(
187
- "table.datagrid th.name" => 1,
188
- "table.datagrid td.name" => 2,
189
- )
190
- end
191
- end
192
- end
193
-
194
- describe ".datagrid_rows" do
195
- it "should support urls" do
196
- rp = test_report do
197
- scope { Entry }
198
- column(:name, :url => lambda {|model| model.name})
199
- end
200
- expect(subject.datagrid_rows(rp, [entry])).to match_css_pattern(
201
- "tr td.name a[href=Star]" => "Star"
202
- )
203
- end
204
-
205
- it "should support conditional urls" do
206
- rp = test_report do
207
- scope { Entry }
208
- column(:name, :url => lambda {|model| false})
209
- end
210
- expect(subject.datagrid_rows(rp, [entry])).to match_css_pattern(
211
- "tr td.name" => "Star"
212
- )
213
- end
214
-
215
- it "should add ordering classes to column" do
216
- rp = test_report(:order => :name) do
217
- scope { Entry }
218
- column(:name)
219
- end
220
- expect(subject.datagrid_rows(rp, [entry])).to match_css_pattern(
221
- "tr td.name.ordered.asc" => "Star"
222
- )
223
- end
224
- it "should add ordering classes to column" do
225
- rp = test_report(:order => :name) do
226
- scope { Entry }
227
- column(:name)
228
- end
229
- expect(
230
- subject.datagrid_rows(rp) do |row|
231
- subject.content_tag(:strong, row.name)
232
- end
233
- ).to match_css_pattern(
234
- "strong" => "Star"
235
- )
236
- end
237
-
238
- it "should add ordering classes to column" do
239
- rp = test_report(:order => :name, :descending => true) do
240
- scope { Entry }
241
- column(:name)
242
- end
243
- expect(subject.datagrid_rows(rp, [entry])).to match_css_pattern(
244
- "tr td.name.ordered.desc" => "Star"
245
- )
246
- end
247
-
248
- it "should render columns with &:symbol block" do
249
- rp = test_report do
250
- scope { Entry }
251
- column(:name, &:name)
252
- end
253
-
254
- expect(subject.datagrid_rows(rp, [entry])).to match_css_pattern(
255
- "tr td.name" => "Star"
256
- )
257
- end
258
-
259
- it "should render html columns" do
260
- rp = test_report do
261
- scope { Entry }
262
- column(:name, :html => true) do |model|
263
- content_tag(:span, model.name)
264
- end
265
- end
266
- expect(subject.datagrid_rows(rp, [entry])).to match_css_pattern(
267
- "tr td.name span" => "Star"
268
- )
269
- end
270
-
271
- it "should render :html columns with &:symbol block" do
272
- rp = test_report do
273
- scope { Entry }
274
- column(:name, :html => true, &:name)
275
- end
276
-
277
- expect(subject.datagrid_rows(rp, [entry])).to match_css_pattern(
278
- "tr td.name" => "Star"
279
- )
280
- end
281
-
282
- it "should render format columns with &:symbol block" do
283
- rp = test_report do
284
- scope { Entry }
285
- column(:name) do |record|
286
- format(record, &:name)
287
- end
288
- end
289
-
290
- expect(subject.datagrid_rows(rp, [entry])).to match_css_pattern(
291
- "tr td.name" => "Star"
292
- )
293
- end
294
-
295
- it "should render :html columns with &:symbol block with a data attribute" do
296
- rp = test_report do
297
- scope { Entry }
298
- column(:name, :html => true, data: 'DATA', &:name)
299
- end
300
-
301
- expect(subject.datagrid_rows(rp, [entry])).to match_css_pattern(
302
- "tr td.name" => "Star"
303
- )
304
- end
305
-
306
- it "should render argument-based html columns" do
307
- rp = test_report do
308
- scope { Entry }
309
- column(:name, :html => lambda {|data| content_tag :h1, data})
310
- end
311
- expect(subject.datagrid_rows(rp, [entry])).to match_css_pattern(
312
- "tr td.name h1" => "Star"
313
- )
314
- end
315
-
316
- it "should render argument-based html columns with custom data" do
317
- rp = test_report do
318
- scope { Entry }
319
- column(:name, :html => lambda {|data| content_tag :em, data}) do
320
- self.name.upcase
321
- end
322
- end
323
- expect(subject.datagrid_rows(rp, [entry])).to match_css_pattern(
324
- "tr td.name em" => "STAR"
325
- )
326
- end
327
-
328
- it "should render html columns with double arguments for column" do
329
- rp = test_report do
330
- scope { Entry }
331
- column(:name, :html => true) do |model, grid|
332
- content_tag(:span, "#{model.name}-#{grid.assets.klass}" )
333
- end
334
- end
335
- expect(subject.datagrid_rows(rp, [entry])).to match_css_pattern(
336
- "tr td.name span" => "Star-Entry"
337
- )
338
- end
339
-
340
- it "should render argument-based html blocks with double arguments" do
341
- rp = test_report do
342
- scope { Entry }
343
- column(:name, :html => lambda { |data, model|
344
- content_tag :h1, "#{data}-#{model.name.downcase}"
345
- })
346
- end
347
- expect(subject.datagrid_rows(rp, [entry])).to match_css_pattern(
348
- "tr td.name h1" => "Star-star"
349
- )
350
- end
351
-
352
- it "should render argument-based html blocks with triple arguments" do
353
- rp = test_report do
354
- scope { Entry }
355
- column(:name, :html => lambda { |data, model, grid|
356
- content_tag :h1, "#{data}-#{model.name.downcase}-#{grid.assets.klass}"
357
- })
358
- end
359
- expect(subject.datagrid_rows(rp, [entry])).to match_css_pattern(
360
- "tr td.name h1" => "Star-star-Entry"
361
- )
362
- end
363
-
364
- it "should render argument-based html blocks with double arguments and custom data" do
365
- rp = test_report do
366
- scope { Entry }
367
- column(:name, :html => lambda { |data, model|
368
- content_tag :h1, "#{data}-#{model.name}"
369
- }) do
370
- self.name.upcase
371
- end
372
- end
373
- expect(subject.datagrid_rows(rp, [entry])).to match_css_pattern(
374
- "tr td.name h1" => "STAR-Star"
375
- )
376
- end
377
-
378
- it "should render argument-based html blocks with triple arguments and custom data" do
379
- rp = test_report do
380
- scope { Entry }
381
- column(:name, :html => lambda { |data, model, grid|
382
- content_tag :h1, "#{data}-#{model.name}-#{grid.assets.klass}"
383
- }) do
384
- self.name.upcase
385
- end
386
- end
387
- expect(subject.datagrid_rows(rp, [entry])).to match_css_pattern(
388
- "tr td.name h1" => "STAR-Star-Entry"
389
- )
390
- end
391
-
392
- it "should support columns option" do
393
- rp = test_report do
394
- scope { Entry }
395
- column(:name)
396
- column(:category)
397
- end
398
- expect(subject.datagrid_rows(rp, [entry], :columns => [:name])).to match_css_pattern(
399
- "tr td.name" => "Star"
400
- )
401
- expect(subject.datagrid_rows(rp, [entry], :columns => [:name])).to match_css_pattern(
402
- "tr td.category" => 0
403
- )
404
- end
405
-
406
- it "should allow CSS classes to be specified for a column" do
407
- rp = test_report do
408
- scope { Entry }
409
- column(:name, :class => 'my_class')
410
- end
411
-
412
- expect(subject.datagrid_rows(rp, [entry])).to match_css_pattern(
413
- "tr td.name.my_class" => "Star"
414
- )
415
- end
416
-
417
- context "when grid has complicated columns" do
418
- let(:grid) do
419
- test_report(:name => 'Hello') do
420
- scope {Entry}
421
- filter(:name)
422
- column(:name) do |model, grid|
423
- "'#{model.name}' filtered by '#{grid.name}'"
424
- end
425
- end
426
- end
427
- it "should ignore them" do
428
- expect(subject.datagrid_rows(grid, [entry])).to match_css_pattern(
429
- "td.name" => 1
430
- )
431
- end
432
- end
433
-
434
- it "should escape html" do
435
- entry.update!(:name => "<div>hello</div>")
436
- expect(subject.datagrid_rows(grid, [entry], :columns => [:name])).to equal_to_dom(<<-HTML)
437
- <tr><td class="name">&lt;div&gt;hello&lt;/div&gt;</td></tr>
438
- HTML
439
- end
440
-
441
- it "should not escape safe html" do
442
- entry.update!(:name => "<div>hello</div>")
443
- grid.column(:safe_name) do |model|
444
- model.name.html_safe
445
- end
446
- expect(subject.datagrid_rows(grid, [entry], :columns => [:safe_name])).to equal_to_dom(<<-HTML)
447
- <tr><td class="safe_name"><div>hello</div></td></tr>
448
- HTML
449
-
450
- end
451
-
452
- end
453
-
454
- describe ".datagrid_order_for" do
455
- it "should render ordering layout" do
456
- class OrderedGrid
457
- include Datagrid
458
- scope { Entry }
459
- column(:category)
460
- end
461
- object = OrderedGrid.new(:descending => true, :order => :category)
462
- expect(subject.datagrid_order_for(object, object.column_by_name(:category))).to equal_to_dom(<<-HTML)
463
- <div class="order">
464
- <a class="asc" href="/location?ordered_grid%5Bdescending%5D=false&amp;ordered_grid%5Border%5D=category">&uarr;</a>
465
- <a class="desc" href="/location?ordered_grid%5Bdescending%5D=true&amp;ordered_grid%5Border%5D=category">&darr;</a>
466
- </div>
467
- HTML
468
- end
469
-
470
- end
471
- describe ".datagrid_form_for" do
472
- it 'returns namespaced partial if partials options is passed' do
473
- rendered_form = subject.datagrid_form_for(grid, {
474
- :url => '',
475
- :partials => 'client/datagrid'
476
- })
477
- expect(rendered_form).to include 'Namespaced form partial.'
478
- end
479
- it "should render form and filter inputs" do
480
- class FormForGrid
481
- include Datagrid
482
- scope { Entry }
483
- filter(:category)
484
- end
485
- object = FormForGrid.new(:category => "hello")
486
- expect(subject.datagrid_form_for(object, :url => "/grid")).to match_css_pattern(
487
- "form.datagrid-form.form_for_grid[action='/grid']" => 1,
488
- "form input[name=utf8]" => 1,
489
- "form .filter label" => "Category",
490
- "form .filter input.category.default_filter[name='form_for_grid[category]'][value=hello]" => 1,
491
- "form input[name=commit][value=Search]" => 1,
492
- "form a.datagrid-reset[href='/location']" => 1
493
- )
494
- end
495
- it "should support html classes for grid class with namespace" do
496
- module ::Ns22
497
- class TestGrid
498
- include Datagrid
499
- scope { Entry }
500
- filter(:id)
501
- end
502
- end
503
- expect(subject.datagrid_form_for(::Ns22::TestGrid.new, :url => "grid")).to match_css_pattern(
504
- "form.datagrid-form.ns22_test_grid" => 1,
505
- "form.datagrid-form label[for=ns22_test_grid_id]" => 1,
506
- "form.datagrid-form input#ns22_test_grid_id[name='ns22_test_grid[id]']" => 1,
507
- )
508
- end
509
-
510
- it "should have overridable param_name method" do
511
- class ParamNameGrid81
512
- include Datagrid
513
- scope { Entry }
514
- filter(:id)
515
- def param_name
516
- 'g'
517
- end
518
- end
519
- expect(subject.datagrid_form_for(::ParamNameGrid81.new, :url => "/grid")).to match_css_pattern(
520
- "form.datagrid-form input[name='g[id]']" => 1,
521
- )
522
- end
523
-
524
- it "takes default partials if custom doesn't exist" do
525
- class PartialDefaultGrid
526
- include Datagrid
527
- scope {Entry}
528
- filter(:id, :integer, :range => true)
529
- filter(:group_id, :enum, :multiple => true, :checkboxes => true, :select => [1,2])
530
- def param_name
531
- 'g'
532
- end
533
- end
534
- rendered_form = subject.datagrid_form_for(PartialDefaultGrid.new, {
535
- :url => '',
536
- :partials => 'custom_form'
537
- })
538
- expect(rendered_form).to include 'form_partial_test'
539
- expect(rendered_form).to match_css_pattern([
540
- 'input.integer_filter.from',
541
- 'input.integer_filter.to',
542
- ".enum_filter input[value='1']",
543
- ".enum_filter input[value='2']",
544
- ])
545
- end
546
- end
547
-
548
-
549
- describe ".datagrid_row" do
550
- let(:grid) do
551
- test_report do
552
- scope { Entry }
553
- column(:name)
554
- column(:category)
555
- end
556
- end
557
-
558
- let(:entry) do
559
- Entry.create!(:name => "Hello", :category => "greetings")
560
- end
561
-
562
- it "should provide access to row data" do
563
- r = subject.datagrid_row(grid, entry)
564
- expect(r.name).to eq("Hello")
565
- expect(r.category).to eq("greetings")
566
- end
567
- it "should provide an interator" do
568
- r = subject.datagrid_row(grid, entry)
569
- expect(r.map {|z| z.upcase}).to eq(["HELLO", "GREETINGS"])
570
- expect(r.name).to eq("Hello")
571
- expect(r.category).to eq("greetings")
572
- end
573
-
574
- it "should yield block" do
575
- subject.datagrid_row(grid, entry) do |row|
576
- expect(row.name).to eq("Hello")
577
- expect(row.category).to eq("greetings")
578
- end
579
- end
580
-
581
- it "should output data from block" do
582
- name = subject.datagrid_row(grid, entry) do |row|
583
- subject.concat(row.name)
584
- subject.concat(",")
585
- subject.concat(row.category)
586
- end
587
- expect(name).to eq("Hello,greetings")
588
- end
589
-
590
- it "should give access to grid and asset" do
591
- r = subject.datagrid_row(grid, entry)
592
- expect(r.grid).to eq(grid)
593
- expect(r.asset).to eq(entry)
594
- end
595
-
596
- it "should use cache" do
597
- grid = test_report do
598
- scope {Entry}
599
- self.cached = true
600
- column(:random1, html: true) {rand(10**9)}
601
- column(:random2) {|model| format(rand(10**9)) {|value| value}}
602
- end
603
-
604
- entry = Entry.create!
605
-
606
- data_row = grid.data_row(entry)
607
- html_row = subject.datagrid_row(grid, entry)
608
- expect(html_row.random1).to eq(html_row.random1)
609
- expect(html_row.random2).to_not eq(html_row.random1)
610
- expect(data_row.random2).to eq(html_row.random2)
611
- expect(data_row.random2).to_not eq(html_row.random1)
612
- grid.cached = false
613
- expect(html_row.random2).to_not eq(html_row.random2)
614
- expect(html_row.random2).to_not eq(html_row.random1)
615
- expect(data_row.random2).to_not eq(html_row.random2)
616
- expect(data_row.random2).to_not eq(html_row.random1)
617
- end
618
-
619
- end
620
-
621
- describe ".datagrid_value" do
622
- it "should format value by column name" do
623
- report = test_report do
624
- scope {Entry}
625
- column(:name) do |e|
626
- "<b>#{e.name}</b>"
627
- end
628
- end
629
-
630
- expect(subject.datagrid_value(report, :name, entry)).to eq("<b>Star</b>")
631
- end
632
- it "should support format in column" do
633
- report = test_report do
634
- scope {Entry}
635
- column(:name) do |e|
636
- format(e.name) do |value|
637
- link_to value, "/profile"
638
- end
639
- end
640
- end
641
- expect(subject.datagrid_value(report, :name, entry)).to be_html_safe
642
- expect(subject.datagrid_value(report, :name, entry)).to eq("<a href=\"/profile\">Star</a>")
643
- end
644
-
645
- it "applies decorator" do
646
- report = test_report do
647
- scope {Entry}
648
- decorate do |model|
649
- Class.new(Struct.new(:model)) do
650
- def name
651
- model.name.upcase
652
- end
653
- end
654
- end
655
- column(:name, html: true)
656
- end
657
- entry = Entry.create!(name: 'hello')
658
- expect(subject.datagrid_value(report, :name, entry)).to eq("HELLO")
659
- end
660
- end
661
-
662
- describe ".datagrid_header" do
663
-
664
- it "should support order_by_value colums" do
665
- grid = test_report(:order => "category") do
666
- scope { Entry }
667
- column(:category, :order => false, :order_by_value => true)
668
-
669
- def param_name
670
- 'grid'
671
- end
672
- end
673
- expect(subject.datagrid_header(grid)).to equal_to_dom(<<HTML)
674
- <tr><th class="category ordered asc">Category<div class="order">
675
- <a class="asc" href="/location?grid%5Bdescending%5D=false&amp;grid%5Border%5D=category">&uarr;</a><a class="desc" href="/location?grid%5Bdescending%5D=true&amp;grid%5Border%5D=category">&darr;</a>
676
- </div>
677
- </th></tr>
678
- HTML
679
- end
680
- end
681
-
682
- end
683
-