activecube-graphql 0.1.13 → 0.1.18

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: 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