activecube-graphql 0.1.13 → 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: 69d003fbb6f3968b2e25390e2b4177fd46ec075415f47644f7a0947237800275
4
- data.tar.gz: a46404f52537cb50f19f2ccc99af7a0f866742e0ef27297b1606ea3cface3fee
3
+ metadata.gz: 9d5d6b3307a4e2359db0a37d46649aa58b8baf3e3d0328cbe4db5b6347522e23
4
+ data.tar.gz: d9c2a2f67151f55e017bd7d9d2e029da88b992d548366912399980a70ed88c3a
5
5
  SHA512:
6
- metadata.gz: b9021ccee3198ebd7bc25aed42bee1b13689da056a5100e56a42d99ee7dc7dac1d5f8213c412ff972a1149ee39c0b5f88b928c30922919d77113b7fe022de774
7
- data.tar.gz: 67b421e11ae30b5127da95da2f964683fb389b7d527cc2429272f30139e90a9256854442534d0846eb58408c38517160558a66e31ad15de630ef753e97489869
6
+ metadata.gz: 6aa3fa255855597dce309b1913d2fb2e76fdaa2a849a6de5c23895d10f580d493f8a84c55adccf224b653d01702e91c1e486ffa762b5ae65d0d8602f4aac850f
7
+ data.tar.gz: 3f76d466793c5575f10b0ba4f2a9b2e0aa832fabbc5706a5880f1a7becd95367f7ece3176e1910594cc1d10f77d84a42acde5427cdfe941933231c8afce4f6a8
@@ -1,14 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- activecube-graphql (0.1.12)
4
+ activecube-graphql (0.1.13)
5
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.26)
11
+ activecube (0.1.27)
12
12
  activerecord (>= 5.2)
13
13
  activemodel (6.0.3.1)
14
14
  activesupport (= 6.0.3.1)
@@ -24,7 +24,7 @@ GEM
24
24
  concurrent-ruby (1.1.6)
25
25
  diff-lcs (1.3)
26
26
  graphql (1.11.0)
27
- i18n (1.8.3)
27
+ i18n (1.8.5)
28
28
  concurrent-ruby (~> 1.0)
29
29
  minitest (5.14.1)
30
30
  rake (13.0.1)
@@ -44,7 +44,7 @@ GEM
44
44
  thread_safe (0.3.6)
45
45
  tzinfo (1.2.7)
46
46
  thread_safe (~> 0.1)
47
- zeitwerk (2.3.1)
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
@@ -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,10 +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.try(:of_type).try(:name) ||
101
- element.context_node.definition.type.try(:name)
106
+ node_type = node_type element
102
107
  response_class.class_eval do
103
108
  define_method definition.underscore do |**rest_of_options|
104
109
  convert_type node_type, @row[index]
@@ -106,6 +111,39 @@ module Activecube::Graphql
106
111
  end
107
112
  end
108
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
109
147
 
110
148
  end
111
149
  end
@@ -1,5 +1,5 @@
1
1
  module Activecube
2
2
  module Graphql
3
- VERSION = "0.1.13"
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.13
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-08-03 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