activecube 0.1.5 → 0.1.6
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/Gemfile.lock +1 -1
- data/lib/activecube.rb +1 -0
- data/lib/activecube/cube_definition.rb +5 -5
- data/lib/activecube/definition_methods.rb +1 -1
- data/lib/activecube/field.rb +2 -2
- data/lib/activecube/input_argument_error.rb +4 -0
- data/lib/activecube/processor/composer.rb +1 -1
- data/lib/activecube/query/chain_appender.rb +2 -2
- data/lib/activecube/query/cube_query.rb +4 -3
- data/lib/activecube/query/selector.rb +3 -3
- data/lib/activecube/query/slice.rb +4 -4
- data/lib/activecube/query_methods.rb +4 -4
- data/lib/activecube/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 369247513801c454ee5bddd94d9d16b5e76a09a564b1461fd6910aeff50f512f
|
4
|
+
data.tar.gz: eb104eb20d315005026cde81d06d465aa68d4d450f0c27450afb44e6c6aa8d3d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f69aa684221fa54d01d8010816b895aa625a5454f02f4571757aec758dcb574121eca001bd7a6dbf2eac2579e6197829bafd8e983218af975868f15cff54c277
|
7
|
+
data.tar.gz: 91edb538973ff684ef2bc0eaeeee508176396802d3e48179b18644e084fc744793dbf3fa0f71f2a2b77f018d59b503b12727ad7e76e8f0374f13caaf0644f1f1
|
data/Gemfile.lock
CHANGED
data/lib/activecube.rb
CHANGED
@@ -13,19 +13,19 @@ module Activecube
|
|
13
13
|
|
14
14
|
def [] key
|
15
15
|
v = super key
|
16
|
-
v.nil? ? nil : @entry_class.new(@cube, key, v)
|
16
|
+
v.nil? ? nil : @entry_class.new(@cube, key, v.new)
|
17
17
|
end
|
18
18
|
|
19
19
|
end
|
20
20
|
|
21
|
-
attr_reader :dimensions, :metrics, :selectors, :
|
21
|
+
attr_reader :dimensions, :metrics, :selectors, :models
|
22
22
|
|
23
23
|
def inspect
|
24
24
|
name +
|
25
25
|
(@dimensions && " Dimensions: #{@dimensions.keys.join(',')}")+
|
26
26
|
(@metrics && " Metrics: #{@metrics.keys.join(',')}")+
|
27
27
|
(@selectors && " Selectors: #{@selectors.keys.join(',')}")+
|
28
|
-
(@
|
28
|
+
(@models && " Models: #{@models.map(&:name).join(',')}")
|
29
29
|
end
|
30
30
|
|
31
31
|
private
|
@@ -43,13 +43,13 @@ module Activecube
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def table *args
|
46
|
-
store_definition_array! '
|
46
|
+
store_definition_array! 'model', (@models ||= []), [*args].flatten.map{|t| t }
|
47
47
|
end
|
48
48
|
|
49
49
|
def store_definition_map! name, map, data
|
50
50
|
data.each_pair do |key, class_def|
|
51
51
|
raise DefinitionError, "#{key} already defined for #{name}" if map.has_key?(key)
|
52
|
-
map[key] = class_def
|
52
|
+
map[key] = class_def
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
data/lib/activecube/field.rb
CHANGED
@@ -11,7 +11,7 @@ module Activecube
|
|
11
11
|
elsif arg.kind_of?(Class) && arg < Field
|
12
12
|
arg.new name
|
13
13
|
else
|
14
|
-
raise
|
14
|
+
raise Activecube::InputArgumentError, "Unexpected field #{name} definition with #{arg.class.name}"
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
@@ -21,7 +21,7 @@ module Activecube
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def expression _model, _arel_table, _slice, _cube_query
|
24
|
-
raise
|
24
|
+
raise Activecube::InputArgumentError, "String expression expected for #{name} field, instead #{definition.class.name} is found" unless definition.kind_of?(String)
|
25
25
|
definition
|
26
26
|
end
|
27
27
|
|
@@ -51,7 +51,7 @@ module Activecube::Processor
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def ranked_tables
|
54
|
-
tables = cube_query.
|
54
|
+
tables = cube_query.tables.select{|table| table.matches? cube_query, []}
|
55
55
|
measures = cube_query.measures.empty? ?
|
56
56
|
[Activecube::Query::MeasureNothing.new(cube_query.cube)] :
|
57
57
|
cube_query.measures
|
@@ -10,11 +10,11 @@ module Activecube::Query
|
|
10
10
|
arg
|
11
11
|
elsif arg.kind_of? Hash
|
12
12
|
arg.collect{|pair|
|
13
|
-
raise
|
13
|
+
raise Activecube::InputArgumentError, "Unexpected #{pair.second.class.name} to use for #{def_class} as #{arg}[#{pair.first}]" unless pair.second.kind_of?(def_class)
|
14
14
|
pair.second.alias! pair.first
|
15
15
|
}
|
16
16
|
else
|
17
|
-
raise
|
17
|
+
raise Activecube::InputArgumentError, "Unexpected #{arg.class} to use for #{def_class} as #{arg}"
|
18
18
|
end
|
19
19
|
}.flatten
|
20
20
|
self
|
@@ -14,13 +14,14 @@ module Activecube::Query
|
|
14
14
|
|
15
15
|
include ChainAppender
|
16
16
|
|
17
|
-
attr_reader :cube, :slices, :measures, :selectors, :options
|
18
|
-
def initialize cube, slices = [], measures = [], selectors = [], options = []
|
17
|
+
attr_reader :cube, :slices, :measures, :selectors, :options, :tables
|
18
|
+
def initialize cube, slices = [], measures = [], selectors = [], options = [], model_tables = nil
|
19
19
|
@cube = cube
|
20
20
|
@slices = slices
|
21
21
|
@measures = measures
|
22
22
|
@selectors = selectors
|
23
23
|
@options = options
|
24
|
+
@tables = model_tables || cube.models.map{|m| Activecube::Processor::Table.new m}
|
24
25
|
end
|
25
26
|
|
26
27
|
def slice *args
|
@@ -113,7 +114,7 @@ module Activecube::Query
|
|
113
114
|
|
114
115
|
return self if (reduced_measures == self.measures) && (reduced_selectors == self.selectors)
|
115
116
|
|
116
|
-
CubeQuery.new cube, slices, reduced_measures, reduced_selectors, other_options
|
117
|
+
CubeQuery.new cube, slices, reduced_measures, reduced_selectors, other_options, tables
|
117
118
|
end
|
118
119
|
|
119
120
|
def join_fields
|
@@ -50,7 +50,7 @@ module Activecube::Query
|
|
50
50
|
|
51
51
|
OPERATORS.each do |method|
|
52
52
|
define_method(method) do |*args|
|
53
|
-
raise
|
53
|
+
raise Activecube::InputArgumentError, "Selector for #{method} already set" if operator
|
54
54
|
if ARRAY_OPERATORS.include? method
|
55
55
|
@operator = Operator.new(method, args.flatten)
|
56
56
|
elsif method=='between'
|
@@ -59,10 +59,10 @@ module Activecube::Query
|
|
59
59
|
elsif args.kind_of?(Array) && (arg = args.flatten).count==2
|
60
60
|
@operator = Operator.new(method, arg[0]..arg[1])
|
61
61
|
else
|
62
|
-
raise
|
62
|
+
raise Activecube::InputArgumentError, "Unexpected size of arguments for #{method}, must be Range or Array of 2"
|
63
63
|
end
|
64
64
|
else
|
65
|
-
raise
|
65
|
+
raise Activecube::InputArgumentError, "Unexpected size of arguments for #{method}" unless args.size==1
|
66
66
|
@operator = Operator.new(method, args.first)
|
67
67
|
end
|
68
68
|
self
|
@@ -24,13 +24,13 @@ module Activecube::Query
|
|
24
24
|
|
25
25
|
key = arg.to_sym
|
26
26
|
|
27
|
-
child = if definition.kind_of?
|
28
|
-
|
27
|
+
child = if definition.kind_of?(Activecube::Dimension) && definition.class.fields && (fdef = definition.class.fields[key])
|
28
|
+
Activecube::Field.build key, fdef
|
29
29
|
elsif definition.kind_of?(Activecube::Field) && (hash = definition.definition).kind_of?(Hash)
|
30
|
-
hash[key]
|
30
|
+
Activecube::Field.build key, hash[key]
|
31
31
|
end
|
32
32
|
|
33
|
-
raise
|
33
|
+
raise Activecube::InputArgumentError, "Field #{key} is not defined for #{definition}" unless child
|
34
34
|
|
35
35
|
if child.kind_of?(Class) && child <= Activecube::Field
|
36
36
|
child = child.new key
|
@@ -12,7 +12,7 @@ module Activecube
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def connected_to database: nil, role: nil, &block
|
15
|
-
raise
|
15
|
+
raise Activecube::InputArgumentError, "Must pass block to method" unless block_given?
|
16
16
|
super_model.connected_to(database: database, role: role) do
|
17
17
|
@database = database
|
18
18
|
@role = role
|
@@ -24,10 +24,10 @@ module Activecube
|
|
24
24
|
|
25
25
|
|
26
26
|
def super_model
|
27
|
-
raise
|
27
|
+
raise Activecube::InputArgumentError, "No tables specified for cube #{name}" if models.count==0
|
28
28
|
|
29
|
-
|
30
|
-
t.
|
29
|
+
models.collect{ |t|
|
30
|
+
t.ancestors.select{|c| c < ActiveRecord::Base }
|
31
31
|
}.transpose.select{|c|
|
32
32
|
c.uniq.count==1
|
33
33
|
}.last.first
|
data/lib/activecube/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activecube
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aleksey Studnev
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- lib/activecube/definition_methods.rb
|
97
97
|
- lib/activecube/dimension.rb
|
98
98
|
- lib/activecube/field.rb
|
99
|
+
- lib/activecube/input_argument_error.rb
|
99
100
|
- lib/activecube/metric.rb
|
100
101
|
- lib/activecube/modifier.rb
|
101
102
|
- lib/activecube/processor/composer.rb
|