activecube-graphql 0.1.7 → 0.1.12

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: b5907c942a7c6ff67df9c067b511f3fa12ecd28786501c171c254a8208fea8ae
4
- data.tar.gz: af6cf1ab5742653b86e3773b38524b67320de944f34eb1f5fce54eca209d02b7
3
+ metadata.gz: d7a79d0cc089791e544c599ba8559634a8a074546060c2c2920df07f2e8ff0a3
4
+ data.tar.gz: a4b0e37c0f583a3f4661c393a42e0ce35ae2bcc25e062f433edcc355ac9df5b2
5
5
  SHA512:
6
- metadata.gz: f6a8e54da43f0eef1f7c6c0ea75f726deeb2fa8f190ecda6d2aed61ceac6d8d42d9eb5641d60eae32ee5e993183c89cc0bc201af71800e498dccab00f1a68bf2
7
- data.tar.gz: b5aae1ee51c0964faaf8eed002d8906db458493270b692e396771560e3e54ea4f977c087a922eadcecc10e6b34d3602deccce2cde2588c920216d98014d8b4d1
6
+ metadata.gz: e83c2195dabe965975f69e01833434eb0ed0b5ec81cbee5a6209ab8e0388d975d605316adc88626552bb344fdd0ea118ee9cc9fba305bf51df2afb43b34a7406
7
+ data.tar.gz: 3f2c1161a22d9dd83afac7e02c0323d56a3fc1ca1e8ed83f7bfa8f3661061caa1364860661a3e10fc3f9fbc1b78bcc400ab989e5aec3fc677f4508f4eda3c69e
@@ -1,48 +1,48 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- activecube-graphql (0.1.6)
5
- activecube (~> 0.1.6)
6
- graphql (~> 1.9)
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.6)
11
+ activecube (0.1.24)
12
12
  activerecord (>= 5.2)
13
- activemodel (6.0.2.1)
14
- activesupport (= 6.0.2.1)
15
- activerecord (6.0.2.1)
16
- activemodel (= 6.0.2.1)
17
- activesupport (= 6.0.2.1)
18
- activesupport (6.0.2.1)
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.4)
27
- i18n (1.8.2)
26
+ graphql (1.10.10)
27
+ i18n (1.8.3)
28
28
  concurrent-ruby (~> 1.0)
29
- minitest (5.14.0)
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.1)
36
- rspec-support (~> 3.9.1)
37
- rspec-expectations (3.9.0)
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.2)
43
+ rspec-support (3.9.3)
44
44
  thread_safe (0.3.6)
45
- tzinfo (1.2.6)
45
+ tzinfo (1.2.7)
46
46
  thread_safe (~> 0.1)
47
47
  zeitwerk (2.3.0)
48
48
 
@@ -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.6'
28
- spec.add_runtime_dependency 'graphql', '~> 1.9'
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
- if element.respond_to?(:selectors) && (selector = cube.selectors[k])
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
- private
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]
@@ -1,5 +1,5 @@
1
1
  module Activecube
2
2
  module Graphql
3
- VERSION = "0.1.7"
3
+ VERSION = "0.1.12"
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.7
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-03-24 00:00:00.000000000 Z
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.6
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.6
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.9'
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.9'
40
+ version: '1.10'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement