activecube-graphql 0.1.13 → 0.1.18

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: e0a0c3d679275e13036022bd91bc90e45b4ccc5377dbaa5415ad51342bb71d05
4
+ data.tar.gz: 7e8ee20d8897e6f95cbff7b30ee5b636f9d0e312c0d4c9d70b2975021a2437e1
5
5
  SHA512:
6
- metadata.gz: b9021ccee3198ebd7bc25aed42bee1b13689da056a5100e56a42d99ee7dc7dac1d5f8213c412ff972a1149ee39c0b5f88b928c30922919d77113b7fe022de774
7
- data.tar.gz: 67b421e11ae30b5127da95da2f964683fb389b7d527cc2429272f30139e90a9256854442534d0846eb58408c38517160558a66e31ad15de630ef753e97489869
6
+ metadata.gz: c403314bb0f2a551eec6f5bb33838d94e800863894e722500ee807606710e3ed78fda64e8db30f466b20657c4b67924efb07a2498018b6c5007e4ff3504191be
7
+ data.tar.gz: 120af633c5a5dc2de1e0e14d6f2a12fd3858e3a08cb1452c0c3398dc235e7e837cd90b8c00c438079155646e3d0917b1951e14a95d658f5b87944fcbc60f4d83
@@ -1,14 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- activecube-graphql (0.1.12)
5
- activecube (~> 0.1.15)
4
+ activecube-graphql (0.1.17)
5
+ activecube (~> 0.1.28)
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.29)
12
12
  activerecord (>= 5.2)
13
13
  activemodel (6.0.3.1)
14
14
  activesupport (= 6.0.3.1)
@@ -21,12 +21,12 @@ GEM
21
21
  minitest (~> 5.1)
22
22
  tzinfo (~> 1.1)
23
23
  zeitwerk (~> 2.2, >= 2.2.2)
24
- concurrent-ruby (1.1.6)
24
+ concurrent-ruby (1.1.7)
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
- minitest (5.14.1)
29
+ minitest (5.14.2)
30
30
  rake (13.0.1)
31
31
  rspec (3.9.0)
32
32
  rspec-core (~> 3.9.0)
@@ -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.1)
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"
@@ -18,19 +18,18 @@ module Activecube
18
18
  @key = parent ? (parent.key ? "#{parent.key}.#{name}" : KEY_FIELD_PREFIX+name ) : nil
19
19
 
20
20
  @context_node = context_node
21
- @arguments = context_node.arguments.to_h
22
-
23
21
  @ast_node = context_node.ast_node
24
22
 
23
+ @arguments = sort_node_arguments ast_node, context_node.arguments.to_h
24
+
25
+
25
26
  if parent
26
27
  @definition = context_node.definitions.first.name
27
28
  if parent.dimension
28
29
  @dimension = parent.dimension
29
30
  @field = (parent.field || dimension)[definition.to_sym]
30
31
  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
32
+ elsif !parent.metric
34
33
  if !(@metric = (cube.metrics && cube.metrics[definition.to_sym])) && !(@dimension = (cube.dimensions && cube.dimensions[definition.to_sym]))
35
34
  raise Activecube::InputArgumentError, "Metric or dimension #{definition} for #{key} not defined for cube #{cube.name}"
36
35
  end
@@ -45,6 +44,22 @@ module Activecube
45
44
 
46
45
  end
47
46
 
47
+ def sort_node_arguments ast_node, arguments
48
+ if (options = arguments['options']).kind_of?(Hash)
49
+ options_keys = context_node.ast_node.arguments.detect{|x| x.name=='options'}.value.arguments.map{|x|
50
+ x.name.underscore.to_sym
51
+ }
52
+ arguments['options'] = Hash[
53
+ options_keys.collect{|key|
54
+ raise "Unmatched key #{key}" unless options[key]
55
+ [key, options[key]]
56
+ }
57
+
58
+ ]
59
+ end
60
+ arguments
61
+ end
62
+
48
63
  def union?
49
64
  context_node.return_type.kind_of? GraphQL::UnionType
50
65
  end
@@ -100,12 +115,16 @@ module Activecube
100
115
  element
101
116
  end
102
117
 
118
+
103
119
  def converted_field_array method, values
104
- if [:desc,:asc].include?(method)
105
- values.collect{|v| KEY_FIELD_PREFIX + v}
106
- else
107
- values
108
- end
120
+ case method
121
+ when :desc,:asc
122
+ values.collect{|v| KEY_FIELD_PREFIX + v}
123
+ when :limit_by
124
+ values.merge({each: KEY_FIELD_PREFIX + values[:each]})
125
+ else
126
+ values
127
+ end
109
128
  end
110
129
 
111
130
  def apply_selector element, k, hash
@@ -18,6 +18,10 @@ module Activecube::Graphql
18
18
  end
19
19
  end
20
20
 
21
+ def __typename
22
+ raise Activecube::InputArgumentError, "Add __typename to the element for UNION or INTERFACE entity to resolve the type"
23
+ end
24
+
21
25
  end
22
26
 
23
27
 
@@ -45,6 +49,8 @@ module Activecube::Graphql
45
49
  element = elements.first
46
50
  if element.children.empty?
47
51
  simple_value response_class, definition, element
52
+ elsif element.metric
53
+ array_value response_class, definition, element
48
54
  else
49
55
  sub_element response_class, definition, element
50
56
  end
@@ -95,10 +101,13 @@ module Activecube::Graphql
95
101
  end
96
102
  end
97
103
 
104
+ def node_type element
105
+ element.context_node.definition.type.try(:of_type).try(:name) || element.context_node.definition.type.try(:name)
106
+ end
107
+
98
108
  def simple_value response_class, definition, element
99
109
  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)
110
+ node_type = node_type element
102
111
  response_class.class_eval do
103
112
  define_method definition.underscore do |**rest_of_options|
104
113
  convert_type node_type, @row[index]
@@ -106,6 +115,34 @@ module Activecube::Graphql
106
115
  end
107
116
  end
108
117
 
118
+ def array_value response_class, definition, element
119
+ index = @key_map[element.key]
120
+ array_element_type = if element.children.empty?
121
+ node_type element
122
+ else
123
+ tuple = element.metric.definition.class.tuple
124
+ element.children.collect{|a| [ a.name, node_type(a), tuple.index(a.name.to_sym)] }
125
+ end
126
+
127
+ response_class.class_eval do
128
+ define_method definition.underscore do |**rest_of_options|
129
+ @row[index].map{|array_obj|
130
+ if array_obj.kind_of?(Array) && array_element_type.kind_of?(Array)
131
+ Hash[
132
+ array_element_type.map{|etype|
133
+ [etype.first.underscore, convert_type(etype.second, array_obj[etype.third])]
134
+ }]
135
+ elsif !array_obj.kind_of?(Array) && array_element_type.kind_of?(String)
136
+ convert_type(array_element_type, obj)
137
+ else
138
+ raise "Mismatched data in #{array_obj} with #{array_element_type} for #{definition} of #{element.key}"
139
+ end
140
+ }
141
+ end
142
+ end
143
+
144
+
145
+ end
109
146
 
110
147
  end
111
148
  end
@@ -1,5 +1,5 @@
1
1
  module Activecube
2
2
  module Graphql
3
- VERSION = "0.1.13"
3
+ VERSION = "0.1.18"
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.18
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-12-10 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