grumlin 0.10.1 → 0.11.0
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 +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
|