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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/grumlin/bytecode.rb +5 -18
- data/lib/grumlin/client.rb +13 -1
- data/lib/grumlin/order.rb +1 -1
- data/lib/grumlin/p.rb +34 -6
- data/lib/grumlin/pop.rb +1 -1
- data/lib/grumlin/t.rb +1 -1
- data/lib/grumlin/typed_value.rb +12 -4
- data/lib/grumlin/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f0edafd4d46b787eb3f8e0ec4032948bdb4de865e4de3199606fb470dc16ef3
|
4
|
+
data.tar.gz: f23ba59dfb18dabe70fc860c38ea4c1777214b4a37e04771b24210d90f449612
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4629a25995953c6617a45721d7082baee59b76425636f6a4536308220bae3e7cb72b571317102339b1888c0e430dbe73320c12f44518940f45c67db829a9a265
|
7
|
+
data.tar.gz: fae1a56f95150f82da47a886da5e4b4a7ab0f725f66e68af61f6456c9a2f1af2cefc580ebf793cba612f0ceeda0b782361476a38511019062cc1534ad98fdb3c
|
data/Gemfile.lock
CHANGED
data/lib/grumlin/bytecode.rb
CHANGED
@@ -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
|
42
|
-
@
|
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
|
data/lib/grumlin/client.rb
CHANGED
@@ -97,7 +97,7 @@ module Grumlin
|
|
97
97
|
def write(bytecode)
|
98
98
|
raise NotConnectedError unless connected?
|
99
99
|
|
100
|
-
request = bytecode.
|
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
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
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
data/lib/grumlin/typed_value.rb
CHANGED
@@ -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
|
-
|
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 ||=
|
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
|
-
"<#{
|
24
|
+
"<#{type}.#{value}>"
|
17
25
|
end
|
18
26
|
alias to_s inspect
|
19
27
|
alias to_readable_bytecode inspect
|
data/lib/grumlin/version.rb
CHANGED
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.
|
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-
|
11
|
+
date: 2021-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async-pool
|