simple_drilldown 0.9.8 → 0.10.0

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
  SHA256:
3
- metadata.gz: fb72497b4b3d1137bcba13a86c51f4547aa83200a6ef6cfd4940cc26da5dd431
4
- data.tar.gz: e487608abefd17185ef9319e304a2489439a4053121f9c540639317e981141a1
3
+ metadata.gz: 5f10c93cd2049eaa829e29002181350220b204776e6144abdf9ccb4a099f0410
4
+ data.tar.gz: 78f94e8d4d20eec48892fbd917fbc7b72d563d4707aac2c85b94c491f66e884c
5
5
  SHA512:
6
- metadata.gz: 23afcd4a1e3498d316ae6e8d48788fb93e982bbb5982a0e2c5b33277a30c4f14cf23f04c42bcda6fee0d8aec4242644f1e248340088f9cd473bf95f90582687a
7
- data.tar.gz: a841a7dbfffbd22401acddea431d934cbd72d5ed82f8eca35816210230df1becb8d0bfd5ec60dd97f9af7c0f3db904eb4cd8342e82e731339730ff3cfb389e90
6
+ metadata.gz: c95c74daefab61fe569b0aa45717d11a47d47a5ffd77e885cfbcc3b3b22063a50e9ba8609b7d128445984417eda7eafe85f21344f9b4831059fe368662e4fac7
7
+ data.tar.gz: 3432bc0565e8fef78ff48a9dffb0f73dfd95872ba233fb91987942667878e55c1b326367998e7f8cc9f3d6a05d655c663b731167bdc4d2a55df426aa5b142bd8
@@ -6,7 +6,7 @@
6
6
  </style>
7
7
 
8
8
  <% @transaction_fields.each do | field | %>
9
- <%=form.label "fields[#{field}]", t(field, default: :"attributes.#{field}"), :class => "field_label" %>
10
- <%=form.check_box :fields, :id => "search_fields[#{field}]", :name => "search[fields][#{field}]", :checked => @search.fields.include?(field) %>
9
+ <%=form.label "fields[#{field}]", t(field, default: [:"attributes.#{field}", field.humanize]), class: "field_label" %>
10
+ <%=form.check_box :fields, id: "search_fields[#{field}]", name: "search[fields][#{field}]", checked: @search.fields.include?(field) %>
11
11
  <br/>
12
12
  <% end %>
@@ -1,7 +1,7 @@
1
1
  <thead>
2
2
  <tr>
3
3
  <% @search.fields.each do |field| %>
4
- <th><%= t field, default: :"attributes.#{field}" %></th>
4
+ <th><%= t field, default: [:"attributes.#{field}", field.humanize] %></th>
5
5
  <% end %>
6
6
  <th>
7
7
  <%= render 'drilldown/export_links', records: records %>
@@ -3,9 +3,9 @@
3
3
  <thead>
4
4
  <tr>
5
5
  <% @dimensions.each do |d| %>
6
- <th><%= h d[:pretty_name] %></th>
6
+ <th><%= d[:pretty_name] %></th>
7
7
  <% end %>
8
- <th><%= t controller.c_target_class.table_name.capitalize %></th>
8
+ <th><%= t controller.c_target_class.table_name, default: controller.c_target_class.table_name.capitalize %></th>
9
9
  <%= controller.c_summary_fields.map { |l| "<th>#{t(l)}</th>" }.join("\n").html_safe %>
10
10
  </tr>
11
11
  </thead>
@@ -1,4 +1,12 @@
1
1
  <tr class="summary">
2
2
  <td colspan="<%= @dimensions.size - dimension %>"></td>
3
3
  <td align="right"><%= result[:count] %></td>
4
+ <% controller.c_summary_fields.each do |summary_field| %>
5
+ <td align="right">
6
+ <%= result[summary_field] %>
7
+ <% if @search.percent && parent_result && parent_result[summary_field] > 0 %>
8
+ (<%= 100 * result[summary_field] / parent_result[summary_field] %>%)
9
+ <% end %>
10
+ </td>
11
+ <% end %>
4
12
  </tr>
@@ -4,7 +4,7 @@ xml.chart(
4
4
  xAxisName: (@dimensions[0][:pretty_name] || 'Elections').gsub("'", ''), palette: '2',
5
5
  caption: caption, subcaption: subcaption,
6
6
  showNames: '1',
7
- showValues: @result[:rows].size > 15 || @result[:rows][0] && @result[:rows][0][:rows].size > 4 ? 0 : 1,
7
+ showValues: @result[:rows].size > 15 || (@result[:rows][0] && @result[:rows][0][:rows].size > 4) ? 0 : 1,
8
8
  decimals: '0',
9
9
  numberPrefix: '', clustered: '0', exeTime: '1.5', showPlotBorder: '0', zGapPlot: '30',
10
10
  zDepth: '90', divLineEffect: 'emboss', startAngX: '10', endAngX: '18', startAngY: '-10',
@@ -5,7 +5,7 @@ xml.chart(
5
5
  caption: caption, subcaption: subcaption,
6
6
  showNames: '1',
7
7
  showValues:
8
- @result[:rows].size > 15 || @result[:rows][0] && @result[:rows][0][:rows].size > 4 ? 0 : 1,
8
+ @result[:rows].size > 15 || (@result[:rows][0] && @result[:rows][0][:rows].size > 4) ? 0 : 1,
9
9
  decimals: '0',
10
10
  numberPrefix: '', clustered: '0', exeTime: '1.5', showPlotBorder: '0', zGapPlot: '30',
11
11
  zDepth: '90', divLineEffect: 'emboss', startAngX: '10', endAngX: '18', startAngY: '-10',
@@ -11,7 +11,7 @@ def excel_summary_row_xlsx(sheet, result, parent_result = nil, dimension = 0, he
11
11
  else
12
12
  headers + [{
13
13
  value: result[:value],
14
- display_row_count: result[:nodes] + result[:row_count] * (@search.list ? 1 : 0)
14
+ display_row_count: result[:nodes] + (result[:row_count] * (@search.list ? 1 : 0))
15
15
  }]
16
16
  end
17
17
  else
@@ -36,9 +36,7 @@ module SimpleDrilldown
36
36
  # No default target class found
37
37
  end
38
38
  end
39
- return unless base.c_target_class.try :paranoid?
40
-
41
- base.c_base_condition = "#{base.c_target_class.table_name}.deleted_at IS NULL"
39
+ base.update_base_condition
42
40
  end
43
41
 
44
42
  def base_condition(base_condition)
@@ -63,6 +61,7 @@ module SimpleDrilldown
63
61
 
64
62
  def target_class(target_class)
65
63
  self.c_target_class = target_class
64
+ update_base_condition
66
65
  end
67
66
 
68
67
  def select(select)
@@ -148,25 +147,18 @@ module SimpleDrilldown
148
147
 
149
148
  def legal_values_for(field, preserve_filter = false)
150
149
  lambda do |search|
151
- my_filter = search.filter.dup
152
- my_filter.delete(field.to_s) unless preserve_filter
153
- filter_conditions, _t, includes = make_conditions(my_filter)
150
+ filter = search.filter.dup
151
+ filter.delete(field.to_s) unless preserve_filter
152
+ filter_conditions, _t, includes = make_conditions(filter)
154
153
  dimension_def = c_dimension_defs[field.to_s]
155
154
  result_sets = dimension_def[:queries].map do |query|
156
- if query[:includes]
157
- if query[:includes].is_a?(Array)
158
- includes += query[:includes]
159
- else
160
- includes << query[:includes]
161
- end
162
- includes.uniq!
163
- end
155
+ includes = merge_includes(includes, query[:includes]) if query[:includes]
164
156
  rows_query = c_target_class.unscoped.where(c_base_condition)
165
157
  .select("#{query[:select]} AS value")
166
158
  .joins(make_join([], c_target_class.name.underscore.to_sym, includes))
167
159
  .order('value')
168
160
  .group(:value)
169
- # rows_query = rows_query.without_deleted if c_target_class.try :paranoid?
161
+ rows_query = rows_query.without_deleted if c_target_class.try :paranoid?
170
162
  rows_query = rows_query.where(filter_conditions) if filter_conditions
171
163
  rows_query = rows_query.where(query[:where]) if query[:where]
172
164
  rows = rows_query.to_a
@@ -301,6 +293,51 @@ module SimpleDrilldown
301
293
  raise "Unknown join class: #{include.inspect}"
302
294
  end
303
295
  end
296
+
297
+ def merge_includes(*args)
298
+ hash = hash_includes(*args)
299
+ result = hash.dup.map do |k, v|
300
+ if v.blank?
301
+ hash.delete(k)
302
+ k
303
+ end
304
+ end.compact
305
+ result << hash unless hash.blank?
306
+ case result.size
307
+ when 0
308
+ nil
309
+ when 1
310
+ result[0]
311
+ else
312
+ result
313
+ end
314
+ end
315
+
316
+ def hash_includes(*args)
317
+ args.inject({}) do |h, inc|
318
+ case inc
319
+ when Array
320
+ inc.each do |v|
321
+ h = hash_includes(h, v)
322
+ end
323
+ when Hash
324
+ inc.each do |k, v|
325
+ h[k] = merge_includes(h[k], v)
326
+ end
327
+ when NilClass, FalseClass
328
+ # Leave as it is
329
+ when String, Symbol
330
+ h[inc] ||= []
331
+ else
332
+ raise "Unknown include type: #{inc.inspect}"
333
+ end
334
+ h
335
+ end
336
+ end
337
+
338
+ def update_base_condition
339
+ self.c_base_condition = "#{c_target_class.table_name}.deleted_at IS NULL" if c_target_class.try :paranoid?
340
+ end
304
341
  end
305
342
 
306
343
  def initialize
@@ -535,7 +572,7 @@ module SimpleDrilldown
535
572
  def populate_list(conditions, includes, result, values)
536
573
  return result[:rows].each { |r| populate_list(conditions, includes, r, values + [r[:value]]) } if result[:rows]
537
574
 
538
- list_includes = merge_includes(includes, c_list_includes)
575
+ list_includes = self.class.merge_includes(includes, c_list_includes)
539
576
  @search.fields.each do |field|
540
577
  field_def = c_fields[field.to_sym]
541
578
  raise "Field definition missing for: #{field.inspect}" unless field_def
@@ -557,47 +594,6 @@ module SimpleDrilldown
557
594
  result[:records] = base_query.to_a
558
595
  end
559
596
 
560
- def merge_includes(*args)
561
- hash = hash_includes(*args)
562
- result = hash.dup.map do |k, v|
563
- if v.blank?
564
- hash.delete(k)
565
- k
566
- end
567
- end.compact
568
- result << hash unless hash.blank?
569
- case result.size
570
- when 0
571
- nil
572
- when 1
573
- result[0]
574
- else
575
- result
576
- end
577
- end
578
-
579
- def hash_includes(*args)
580
- args.inject({}) do |h, inc|
581
- case inc
582
- when Array
583
- inc.each do |v|
584
- h = hash_includes(h, v)
585
- end
586
- when Hash
587
- inc.each do |k, v|
588
- h[k] = merge_includes(h[k], v)
589
- end
590
- when NilClass, FalseClass
591
- # Leave as it is
592
- when String, Symbol
593
- h[inc] ||= []
594
- else
595
- raise "Unknown include type: #{inc.inspect}"
596
- end
597
- h
598
- end
599
- end
600
-
601
597
  def list_conditions(conditions, values)
602
598
  conditions ||= ['']
603
599
 
@@ -31,7 +31,7 @@ module SimpleDrilldown
31
31
  if result[:rows]
32
32
  sub_headers = headers + [{
33
33
  value: result[:value],
34
- display_row_count: result[:nodes] + result[:row_count] * (@search.list ? 1 : 0)
34
+ display_row_count: result[:nodes] + (result[:row_count] * (@search.list ? 1 : 0))
35
35
  }]
36
36
  significant_rows = result[:rows].reject { |r| r[:row_count].zero? }
37
37
  significant_rows.each_with_index do |r, i|
@@ -62,7 +62,7 @@ module SimpleDrilldown
62
62
  else
63
63
  headers + [{
64
64
  value: result[:value],
65
- display_row_count: result[:nodes] + result[:row_count] * (@search.list ? 1 : 0)
65
+ display_row_count: result[:nodes] + (result[:row_count] * (@search.list ? 1 : 0))
66
66
  }]
67
67
  end
68
68
  else
@@ -47,7 +47,7 @@ module SimpleDrilldown
47
47
  attributes = attributes_or_search
48
48
  @default_fields = default_fields
49
49
  @default_select_value = default_select_value
50
- @dimensions = attributes && attributes[:dimensions] || []
50
+ @dimensions = (attributes && attributes[:dimensions]) || []
51
51
  @dimensions.delete_if(&:empty?)
52
52
  @filter = attributes && attributes[:filter] ? attributes[:filter] : {}
53
53
  @filter.keys.dup.each { |k| @filter[k] = Array(@filter[k]) }
@@ -1,3 +1,3 @@
1
1
  module SimpleDrilldown
2
- VERSION = '0.9.8'
2
+ VERSION = '0.10.0'
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.9.8
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Uwe Kubosch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-28 00:00:00.000000000 Z
11
+ date: 2021-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: caxlsx_rails
@@ -170,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
170
170
  - !ruby/object:Gem::Version
171
171
  version: '0'
172
172
  requirements: []
173
- rubygems_version: 3.2.15
173
+ rubygems_version: 3.2.22
174
174
  signing_key:
175
175
  specification_version: 4
176
176
  summary: Simple data warehouse and drilldown.