activecube-graphql 0.1.9 → 0.1.14

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