simple_drilldown 0.6.7 → 0.6.8

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,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 20d7b53c9e1fdf228a84a025903f46d614625db9fdd66080576969700136f3a6
4
- data.tar.gz: 75bdf58b4bc191390cdf9aa358a0f9e018c5bc20be0c6f0db8b686deff584a06
3
+ metadata.gz: 42c85e43c9d07d94ed0d7c502afa8b4ee638f86ca41bf6b742f7f34cfd47a355
4
+ data.tar.gz: 506ac06824fd78a878302544967b7f997bfae64c6e4e26da9b5955603595ffc2
5
5
  SHA512:
6
- metadata.gz: d6a3da501e77e3d0e8c4fdff93372014e7c0761e2971e750ea8de2eea9208174740467a16f55558dc8be69446dce84a1709547664e759d796787620fa2032a58
7
- data.tar.gz: bef5d70dc50b1b68396464410844c05c40698298339476a43c825f09899f9a0d01d0e4283207a30f3b1858415d2bd2509fcc6aad88f61484c10fec7a13244ea6
6
+ metadata.gz: 4dbf710685173878b38ce96238eb9c1e558bd4b9472d0f928146920f21b2de3a4eb3c64195ad87da9940383f7190c6d89404419390bce6f4fcceb134a959f634
7
+ data.tar.gz: aa1f9ba981439836636dcab9a0adcd61b834f7c5e2667b86dd43980d7b3a3072f2df2b4ab6e7d6f7161fa7ed449c9473fd1a796692680dbffeb6a25e9977f0ee
@@ -3,5 +3,8 @@
3
3
  xml << render(partial: '/drilldown/excel_row_header')
4
4
 
5
5
  result[:records].each do |t|
6
- xml << render(partial: '/drilldown/excel_row', locals: { transaction: t, previous_transaction: nil, errors: [], error_row: false, meter1_errors: false })
6
+ xml << render(
7
+ partial: '/drilldown/excel_row',
8
+ locals: { transaction: t, previous_transaction: nil, errors: [], error_row: false, meter1_errors: false }
9
+ )
7
10
  end
@@ -6,7 +6,12 @@ xml.Row do
6
6
 
7
7
  @search.fields.each_with_index do |field, i|
8
8
  if field == 'time'
9
- value = (transaction.respond_to?(:completed_at) ? transaction.completed_at : transaction.created_at).localtime.strftime('%Y-%m-%d %H:%M')
9
+ value = ((
10
+ if transaction.respond_to?(:completed_at)
11
+ transaction.completed_at
12
+ else
13
+ transaction.created_at
14
+ end)).localtime.strftime('%Y-%m-%d %H:%M')
10
15
  else
11
16
  value = if @transaction_fields_map[field.to_sym][:attr_method]
12
17
  @transaction_fields_map[field.to_sym][:attr_method].call(transaction)
@@ -9,7 +9,11 @@ xml.Row do
9
9
  end
10
10
  end
11
11
  if dimension > 0
12
- xml.Cell('ss:StyleID' => 'Outer', 'ss:Index' => dimension.to_s) { xml.Data value_label(dimension - 1, result[:value]), 'ss:Type' => 'String' }
12
+ xml.Cell('ss:StyleID' => 'Outer',
13
+ 'ss:Index' => dimension.to_s) do
14
+ xml.Data value_label(dimension - 1, result[:value]),
15
+ 'ss:Type' => 'String'
16
+ end
13
17
  end
14
18
 
15
19
  xml.Cell('ss:StyleID' => 'Outer') { xml.Data result[:count].inspect, 'ss:Type' => 'Number' }
@@ -4,8 +4,12 @@ xml.chart(xAxisName: (@dimensions[0][:pretty_name] || 'Elections').gsub("'", '')
4
4
  showValues: '1', caption: caption, subcaption: subcaption,
5
5
  yAxisName: "Election #{t(@search.select_value.downcase)}", numberSuffix: '') do
6
6
  @result[:rows].each do |res|
7
- xml.set(name: @dimensions[0][:label_method] ? @dimensions[0][:label_method].call(res[:value]) : res[:value],
7
+ xml.set name: @dimensions[0][:label_method] ? @dimensions[0][:label_method].call(res[:value]) : res[:value],
8
8
  value: res[@search.select_value.downcase.to_sym],
9
- link: @dimensions[0][:url_param_name] ? CGI.escape(url_for(@search.drill_down(@dimensions, res[:value]).url_options)) : '')
9
+ link: if @dimensions[0][:url_param_name]
10
+ CGI.escape(url_for(@search.drill_down(@dimensions, res[:value]).url_options))
11
+ else
12
+ ''
13
+ end
10
14
  end
11
15
  end
@@ -1,23 +1,35 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- xml.chart xAxisName: (@dimensions[0][:pretty_name] || 'Elections').gsub("'", ''), palette: '2',
4
- caption: caption, subcaption: subcaption,
5
- showNames: '1', showValues: @result[:rows].size > 15 || @result[:rows][0] && @result[:rows][0][:rows].size > 4 ? 0 : 1, decimals: '0',
6
- numberPrefix: '', clustered: '0', exeTime: '1.5', showPlotBorder: '0', zGapPlot: '30',
7
- zDepth: '90', divLineEffect: 'emboss', startAngX: '10', endAngX: '18', startAngY: '-10',
8
- numberSuffix: '', zAxisName: 'Z Axis', yAxisName: "Transaction #{t(@search.select_value.downcase)}", endAngY: '-40' do
3
+ xml.chart(
4
+ xAxisName: (@dimensions[0][:pretty_name] || 'Elections').gsub("'", ''), palette: '2',
5
+ caption: caption, subcaption: subcaption,
6
+ showNames: '1',
7
+ showValues: @result[:rows].size > 15 || @result[:rows][0] && @result[:rows][0][:rows].size > 4 ? 0 : 1,
8
+ decimals: '0',
9
+ numberPrefix: '', clustered: '0', exeTime: '1.5', showPlotBorder: '0', zGapPlot: '30',
10
+ zDepth: '90', divLineEffect: 'emboss', startAngX: '10', endAngX: '18', startAngY: '-10',
11
+ numberSuffix: '', zAxisName: 'Z Axis',
12
+ yAxisName: "Transaction #{t(@search.select_value.downcase)}", endAngY: '-40'
13
+ ) do
9
14
  unless @result[:rows].empty?
10
15
  xml.categories do
11
16
  @result[:rows].each do |result|
12
- xml.category label: @dimensions[0][:label_method] ? @dimensions[0][:label_method].call(result[:value]) : result[:value]
17
+ label_method = @dimensions[0][:label_method]
18
+ xml.category label: label_method ? label_method.call(result[:value]) : result[:value]
13
19
  end
14
20
  end
15
21
 
16
22
  @result[:rows][0][:rows].reverse.each_with_index do |result, i|
17
- xml.dataset seriesName: @dimensions[1][:label_method] ? @dimensions[1][:label_method].call(result[:value]) : result[:value] do
23
+ name = if @dimensions[1][:label_method]
24
+ @dimensions[1][:label_method].call(result[:value])
25
+ else
26
+ result[:value]
27
+ end
28
+ xml.dataset seriesName: name do
18
29
  @result[:rows].each do |res|
19
30
  value = res[:rows].reverse[i][:value]
20
- xml.set(label: @dimensions[0][:label_method] ? @dimensions[0][:label_method].call(res[:value]) : "#{res[:value]}, #{value}",
31
+ label_method = @dimensions[0][:label_method]
32
+ xml.set(label: (label_method ? label_method.call(res[:value]) : "#{res[:value]}, #{value}"),
21
33
  value: res[:rows].reverse[i][@search.select_value.downcase.to_sym],
22
34
  link: CGI.escape(url_for(@search.drill_down(@dimensions, res[:value], value).url_options)))
23
35
  end
@@ -1,25 +1,48 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- xml.chart xAxisName: (@dimensions[0][:pretty_name] || 'Elections').gsub("'", ''), palette: '2',
4
- caption: caption, subcaption: subcaption,
5
- showNames: '1', showValues: @result[:rows].size > 15 || @result[:rows][0] && @result[:rows][0][:rows].size > 4 ? 0 : 1, decimals: '0',
6
- numberPrefix: '', clustered: '0', exeTime: '1.5', showPlotBorder: '0', zGapPlot: '30',
7
- zDepth: '90', divLineEffect: 'emboss', startAngX: '10', endAngX: '18', startAngY: '-10',
8
- numberSuffix: '', zAxisName: 'Z Axis', yAxisName: "Transaction #{t(@search.select_value.downcase)}", endAngY: '-40' do
3
+ xml.chart(
4
+ xAxisName: (@dimensions[0][:pretty_name] || 'Elections').gsub("'", ''), palette: '2',
5
+ caption: caption, subcaption: subcaption,
6
+ showNames: '1',
7
+ showValues:
8
+ @result[:rows].size > 15 || @result[:rows][0] && @result[:rows][0][:rows].size > 4 ? 0 : 1,
9
+ decimals: '0',
10
+ numberPrefix: '', clustered: '0', exeTime: '1.5', showPlotBorder: '0', zGapPlot: '30',
11
+ zDepth: '90', divLineEffect: 'emboss', startAngX: '10', endAngX: '18', startAngY: '-10',
12
+ numberSuffix: '', zAxisName: 'Z Axis',
13
+ yAxisName: "Transaction #{t(@search.select_value.downcase)}", endAngY: '-40'
14
+ ) do
9
15
  unless @result[:rows].empty?
10
16
  xml.categories do
11
17
  @result[:rows].each do |result|
12
- xml.category label: @dimensions[0][:label_method] ? @dimensions[0][:label_method].call(result[:value]) : result[:value]
18
+ xml.category label: if @dimensions[0][:label_method]
19
+ @dimensions[0][:label_method].call(result[:value])
20
+ else
21
+ result[:value]
22
+ end
13
23
  end
14
24
  end
15
25
 
16
26
  @result[:rows][0][:rows].reverse.each_with_index do |result, i|
17
- xml.dataset seriesName: @dimensions[1][:label_method] ? @dimensions[1][:label_method].call(result[:value]) : result[:value] do
27
+ series_name =
28
+ if @dimensions[1][:label_method]
29
+ @dimensions[1][:label_method].call(result[:value])
30
+ else
31
+ result[:value]
32
+ end
33
+ xml.dataset seriesName: series_name do
18
34
  @result[:rows].each do |res|
19
35
  value = res[:rows].reverse[i][:value]
20
- xml.set(label: @dimensions[0][:label_method] ? @dimensions[0][:label_method].call(res[:value]) : "#{res[:value]}, #{value}",
21
- value: res[:rows].reverse[i][@search.select_value.downcase.to_sym],
22
- link: CGI.escape(url_for(@search.drill_down(@dimensions, res[:value], value).url_options)))
36
+ xml.set(
37
+ label:
38
+ if @dimensions[0][:label_method]
39
+ @dimensions[0][:label_method].call(res[:value])
40
+ else
41
+ "#{res[:value]}, #{value}"
42
+ end,
43
+ value: res[:rows].reverse[i][@search.select_value.downcase.to_sym],
44
+ link: CGI.escape(url_for(@search.drill_down(@dimensions, res[:value], value).url_options))
45
+ )
23
46
  end
24
47
  end
25
48
  end
@@ -15,12 +15,14 @@ xml.Workbook(
15
15
  xml.Worksheet 'ss:Name' => 'Transaction Summary' do
16
16
  xml.Table do
17
17
  xml.Row 'ss:Height' => '18.75' do
18
- xml.Cell 'ss:MergeAcross' => @search.list ? @search.fields.size - 1 : @dimensions.size + 2, 'ss:StyleID' => 'MainTitle' do
18
+ xml.Cell 'ss:MergeAcross' => @search.list ? @search.fields.size - 1 : @dimensions.size + 2,
19
+ 'ss:StyleID' => 'MainTitle' do
19
20
  xml.Data caption, 'ss:Type' => 'String'
20
21
  end
21
22
  end
22
23
  xml.Row 'ss:Height' => '15.75' do
23
- xml.Cell 'ss:MergeAcross' => @search.list ? @search.fields.size - 1 : @dimensions.size + 2, 'ss:StyleID' => 'SubTitle' do
24
+ xml.Cell 'ss:MergeAcross' => @search.list ? @search.fields.size - 1 : @dimensions.size + 2,
25
+ 'ss:StyleID' => 'SubTitle' do
24
26
  xml.Data subcaption, 'ss:Type' => 'String'
25
27
  end
26
28
  end
@@ -33,6 +33,7 @@ module SimpleDrilldown
33
33
  begin
34
34
  base.c_target_class = base.name.chomp('Controller').constantize
35
35
  rescue NameError
36
+ # No default target class found
36
37
  end
37
38
  end
38
39
  end
@@ -101,7 +102,9 @@ module SimpleDrilldown
101
102
  raise "Unexpected options: #{options.inspect}" if options.present?
102
103
 
103
104
  queries.each do |query_opts|
104
- raise "Unknown options: #{query_opts.keys.inspect}" unless (query_opts.keys - %i[select includes where]).empty?
105
+ unless (query_opts.keys - %i[select includes where]).empty?
106
+ raise "Unknown options: #{query_opts.keys.inspect}"
107
+ end
105
108
  end
106
109
 
107
110
  c_dimension_defs[name.to_s] = {
@@ -125,7 +128,7 @@ module SimpleDrilldown
125
128
  pretty_name: I18n.t(name, default: :"activerecord.models.#{name}"),
126
129
  queries: queries,
127
130
  reverse: reverse,
128
- select_expression: queries.size > 1 ? "COALESCE(#{queries.map { |q| q[:select] }.join(',')})" : queries[0][:select],
131
+ select_expression: "COALESCE(#{queries.map { |q| q[:select] }.join(',')})",
129
132
  row_class: row_class,
130
133
  url_param_name: name.to_s
131
134
  }
@@ -182,7 +185,7 @@ module SimpleDrilldown
182
185
  dimension_def = c_dimension_defs[field]
183
186
  raise "Unknown filter field: #{field.inspect}" if dimension_def.nil?
184
187
 
185
- values = [*values]
188
+ values = Array(values)
186
189
  if dimension_def[:interval]
187
190
  values *= 2 if values.size == 1
188
191
  raise "Need 2 values for interval filter: #{values.inspect}" if values.size != 2
@@ -237,9 +240,9 @@ module SimpleDrilldown
237
240
  when Hash
238
241
  sql = +''
239
242
  include.each do |parent, child|
240
- sql << ' ' + make_join(joins, model, parent)
243
+ sql << " #{make_join(joins, model, parent)}"
241
244
  ass = model.to_s.camelize.constantize.reflect_on_association parent
242
- sql << ' ' + make_join(joins, parent, child, ass.class_name.constantize)
245
+ sql << " #{make_join(joins, parent, child, ass.class_name.constantize)}"
243
246
  end
244
247
  sql
245
248
  when Symbol
@@ -373,8 +376,7 @@ module SimpleDrilldown
373
376
  selected = @search.filter[dimension_name] || []
374
377
  raise "Unknown dimension #{dimension_name.inspect}: #{c_dimension_defs.keys.inspect}" unless dimension
375
378
 
376
- choices = [[t(:all), nil]] +
377
- (dimension[:legal_values]&.call(@search)&.map { |o| o.is_a?(Array) ? o[0..1].map(&:to_s) : o.to_s } || [])
379
+ choices = [[t(:all), nil]] + (legal_values_for_dimension(dimension) || [])
378
380
  choices_html = choices.map do |c|
379
381
  %(<option value="#{c[1]}"#{' SELECTED' if selected.include?(c[1])}>#{c[0]}</option>)
380
382
  end.join("\n")
@@ -388,9 +390,7 @@ module SimpleDrilldown
388
390
 
389
391
  def excel_export
390
392
  index(false)
391
- headers['Content-Type'] = 'application/vnd.ms-excel'
392
- headers['Content-Disposition'] = 'attachment; filename="drilldown.xml"'
393
- headers['Cache-Control'] = ''
393
+ set_excel_headers
394
394
  render template: '/drilldown/excel_export', layout: false
395
395
  end
396
396
 
@@ -398,21 +398,21 @@ module SimpleDrilldown
398
398
  params[:search][:list] = '1'
399
399
  index(false)
400
400
  @records = get_records(@result)
401
- headers['Content-Type'] = 'application/vnd.ms-excel'
402
- headers['Content-Disposition'] = 'attachment; filename="drilldown.xml"'
401
+ set_excel_headers
403
402
  render template: '/drilldown/excel_export_records', layout: false
404
403
  end
405
404
 
406
- def xml_export
407
- params[:search][:list] = '1'
408
- index(false)
409
- @records = get_records(@result)
410
- headers['Content-Type'] = 'text/xml'
411
- headers['Content-Disposition'] = 'attachment; filename="drilldown.xml"'
412
- render template: '/drilldown/xml_export', layout: false
405
+ private
406
+
407
+ def set_excel_headers
408
+ headers['Content-Type'] = 'application/vnd.ms-excel'
409
+ headers['Content-Disposition'] = %{attachment; filename="#{c_target_class.table_name}.xml"}
410
+ headers['Cache-Control'] = ''
413
411
  end
414
412
 
415
- private
413
+ def legal_values_for_dimension(dimension)
414
+ dimension[:legal_values]&.call(@search)&.map { |o| o.is_a?(Array) ? o[0..1].map(&:to_s) : o.to_s }
415
+ end
416
416
 
417
417
  def new_search_object
418
418
  SimpleDrilldown::Search.new(params[:search]&.to_unsafe_h, c_default_fields, c_default_select_value)
@@ -495,7 +495,8 @@ module SimpleDrilldown
495
495
 
496
496
  result_rows = []
497
497
  loop do
498
- sub_result = result_from_rows(rows, row_index, dimension + 1, values + [rows[row_index]["value#{dimension + 1}"]])
498
+ sub_result = result_from_rows(rows, row_index, dimension + 1,
499
+ values + [rows[row_index]["value#{dimension + 1}"]])
499
500
  break if sub_result.nil?
500
501
 
501
502
  result_rows << sub_result
@@ -517,23 +518,20 @@ module SimpleDrilldown
517
518
  end
518
519
 
519
520
  def populate_list(conditions, includes, result, values)
520
- if result[:rows]
521
- return result[:rows].each { |r| populate_list(conditions, includes, r, values + [r[:value]]) }
522
- end
521
+ return result[:rows].each { |r| populate_list(conditions, includes, r, values + [r[:value]]) } if result[:rows]
522
+
523
523
  list_includes = merge_includes(includes, c_list_includes)
524
524
  @search.fields.each do |field|
525
525
  field_def = c_fields[field.to_sym]
526
526
  raise "Field definition missing for: #{field.inspect}" unless field_def
527
527
 
528
528
  field_includes = field_def[:include]
529
- if field_includes
530
- list_includes = merge_includes(list_includes , field_includes)
531
- end
529
+ list_includes = merge_includes(list_includes, field_includes) if field_includes
532
530
  end
533
531
  if @search.list_change_times
534
532
  @history_fields.each do |f|
535
533
  if @search.fields.include? f
536
- list_includes = merge_includes(list_includes, assignment: { order: :"#{f}_changes" } )
534
+ list_includes = merge_includes(list_includes, assignment: { order: :"#{f}_changes" })
537
535
  end
538
536
  end
539
537
  end
@@ -546,12 +544,12 @@ module SimpleDrilldown
546
544
 
547
545
  def merge_includes(*args)
548
546
  hash = hash_includes(*args)
549
- result = hash.dup.map { |k, v|
547
+ result = hash.dup.map do |k, v|
550
548
  if v.blank?
551
549
  hash.delete(k)
552
550
  k
553
551
  end
554
- }.compact
552
+ end.compact
555
553
  result << hash unless hash.blank?
556
554
  case result.size
557
555
  when 0
@@ -567,14 +565,15 @@ module SimpleDrilldown
567
565
  args.inject({}) do |h, inc|
568
566
  case inc
569
567
  when Array
570
- inc.each { |v|
568
+ inc.each do |v|
571
569
  h = hash_includes(h, v)
572
- }
570
+ end
573
571
  when Hash
574
- inc.each { |k, v|
572
+ inc.each do |k, v|
575
573
  h[k] = merge_includes(h[k], v)
576
- }
574
+ end
577
575
  when NilClass, FalseClass
576
+ # Leave as it is
578
577
  when String, Symbol
579
578
  h[inc] ||= []
580
579
  else
@@ -11,9 +11,8 @@ module SimpleDrilldown
11
11
  end
12
12
 
13
13
  def caption
14
- result = @search.title || "#{controller.c_target_class} #{t(@search.select_value.downcase)}" +
15
- (@dimensions && @dimensions.any? ? ' by ' + @dimensions.map { |d| d[:pretty_name] }.join(' and ') : '')
16
- result.gsub('$date', [*@search.filter[:calendar_date]].uniq.join(' - '))
14
+ result = @search.title || caption_txt
15
+ result.gsub('$date', Array(@search.filter[:calendar_date]).uniq.join(' - '))
17
16
  end
18
17
 
19
18
  def subcaption
@@ -21,9 +20,15 @@ module SimpleDrilldown
21
20
  end
22
21
 
23
22
  def summary_row(result, parent_result = nil, dimension = 0, headers = [], new_row = true)
24
- html = render(partial: '/drilldown/summary_row', locals: { result: result, parent_result: parent_result, new_row: new_row, dimension: dimension, headers: headers, with_results: !result[:rows] })
23
+ html = render(partial: '/drilldown/summary_row', locals: {
24
+ result: result, parent_result: parent_result, new_row: new_row, dimension: dimension,
25
+ headers: headers, with_results: !result[:rows]
26
+ })
25
27
  if result[:rows]
26
- sub_headers = headers + [{ value: result[:value], display_row_count: result[:nodes] + result[:row_count] * (@search.list ? 1 : 0) }]
28
+ sub_headers = headers + [{
29
+ value: result[:value],
30
+ display_row_count: result[:nodes] + result[:row_count] * (@search.list ? 1 : 0)
31
+ }]
27
32
  significant_rows = result[:rows].reject { |r| r[:row_count].zero? }
28
33
  significant_rows.each_with_index do |r, i|
29
34
  html << summary_row(r, result, dimension + 1, sub_headers, i.positive?)
@@ -31,7 +36,12 @@ module SimpleDrilldown
31
36
  elsif @search.list
32
37
  html << render(partial: '/drilldown/record_list', locals: { result: result })
33
38
  end
34
- html << render(partial: '/drilldown/summary_total_row', locals: { result: result, parent_result: parent_result, headers: headers.dup, dimension: dimension }) if dimension < @dimensions.size
39
+ if dimension < @dimensions.size
40
+ html << render(partial: '/drilldown/summary_total_row',
41
+ locals: {
42
+ result: result, parent_result: parent_result, headers: headers.dup, dimension: dimension
43
+ })
44
+ end
35
45
 
36
46
  html
37
47
  end
@@ -41,25 +51,42 @@ module SimpleDrilldown
41
51
  if result[:rows]
42
52
  significant_rows = result[:rows].reject { |r| r[:row_count].zero? }
43
53
  significant_rows.each_with_index do |r, i|
44
- sub_headers = if i.zero?
45
- if dimension.zero?
46
- headers
47
- else
48
- headers + [{ value: result[:value], display_row_count: result[:nodes] + result[:row_count] * (@search.list ? 1 : 0) }]
49
- end
50
- else
51
- [] # [{:value => result[:value], :row_count => result[:row_count]}]
52
- end
54
+ sub_headers =
55
+ if i.zero?
56
+ if dimension.zero?
57
+ headers
58
+ else
59
+ headers + [{
60
+ value: result[:value],
61
+ display_row_count: result[:nodes] + result[:row_count] * (@search.list ? 1 : 0)
62
+ }]
63
+ end
64
+ else
65
+ [] # [{:value => result[:value], :row_count => result[:row_count]}]
66
+ end
53
67
  xml << excel_summary_row(r, result, dimension + 1, sub_headers)
54
68
  end
55
69
  else
56
- xml << render(partial: '/drilldown/excel_summary_row', locals: { result: result, parent_result: parent_result, headers: headers.dup, dimension: dimension })
70
+ xml << render(partial: '/drilldown/excel_summary_row',
71
+ locals: { result: result, parent_result: parent_result, headers: headers.dup,
72
+ dimension: dimension })
57
73
 
58
74
  xml << render(partial: '/drilldown/excel_record_list', locals: { result: result }) if @search.list
59
75
  end
60
76
 
61
- xml << render(partial: '/drilldown/excel_summary_total_row', locals: { result: result, headers: headers.dup, dimension: dimension }) if dimension < @dimensions.size
77
+ if dimension < @dimensions.size
78
+ xml << render(partial: '/drilldown/excel_summary_total_row', locals: {
79
+ result: result, headers: headers.dup, dimension: dimension
80
+ })
81
+ end
62
82
  xml
63
83
  end
84
+
85
+ private
86
+
87
+ def caption_txt
88
+ "#{controller.c_target_class} #{t(@search.select_value.downcase)}" +
89
+ (@dimensions && @dimensions.any? ? " by #{@dimensions.map { |d| d[:pretty_name] }.join(' and ')}" : '')
90
+ end
64
91
  end
65
92
  end
@@ -19,17 +19,9 @@ module SimpleDrilldown
19
19
  VOLUME_COMPENSATED = 'VOLUME_COMPENSATED'
20
20
  end
21
21
 
22
- attr_reader :dimensions
23
- attr_reader :display_type
24
- attr_reader :fields
25
- attr_reader :filter
26
- attr_accessor :list
27
- attr_accessor :percent
28
- attr_reader :list_change_times
29
- attr_reader :order_by_value
30
- attr_reader :select_value
31
- attr_reader :title
32
- attr_reader :default_fields
22
+ attr_reader :dimensions, :display_type, :fields, :filter, :list_change_times, :order_by_value,
23
+ :select_value, :title, :default_fields
24
+ attr_accessor :list, :percent
33
25
 
34
26
  def self.validators_on(_attribute)
35
27
  []
@@ -60,7 +52,7 @@ module SimpleDrilldown
60
52
  @dimensions = attributes && attributes[:dimensions] || []
61
53
  @dimensions.delete_if(&:empty?)
62
54
  @filter = attributes && attributes[:filter] ? attributes[:filter] : {}
63
- @filter.keys.dup.each { |k| @filter[k] = [*@filter[k]] }
55
+ @filter.keys.dup.each { |k| @filter[k] = Array(@filter[k]) }
64
56
  @filter.each do |_k, v|
65
57
  v.delete('')
66
58
  v.delete('Select Some Options')
@@ -1,3 +1,3 @@
1
1
  module SimpleDrilldown
2
- VERSION = '0.6.7'
2
+ VERSION = '0.6.8'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_drilldown
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.7
4
+ version: 0.6.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Uwe Kubosch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-13 00:00:00.000000000 Z
11
+ date: 2020-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chartkick
@@ -146,7 +146,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
146
146
  requirements:
147
147
  - - ">="
148
148
  - !ruby/object:Gem::Version
149
- version: '0'
149
+ version: '2.5'
150
150
  required_rubygems_version: !ruby/object:Gem::Requirement
151
151
  requirements:
152
152
  - - ">="