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 +4 -4
- data/Gemfile.lock +7 -7
- data/activecube-graphql.gemspec +1 -1
- data/lib/activecube/graphql/parse_tree.rb +29 -10
- data/lib/activecube/graphql/response_builder.rb +39 -2
- data/lib/activecube/graphql/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0a0c3d679275e13036022bd91bc90e45b4ccc5377dbaa5415ad51342bb71d05
|
4
|
+
data.tar.gz: 7e8ee20d8897e6f95cbff7b30ee5b636f9d0e312c0d4c9d70b2975021a2437e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c403314bb0f2a551eec6f5bb33838d94e800863894e722500ee807606710e3ed78fda64e8db30f466b20657c4b67924efb07a2498018b6c5007e4ff3504191be
|
7
|
+
data.tar.gz: 120af633c5a5dc2de1e0e14d6f2a12fd3858e3a08cb1452c0c3398dc235e7e837cd90b8c00c438079155646e3d0917b1951e14a95d658f5b87944fcbc60f4d83
|
data/Gemfile.lock
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
activecube-graphql (0.1.
|
5
|
-
activecube (~> 0.1.
|
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.
|
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.
|
24
|
+
concurrent-ruby (1.1.7)
|
25
25
|
diff-lcs (1.3)
|
26
26
|
graphql (1.11.0)
|
27
|
-
i18n (1.8.
|
27
|
+
i18n (1.8.5)
|
28
28
|
concurrent-ruby (~> 1.0)
|
29
|
-
minitest (5.14.
|
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.
|
47
|
+
zeitwerk (2.4.1)
|
48
48
|
|
49
49
|
PLATFORMS
|
50
50
|
ruby
|
data/activecube-graphql.gemspec
CHANGED
@@ -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.
|
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
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
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
|
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
|
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.
|
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-
|
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.
|
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.
|
26
|
+
version: 0.1.28
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: graphql
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|