redgraph 0.2.1 → 0.2.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2fd53776ff217146cd6ca4924da40a43f5bf929fad03b73b79f32d371ea955e8
4
- data.tar.gz: 551afc973f8e732ad532e74395e6c73251f14d68db73f667a207b234bd64163b
3
+ metadata.gz: a48865b552ec9fdcb51a032b9dbafacc7f63cb9f08b980fdb6ad512732132131
4
+ data.tar.gz: 369db06d98cada1d39d962dd88b3f265fd8d300ba96876716f503971bd6dc010
5
5
  SHA512:
6
- metadata.gz: dd7f88ae09acb7f09b6c8de949d4f31bbc52b12e4b914f035de99c7cd9b409c14eac3e592f834cc968517b796fed0cf3a085f7eba4915e630b2e66c424ae9870
7
- data.tar.gz: 979aac39193d3150441ddf5baca14772a35c6cfd00f09df42752277aed3d955869822b2d97150209f1e71ad5ab95e566dc645d15d3e8262675dd858bd6fbb1dd
6
+ metadata.gz: cd8fca4012fd1392201c28496e90201c90819d8dd7ac988c71daeb5a7ce3e3d21c7c6249a1c2ef3af3025b7e8afcfde6de4ecf1d88f930960a3784b4701084ac
7
+ data.tar.gz: 77c95eff0ef122edb13a8644467510477c703b16d97d155b2938de38d9ed70dd59d4d8cfda5173bfec41a8caf2f6a0b255287a55e0f466983ab6c9b2ee7deacb
@@ -0,0 +1,26 @@
1
+ name: Test with FalkorDB
2
+
3
+ on: [push,pull_request]
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+
9
+ services:
10
+ redis:
11
+ image: falkordb/falkordb
12
+ ports: ["6379:6379"]
13
+
14
+ steps:
15
+ - uses: actions/checkout@v2
16
+ - name: Set up Ruby
17
+ uses: ruby/setup-ruby@v1
18
+ with:
19
+ ruby-version: 3.2.2
20
+ - name: Run the default task
21
+ env:
22
+ TEST_REDIS_URL: redis://localhost:6379/0
23
+ run: |
24
+ gem install bundler -v 2.4.10
25
+ bundle install
26
+ bundle exec rake
@@ -1,4 +1,4 @@
1
- name: Ruby
1
+ name: Test with RedisGraph
2
2
 
3
3
  on: [push,pull_request]
4
4
 
@@ -16,11 +16,11 @@ jobs:
16
16
  - name: Set up Ruby
17
17
  uses: ruby/setup-ruby@v1
18
18
  with:
19
- ruby-version: 3.0.0
19
+ ruby-version: 3.2.2
20
20
  - name: Run the default task
21
21
  env:
22
22
  TEST_REDIS_URL: redis://localhost:6379/0
23
23
  run: |
24
- gem install bundler -v 2.2.15
24
+ gem install bundler -v 2.4.10
25
25
  bundle install
26
26
  bundle exec rake
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## [0.2.3] - 2023-12-17
2
+
3
+ - Add ActiveSupport notifications
4
+
5
+ ## [0.2.2] - 2022-05-15
6
+
7
+ - Nodes allow multiple labels
8
+ - Friendlier exception message when the RedisGraph module is missing
9
+
1
10
  ## [0.2.1]
2
11
 
3
12
  - Add NodeModel#destroy method
data/CHEATSHEET.md ADDED
@@ -0,0 +1,13 @@
1
+ # Cheatsheet
2
+
3
+ Add node
4
+ ```
5
+ GRAPH.QUERY movies "CREATE(:actor {name: 'Al Pacino'})"
6
+ GRAPH.QUERY movies "CREATE(:actor {name: 'John Travolta'})"
7
+ ```
8
+
9
+ Query graph
10
+ ```
11
+ GRAPH.QUERY movies "MATCH (n) RETURN n"
12
+ GRAPH.QUERY movies "MATCH (n) WHERE ID(n) = 1 RETURN n"
13
+ ```
data/Gemfile CHANGED
@@ -8,6 +8,6 @@ gemspec
8
8
  gem "rake", "~> 13.0"
9
9
 
10
10
  gem "minitest", "~> 5.0"
11
+ gem "minitest-focus", "~> 1.4.0"
11
12
  gem "pry", "~> 0.14.0"
12
13
  gem "simplecov", "~> 0.21.2"
13
-
data/Gemfile.lock CHANGED
@@ -1,50 +1,65 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- redgraph (0.2.1)
4
+ redgraph (0.2.3)
5
5
  activesupport (>= 3.0.0)
6
6
  redis (~> 4)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activesupport (6.1.3.1)
11
+ activesupport (7.1.2)
12
+ base64
13
+ bigdecimal
12
14
  concurrent-ruby (~> 1.0, >= 1.0.2)
15
+ connection_pool (>= 2.2.5)
16
+ drb
13
17
  i18n (>= 1.6, < 2)
14
18
  minitest (>= 5.1)
19
+ mutex_m
15
20
  tzinfo (~> 2.0)
16
- zeitwerk (~> 2.3)
21
+ base64 (0.2.0)
22
+ bigdecimal (3.1.5)
17
23
  coderay (1.1.3)
18
- concurrent-ruby (1.1.8)
24
+ concurrent-ruby (1.2.2)
25
+ connection_pool (2.4.1)
19
26
  docile (1.3.5)
20
- i18n (1.8.10)
27
+ drb (2.2.0)
28
+ ruby2_keywords
29
+ i18n (1.14.1)
21
30
  concurrent-ruby (~> 1.0)
22
31
  method_source (1.0.0)
23
32
  minitest (5.14.4)
33
+ minitest-focus (1.4.0)
34
+ minitest (>= 4, < 6)
35
+ mutex_m (0.2.0)
24
36
  pry (0.14.0)
25
37
  coderay (~> 1.1)
26
38
  method_source (~> 1.0)
27
39
  rake (13.0.3)
28
- redis (4.2.5)
40
+ redis (4.8.1)
41
+ ruby2_keywords (0.0.5)
29
42
  simplecov (0.21.2)
30
43
  docile (~> 1.1)
31
44
  simplecov-html (~> 0.11)
32
45
  simplecov_json_formatter (~> 0.1)
33
46
  simplecov-html (0.12.3)
34
47
  simplecov_json_formatter (0.1.2)
35
- tzinfo (2.0.4)
48
+ tzinfo (2.0.6)
36
49
  concurrent-ruby (~> 1.0)
37
- zeitwerk (2.4.2)
38
50
 
39
51
  PLATFORMS
52
+ arm64-darwin-21
53
+ arm64-darwin-23
40
54
  x86_64-darwin-20
41
55
 
42
56
  DEPENDENCIES
43
57
  minitest (~> 5.0)
58
+ minitest-focus (~> 1.4.0)
44
59
  pry (~> 0.14.0)
45
60
  rake (~> 13.0)
46
61
  redgraph!
47
62
  simplecov (~> 0.21.2)
48
63
 
49
64
  BUNDLED WITH
50
- 2.2.15
65
+ 2.2.22
data/README.md CHANGED
@@ -5,6 +5,18 @@
5
5
 
6
6
  A simple RedisGraph library. This gem owes **a lot** to the existing [redisgraph-rb](https://github.com/RedisGraph/redisgraph-rb) gem, but tries to provide a friendlier interface, similar to the existing [Python](https://github.com/RedisGraph/redisgraph-py) and [Elixir](https://github.com/crflynn/redisgraph-ex) clients.
7
7
 
8
+ ## July 2023 update:
9
+
10
+ Sadly RedisGraph is no longer in active development. More info [here](https://redis.com/blog/redisgraph-eol/).
11
+
12
+ ## Nov 2023 update:
13
+
14
+ There is an active fork, [FalkorDB](https://github.com/FalkorDB/FalkorDB/). AFAIK at this time there are no arm64 builds available.
15
+
16
+ ## Dec 2023 update:
17
+
18
+ FalkorDB has arm64 builds now.
19
+
8
20
  ## Installation
9
21
 
10
22
  Add this line to your application's Gemfile:
@@ -36,13 +48,20 @@ Create a couple nodes:
36
48
 
37
49
  ```ruby
38
50
  actor = Redgraph::Node.new(label: 'actor', properties: {name: "Al Pacino"})
39
- => #<Redgraph::Node:0x00007f8d5f95cf88 @label="actor", @properties={:name=>"Al Pacino"}>
51
+ => #<Redgraph::Node:0x00007fce3baa0580 @id=nil, @labels=["actor"], @properties={"name"=>"Al Pacino"}>
40
52
  graph.add_node(actor)
41
- => #<Redgraph::Node:0x00007f8d5f95cf88 @id=0, @label="actor", @properties={:name=>"Al Pacino"}>
53
+ => #<Redgraph::Node:0x00007fce3baa0580 @id=0, @labels=["actor"], @properties={"name"=>"Al Pacino"}>
42
54
  film = Redgraph::Node.new(label: 'film', properties: {name: "Scarface"})
43
- => #<Redgraph::Node:0x00007f8d5f85ccc8 @label="film", @properties={:name=>"Scarface"}>
55
+ => #<Redgraph::Node:0x00007fce3e8c6c48 @id=nil, @labels=["film"], @properties={"name"=>"Scarface"}>
44
56
  graph.add_node(film)
45
- => #<Redgraph::Node:0x00007f8d5f85ccc8 @id=1, @label="film", @properties={:name=>"Scarface"}>
57
+ => #<Redgraph::Node:0x00007fce3e8c6c48 @id=1, @labels=["film"], @properties={"name"=>"Scarface"}>
58
+ ```
59
+
60
+ Nodes might have multiple labels, although they're not supported by RedisGraph yet (you can track the feature progress [here](https://github.com/RedisGraph/RedisGraph/pull/1561)):
61
+
62
+ ```ruby
63
+ item = Redgraph::Node.new(labels: ['film', 'drama'], properties: {name: "Casino"})
64
+ => #<Redgraph::Node:0x00007fce3bc73308 @id=nil, @labels=["film", "drama"], @properties={"name"=>"Casino"}>
46
65
  ```
47
66
 
48
67
  Create an edge between those nodes:
@@ -50,7 +69,7 @@ Create an edge between those nodes:
50
69
  ```ruby
51
70
  edge = Redgraph::Edge.new(src: actor, dest: film, type: 'ACTOR_IN', properties: {role: "Tony Montana"})
52
71
  => #<Redgraph::Edge:0x00007f8d5f9ae3d8 @dest=#<Redgraph::Node:0x00007f8d5f85ccc8 @id=1, @label="film", @properties={:name=>"Scarface"}>, @dest_id=1, @properties={:role=>"Tony Montana"}, @src=#<Redgraph::Node:0x00007f8d5f95cf88 @id=0, @label="actor", @properties={:name=>"Al Pacino"}>, @src_id=0, @type="ACTOR_IN">
53
- @graph.add_edge(edge)
72
+ graph.add_edge(edge)
54
73
  => #<Redgraph::Edge:0x00007f8d5f9ae3d8 @dest=#<Redgraph::Node:0x00007f8d5f85ccc8 @id=1, @label="film", @properties={:name=>"Scarface"}>, @dest_id=1, @id=0, @properties={:role=>"Tony Montana"}, @src=#<Redgraph::Node:0x00007f8d5f95cf88 @id=0, @label="actor", @properties={:name=>"Al Pacino"}>, @src_id=0, @type="ACTOR_IN">
55
74
  ```
56
75
 
@@ -64,52 +83,52 @@ graph.merge_node(film)
64
83
  Same with edges:
65
84
 
66
85
  ```ruby
67
- @graph.merge_edge(edge)
86
+ graph.merge_edge(edge)
68
87
  => #<Redgraph::Edge:0x00007f8d5f9ae3d8 @dest=#<Redgraph::Node:0x00007f8d5f85ccc8 @id=1, @label="film", @properties={:name=>"Scarface"}>, @dest_id=1, @id=0, @properties={:role=>"Tony Montana"}, @src=#<Redgraph::Node:0x00007f8d5f95cf88 @id=0, @label="actor", @properties={:name=>"Al Pacino"}>, @src_id=0, @type="ACTOR_IN">
69
88
  ```
70
89
 
71
90
  Find a node by id:
72
91
 
73
92
  ```ruby
74
- @graph.find_node_by_id(1)
93
+ graph.find_node_by_id(1)
75
94
  => #<Redgraph::Node:0x00007f8d5c2c6e88 @id=1, @label="film", @properties={"name"=>"Scarface"}>
76
95
  ```
77
96
 
78
97
  To get all nodes:
79
98
 
80
99
  ```ruby
81
- @graph.nodes
100
+ graph.nodes
82
101
  => [#<Redgraph::Node:0x00007f8d5c2ee0a0 @id=0, @label="actor", @properties={"name"=>"Al Pacino"}>, #<Redgraph::Node:0x00007f8d5c2edfd8 @id=1, @label="film", @properties={"name"=>"Scarface"}>]
83
102
  ```
84
103
 
85
104
  Optional filters that can be combined:
86
105
 
87
106
  ```ruby
88
- @graph.nodes(label: 'actor')
89
- @graph.nodes(properties: {name: "Al Pacino"})
90
- @graph.nodes(limit: 10, skip: 20)
107
+ graph.nodes(label: 'actor')
108
+ graph.nodes(properties: {name: "Al Pacino"})
109
+ graph.nodes(limit: 10, skip: 20)
91
110
  ```
92
111
 
93
112
  Counting nodes
94
113
 
95
114
  ```ruby
96
- @graph.count_nodes(label: 'actor')
115
+ graph.count_nodes(label: 'actor')
97
116
  => 1
98
117
  ```
99
118
 
100
119
  Getting edges:
101
120
 
102
121
  ```ruby
103
- @graph.edges
104
- @graph.edges(src: actor, dest: film)
105
- @graph.edges(kind: 'FRIEND_OF', limit: 10, skip: 20)
106
- @graph.count_edges
122
+ graph.edges
123
+ graph.edges(src: actor, dest: film)
124
+ graph.edges(kind: 'FRIEND_OF', limit: 10, skip: 20)
125
+ graph.count_edges
107
126
  ```
108
127
 
109
128
  Running custom queries
110
129
 
111
130
  ```ruby
112
- @graph.query("MATCH (src)-[edge:FRIEND_OF]->(dest) RETURN src, edge")
131
+ graph.query("MATCH (src)-[edge:FRIEND_OF]->(dest) RETURN src, edge")
113
132
  ```
114
133
 
115
134
  ### NodeModel
@@ -129,7 +148,7 @@ And this will give you stuff such as
129
148
  ```ruby
130
149
  Actor.count
131
150
  john = Actor.new(name: "John Travolta")
132
- john.add_to_graph # Will add the node to the graph
151
+ john.add_to_graph
133
152
  john.add_relation(type: "ACTED_IN", node: film, properties: {role: "Tony Manero"})
134
153
  john.reload
135
154
  john.destroy
@@ -145,6 +164,10 @@ Actor.query("MATCH (node) RETURN node ORDER BY node.name")
145
164
  ```
146
165
  And the result rows object will be instances of the classes defined by the `_type` attribute.
147
166
 
167
+ ### Notifications
168
+
169
+ You can optionally subscribe to `redgraph.query` ActiveSupport notifications.
170
+
148
171
  ## Development
149
172
 
150
173
  After checking out the repo, run `bin/setup` to install dependencies. Then, run
@@ -159,6 +182,22 @@ You can also run `bin/console` for an interactive prompt that will allow you to
159
182
 
160
183
  To install this gem onto your local machine, run `bundle exec rake install`.
161
184
 
185
+ ### Installing RedisGraph
186
+
187
+ If you're using an Apple silicon mac you might want to use the docker image: I've had issues compiling the module (OpenMP problems). Just do a:
188
+
189
+ docker run -p 6380:6379 -it --rm redislabs/redisgraph
190
+
191
+ or, to try FalkorDB
192
+
193
+ docker run -p 6380:6379 -it --rm falkordb/falkordb:edge
194
+
195
+ and then
196
+
197
+ TEST_REDIS_URL=redis://localhost:6380/0 be rake test
198
+
199
+ I'm using port 6380 to not interphere with the other redis instance.
200
+
162
201
  ## Contributing
163
202
 
164
203
  Bug reports and pull requests are welcome on GitHub at https://github.com/pzac/redgraph.
@@ -19,7 +19,7 @@ module Redgraph
19
19
  @graph_name = graph_name
20
20
  @connection = Redis.new(redis_options)
21
21
  @module_version = module_version
22
- raise ServerError unless @module_version
22
+ raise ServerError, "Can't find RedisGraph module" unless @module_version
23
23
  end
24
24
 
25
25
  # Returns the version of the RedisGraph module
@@ -99,7 +99,11 @@ module Redgraph
99
99
  private
100
100
 
101
101
  def _query(cmd)
102
- data = @connection.call("GRAPH.QUERY", graph_name, cmd, "--compact")
102
+ data = nil
103
+ query = ["GRAPH.QUERY", graph_name, cmd, "--compact"]
104
+ ActiveSupport::Notifications.instrument(NOTIFICATIONS_KEY, query: query.join(' ')) do
105
+ data = @connection.call(*query)
106
+ end
103
107
  QueryResponse.new(data, self)
104
108
  end
105
109
  end
data/lib/redgraph/node.rb CHANGED
@@ -4,14 +4,19 @@ module Redgraph
4
4
  class Node
5
5
  include Util
6
6
 
7
- attr_accessor :id, :label, :properties
7
+ attr_accessor :id, :labels, :properties
8
8
 
9
- def initialize(label: nil, properties: nil, id: nil)
9
+ def initialize(label: nil, properties: nil, id: nil, labels: nil)
10
10
  @id = id
11
- @label = label
11
+ raise(Error, "You can either define a single label or a label array") if label && labels
12
+ @labels = labels || (label ? [label] : [])
12
13
  @properties = (properties || {}).with_indifferent_access
13
14
  end
14
15
 
16
+ def label
17
+ labels.first
18
+ end
19
+
15
20
  def persisted?
16
21
  id.present?
17
22
  end
@@ -21,7 +26,7 @@ module Redgraph
21
26
  end
22
27
 
23
28
  def to_query_string(item_alias: 'node')
24
- _label = ":#{label}" if label
29
+ _label = labels.map {|l| ":`#{l}`"}.join
25
30
  "(#{item_alias}#{_label} #{properties_to_string(properties)})"
26
31
  end
27
32
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Redgraph
4
- VERSION = "0.2.1"
4
+ VERSION = "0.2.3"
5
5
  end
data/lib/redgraph.rb CHANGED
@@ -4,6 +4,8 @@ require "active_support/core_ext/hash/indifferent_access"
4
4
  require "active_support/core_ext/object/blank"
5
5
  require "active_support/core_ext/string/inflections"
6
6
  require "active_support/concern"
7
+ require 'active_support/notifications'
8
+ require 'active_support/isolated_execution_state'
7
9
 
8
10
  require_relative "redgraph/version"
9
11
  require_relative "redgraph/util"
@@ -14,6 +16,8 @@ require_relative "redgraph/query_response"
14
16
  require_relative "redgraph/node_model"
15
17
 
16
18
  module Redgraph
19
+ NOTIFICATIONS_KEY = "redgraph.query".freeze
20
+
17
21
  class Error < StandardError; end
18
22
  class ServerError < Error; end
19
23
  class MissingAliasPrefixError < Error
@@ -26,7 +26,7 @@ class GraphNodeMethodsTest < Minitest::Test
26
26
  end
27
27
 
28
28
  def test_find_node_by_wrong_id
29
- node = @graph.find_node_by_id("-1")
29
+ node = @graph.find_node_by_id(999999)
30
30
 
31
31
  assert_nil(node)
32
32
  end
@@ -42,4 +42,15 @@ class GraphQueriesTest < Minitest::Test
42
42
  result = @graph.query("MATCH (src)-[edge:FRIEND_OF]->(dest) RETURN src, edge")
43
43
  assert_equal([[@al, edge]], result)
44
44
  end
45
+
46
+ def test_query_notifications
47
+ payload = nil
48
+ subscription = ActiveSupport::Notifications.subscribe Redgraph::NOTIFICATIONS_KEY do |name, start, finish, id, _payload|
49
+ payload = _payload
50
+ end
51
+
52
+ query = "MATCH (n) RETURN n.name ORDER BY n.name"
53
+ result = @graph.query(query)
54
+ assert_includes(payload[:query], query)
55
+ end
45
56
  end
@@ -65,7 +65,7 @@ class NodeModelClassMethodsTest < Minitest::Test
65
65
 
66
66
  def test_find_bad_id
67
67
  quick_add_node(label: 'actor', properties: {name: "Al Pacino"})
68
- item = Actor.find("-1")
68
+ item = Actor.find(999999)
69
69
  assert_nil(item)
70
70
  end
71
71
 
data/test/node_test.rb ADDED
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class NodeTest < Minitest::Test
6
+ def test_single_labels
7
+ node = Redgraph::Node.new(label: "film")
8
+ assert_equal(["film"], node.labels)
9
+ assert_equal("film", node.label)
10
+ end
11
+
12
+ def test_multiple_labels
13
+ node = Redgraph::Node.new(labels: ["film", "drama"])
14
+ assert_equal(["film", "drama"], node.labels)
15
+ assert_equal("film", node.label)
16
+ end
17
+
18
+ def test_conflicting_labels
19
+ assert_raises(Redgraph::Error) do
20
+ Redgraph::Node.new(labels: ["film", "drama"], label: "film")
21
+ end
22
+ end
23
+ end
data/test/test_helper.rb CHANGED
@@ -13,10 +13,12 @@ $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
13
13
  require "redgraph"
14
14
 
15
15
  require "minitest/autorun"
16
+ require "minitest/focus"
16
17
  require "pry"
17
18
 
18
19
  unless $REDIS_URL = ENV['TEST_REDIS_URL']
19
- puts "To run the tests you need to define the TEST_REDIS_URL environment variable"
20
+ puts "To run the tests you need to define the TEST_REDIS_URL environment variable. Ex:"
21
+ puts " TEST_REDIS_URL=redis://localhost:6379/0"
20
22
  exit(1)
21
23
  end
22
24
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redgraph
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paolo Zaccagnini
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-23 00:00:00.000000000 Z
11
+ date: 2023-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -45,9 +45,11 @@ executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
- - ".github/workflows/main.yml"
48
+ - ".github/workflows/tests-falkordb.yml"
49
+ - ".github/workflows/tests-redisgraph.yml"
49
50
  - ".gitignore"
50
51
  - CHANGELOG.md
52
+ - CHEATSHEET.md
51
53
  - Gemfile
52
54
  - Gemfile.lock
53
55
  - LICENSE.txt
@@ -79,6 +81,7 @@ files:
79
81
  - test/node_model_labels_test.rb
80
82
  - test/node_model_persistence_test.rb
81
83
  - test/node_model_test.rb
84
+ - test/node_test.rb
82
85
  - test/redgraph_test.rb
83
86
  - test/test_helper.rb
84
87
  homepage: https://github.com/pzac/redgraph
@@ -103,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
106
  - !ruby/object:Gem::Version
104
107
  version: '0'
105
108
  requirements: []
106
- rubygems_version: 3.2.3
109
+ rubygems_version: 3.4.10
107
110
  signing_key:
108
111
  specification_version: 4
109
112
  summary: A simple RedisGraph client