data-table 2.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 39eba54db8dd1c599476d714baf1245cd7517333
4
- data.tar.gz: cbf63f58a76943fa40793161c0a6e5813bc3290a
3
+ metadata.gz: a93c19ba22c5c189c7eb7c2523776ce2b97f3c62
4
+ data.tar.gz: d31df8fbf78d197cd174a48ff1aff84ed1f3d465
5
5
  SHA512:
6
- metadata.gz: '0509df5140e6bcd65a0ca07c04db40e7722161ee898c6a41552ec550a982a991e694f970479a9a70e8cf40b24cb442d1483cf6c6ff2199391b0aabae32319eb5'
7
- data.tar.gz: 1d19797af22349f05d6a811bb97dc06f235bba096bff0dc7637e180dc866aaf4e16fc3e9ef445c45b463f018023b4080ad2e530855cd004431d43f4a2597eb49
6
+ metadata.gz: e58f9dd66a62c8b84d5ca9155775d887499b60526846652def4dbd277da321b5fecb19602c4a2382f296192823b7049623a32712703d8e08a0ab3d0fdaa7083a
7
+ data.tar.gz: ce764c8ec13fcd513a7e7c21148da825128b7f4802f8873749acb5216c6c0362d8d73d8fd3f9bf9cef84519b6018722d6cf767ce2a01e99d71f58e07e0428be3
@@ -32,8 +32,8 @@ module DataTable
32
32
 
33
33
  .data_table .group_header th {text-align: left;}
34
34
 
35
- .data_table .subtotal.index_0 td,
36
- .data_table .parent_subtotal.index_0 td
35
+ .data_table .subtotal.first td,
36
+ .data_table .parent_subtotal.first td
37
37
  {
38
38
  border-top: 1px solid #000;
39
39
  }
@@ -284,13 +284,20 @@ module DataTable
284
284
  html = ''
285
285
  path = ancestors.nil? ? [] : ancestors.dup
286
286
  path << group_header
287
+
288
+ is_first_subtotal = true
289
+
287
290
  @subtotal_calculations[path].each_with_index do |group, index|
288
- html << "<tr class='subtotal index_#{index}'>"
291
+ next if group.empty?
292
+
293
+ html << "<tr class='subtotal index_#{index} #{'first' if is_first_subtotal}'>"
289
294
  @columns.each do |col|
290
295
  value = group[col.name] ? group[col.name].values[0] : nil
291
296
  html << col.render_cell(value)
292
297
  end
293
298
  html << '</tr>'
299
+
300
+ is_first_subtotal = false
294
301
  end
295
302
  html
296
303
  end
@@ -339,7 +346,9 @@ module DataTable
339
346
  @collection.each_pair_with_parents(@groupings.count) do |group_name, group_data, parents|
340
347
  path = parents + [group_name]
341
348
  result = calculate(group_data, subtotal[0], subtotal[1], path)
342
- @subtotal_calculations[path][index] ||= {}
349
+ (0..index).each do |index|
350
+ @subtotal_calculations[path][index] ||= {}
351
+ end
343
352
  @subtotal_calculations[path][index][subtotal[0]] = {subtotal[1] => result}
344
353
  end
345
354
  end
@@ -436,7 +445,9 @@ module DataTable
436
445
  def total_row(collection, column_name, function = nil, index = nil, &block)
437
446
  function_or_block = function || block
438
447
  f = function && block_given? ? [function, block] : function_or_block
439
- collection[index] = {} if collection[index].nil?
448
+ (0..index).each do |index|
449
+ collection[index] = {} if collection[index].nil?
450
+ end
440
451
  collection[index][column_name] = f
441
452
  end
442
453
  end
@@ -1,3 +1,3 @@
1
1
  module DataTable
2
- VERSION = '2.0'.freeze
2
+ VERSION = '2.0.1'.freeze
3
3
  end
@@ -72,6 +72,48 @@ describe DataTable::Table do
72
72
  expect(data_table.subtotal_calculations).to eq({["Star Wars"]=>[{:power_level=>{:sum=>145.0}}], ["Middle Earth"]=>[{:power_level=>{:sum=>9081.0}}]})
73
73
  end
74
74
 
75
+ it "should do sub-totaling starting with indexes > 0" do
76
+ data_table.group_by :world, level: 0
77
+ data_table.column :power_level
78
+ data_table.subtotal :power_level, :sum, 1
79
+
80
+ data_table.prepare_data
81
+
82
+ expect(data_table.subtotal_calculations).to eq({
83
+ ["Star Wars"] => [{}, {:power_level => {:sum => 145.0}}],
84
+ ["Middle Earth"] => [{}, {:power_level => {:sum => 9081.0}}]
85
+ })
86
+ end
87
+
88
+ it "should not render empty sub-total aggregate rows" do
89
+ data_table.group_by :world, level: 0
90
+ data_table.column :power_level
91
+ data_table.subtotal :power_level, nil, 1 do |_records, _column, path|
92
+ path
93
+ end
94
+
95
+ data_table.prepare_data
96
+ subtotal_calculations = data_table.subtotal_calculations
97
+
98
+ # this is convoluted because it's hard to assert a nested structure that includes procs
99
+ # [
100
+ # ["Middle Earth"] => [{}, {:power_level=>{#<Proc:0x03dbead8@table_spec.rb:78>=>"Middle Earth"}}],
101
+ # ["Star Wars"] => [{}, {:power_level=>{#<Proc:0x03dbead8@table_spec.rb:78>=>"Star Wars"}}]
102
+ # ]
103
+ expect(subtotal_calculations.keys).to eq([["Star Wars"], ["Middle Earth"]])
104
+ expect(subtotal_calculations.values.flatten.map(&:keys)).to eq([[], [:power_level], [], [:power_level]])
105
+ subtotal_calculations.values.flatten.map(&:values).flatten.map(&:keys).each do |k|
106
+ expect(k).to be_a(Array)
107
+ expect(k.length).to eq(1)
108
+ expect(k[0]).to be_a(Proc)
109
+ end
110
+ expect(subtotal_calculations.values.flatten.map(&:values).flatten.map(&:values)).to eq([["Star Wars"], ["Middle Earth"]])
111
+
112
+ # note how the rows are index_1, and there is no index_0 row
113
+ expect(data_table.render).to \
114
+ eq(%{<table id='' class='data_table ' cellspacing='0' cellpadding='0'><caption></caption><thead><tr><th class='power_level ' ></th></tr></thead><tbody class='star_wars'><tr class='group_header level_0'><th colspan='1'>Star Wars</th></tr><tr class='row_0 ' ><td class='power_level numeric' >50</td></tr><tr class='row_1 alt ' ><td class='power_level numeric' >95</td></tr><tr class='subtotal index_1 first'><td class='power_level numeric' >Star Wars</td></tr></tbody><tbody class='middle_earth'><tr class='group_header level_0'><th colspan='1'>Middle Earth</th></tr><tr class='row_0 ' ><td class='power_level numeric' >9001</td></tr><tr class='row_1 alt ' ><td class='power_level numeric' >80</td></tr><tr class='subtotal index_1 first'><td class='power_level numeric' >Middle Earth</td></tr></tbody></table>})
115
+ end
116
+
75
117
  it "should render a custom header" do
76
118
  data_table.custom_header do
77
119
  th 'Two Columns', :colspan => 2
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: data-table
3
3
  version: !ruby/object:Gem::Version
4
- version: '2.0'
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Erickson
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-04-03 00:00:00.000000000 Z
12
+ date: 2018-11-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -118,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
118
  version: '0'
119
119
  requirements: []
120
120
  rubyforge_project: data-table
121
- rubygems_version: 2.6.11
121
+ rubygems_version: 2.6.14
122
122
  signing_key:
123
123
  specification_version: 4
124
124
  summary: Turn arrays of hashes or models in to an HTML table.