simple_drilldown 0.10.0 → 0.12.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: 5f10c93cd2049eaa829e29002181350220b204776e6144abdf9ccb4a099f0410
4
- data.tar.gz: 78f94e8d4d20eec48892fbd917fbc7b72d563d4707aac2c85b94c491f66e884c
3
+ metadata.gz: 0ee5038998f08867aae8f882ebec8163339cd1e96dcc0348988a9043c01c4abe
4
+ data.tar.gz: fe9d7bed224bac9ad31ef1243f75193cfaba1c7fc6205af264f0fa3fd53892ca
5
5
  SHA512:
6
- metadata.gz: c95c74daefab61fe569b0aa45717d11a47d47a5ffd77e885cfbcc3b3b22063a50e9ba8609b7d128445984417eda7eafe85f21344f9b4831059fe368662e4fac7
7
- data.tar.gz: 3432bc0565e8fef78ff48a9dffb0f73dfd95872ba233fb91987942667878e55c1b326367998e7f8cc9f3d6a05d655c663b731167bdc4d2a55df426aa5b142bd8
6
+ metadata.gz: a0f67e84ac3294cc28b4441871b129a221395599c55b59a3aa20a3e1b8a9baa2724f33fb6c3569781d6aa661a4a577643e1c5dfc6cc5754fcaf1a50d4f91879d
7
+ data.tar.gz: b506d8a98433aec2cb3e5b58002a280c41d385c30c49caf0d0ab56d41eb163214614b4b6b2a7edb2bd06070dcd7305d844bdd03963e3ec45d8b734859cb5c39b
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
@@ -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:
@@ -267,8 +269,8 @@ module SimpleDrilldown
267
269
  fk_col = ass.options[:foreign_key] || "#{model}_id"
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
- if ass.scope && (ass_order = ScopeHolder.new(ass.scope).to_s)
271
- ass_order = ass_order.sub(/ DESC\s*$/i, '')
272
+ if ass.scope && (base_ass_order = ScopeHolder.new(ass.scope).to_s)
273
+ /^(?<ass_order>\S*)(?<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}")
@@ -276,10 +278,10 @@ module SimpleDrilldown
276
278
  paranoid_clause = 'AND t2.deleted_at IS NULL' if ass.klass.paranoid?
277
279
  # FIXME(uwe): Should we add "where" from the ScopeHolder here as well?
278
280
  # Ref: SimpleDrilldown::Changes#changes_for
279
- min_query = <<~SQL
280
- SELECT MIN(#{ass_order}) FROM #{include_table} t2 WHERE t2.#{fk_col} = #{model_table}.id #{paranoid_clause}
281
+ aggregate_query = <<~SQL
282
+ SELECT #{ass_order_desc ? :MAX : :MIN}(#{ass_order}) FROM #{include_table} t2 WHERE t2.#{fk_col} = #{model_table}.id #{paranoid_clause}
281
283
  SQL
282
- sql << " AND #{ass_order_prefixed} = (#{min_query})"
284
+ sql << " AND #{ass_order_prefixed} = (#{aggregate_query})"
283
285
  end
284
286
  sql
285
287
  else
@@ -578,12 +580,12 @@ module SimpleDrilldown
578
580
  raise "Field definition missing for: #{field.inspect}" unless field_def
579
581
 
580
582
  field_includes = field_def[:include]
581
- list_includes = merge_includes(list_includes, field_includes) if field_includes
583
+ list_includes = self.class.merge_includes(list_includes, field_includes) if field_includes
582
584
  end
583
585
  if @search.list_change_times
584
586
  @history_fields.each do |f|
585
587
  if @search.fields.include? f
586
- list_includes = merge_includes(list_includes, assignment: { order: :"#{f}_changes" })
588
+ list_includes = self.class.merge_includes(list_includes, assignment: { order: :"#{f}_changes" })
587
589
  end
588
590
  end
589
591
  end
@@ -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.0'
2
+ VERSION = '0.12.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.10.0
4
+ version: 0.12.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-11-07 00:00:00.000000000 Z
11
+ date: 2022-02-18 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.3
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