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