simple_drilldown 0.15.1 → 1.0.0

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: 71d5040959b787d7adfca8b43f2d64fcfa3fe8f4d126baf6f1417ebb8a44bfae
4
- data.tar.gz: ec7ac9464c96bfc1686916033cbbadb3af867b1cdc04e1ce5d1bd6ae72cf70dc
3
+ metadata.gz: 7b7bb3f55e6765cce2fded62fc1688d92601072b82fa760595d8ed24feb253d6
4
+ data.tar.gz: 94a9cc7ae437e28ac7ff8bfdf9bf290fb15aa735a012f42fee30d1831f7171fe
5
5
  SHA512:
6
- metadata.gz: 149f46e2eef26f80dcaffea81456bc9950ee19d8280954b9e8fd164552d5499fc71bfd6cc16c2475f8850e3db2527491681ff9a4a5610cea495fd43ba5f1f6e1
7
- data.tar.gz: a8cd1d324b1d990526c3c5021639c3a33cb940145b8ae3797d2043e5dbeea9060be7873c54f4d53c675bc9288273efb229dac0209117be549dc0d172fce4e399
6
+ metadata.gz: 8dd8264f046e74f5f7fb54bf5dc3fcf9f7af38dbb2469f36705f508184558522406cc5e548d65ff61d59c2ef94fe23f91bdc896612d9f90ee177799fa9a6b48a
7
+ data.tar.gz: 36e0928ca87085994297cd52d617060ada565c2036832090a9655261b1779f88a29d359fc39b7b0137a467f76d4cbd5f9ed0b34cf0748d8f16e5d5625e371303
data/README.md CHANGED
@@ -1,8 +1,4 @@
1
- # SimpleDrilldown
2
-
3
- <a href="https://travis-ci.org/DatekWireless/simple_drilldown">
4
- <img align="right" src="https://travis-ci.org/DatekWireless/simple_drilldown.svg?branch=master" alt="Build Status">
5
- </a>
1
+ # SimpleDrilldown [![Test](https://github.com/DatekWireless/simple_drilldown/actions/workflows/test.yml/badge.svg)](https://github.com/DatekWireless/simple_drilldown/actions/workflows/test.yml)
6
2
 
7
3
  `simple_drilldown` offers a simple way to define axis to filter and group records
8
4
  for analysis. The result is a record count for the selected filter and
@@ -159,3 +155,9 @@ $ gem install simple_drilldown
159
155
 
160
156
  ## License
161
157
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
158
+
159
+ ## Release
160
+
161
+ ```bash
162
+ $ rake release
163
+ ```
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ end
8
8
 
9
9
  APP_RAKEFILE = File.expand_path('test/dummy/Rakefile', __dir__)
10
10
  load 'rails/tasks/engine.rake'
11
- load 'rails/tasks/statistics.rake'
11
+ # load 'rails/tasks/statistics.rake'
12
12
 
13
13
  require 'bundler/gem_tasks'
14
14
  require 'rake/testtask'
@@ -87,7 +87,8 @@
87
87
  firstPoint = chart.getElementsAtEventForMode(e, 'nearest', { intersect: true }, false)[0]
88
88
  if (firstPoint) {
89
89
  label = chart.data.labels[firstPoint.index];
90
- console.log("Label: " + label);
90
+ const values = <%== @result[:rows].map { |r| r[:value] }.to_json %>;
91
+ value = values[firstPoint.index];
91
92
  new_location = new URL(window.location.toString());
92
93
  new_location.hash = '';
93
94
  params = new_location.searchParams;
@@ -101,7 +102,7 @@
101
102
  }
102
103
  }
103
104
  params.delete('search[filter][<%= @dimensions[0][:url_param_name] %>][]');
104
- params.set('search[filter][<%= @dimensions[0][:url_param_name] %>][]', label);
105
+ params.set('search[filter][<%= @dimensions[0][:url_param_name] %>][]', value);
105
106
  new_location.searchParams = params;
106
107
  window.location = new_location.href;
107
108
  }
@@ -9,7 +9,7 @@ def excel_header_row(sheet)
9
9
  sheet.add_row row
10
10
  end
11
11
 
12
- def excel_row(sheet, wrap, transaction:)
12
+ def excel_row(sheet, _wrap, transaction:)
13
13
  padding_cells = @dimensions.empty? ? 1 : @dimensions.size
14
14
  row = (1..(padding_cells - 1)).map { |_n| nil }
15
15
 
@@ -25,8 +25,7 @@ def excel_row(sheet, wrap, transaction:)
25
25
 
26
26
  field_def = controller.c_fields[field.to_sym]
27
27
  if @search.list_change_times && field_def[:list_change_times] && transaction.assignment.try(:order)
28
- changes = transaction.assignment.order.send("#{field}_changes")
29
- .map do |al|
28
+ changes = transaction.assignment.order.send("#{field}_changes").map do |al|
30
29
  [al.created_at.localtime.strftime('%H:%M'),
31
30
  PacMan.yaml_load(al.new_values).symbolize_keys[field.to_sym]]
32
31
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  xml.chart(xAxisName: 'Elections',
4
- showValues: '1', caption: caption, subcaption: subcaption,
4
+ showValues: '1', caption:, subcaption:,
5
5
  yAxisName: "Election #{t(@search.select_value.downcase)}", numberSuffix: '') do
6
6
  xml.set(
7
7
  name: @result[:value0],
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  xml.chart(xAxisName: (@dimensions[0][:pretty_name] || 'Elections').gsub("'", ''),
4
- showValues: '1', caption: caption, subcaption: subcaption,
4
+ showValues: '1', caption:, subcaption:,
5
5
  yAxisName: "Election #{t(@search.select_value.downcase)}", numberSuffix: '') do
6
6
  @result[:rows].each do |res|
7
7
  xml.set name: @dimensions[0][:label_method] ? @dimensions[0][:label_method].call(res[:value]) : res[:value],
@@ -2,7 +2,7 @@
2
2
 
3
3
  xml.chart(
4
4
  xAxisName: (@dimensions[0][:pretty_name] || 'Elections').gsub("'", ''), palette: '2',
5
- caption: caption, subcaption: subcaption,
5
+ caption:, subcaption:,
6
6
  showNames: '1',
7
7
  showValues: @result[:rows].size > 15 || (@result[:rows][0] && @result[:rows][0][:rows].size > 4) ? 0 : 1,
8
8
  decimals: '0',
@@ -2,7 +2,7 @@
2
2
 
3
3
  xml.chart(
4
4
  xAxisName: (@dimensions[0][:pretty_name] || 'Elections').gsub("'", ''), palette: '2',
5
- caption: caption, subcaption: subcaption,
5
+ caption:, subcaption:,
6
6
  showNames: '1',
7
7
  showValues:
8
8
  @result[:rows].size > 15 || (@result[:rows][0] && @result[:rows][0][:rows].size > 4) ? 0 : 1,
@@ -21,19 +21,19 @@ def excel_summary_row_xlsx(sheet, result, parent_result = nil, dimension = 0, he
21
21
  end
22
22
  else
23
23
  render(partial: '/simple_drilldown/excel_summary_row_xlsx',
24
- locals: { sheet: sheet, result: result, parent_result: parent_result, headers: headers.dup,
25
- dimension: dimension })
24
+ locals: { sheet:, result:, parent_result:, headers: headers.dup,
25
+ dimension: })
26
26
 
27
27
  if @search.list
28
28
  render(partial: '/simple_drilldown/excel_record_list_xlsx',
29
- locals: { sheet: sheet, result: result })
29
+ locals: { sheet:, result: })
30
30
  end
31
31
  end
32
32
 
33
33
  return if dimension >= @dimensions.size
34
34
 
35
35
  render(partial: '/simple_drilldown/excel_summary_total_row_xlsx', locals: {
36
- sheet: sheet, result: result, headers: headers.dup, dimension: dimension
36
+ sheet:, result:, headers: headers.dup, dimension:
37
37
  })
38
38
  end
39
39
 
@@ -105,7 +105,7 @@ module SimpleDrilldown
105
105
  conditions = options.delete(:where)
106
106
  queries = [{
107
107
  select: select_expression,
108
- includes: includes,
108
+ includes:,
109
109
  where: conditions
110
110
  }]
111
111
  end
@@ -135,15 +135,15 @@ module SimpleDrilldown
135
135
  a.concat(*i)
136
136
  end
137
137
  end,
138
- interval: interval,
139
- label_method: label_method,
140
- legal_values: legal_values,
141
- pretty_name: pretty_name,
142
- queries: queries,
143
- reverse: reverse,
138
+ interval:,
139
+ label_method:,
140
+ legal_values:,
141
+ pretty_name:,
142
+ queries:,
143
+ reverse:,
144
144
  select_expression:
145
145
  queries.size == 1 ? queries[0][:select] : "COALESCE(#{queries.map { |q| q[:select] }.join(',')})",
146
- row_class: row_class,
146
+ row_class:,
147
147
  url_param_name: name.to_s
148
148
  }
149
149
  end
@@ -292,7 +292,7 @@ module SimpleDrilldown
292
292
  "LEFT JOIN #{include_table} #{include_alias} ON #{include_alias}.#{pk_col} = #{model_table}.#{fk_col}"
293
293
  when :has_one, :has_many
294
294
  fk_col = ass.options[:foreign_key] || "#{model}_id"
295
- sql = +"LEFT JOIN #{include_table} #{include_alias} ON #{include_alias}.#{fk_col} = #{model_table}.id"
295
+ sql = "LEFT JOIN #{include_table} #{include_alias} ON #{include_alias}.#{fk_col} = #{model_table}.id"
296
296
  sql << " AND #{include_alias}.deleted_at IS NULL" if ass.klass.paranoid?
297
297
  if ass.scope && (base_ass_order = ScopeHolder.new(ass.scope).to_s)
298
298
  /^(?<ass_order>.*?)(?<ass_order_desc>\s+DESC)?$/i =~ base_ass_order
@@ -321,8 +321,8 @@ module SimpleDrilldown
321
321
  end
322
322
  end
323
323
 
324
- def merge_includes(*args)
325
- hash = hash_includes(*args)
324
+ def merge_includes(*)
325
+ hash = hash_includes(*)
326
326
  result = hash.dup.map do |k, v|
327
327
  if v.blank?
328
328
  hash.delete(k)
@@ -368,7 +368,7 @@ module SimpleDrilldown
368
368
  end
369
369
 
370
370
  def initialize
371
- super()
371
+ super
372
372
  @history_fields = c_fields.select { |_k, v| v[:list_change_times] }.map { |k, _v| k.to_s }
373
373
  end
374
374
 
@@ -427,7 +427,7 @@ module SimpleDrilldown
427
427
  @remaining_dimensions = c_dimension_defs.dup
428
428
  @remaining_dimensions.each_key do |dim_name|
429
429
  if (@search.filter[dim_name] && @search.filter[dim_name].size == 1) ||
430
- (@dimensions.any? { |d| d[:url_param_name] == dim_name })
430
+ @dimensions.any? { |d| d[:url_param_name] == dim_name }
431
431
  @remaining_dimensions.delete(dim_name)
432
432
  end
433
433
  end
@@ -9,7 +9,7 @@ module SimpleDrilldown
9
9
  config.autoload_paths << File.dirname(__dir__)
10
10
 
11
11
  initializer 'simple_drilldown.assets.precompile' do |app|
12
- app.config.try(:assets)&.precompile&.concat(%w[simple_drilldown/application.css chartkick.js])
12
+ app.config.try(:assets)&.precompile&.push('simple_drilldown/application.css', 'chartkick.js')
13
13
  end
14
14
 
15
15
  ActionDispatch::Routing::Mapper.include SimpleDrilldown::Routing
@@ -5,6 +5,7 @@ module SimpleDrilldown
5
5
  module Helper
6
6
  # FIXME(uwe): Should not be necessary: https://github.com/rails/rails/issues/41038
7
7
  include Rails.application.routes.url_helpers
8
+
8
9
  # EMXIF
9
10
 
10
11
  def value_label(dimension_index, value)
@@ -25,8 +26,8 @@ module SimpleDrilldown
25
26
 
26
27
  def summary_row(result, parent_result = nil, dimension = 0, headers = [], new_row: true)
27
28
  html = render(partial: '/simple_drilldown/summary_row', locals: {
28
- result: result, parent_result: parent_result, new_row: new_row, dimension: dimension,
29
- headers: headers, with_results: !result[:rows]
29
+ result:, parent_result:, new_row:, dimension:,
30
+ headers:, with_results: !result[:rows]
30
31
  })
31
32
  if result[:rows]
32
33
  sub_headers = headers + [{
@@ -38,12 +39,12 @@ module SimpleDrilldown
38
39
  html << summary_row(r, result, dimension + 1, sub_headers, new_row: i.positive?)
39
40
  end
40
41
  elsif @search.list
41
- html << render(partial: '/simple_drilldown/record_list', locals: { result: result, dimension: dimension })
42
+ html << render(partial: '/simple_drilldown/record_list', locals: { result:, dimension: })
42
43
  end
43
44
  if dimension < @dimensions.size
44
45
  html << render(partial: '/simple_drilldown/summary_total_row',
45
46
  locals: {
46
- result: result, parent_result: parent_result, headers: headers.dup, dimension: dimension
47
+ result:, parent_result:, headers: headers.dup, dimension:
47
48
  })
48
49
  end
49
50
 
@@ -72,15 +73,15 @@ module SimpleDrilldown
72
73
  end
73
74
  else
74
75
  xml << render(partial: '/simple_drilldown/excel_summary_row',
75
- locals: { result: result, parent_result: parent_result, headers: headers.dup,
76
- dimension: dimension })
76
+ locals: { result:, parent_result:, headers: headers.dup,
77
+ dimension: })
77
78
 
78
- xml << render(partial: '/simple_drilldown/excel_record_list', locals: { result: result }) if @search.list
79
+ xml << render(partial: '/simple_drilldown/excel_record_list', locals: { result: }) if @search.list
79
80
  end
80
81
 
81
82
  if dimension < @dimensions.size
82
83
  xml << render(partial: '/simple_drilldown/excel_summary_total_row', locals: {
83
- result: result, headers: headers.dup, dimension: dimension
84
+ result:, headers: headers.dup, dimension:
84
85
  })
85
86
  end
86
87
  xml
@@ -7,9 +7,9 @@ module SimpleDrilldown
7
7
  path = "#{path}_drilldown" unless /_drilldown$/.match?(path)
8
8
  controller ||= path
9
9
  get "#{path}(.:format)" => "#{controller}#index", as: path
10
- scope path, controller: controller, as: path do
10
+ scope path, controller:, as: path do
11
11
  { excel_export: :xlsx, excel_export_records: :xlsx, html_export: :html }.each do |action, format|
12
- get action, defaults: { format: format }
12
+ get action, defaults: { format: }
13
13
  end
14
14
  get 'choices/:dimension_name', action: :choices, as: :choices
15
15
  yield if block_given?
@@ -51,7 +51,7 @@ module SimpleDrilldown
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]) }
54
- @filter.each do |_k, v|
54
+ @filter.each_value do |v|
55
55
  v.delete('')
56
56
  v.delete('Select Some Options')
57
57
  end
@@ -80,13 +80,13 @@ module SimpleDrilldown
80
80
  def url_options
81
81
  o = {
82
82
  search: {
83
- title: title,
83
+ title:,
84
84
  list: list ? '1' : '0',
85
85
  percent: percent ? '1' : '0',
86
86
  list_change_times: list_change_times ? '1' : '0',
87
- filter: filter,
88
- dimensions: dimensions,
89
- display_type: display_type
87
+ filter:,
88
+ dimensions:,
89
+ display_type:
90
90
  }
91
91
  }
92
92
  o[:search][:fields] = fields unless fields == @default_fields
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SimpleDrilldown
4
- VERSION = '0.15.1'
4
+ VERSION = '1.0.0'
5
5
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # desc "Explaining what the task does"
3
4
  # task :simple_drilldown do
4
5
  # # Task goes here
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_drilldown
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Uwe Kubosch
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-04-14 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: caxlsx_rails
@@ -44,20 +43,14 @@ dependencies:
44
43
  requirements:
45
44
  - - ">="
46
45
  - !ruby/object:Gem::Version
47
- version: '6.1'
48
- - - "<"
49
- - !ruby/object:Gem::Version
50
- version: '8'
46
+ version: '7.2'
51
47
  type: :runtime
52
48
  prerelease: false
53
49
  version_requirements: !ruby/object:Gem::Requirement
54
50
  requirements:
55
51
  - - ">="
56
52
  - !ruby/object:Gem::Version
57
- version: '6.1'
58
- - - "<"
59
- - !ruby/object:Gem::Version
60
- version: '8'
53
+ version: '7.2'
61
54
  description: simple_drilldown offers a simple way to define axis to filter and group
62
55
  records for analysis.
63
56
  email:
@@ -130,7 +123,6 @@ licenses:
130
123
  metadata:
131
124
  allowed_push_host: https://rubygems.org/
132
125
  rubygems_mfa_required: 'true'
133
- post_install_message:
134
126
  rdoc_options: []
135
127
  require_paths:
136
128
  - lib
@@ -138,15 +130,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
138
130
  requirements:
139
131
  - - ">="
140
132
  - !ruby/object:Gem::Version
141
- version: '2.6'
133
+ version: '3.3'
142
134
  required_rubygems_version: !ruby/object:Gem::Requirement
143
135
  requirements:
144
136
  - - ">="
145
137
  - !ruby/object:Gem::Version
146
138
  version: '0'
147
139
  requirements: []
148
- rubygems_version: 3.4.6
149
- signing_key:
140
+ rubygems_version: 3.6.9
150
141
  specification_version: 4
151
142
  summary: Simple data warehouse and drilldown.
152
143
  test_files: []