simple_drilldown 0.10.2 → 0.12.1

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: 4d8d435e92abad75f581cab051616487b405d0e399591c2223d40c15679631ba
4
- data.tar.gz: b1576d561bc76f1b9f32055ffdb078c608ecb6888754659f67c2c33b3ed2c2fc
3
+ metadata.gz: 88e7498fba4f1e8b9d25a98861c8ceb5d6b38c7b986c31e8850edf513e832ad9
4
+ data.tar.gz: 6fc5db5c12c5e81833343ffdace9c3e94711393b33b1c8ae43c8c6b0d36c212c
5
5
  SHA512:
6
- metadata.gz: e60320131e2ecacb83020b4f26d1c1e890cb4f569687a41b237f39dece5b19a6aa04e34ad596fc9eb03ebd9fa9fa347ef72e9adf54212df688e028dbc4f5ef8d
7
- data.tar.gz: e6bfc5405cb576cf76367529ebec4c8080d8eeda6ebfa2021f4b9b18981ffab24eec385af90b40b3c94a5b7eb3edbb5f98ca946e62758ae80ef3c5929d3b7b2b
6
+ metadata.gz: be393d70922fcbed0111f2f2160477db1b4020bce4ba7643617564bdd13fd22416088857e1c61fda841a36f453b909e5e17d1215b6fafc5658c0ae3207f11fa4
7
+ data.tar.gz: ea0f6996e1bad25de17e3e671b32cc9c0b90bb368fbdf48f8576e417413f37b4c8db147c27026bf5804530462b2ae3ecb84fc7b047da77f7573065ea09efbbf3
data/README.md CHANGED
@@ -66,7 +66,7 @@ end
66
66
  Create a new controller to focus on posts. Each drilldown controller focuses on
67
67
  one main entity.
68
68
 
69
- bin/rails g drilldown_controller User
69
+ bin/rails g simple_drilldown:controller User
70
70
 
71
71
  ```ruby
72
72
  class PostsDrilldownController < DrilldownController
@@ -115,8 +115,12 @@ results.
115
115
 
116
116
  ### Views
117
117
 
118
- You need the following views:
118
+ This gem includes views for the drilldown visualization using Bootstrap.
119
119
 
120
+ You can override any views by creating them in your `app/views/drilldown` directory.
121
+ If you would like a local copy of the views for overriding you can use the generator.
122
+
123
+ bin/rails g simple_drilldown:views
120
124
 
121
125
 
122
126
  ## Excel export
@@ -41,12 +41,12 @@
41
41
  options << [@dimensions[i][:pretty_name], @dimensions[i][:url_param_name]] if @dimensions[i]
42
42
  options += @remaining_dimensions.keys.map { |name| [controller.c_dimension_defs[name][:pretty_name], name] } %>
43
43
  <%= t(i == 0 ? :group_by : :then_by) %>:
44
- <%= form.select 'dimensions', options, { :selected => @search.dimensions && @search.dimensions[i] },
44
+ <%= form.select 'dimensions', options.sort, { :selected => @search.dimensions && @search.dimensions[i] },
45
45
  { onChange: 'form.submit()', name: 'search[dimensions][]', id: "search_dimensions_#{i}" } %>
46
46
  <% end %>
47
47
 
48
48
  <br/>
49
- <%= t :chart_type %>
49
+ <%= t :chart_type %>:
50
50
  <%= form.radio_button 'display_type', SimpleDrilldown::Search::DisplayType::BAR, { :onChange => 'form.submit()' } %>
51
51
  <%= form.label :display_type_bar, t(:bar) %>
52
52
  <%= form.radio_button 'display_type', SimpleDrilldown::Search::DisplayType::PIE, { :disabled => @search.dimensions.size >= 2, :onChange => 'form.submit()' } %>
@@ -17,8 +17,9 @@
17
17
  <div class="col-md-3" valign="top">
18
18
  <ul class="nav nav-tabs">
19
19
  <li class="nav-item">
20
- <a id="filter-tab" class="nav-link active" data-target="#filter" data-toggle="tab"><%= t :filter %></a></li>
21
- <li><a id="fields-tab" class="nav-link" data-target="#fields" data-toggle="tab"><%= t :fields %></a>
20
+ <a id="filter-tab" class="nav-link active" data-target="#filter" data-toggle="tab" data-bs-toggle="tab" data-bs-target="#filter"><%= t :filter %></a></li>
21
+ <li class="nav-item">
22
+ <a id="fields-tab" class="nav-link" data-target="#fields" data-toggle="tab" data-bs-toggle="tab" data-bs-target="#fields"><%= t :fields %></a>
22
23
  </li>
23
24
  </ul>
24
25
 
@@ -2,7 +2,7 @@ Description:
2
2
  Create a DrilldownController.
3
3
 
4
4
  Example:
5
- rails generate drilldown_controller Thing
5
+ rails generate simple_drilldown:controller Thing
6
6
 
7
7
  This will create:
8
8
  app/controllers/thing_drilldown_controller.rb
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SimpleDrilldown
4
+ class ControllerGenerator < Rails::Generators::NamedBase
5
+ source_root File.expand_path('templates', __dir__)
6
+
7
+ def copy_drilldown_controller_file
8
+ template 'drilldown_controller.rb.erb', "app/controllers/#{file_name}_drilldown_controller.rb"
9
+ template 'drilldown_controller_test.rb.erb', "test/controllers/#{file_name}_drilldown_controller_test.rb"
10
+ route "draw_drilldown :#{singular_name}"
11
+ end
12
+ end
13
+ end
@@ -26,7 +26,7 @@ class <%= class_name %>DrilldownController < SimpleDrilldown::Controller
26
26
  # base_includes :user, :comments # TODO(uwe): Read relations from schema?
27
27
 
28
28
  # What fields should be displayed as default when listing actual <%= class_name %> records.
29
- default_fields %w[created_at updated_at] # TODO(uwe): Read fields from schema?
29
+ default_fields %w[id created_at updated_at] # TODO(uwe): Read fields from schema?
30
30
 
31
31
  # When listing records, what relations should be included for optimization?
32
32
  # list_includes :user, :comments # TODO(uwe): Read relations from schema?
@@ -35,6 +35,7 @@ class <%= class_name %>DrilldownController < SimpleDrilldown::Controller
35
35
  list_order '<%= plural_name %>.created_at'
36
36
 
37
37
  # Field definitions when listing records
38
+ field :id
38
39
  field :created_at
39
40
  field :updated_at
40
41
 
@@ -0,0 +1,9 @@
1
+ Description:
2
+ Generate drilldown views.
3
+
4
+ Example:
5
+ bin/rails generate simple_drilldown:views
6
+
7
+ This will create:
8
+ app/views/drilldown
9
+ app/views/layouts/drilldown
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SimpleDrilldown
4
+ class ViewsGenerator < Rails::Generators::Base
5
+ source_root File.expand_path('../../../../', __dir__)
6
+
7
+ def copy_drilldown_views_file
8
+ directory 'app/views'
9
+ end
10
+ end
11
+ end
@@ -135,7 +135,9 @@ module SimpleDrilldown
135
135
  interval: interval,
136
136
  label_method: label_method,
137
137
  legal_values: legal_values,
138
- pretty_name: I18n.t(name, default: [:"activerecord.models.#{name}", name.to_s.titleize]),
138
+ pretty_name: I18n.t(:"drilldown.dimension.#{name}",
139
+ default: [:"drilldown.#{name}", :"activerecord.models.#{name}", name.to_sym,
140
+ name.to_s.titleize]),
139
141
  queries: queries,
140
142
  reverse: reverse,
141
143
  select_expression:
@@ -268,7 +270,7 @@ module SimpleDrilldown
268
270
  sql = +"LEFT JOIN #{include_table} #{include_alias} ON #{include_alias}.#{fk_col} = #{model_table}.id"
269
271
  sql << " AND #{include_alias}.deleted_at IS NULL" if ass.klass.paranoid?
270
272
  if ass.scope && (base_ass_order = ScopeHolder.new(ass.scope).to_s)
271
- /^(?<ass_order>\S*)(?<ass_order_desc>\s+DESC)?/i =~ base_ass_order
273
+ /^(?<ass_order>.*?)(?<ass_order_desc>\s+DESC)?$/i =~ base_ass_order
272
274
  ass_order_prefixed = ass_order.dup
273
275
  ActiveRecord::Base.connection.columns(include_table).map(&:name).each do |cname|
274
276
  ass_order_prefixed.gsub!(/\b#{cname}\b/, "#{include_alias}.#{cname}")
@@ -381,11 +383,9 @@ module SimpleDrilldown
381
383
  group = nil if group.empty?
382
384
 
383
385
  joins = self.class.make_join([], c_target_class.name.underscore.to_sym, includes)
384
- rows = c_target_class.unscoped.where(c_base_condition).select(select).where(conditions)
385
- .joins(joins)
386
- .group(group)
387
- .order(order)
388
- .to_a
386
+ row_query = c_target_class.unscoped.where(c_base_condition).select(select)
387
+ row_query = row_query.where(conditions) if conditions
388
+ rows = row_query.joins(joins).group(group).order(order).to_a
389
389
  if rows.empty?
390
390
  @result = { value: 'All', count: 0, row_count: 0, nodes: 0, rows: [] }
391
391
  c_summary_fields.each { |f| @result[f] = 0 }
@@ -89,9 +89,13 @@ module SimpleDrilldown
89
89
  private
90
90
 
91
91
  def caption_txt
92
- "#{controller.c_target_class} #{I18n.t(@search.select_value.downcase,
93
- default: @search.select_value.to_s.titleize)}" +
94
- (@dimensions && @dimensions.any? ? " by #{@dimensions.map { |d| d[:pretty_name] }.join(' and ')}" : '')
92
+ class_txt = controller.c_target_class &&
93
+ I18n.t(controller.c_target_class.name.pluralize.to_sym,
94
+ default: [controller.c_target_class.name.downcase.pluralize.to_sym,
95
+ controller.c_target_class.name.pluralize])
96
+ value_txt = I18n.t(@search.select_value.downcase, default: @search.select_value.to_s.titleize)
97
+ dimensions_txt = " by #{@dimensions.map { |d| d[:pretty_name] }.join(' and ')}" if @dimensions&.any?
98
+ "#{class_txt} #{value_txt}#{dimensions_txt}"
95
99
  end
96
100
  end
97
101
  end
@@ -1,3 +1,3 @@
1
1
  module SimpleDrilldown
2
- VERSION = '0.10.2'
2
+ VERSION = '0.12.1'
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.10.2
4
+ version: 0.12.1
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-11-09 00:00:00.000000000 Z
11
+ date: 2022-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: caxlsx_rails
@@ -44,20 +44,20 @@ dependencies:
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '5.2'
47
+ version: '6.1'
48
48
  - - "<"
49
49
  - !ruby/object:Gem::Version
50
- version: '7'
50
+ version: '8'
51
51
  type: :runtime
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
55
  - - ">="
56
56
  - !ruby/object:Gem::Version
57
- version: '5.2'
57
+ version: '6.1'
58
58
  - - "<"
59
59
  - !ruby/object:Gem::Version
60
- version: '7'
60
+ version: '8'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rubocop
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -137,10 +137,12 @@ files:
137
137
  - config/locales/en.yml
138
138
  - config/locales/nb.yml
139
139
  - config/routes.rb
140
- - lib/generators/drilldown_controller/USAGE
141
- - lib/generators/drilldown_controller/drilldown_controller_generator.rb
142
- - lib/generators/drilldown_controller/templates/drilldown_controller.rb.erb
143
- - lib/generators/drilldown_controller/templates/drilldown_controller_test.rb.erb
140
+ - lib/generators/simple_drilldown/controller/USAGE
141
+ - lib/generators/simple_drilldown/controller/controller_generator.rb
142
+ - lib/generators/simple_drilldown/controller/templates/drilldown_controller.rb.erb
143
+ - lib/generators/simple_drilldown/controller/templates/drilldown_controller_test.rb.erb
144
+ - lib/generators/simple_drilldown/views/USAGE
145
+ - lib/generators/simple_drilldown/views/views_generator.rb
144
146
  - lib/simple_drilldown.rb
145
147
  - lib/simple_drilldown/changes.rb
146
148
  - lib/simple_drilldown/controller.rb
@@ -170,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
170
172
  - !ruby/object:Gem::Version
171
173
  version: '0'
172
174
  requirements: []
173
- rubygems_version: 3.2.22
175
+ rubygems_version: 3.3.7
174
176
  signing_key:
175
177
  specification_version: 4
176
178
  summary: Simple data warehouse and drilldown.
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class DrilldownControllerGenerator < Rails::Generators::NamedBase
4
- source_root File.expand_path('templates', __dir__)
5
-
6
- def copy_drilldown_controller_file
7
- template 'drilldown_controller.rb.erb', "app/controllers/#{file_name}_drilldown_controller.rb"
8
- template 'drilldown_controller_test.rb.erb', "test/controllers/#{file_name}_drilldown_controller_test.rb"
9
- route "draw_drilldown :#{singular_name}"
10
- end
11
- end