activecube-graphql 0.1.7 → 0.1.12
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 +19 -19
- data/activecube-graphql.gemspec +2 -2
- data/lib/activecube/graphql/parse_tree.rb +39 -4
- data/lib/activecube/graphql/response_builder.rb +1 -1
- data/lib/activecube/graphql/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d7a79d0cc089791e544c599ba8559634a8a074546060c2c2920df07f2e8ff0a3
|
4
|
+
data.tar.gz: a4b0e37c0f583a3f4661c393a42e0ce35ae2bcc25e062f433edcc355ac9df5b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e83c2195dabe965975f69e01833434eb0ed0b5ec81cbee5a6209ab8e0388d975d605316adc88626552bb344fdd0ea118ee9cc9fba305bf51df2afb43b34a7406
|
7
|
+
data.tar.gz: 3f2c1161a22d9dd83afac7e02c0323d56a3fc1ca1e8ed83f7bfa8f3661061caa1364860661a3e10fc3f9fbc1b78bcc400ab989e5aec3fc677f4508f4eda3c69e
|
data/Gemfile.lock
CHANGED
@@ -1,48 +1,48 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
activecube-graphql (0.1.
|
5
|
-
activecube (~> 0.1.
|
6
|
-
graphql (~> 1.
|
4
|
+
activecube-graphql (0.1.11)
|
5
|
+
activecube (~> 0.1.15)
|
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.24)
|
12
12
|
activerecord (>= 5.2)
|
13
|
-
activemodel (6.0.
|
14
|
-
activesupport (= 6.0.
|
15
|
-
activerecord (6.0.
|
16
|
-
activemodel (= 6.0.
|
17
|
-
activesupport (= 6.0.
|
18
|
-
activesupport (6.0.
|
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.
|
27
|
-
i18n (1.8.
|
26
|
+
graphql (1.10.10)
|
27
|
+
i18n (1.8.3)
|
28
28
|
concurrent-ruby (~> 1.0)
|
29
|
-
minitest (5.14.
|
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.
|
36
|
-
rspec-support (~> 3.9.
|
37
|
-
rspec-expectations (3.9.
|
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.
|
43
|
+
rspec-support (3.9.3)
|
44
44
|
thread_safe (0.3.6)
|
45
|
-
tzinfo (1.2.
|
45
|
+
tzinfo (1.2.7)
|
46
46
|
thread_safe (~> 0.1)
|
47
47
|
zeitwerk (2.3.0)
|
48
48
|
|
data/activecube-graphql.gemspec
CHANGED
@@ -24,8 +24,8 @@ 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.
|
28
|
-
spec.add_runtime_dependency 'graphql', '~> 1.
|
27
|
+
spec.add_runtime_dependency 'activecube', '~> 0.1.15'
|
28
|
+
spec.add_runtime_dependency 'graphql', '~> 1.10'
|
29
29
|
|
30
30
|
spec.add_development_dependency "bundler", "~> 1.17"
|
31
31
|
spec.add_development_dependency "rake", ">= 13.0"
|
@@ -5,6 +5,7 @@ module Activecube
|
|
5
5
|
class Element
|
6
6
|
|
7
7
|
TYPENAME = '__typename'
|
8
|
+
KEY_FIELD_PREFIX = '_aq.'
|
8
9
|
|
9
10
|
attr_reader :arguments, :ast_node, :cube, :parent, :name, :definition, :key,
|
10
11
|
:children, :metric, :dimension, :field, :context_node
|
@@ -14,7 +15,7 @@ module Activecube
|
|
14
15
|
@parent = parent
|
15
16
|
|
16
17
|
@name = context_node.name
|
17
|
-
@key = parent ? (parent.key ? "#{parent.key}.#{name}" : name ) : nil
|
18
|
+
@key = parent ? (parent.key ? "#{parent.key}.#{name}" : KEY_FIELD_PREFIX+name ) : nil
|
18
19
|
|
19
20
|
@context_node = context_node
|
20
21
|
@arguments = context_node.arguments.to_h
|
@@ -73,10 +74,15 @@ module Activecube
|
|
73
74
|
query
|
74
75
|
end
|
75
76
|
|
77
|
+
private
|
78
|
+
|
76
79
|
def apply_args element, args = self.arguments
|
77
80
|
args && args.each_pair do |key, value|
|
78
81
|
k = key.to_sym
|
79
|
-
|
82
|
+
has_selectors = element.respond_to?(:selectors)
|
83
|
+
if has_selectors && k==:any
|
84
|
+
element = apply_or_selector element, value
|
85
|
+
elsif has_selectors && (selector = cube.selectors[k])
|
80
86
|
if value.kind_of? Hash
|
81
87
|
element = apply_selector element, k, value
|
82
88
|
elsif value.kind_of? Array
|
@@ -85,7 +91,7 @@ module Activecube
|
|
85
91
|
element = element.when( selector.eq(value) )
|
86
92
|
end
|
87
93
|
elsif element.respond_to? k
|
88
|
-
element = element.send(k, *value)
|
94
|
+
element = element.send(k, *converted_field_array(k, value))
|
89
95
|
else
|
90
96
|
raise Activecube::InputArgumentError, "Field #{k} is not implemented for #{element}"
|
91
97
|
end
|
@@ -94,6 +100,14 @@ module Activecube
|
|
94
100
|
element
|
95
101
|
end
|
96
102
|
|
103
|
+
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
|
109
|
+
end
|
110
|
+
|
97
111
|
def apply_selector element, k, hash
|
98
112
|
hash.each_pair do |operator, arg|
|
99
113
|
selector = cube.selectors[k]
|
@@ -103,7 +117,28 @@ module Activecube
|
|
103
117
|
element
|
104
118
|
end
|
105
119
|
|
106
|
-
|
120
|
+
def apply_or_selector element, value
|
121
|
+
selectors = value.collect{|v| make_selector v }.compact
|
122
|
+
element.when( Activecube::Query::Selector.or(selectors) )
|
123
|
+
end
|
124
|
+
|
125
|
+
def make_selector hash
|
126
|
+
raise Activecube::InputArgumentError, "Hash expected for selector, #{v} found instead" unless hash.kind_of?(Hash)
|
127
|
+
selectors = hash.to_a.collect{|attr, expressions|
|
128
|
+
k = attr.to_s.camelize(:lower).to_sym
|
129
|
+
(expressions.kind_of?(Array) ? expressions : [expressions]).collect{|expression|
|
130
|
+
expression.to_a.collect{|c|
|
131
|
+
operator, arg = c
|
132
|
+
selector = cube.selectors[k]
|
133
|
+
raise Activecube::InputArgumentError, "Selector not found for '#{k}'" unless selector
|
134
|
+
raise Activecube::InputArgumentError, "#{selector} does not handle method '#{operator}' '#{k}'" unless selector.respond_to?(operator)
|
135
|
+
selector.send(operator, arg) unless arg.nil?
|
136
|
+
selector
|
137
|
+
}
|
138
|
+
}
|
139
|
+
}.flatten
|
140
|
+
Activecube::Query::Selector.and(selectors)
|
141
|
+
end
|
107
142
|
|
108
143
|
def apply_to_array(element, k, selector, value)
|
109
144
|
|
@@ -97,7 +97,7 @@ module Activecube::Graphql
|
|
97
97
|
|
98
98
|
def simple_value response_class, definition, element
|
99
99
|
index = @key_map[element.key]
|
100
|
-
node_type = element.context_node.definition.type.name
|
100
|
+
node_type = element.context_node.definition.type.try(:of_type).try(:name)
|
101
101
|
response_class.class_eval do
|
102
102
|
define_method definition.underscore do |**rest_of_options|
|
103
103
|
convert_type node_type, @row[index]
|
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.12
|
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-07-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activecube
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.1.
|
19
|
+
version: 0.1.15
|
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.15
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: graphql
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
33
|
+
version: '1.10'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
40
|
+
version: '1.10'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|