grumlin 1.0.0.rc1 → 1.0.0.rc2
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/README.md +6 -1
- data/lib/grumlin/shortcuts/upserts.rb +2 -1
- data/lib/grumlin/version.rb +1 -1
- data/lib/grumlin.rb +13 -0
- 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: 1321ed876a7cc42db4e40d16fe7a7c7baa4cd0d955ad58901ecfd07051700e7b
|
4
|
+
data.tar.gz: 1b66499966537dff77767ddc5936222a7129b29004f05a60d4f578ede6c08a9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d6158025426480ae13930848e370014e2fc77325d650d5540c11a516b4ed982ee5b3526049d7f8e1b669d9b2ddffe2370e4dc5e8ce4cda55755e69f3b72750d3
|
7
|
+
data.tar.gz: 33c02aca842d77dbe1284504b9c00195a72301bbcf23ba69cbeeffa5ca75d4d95aa71791e3d7228e863c62d1048739c70f3df90515f0339698741c1938e49484
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -148,9 +148,14 @@ Each `return_mode` is mapped to a particular termination step:
|
|
148
148
|
|
149
149
|
and a few methods that emulate upserts:
|
150
150
|
- `upsert_vertex(label, id, create_properties: {}, update_properties: {}, on_failure: :retry, start: g, **params)`
|
151
|
+
- `upsert_vertices(edges, batch_size: 100, on_failure: :retry, start: g, **params)`
|
151
152
|
- `upsert_edge(label, from:, to:, create_properties: {}, update_properties: {}, on_failure: :retry, start: g, **params)`
|
152
153
|
- `upsert_edges(edges, batch_size: 100, on_failure: :retry, start: g, **params)`
|
153
|
-
|
154
|
+
|
155
|
+
**Note**: all upsert methods expect your provider has support for user supplied string ids for nodes and edges
|
156
|
+
respectively. For edges and if `create_properties[T.id]` if nil, grumlin will generate a uuid-like id out of `from` and
|
157
|
+
`to` vertex ids and edge's label to ensure uniqueness of the edge. If you manually provide an id, it's your
|
158
|
+
responsibility to ensure it's uniquely identifies the edge using it's `from`, `to` and `label`.
|
154
159
|
|
155
160
|
All of them support 3 different modes for error handling: `:retry`, `:ignore` and `:raise`. Retry mode is implemented
|
156
161
|
with [retryable](https://github.com/nfedyashev/retryable). **params will be merged to the default config for upserts
|
@@ -13,12 +13,13 @@ module Grumlin::Shortcuts::Upserts
|
|
13
13
|
end
|
14
14
|
|
15
15
|
shortcut :upsertE do |label, from, to, create_properties = {}, update_properties = {}|
|
16
|
+
id = create_properties[T.id] || Grumlin.fake_uuid(from, label, to)
|
16
17
|
self.V(from)
|
17
18
|
.outE(label).where(__.inV.hasId(to))
|
18
19
|
.fold
|
19
20
|
.coalesce(
|
20
21
|
__.unfold,
|
21
|
-
__.addE(label).from(__.V(from)).to(__.V(to)).props(**create_properties)
|
22
|
+
__.addE(label).from(__.V(from)).to(__.V(to)).props(**create_properties.merge(T.id => id))
|
22
23
|
).props(**update_properties)
|
23
24
|
end
|
24
25
|
end
|
data/lib/grumlin/version.rb
CHANGED
data/lib/grumlin.rb
CHANGED
@@ -184,6 +184,19 @@ module Grumlin
|
|
184
184
|
def definitions
|
185
185
|
@definitions ||= YAML.safe_load(File.read(File.join(__dir__, "definitions.yml")), symbolize_names: true)
|
186
186
|
end
|
187
|
+
|
188
|
+
def fake_uuid(*parts, separator: "->")
|
189
|
+
uuid = Digest::MD5.hexdigest(parts.join(separator))
|
190
|
+
|
191
|
+
segments = [8, 4, 4, 4, 12]
|
192
|
+
parts = segments.map do |n|
|
193
|
+
uuid[0...n].tap do
|
194
|
+
uuid = uuid[n..]
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
parts.join("-")
|
199
|
+
end
|
187
200
|
end
|
188
201
|
end
|
189
202
|
|
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: 1.0.0.
|
4
|
+
version: 1.0.0.rc2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gleb Sinyavskiy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-09-
|
11
|
+
date: 2022-09-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async-pool
|