grumlin 1.0.0.rc1 → 1.0.0.rc2

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: e5a4223c6fde72d3f4ce23f3da0081a816f395a070d8737d9915f15b166c9721
4
- data.tar.gz: 8c95dcb15d4f55741cc370298e1e763427858908abebaec33f945e404d3a6fa3
3
+ metadata.gz: 1321ed876a7cc42db4e40d16fe7a7c7baa4cd0d955ad58901ecfd07051700e7b
4
+ data.tar.gz: 1b66499966537dff77767ddc5936222a7129b29004f05a60d4f578ede6c08a9f
5
5
  SHA512:
6
- metadata.gz: 69162f44551c45c0898ffa0c3650cee448a155d1950de5ea0a2a4b570c1b2b41612f3b97bd063f88f683af5fad3c18d4b874b96392a30334c77ab0e1fb1fd226
7
- data.tar.gz: 1fdb7d10a84da7d8c8173e2b0edb0f5b0f913fb0418fce59bb92d28de9c2e9a1743b89eca1f0ed8495b4d0519d2068c2314e9f17f23b77a4297e080512ace082
6
+ metadata.gz: d6158025426480ae13930848e370014e2fc77325d650d5540c11a516b4ed982ee5b3526049d7f8e1b669d9b2ddffe2370e4dc5e8ce4cda55755e69f3b72750d3
7
+ data.tar.gz: 33c02aca842d77dbe1284504b9c00195a72301bbcf23ba69cbeeffa5ca75d4d95aa71791e3d7228e863c62d1048739c70f3df90515f0339698741c1938e49484
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- grumlin (1.0.0.rc1)
4
+ grumlin (1.0.0.rc2)
5
5
  async-pool (~> 0.3)
6
6
  async-websocket (>= 0.19, < 0.20)
7
7
  ibsciss-middleware (~> 0.4.0)
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
- - `upsert_vertices(edges, batch_size: 100, on_failure: :retry, start: g, **params)`
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Grumlin
4
- VERSION = "1.0.0.rc1"
4
+ VERSION = "1.0.0.rc2"
5
5
  end
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.rc1
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-13 00:00:00.000000000 Z
11
+ date: 2022-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async-pool