active_reporting 0.4.0 → 0.4.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 +5 -5
- data/.gitignore +2 -0
- data/.rubocop.yml +3 -0
- data/.travis.yml +16 -3
- data/CHANGELOG.md +13 -1
- data/Gemfile +15 -7
- data/README.md +4 -4
- data/active_reporting.gemspec +2 -2
- data/lib/active_reporting/reporting_dimension.rb +32 -9
- data/lib/active_reporting/version.rb +1 -1
- metadata +7 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4470ea5ed19154c0f73c4205dfb251f327a076563eeee479a8ebf1410cfd6c81
|
4
|
+
data.tar.gz: '038914792fde14a53347f7952336a68e3d2520a171dbb2a620342ba85dffc144'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0dafa3b0a2d8a9731f14c51e1505bdf79b79cb52fb9b9ecabe3c8006340f946b60638090b775a830a8952f7dce1c32f75608eb488894e08d899e0cc6b5b0d5e5
|
7
|
+
data.tar.gz: a4a2e65604d42d290582c50954aa66f991350bf5efbfd47887ae4534d4ed7811dc70538371cd693650124af7f1ef0843ebd4c62a84111527d35c268231a79a11
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
@@ -1,10 +1,15 @@
|
|
1
1
|
sudo: false
|
2
2
|
language: ruby
|
3
|
+
addons:
|
4
|
+
postgresql: "9.6"
|
3
5
|
rvm:
|
4
|
-
- 2.
|
5
|
-
- 2.
|
6
|
-
- 2.
|
6
|
+
- 2.4.6
|
7
|
+
- 2.5.5
|
8
|
+
- 2.6.3
|
7
9
|
env:
|
10
|
+
- RAILS=6-0 DB=sqlite
|
11
|
+
- RAILS=6-0 DB=pg
|
12
|
+
- RAILS=6-0 DB=mysql
|
8
13
|
- RAILS=5-2 DB=sqlite
|
9
14
|
- RAILS=5-2 DB=pg
|
10
15
|
- RAILS=5-2 DB=mysql
|
@@ -14,6 +19,14 @@ env:
|
|
14
19
|
- RAILS=4-2 DB=sqlite
|
15
20
|
- RAILS=4-2 DB=pg
|
16
21
|
- RAILS=4-2 DB=mysql
|
22
|
+
matrix:
|
23
|
+
exclude:
|
24
|
+
- rvm: 2.4.6
|
25
|
+
env: RAILS=6-0 DB=mysql
|
26
|
+
- rvm: 2.4.6
|
27
|
+
env: RAILS=6-0 DB=pg
|
28
|
+
- rvm: 2.4.6
|
29
|
+
env: RAILS=6-0 DB=sqlite
|
17
30
|
before_script:
|
18
31
|
- psql -c 'create database active_reporting_test;' -U postgres
|
19
32
|
- mysql -e 'create database active_reporting_test collate utf8_general_ci;'
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
## 0.4.1 (2019-05-28)
|
2
|
+
|
3
|
+
### Features
|
4
|
+
|
5
|
+
* Hierarchical dimensions may now have custom keys in result (#16) - *andresgutgon*
|
6
|
+
|
7
|
+
### Misc
|
8
|
+
|
9
|
+
* Test against Raisl 6.0RC
|
10
|
+
* Loosen AR requirements. The gem will install for any AR version, but only ones listed in the README are supported
|
11
|
+
* Test against active Rubies
|
12
|
+
|
1
13
|
## 0.4.0 (2018-05-02)
|
2
14
|
|
3
15
|
### Breaking Changes
|
@@ -15,7 +27,7 @@
|
|
15
27
|
* Specify rescue from LoadError for ransack (#9) - *niborg*
|
16
28
|
* Fix ransack fallback logic (#8) - *germanotm*
|
17
29
|
|
18
|
-
|
30
|
+
### Misc
|
19
31
|
|
20
32
|
* Test against Rails 5.2
|
21
33
|
* Test against Ruby 2.5
|
data/Gemfile
CHANGED
@@ -10,14 +10,22 @@ db = ENV['DB'] || 'sqlite'
|
|
10
10
|
case rails
|
11
11
|
when '4-2'
|
12
12
|
gem 'activerecord', '~> 4.2.0'
|
13
|
-
if ENV['DB'] == 'pg'
|
14
|
-
gem 'pg', '~> 0.18'
|
15
|
-
end
|
16
|
-
if ENV['DB'] == 'mysql'
|
17
|
-
gem 'mysql2', '~> 0.3.18'
|
18
|
-
end
|
19
13
|
when '5-1'
|
20
14
|
gem 'activerecord', '~> 5.1.0'
|
21
|
-
|
15
|
+
when '5-2'
|
22
16
|
gem 'activerecord', '~> 5.2.0'
|
17
|
+
when '6-0'
|
18
|
+
gem 'activerecord', '6.0.0.rc1'
|
19
|
+
end
|
20
|
+
|
21
|
+
case rails
|
22
|
+
when '4-2'
|
23
|
+
case ENV['DB']
|
24
|
+
when 'pg'
|
25
|
+
gem 'pg', '~> 0.18'
|
26
|
+
when 'mysql'
|
27
|
+
gem 'mysql2', '~> 0.3.18'
|
28
|
+
when 'sqlite'
|
29
|
+
gem 'sqlite3', '~> 1.3.0'
|
30
|
+
end
|
23
31
|
end
|
data/README.md
CHANGED
@@ -8,9 +8,9 @@ ActiveReporting implements various terminology used in Relational Online Analyti
|
|
8
8
|
|
9
9
|
ActiveReporting officially supports MySQL, PostgreSQL, and SQLite.
|
10
10
|
|
11
|
-
ActiveReporting officially supports Ruby 2.
|
11
|
+
ActiveReporting officially supports Ruby 2.4 and later. Other versions may work, but are not supported.
|
12
12
|
|
13
|
-
ActiveReporting officially supports Rails 4.2, 5.1, and 5.2.
|
13
|
+
ActiveReporting officially supports Rails 4.2, 5.1, and 5.2. Other versions may work, but are not supported.
|
14
14
|
|
15
15
|
## Installation
|
16
16
|
|
@@ -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, {order_date: :month}]`)
|
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, {order_date: :month}]`). In hierarchies you can customize the label in this way: `[{order_date: { label: :month, name: :a_custom_name_for_month }}]`. If you use a hash instead of a Symbol to define a hierarchy the `label` item must be a valid field in your table. The `name` can be whatever you want.
|
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
|
|
@@ -342,7 +342,7 @@ metric = ActiveReporting::Metric.new(
|
|
342
342
|
dimension_filter: {months_ago: 1}
|
343
343
|
)
|
344
344
|
|
345
|
-
report = ActiveReporting.new(metric, dimension_filter: {from_region: 'North'}, dimension_identifiers: false)
|
345
|
+
report = ActiveReporting::Report.new(metric, dimension_filter: {from_region: 'North'}, dimension_identifiers: false)
|
346
346
|
report.run
|
347
347
|
=> [{order_count: 17, sales_rep: 'Mary Sue'}]
|
348
348
|
```
|
data/active_reporting.gemspec
CHANGED
@@ -24,8 +24,8 @@ Gem::Specification.new do |spec|
|
|
24
24
|
|
25
25
|
spec.required_ruby_version = '>= 2.3'
|
26
26
|
|
27
|
-
spec.add_dependency 'activerecord'
|
28
|
-
spec.add_dependency 'activesupport'
|
27
|
+
spec.add_dependency 'activerecord'
|
28
|
+
spec.add_dependency 'activesupport'
|
29
29
|
|
30
30
|
spec.add_development_dependency 'bundler'
|
31
31
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
@@ -15,16 +15,35 @@ module ActiveReporting
|
|
15
15
|
Array(dimensions).map do |dim|
|
16
16
|
dimension_name, label = dim.is_a?(Hash) ? Array(dim).flatten : [dim, nil]
|
17
17
|
found_dimension = fact_model.dimensions[dimension_name.to_sym]
|
18
|
-
|
19
|
-
|
18
|
+
|
19
|
+
raise(UnknownDimension, "Dimension '#{dim}' not found on fact model '#{fact_model}'") if found_dimension.nil?
|
20
|
+
|
21
|
+
new(found_dimension, label_config(label))
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
25
|
+
# If you pass a symbol it means you just indicate
|
26
|
+
# the field on that dimension. With a hash you can
|
27
|
+
# customize the name of the label
|
28
|
+
#
|
29
|
+
# @param [Symbol|Hash] label
|
30
|
+
def self.label_config(label)
|
31
|
+
return { label: label } unless label.is_a?(Hash)
|
32
|
+
|
33
|
+
{
|
34
|
+
label: label[:field],
|
35
|
+
label_name: label[:name]
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
23
39
|
# @param dimension [ActiveReporting::Dimension]
|
24
|
-
# @option label [Symbol] Hierarchical dimension to be used as a label
|
25
|
-
|
40
|
+
# @option label [Maybe<Symbol>] Hierarchical dimension to be used as a label
|
41
|
+
# @option label_name [Maybe<Symbol|String>] Hierarchical dimension custom name
|
42
|
+
def initialize(dimension, label: nil, label_name: nil)
|
26
43
|
@dimension = dimension
|
27
|
-
|
44
|
+
|
45
|
+
determine_label_field(label)
|
46
|
+
determine_label_name(label_name)
|
28
47
|
end
|
29
48
|
|
30
49
|
# The foreign key to use in queries
|
@@ -40,7 +59,7 @@ module ActiveReporting
|
|
40
59
|
def select_statement(with_identifier: true)
|
41
60
|
return [degenerate_select_fragment] if type == Dimension::TYPES[:degenerate]
|
42
61
|
|
43
|
-
ss = ["#{label_fragment} AS #{
|
62
|
+
ss = ["#{label_fragment} AS #{@label_name}"]
|
44
63
|
ss << "#{identifier_fragment} AS #{name}_identifier" if with_identifier
|
45
64
|
ss
|
46
65
|
end
|
@@ -75,14 +94,18 @@ module ActiveReporting
|
|
75
94
|
|
76
95
|
private ####################################################################
|
77
96
|
|
78
|
-
def
|
79
|
-
@label = if
|
80
|
-
|
97
|
+
def determine_label_field(label_field)
|
98
|
+
@label = if label_field.present? && validate_hierarchical_label(label_field)
|
99
|
+
label_field.to_sym
|
81
100
|
else
|
82
101
|
dimension_fact_model.dimension_label || Configuration.default_dimension_label
|
83
102
|
end
|
84
103
|
end
|
85
104
|
|
105
|
+
def determine_label_name(label_name)
|
106
|
+
@label_name = label_name ? "#{name}_#{label_name}" : name
|
107
|
+
end
|
108
|
+
|
86
109
|
def validate_hierarchical_label(hierarchical_label)
|
87
110
|
if datetime?
|
88
111
|
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.4.
|
4
|
+
version: 0.4.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:
|
11
|
+
date: 2019-05-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -185,8 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
185
185
|
- !ruby/object:Gem::Version
|
186
186
|
version: '0'
|
187
187
|
requirements: []
|
188
|
-
|
189
|
-
rubygems_version: 2.6.14
|
188
|
+
rubygems_version: 3.0.1
|
190
189
|
signing_key:
|
191
190
|
specification_version: 4
|
192
191
|
summary: Add relational OLAP-like functionality for ActiveRecord
|