grumlin 0.10.1 → 0.11.0

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: 2306eba516eebd5d53ac7e8e77acd5d7b2fcb7ad3579e9abc734210aec20ce29
4
- data.tar.gz: ebd72733ea3f6ac4554044a00aac252f6a14997664a7b95ebdba01d082e4c8cd
3
+ metadata.gz: 0f0edafd4d46b787eb3f8e0ec4032948bdb4de865e4de3199606fb470dc16ef3
4
+ data.tar.gz: f23ba59dfb18dabe70fc860c38ea4c1777214b4a37e04771b24210d90f449612
5
5
  SHA512:
6
- metadata.gz: bda5181c00cabc8d69fdaa891a81943527dabfaa69ce70babbba6c1f11efc83b6f942d23d6aaf792d580f842ca7f64971986def6e1cfc1e6d4d3626da05efa1b
7
- data.tar.gz: 212fbac76d50dfe281e574604ffbb82e8008937d777c279575a05468ee0f063faa6f0a8fa1417e8ea40e96f72b1b9f1f61c9e881e7c9b800d25964ce3ad7932a
6
+ metadata.gz: 4629a25995953c6617a45721d7082baee59b76425636f6a4536308220bae3e7cb72b571317102339b1888c0e430dbe73320c12f44518940f45c67db829a9a265
7
+ data.tar.gz: fae1a56f95150f82da47a886da5e4b4a7ab0f725f66e68af61f6456c9a2f1af2cefc580ebf793cba612f0ceeda0b782361476a38511019062cc1534ad98fdb3c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- grumlin (0.10.1)
4
+ grumlin (0.11.0)
5
5
  async-pool (~> 0.3)
6
6
  async-websocket (~> 0.19)
7
7
  oj (~> 3.12)
@@ -3,7 +3,7 @@
3
3
  module Grumlin
4
4
  # Incapsulates logic of converting step chains and step arguments to queries that can be sent to the server
5
5
  # and to human readable strings.
6
- class Bytecode
6
+ class Bytecode < TypedValue
7
7
  class NoneStep
8
8
  def to_bytecode
9
9
  ["none"]
@@ -13,6 +13,8 @@ module Grumlin
13
13
  NONE_STEP = NoneStep.new
14
14
 
15
15
  def initialize(step, no_return: false)
16
+ super(type: "Bytecode")
17
+
16
18
  @step = step
17
19
  @no_return = no_return
18
20
  end
@@ -22,27 +24,12 @@ module Grumlin
22
24
  end
23
25
  alias to_s inspect
24
26
 
25
- def to_query
26
- {
27
- requestId: SecureRandom.uuid,
28
- op: "bytecode",
29
- processor: "traversal",
30
- args: {
31
- gremlin: to_bytecode,
32
- aliases: { g: :g }
33
- }
34
- }
35
- end
36
-
37
27
  def to_readable_bytecode
38
28
  @to_readable_bytecode ||= steps.map { |s| serialize_arg(s, serialization_method: :to_readable_bytecode) }
39
29
  end
40
30
 
41
- def to_bytecode
42
- @to_bytecode ||= {
43
- "@type": "g:Bytecode",
44
- "@value": { step: (steps + (@no_return ? [NONE_STEP] : [])).map { |s| serialize_arg(s) } }
45
- }
31
+ def value
32
+ { step: (steps + (@no_return ? [NONE_STEP] : [])).map { |s| serialize_arg(s) } }
46
33
  end
47
34
 
48
35
  private
@@ -97,7 +97,7 @@ module Grumlin
97
97
  def write(bytecode)
98
98
  raise NotConnectedError unless connected?
99
99
 
100
- request = bytecode.to_query
100
+ request = to_query(bytecode.to_bytecode)
101
101
  channel = @request_dispatcher.add_request(request)
102
102
  @transport.write(request)
103
103
 
@@ -120,5 +120,17 @@ module Grumlin
120
120
  def build_transport
121
121
  Transport.new(@url, parent: @parent, **@client_options)
122
122
  end
123
+
124
+ def to_query(bytecode)
125
+ {
126
+ requestId: SecureRandom.uuid,
127
+ op: "bytecode",
128
+ processor: "traversal",
129
+ args: {
130
+ gremlin: bytecode,
131
+ aliases: { g: :g }
132
+ }
133
+ }
134
+ end
123
135
  end
124
136
  end
data/lib/grumlin/order.rb CHANGED
@@ -9,7 +9,7 @@ module Grumlin
9
9
  name = "@#{step}"
10
10
  return instance_variable_get(name) if instance_variable_defined?(name)
11
11
 
12
- instance_variable_set(name, TypedValue.new("Order", step))
12
+ instance_variable_set(name, TypedValue.new(type: "Order", value: step))
13
13
  end
14
14
  end
15
15
  end
data/lib/grumlin/p.rb CHANGED
@@ -3,12 +3,40 @@
3
3
  module Grumlin
4
4
  module P
5
5
  module P
6
- %w[within].each do |step|
7
- define_method step do |*args|
8
- { # TODO: replace with a TypedValue?
9
- "@type": "g:P",
10
- "@value": { predicate: "within", value: { "@type": "g:List", "@value": args } }
11
- }
6
+ class Predicate < TypedValue
7
+ def initialize(name, args:, arg_type: nil)
8
+ super(type: "P")
9
+ @name = name
10
+ @args = args
11
+ @arg_type = arg_type
12
+ end
13
+
14
+ def value
15
+ @value ||=
16
+ {
17
+ predicate: @name,
18
+ value: TypedValue.new(type: @arg_type, value: @args).to_bytecode
19
+ }
20
+ end
21
+ end
22
+
23
+ # TODO: support more predicates
24
+ %w[eq neq].each do |predicate|
25
+ define_method predicate do |*args|
26
+ Predicate.new(predicate, args: args[0])
27
+ end
28
+ end
29
+
30
+ %w[within without].each do |predicate|
31
+ define_method predicate do |*args|
32
+ args = if args.count == 1 && args[0].is_a?(Array)
33
+ args[0]
34
+ elsif args.count == 1 && args[0].is_a?(Set)
35
+ args[0].to_a
36
+ else
37
+ args.to_a
38
+ end
39
+ Predicate.new(predicate, args: args, arg_type: "List")
12
40
  end
13
41
  end
14
42
  end
data/lib/grumlin/pop.rb CHANGED
@@ -9,7 +9,7 @@ module Grumlin
9
9
  name = "@#{step}"
10
10
  return instance_variable_get(name) if instance_variable_defined?(name)
11
11
 
12
- instance_variable_set(name, TypedValue.new("Pop", step))
12
+ instance_variable_set(name, TypedValue.new(type: "Pop", value: step))
13
13
  end
14
14
  end
15
15
  end
data/lib/grumlin/t.rb CHANGED
@@ -9,7 +9,7 @@ module Grumlin
9
9
  name = "@#{step}"
10
10
  return instance_variable_get(name) if instance_variable_defined?(name)
11
11
 
12
- instance_variable_set(name, TypedValue.new("T", step))
12
+ instance_variable_set(name, TypedValue.new(type: "T", value: step))
13
13
  end
14
14
  end
15
15
  end
@@ -1,19 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Grumlin
4
- # TODO: find a better name
5
4
  class TypedValue
6
- def initialize(type, value)
5
+ attr_reader :type, :value
6
+
7
+ def initialize(type: nil, value: nil)
7
8
  @type = type
8
9
  @value = value
9
10
  end
10
11
 
11
12
  def to_bytecode
12
- @to_bytecode ||= { "@type": "g:#{@type}", "@value": @value }
13
+ @to_bytecode ||= if type.nil?
14
+ value
15
+ else
16
+ {
17
+ "@type": "g:#{type}",
18
+ "@value": value
19
+ }
20
+ end
13
21
  end
14
22
 
15
23
  def inspect
16
- "<#{@type}.#{@value}>"
24
+ "<#{type}.#{value}>"
17
25
  end
18
26
  alias to_s inspect
19
27
  alias to_readable_bytecode inspect
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Grumlin
4
- VERSION = "0.10.1"
4
+ VERSION = "0.11.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grumlin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.1
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gleb Sinyavskiy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-13 00:00:00.000000000 Z
11
+ date: 2021-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async-pool