simple_drilldown 0.10.2 → 0.12.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
  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