activecube-graphql 0.1.9 → 0.1.14

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 40ff0b342c70ef9d40d3b0d5a10962abb56a4e522f0d0e049cf2f081541ba1a8
4
- data.tar.gz: 85f3d371fcac7ca148cadda4c3441d95d6608cac8339dc36b6398dab967d289f
3
+ metadata.gz: 9d5d6b3307a4e2359db0a37d46649aa58b8baf3e3d0328cbe4db5b6347522e23
4
+ data.tar.gz: d9c2a2f67151f55e017bd7d9d2e029da88b992d548366912399980a70ed88c3a
5
5
  SHA512:
6
- metadata.gz: d3bc3d55060c29221aef2279c3d2dad86febef7ba831acdf5f89ae9b541059e9d544214ced2d439bcd8ab1bc08142f3e43caad59633371da5ed1a85c95d379f5
7
- data.tar.gz: daecbfad367c123665d3f3355d8214fd66e2f9774b1f09e4555f510e2932fca926548826f09e494d5f63aaf39f9bc2aa7ce04504c712c6e0fc67dd92cce9b4c8
6
+ metadata.gz: 6aa3fa255855597dce309b1913d2fb2e76fdaa2a849a6de5c23895d10f580d493f8a84c55adccf224b653d01702e91c1e486ffa762b5ae65d0d8602f4aac850f
7
+ data.tar.gz: 3f76d466793c5575f10b0ba4f2a9b2e0aa832fabbc5706a5880f1a7becd95367f7ece3176e1910594cc1d10f77d84a42acde5427cdfe941933231c8afce4f6a8
@@ -1,50 +1,50 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- activecube-graphql (0.1.8)
5
- activecube (~> 0.1.14)
4
+ activecube-graphql (0.1.13)
5
+ activecube (~> 0.1.15)
6
6
  graphql (~> 1.10)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activecube (0.1.14)
11
+ activecube (0.1.27)
12
12
  activerecord (>= 5.2)
13
- activemodel (6.0.2.2)
14
- activesupport (= 6.0.2.2)
15
- activerecord (6.0.2.2)
16
- activemodel (= 6.0.2.2)
17
- activesupport (= 6.0.2.2)
18
- activesupport (6.0.2.2)
13
+ activemodel (6.0.3.1)
14
+ activesupport (= 6.0.3.1)
15
+ activerecord (6.0.3.1)
16
+ activemodel (= 6.0.3.1)
17
+ activesupport (= 6.0.3.1)
18
+ activesupport (6.0.3.1)
19
19
  concurrent-ruby (~> 1.0, >= 1.0.2)
20
20
  i18n (>= 0.7, < 2)
21
21
  minitest (~> 5.1)
22
22
  tzinfo (~> 1.1)
23
- zeitwerk (~> 2.2)
23
+ zeitwerk (~> 2.2, >= 2.2.2)
24
24
  concurrent-ruby (1.1.6)
25
25
  diff-lcs (1.3)
26
- graphql (1.10.6)
27
- i18n (1.8.2)
26
+ graphql (1.11.0)
27
+ i18n (1.8.5)
28
28
  concurrent-ruby (~> 1.0)
29
- minitest (5.14.0)
29
+ minitest (5.14.1)
30
30
  rake (13.0.1)
31
31
  rspec (3.9.0)
32
32
  rspec-core (~> 3.9.0)
33
33
  rspec-expectations (~> 3.9.0)
34
34
  rspec-mocks (~> 3.9.0)
35
- rspec-core (3.9.1)
36
- rspec-support (~> 3.9.1)
37
- rspec-expectations (3.9.0)
35
+ rspec-core (3.9.2)
36
+ rspec-support (~> 3.9.3)
37
+ rspec-expectations (3.9.2)
38
38
  diff-lcs (>= 1.2.0, < 2.0)
39
39
  rspec-support (~> 3.9.0)
40
40
  rspec-mocks (3.9.1)
41
41
  diff-lcs (>= 1.2.0, < 2.0)
42
42
  rspec-support (~> 3.9.0)
43
- rspec-support (3.9.2)
43
+ rspec-support (3.9.3)
44
44
  thread_safe (0.3.6)
45
45
  tzinfo (1.2.7)
46
46
  thread_safe (~> 0.1)
47
- zeitwerk (2.3.0)
47
+ zeitwerk (2.4.0)
48
48
 
49
49
  PLATFORMS
50
50
  ruby
@@ -24,7 +24,7 @@ to query cubes}
24
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
25
  spec.require_paths = ["lib"]
26
26
 
27
- spec.add_runtime_dependency 'activecube', '~> 0.1.15'
27
+ spec.add_runtime_dependency 'activecube', '~> 0.1.28'
28
28
  spec.add_runtime_dependency 'graphql', '~> 1.10'
29
29
 
30
30
  spec.add_development_dependency "bundler", "~> 1.17"
@@ -28,9 +28,7 @@ module Activecube
28
28
  @dimension = parent.dimension
29
29
  @field = (parent.field || dimension)[definition.to_sym]
30
30
  raise Activecube::InputArgumentError, "#{definition} not implemented for #{key} in cube #{cube.name}" unless @field
31
- elsif parent.metric
32
- raise Activecube::InputArgumentError, "Unexpected metric #{key} in cube #{cube.name}"
33
- else
31
+ elsif !parent.metric
34
32
  if !(@metric = (cube.metrics && cube.metrics[definition.to_sym])) && !(@dimension = (cube.dimensions && cube.dimensions[definition.to_sym]))
35
33
  raise Activecube::InputArgumentError, "Metric or dimension #{definition} for #{key} not defined for cube #{cube.name}"
36
34
  end
@@ -126,7 +124,7 @@ module Activecube
126
124
  raise Activecube::InputArgumentError, "Hash expected for selector, #{v} found instead" unless hash.kind_of?(Hash)
127
125
  selectors = hash.to_a.collect{|attr, expressions|
128
126
  k = attr.to_s.camelize(:lower).to_sym
129
- expressions.collect{|expression|
127
+ (expressions.kind_of?(Array) ? expressions : [expressions]).collect{|expression|
130
128
  expression.to_a.collect{|c|
131
129
  operator, arg = c
132
130
  selector = cube.selectors[k]
@@ -45,6 +45,8 @@ module Activecube::Graphql
45
45
  element = elements.first
46
46
  if element.children.empty?
47
47
  simple_value response_class, definition, element
48
+ elsif element.metric
49
+ array_value response_class, definition, element
48
50
  else
49
51
  sub_element response_class, definition, element
50
52
  end
@@ -95,9 +97,13 @@ module Activecube::Graphql
95
97
  end
96
98
  end
97
99
 
100
+ def node_type element
101
+ element.context_node.definition.type.try(:of_type).try(:name) || element.context_node.definition.type.try(:name)
102
+ end
103
+
98
104
  def simple_value response_class, definition, element
99
105
  index = @key_map[element.key]
100
- node_type = element.context_node.definition.type.name
106
+ node_type = node_type element
101
107
  response_class.class_eval do
102
108
  define_method definition.underscore do |**rest_of_options|
103
109
  convert_type node_type, @row[index]
@@ -105,6 +111,39 @@ module Activecube::Graphql
105
111
  end
106
112
  end
107
113
 
114
+ def array_value response_class, definition, element
115
+ index = @key_map[element.key]
116
+ array_element_type = if element.children.empty?
117
+ node_type element
118
+ else
119
+ tuple = element.metric.definition.class.tuple
120
+ raise "Sizes of tuple #{element.children.size} not expected as in definition #{tuple}" unless tuple && tuple.size==element.children.size
121
+
122
+ element.children.collect{|a|
123
+ [a.name, node_type(a)]
124
+ }.sort_by{|x| tuple.index x.first.to_sym }
125
+
126
+ end
127
+
128
+ response_class.class_eval do
129
+ define_method definition.underscore do |**rest_of_options|
130
+ @row[index].map{|array_obj|
131
+ if array_obj.kind_of?(Array) && array_element_type.kind_of?(Array) && array_obj.size==array_element_type.size
132
+ Hash[array_obj.each_with_index.map{|obj, index|
133
+ etype = array_element_type[index]
134
+ [etype.first.underscore, convert_type(etype.second, obj)]
135
+ }]
136
+ elsif !array_obj.kind_of?(Array) && array_element_type.kind_of?(String)
137
+ convert_type(array_element_type, obj)
138
+ else
139
+ raise "Mismatched data in #{array_obj} with #{array_element_type} for #{definition} of #{element.key}"
140
+ end
141
+ }
142
+ end
143
+ end
144
+
145
+
146
+ end
108
147
 
109
148
  end
110
149
  end
@@ -1,5 +1,5 @@
1
1
  module Activecube
2
2
  module Graphql
3
- VERSION = "0.1.9"
3
+ VERSION = "0.1.14"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activecube-graphql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.14
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-04-16 00:00:00.000000000 Z
11
+ date: 2020-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activecube
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.1.15
19
+ version: 0.1.28
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: 0.1.15
26
+ version: 0.1.28
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: graphql
29
29
  requirement: !ruby/object:Gem::Requirement