activecube 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|