active_reporting 0.5.0 → 0.5.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 +4 -4
- data/CHANGELOG.md +12 -1
- data/Gemfile +1 -1
- data/README.md +1 -1
- data/lib/active_reporting.rb +1 -0
- data/lib/active_reporting/fact_model.rb +2 -0
- data/lib/active_reporting/report.rb +5 -3
- data/lib/active_reporting/reporting_dimension.rb +18 -3
- data/lib/active_reporting/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 07ad5ad6e21234d6441a8e97908cf854406d30e2a77b741096d0c874c85d5c42
|
4
|
+
data.tar.gz: 982a82ba6ab68d81dee8a1db785f25d993ac14b2572e698923437a4c1a37bd1e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f7a37f152776e1d9fbc2440b71cb045464063f759c88cfff5d6dc0302ab8e9f6ea7aeed4c35375b5ad25861132dfb1ba4ebad57da6051ba75680beb309c3665
|
7
|
+
data.tar.gz: 0c07b8989e32d26ca39105630ffe74b83207425449d412f344461c194926e0efed64da367449898295de62a3618910f7a249e94ee91efe0290b3332d1b820319
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,19 @@
|
|
1
|
+
## 0.5.1 (2020-06-31)
|
2
|
+
|
3
|
+
### Features
|
4
|
+
|
5
|
+
* Allow dimensions defined in a `Metric` to use LEFT OUTER JOINs via a new `:join_method` option (#32) - *germanotm*
|
6
|
+
|
7
|
+
### Misc
|
8
|
+
|
9
|
+
* Fixed warning about initialized variables
|
10
|
+
* Fixed Ruby 2.7 warning
|
11
|
+
|
1
12
|
## 0.5.0 (2020-06-30)
|
2
13
|
|
3
14
|
### Bug Fixes
|
4
15
|
|
5
|
-
* Fix Missing quotation marks in column names causing
|
16
|
+
* Fix Missing quotation marks in column names causing SQL errors on MYSQL (#30) - *germanotm*
|
6
17
|
|
7
18
|
### Misc
|
8
19
|
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -285,7 +285,7 @@ my_metric = ActiveReporting::Metric.new(
|
|
285
285
|
|
286
286
|
`aggregate` - The SQL aggregate used to calculate the metric. Supported aggregates include count, max, min, avg, and sum. (Default: `:count`)
|
287
287
|
|
288
|
-
`dimensions` - An array of dimensions used for the metric. When given just a symbol, the default dimension label will be used for the dimension. You may specify a hierarchy level by using a hash. (Examples: `[:sales_rep, {sale_date: :month}]`). In hierarchies you can customize the label in this way: `[{sale_date: { field: :month, name: :a_custom_name_for_month }}]`. If you use a hash instead of a Symbol to define a hierarchy the `field` item must be a valid field in your table. The `name` can be whatever label you want.
|
288
|
+
`dimensions` - An array of dimensions used for the metric. When given just a symbol, the default dimension label will be used for the dimension. You may specify a hierarchy level by using a hash. (Examples: `[:sales_rep, {sale_date: :month}]`). In hierarchies you can customize the label in this way: `[{sale_date: { field: :month, name: :a_custom_name_for_month }}]`. If you use a hash instead of a Symbol to define a hierarchy the `field` item must be a valid field in your table. The `name` can be whatever label you want. You can choose the join_method with the dimension. The default value for join_method is :joins which does a standard "INNER JOIN", but you can pass a :left_outer_joins to use "LEFT OUTER JOIN" instead. Ex: `[{sales_rep: { join_method: :left_outer_joins }}]`
|
289
289
|
|
290
290
|
`dimension_filter` - A hash were the keys are dimension filter names and the values are the values passed into the filter.
|
291
291
|
|
data/lib/active_reporting.rb
CHANGED
@@ -85,6 +85,7 @@ module ActiveReporting
|
|
85
85
|
#
|
86
86
|
# @return [Symbol]
|
87
87
|
def self.dimension_label
|
88
|
+
@dimension_label ||= nil
|
88
89
|
@dimension_label || Configuration.default_dimension_label
|
89
90
|
end
|
90
91
|
|
@@ -155,6 +156,7 @@ module ActiveReporting
|
|
155
156
|
#
|
156
157
|
# @return [Boolean]
|
157
158
|
def self.ransack_fallback
|
159
|
+
@ransack_fallback ||= false
|
158
160
|
@ransack_fallback || Configuration.ransack_fallback
|
159
161
|
end
|
160
162
|
private_class_method :ransack_fallback
|
@@ -52,7 +52,8 @@ module ActiveReporting
|
|
52
52
|
def statement
|
53
53
|
parts = {
|
54
54
|
select: select_statement,
|
55
|
-
joins: dimension_joins,
|
55
|
+
joins: dimension_joins(ReportingDimension::JOIN_METHODS[:joins]),
|
56
|
+
left_outer_joins: dimension_joins(ReportingDimension::JOIN_METHODS[:left_outer_joins]),
|
56
57
|
group: group_by_statement,
|
57
58
|
having: having_statement,
|
58
59
|
order: order_by_statement
|
@@ -84,8 +85,9 @@ module ActiveReporting
|
|
84
85
|
end
|
85
86
|
end
|
86
87
|
|
87
|
-
def dimension_joins
|
88
|
-
@dimensions.select { |d| d.type == :standard
|
88
|
+
def dimension_joins(join_method)
|
89
|
+
@dimensions.select { |d| d.type == Dimension::TYPES[:standard] && d.join_method == join_method }.
|
90
|
+
map { |d| d.name.to_sym }
|
89
91
|
end
|
90
92
|
|
91
93
|
def group_by_statement
|
@@ -9,6 +9,9 @@ module ActiveReporting
|
|
9
9
|
# See https://www.postgresql.org/docs/10/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC
|
10
10
|
DATETIME_HIERARCHIES = %i[microseconds milliseconds second minute hour day week month quarter year decade
|
11
11
|
century millennium].freeze
|
12
|
+
JOIN_METHODS = { joins: :joins, left_outer_joins: :left_outer_joins }.freeze
|
13
|
+
attr_reader :join_method
|
14
|
+
|
12
15
|
def_delegators :@dimension, :name, :type, :klass, :association, :model, :hierarchical?, :datetime?
|
13
16
|
|
14
17
|
def self.build_from_dimensions(fact_model, dimensions)
|
@@ -18,7 +21,7 @@ module ActiveReporting
|
|
18
21
|
|
19
22
|
raise(UnknownDimension, "Dimension '#{dim}' not found on fact model '#{fact_model}'") if found_dimension.nil?
|
20
23
|
|
21
|
-
new(found_dimension, label_config(label))
|
24
|
+
new(found_dimension, **label_config(label))
|
22
25
|
end
|
23
26
|
end
|
24
27
|
|
@@ -32,18 +35,20 @@ module ActiveReporting
|
|
32
35
|
|
33
36
|
{
|
34
37
|
label: label[:field],
|
35
|
-
label_name: label[:name]
|
38
|
+
label_name: label[:name],
|
39
|
+
join_method: label[:join_method]
|
36
40
|
}
|
37
41
|
end
|
38
42
|
|
39
43
|
# @param dimension [ActiveReporting::Dimension]
|
40
44
|
# @option label [Maybe<Symbol>] Hierarchical dimension to be used as a label
|
41
45
|
# @option label_name [Maybe<Symbol|String>] Hierarchical dimension custom name
|
42
|
-
def initialize(dimension, label: nil, label_name: nil)
|
46
|
+
def initialize(dimension, label: nil, label_name: nil, join_method: nil)
|
43
47
|
@dimension = dimension
|
44
48
|
|
45
49
|
determine_label_field(label)
|
46
50
|
determine_label_name(label_name)
|
51
|
+
determine_join_method(join_method)
|
47
52
|
end
|
48
53
|
|
49
54
|
# The foreign key to use in queries
|
@@ -106,6 +111,16 @@ module ActiveReporting
|
|
106
111
|
@label_name = label_name ? "#{name}_#{label_name}" : name
|
107
112
|
end
|
108
113
|
|
114
|
+
def determine_join_method(join_method)
|
115
|
+
if join_method.blank?
|
116
|
+
@join_method = ReportingDimension::JOIN_METHODS[:joins]
|
117
|
+
elsif ReportingDimension::JOIN_METHODS.include?(join_method)
|
118
|
+
@join_method = join_method
|
119
|
+
else
|
120
|
+
raise UnknownJoinMethod, "Method '#{join_method}' not included in '#{ReportingDimension::JOIN_METHODS.values}'"
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
109
124
|
def validate_hierarchical_label(hierarchical_label)
|
110
125
|
if datetime?
|
111
126
|
validate_supported_database_for_datetime_hierarchies
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_reporting
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tony Drake
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|