simple_drilldown 0.10.0 → 0.12.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 +4 -4
- data/README.md +6 -2
- data/app/views/drilldown/_chart.html.erb +2 -2
- data/app/views/drilldown/index.html.erb +3 -2
- data/lib/generators/{drilldown_controller → simple_drilldown/controller}/USAGE +1 -1
- data/lib/generators/simple_drilldown/controller/controller_generator.rb +13 -0
- data/lib/generators/{drilldown_controller → simple_drilldown/controller}/templates/drilldown_controller.rb.erb +0 -0
- data/lib/generators/{drilldown_controller → simple_drilldown/controller}/templates/drilldown_controller_test.rb.erb +0 -0
- data/lib/generators/simple_drilldown/views/USAGE +9 -0
- data/lib/generators/simple_drilldown/views/views_generator.rb +11 -0
- data/lib/simple_drilldown/controller.rb +10 -8
- data/lib/simple_drilldown/helper.rb +7 -3
- data/lib/simple_drilldown/version.rb +1 -1
- metadata +13 -11
- data/lib/generators/drilldown_controller/drilldown_controller_generator.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0ee5038998f08867aae8f882ebec8163339cd1e96dcc0348988a9043c01c4abe
|
4
|
+
data.tar.gz: fe9d7bed224bac9ad31ef1243f75193cfaba1c7fc6205af264f0fa3fd53892ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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
|
-
|
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
|
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
|
|
@@ -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
|
File without changes
|
File without changes
|
@@ -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(
|
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 && (
|
271
|
-
ass_order
|
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
|
-
|
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} = (#{
|
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
|
-
|
93
|
-
|
94
|
-
|
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
|
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.
|
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:
|
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: '
|
47
|
+
version: '6.1'
|
48
48
|
- - "<"
|
49
49
|
- !ruby/object:Gem::Version
|
50
|
-
version: '
|
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: '
|
57
|
+
version: '6.1'
|
58
58
|
- - "<"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
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/
|
141
|
-
- lib/generators/
|
142
|
-
- lib/generators/
|
143
|
-
- lib/generators/
|
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.
|
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
|