rgl 0.5.4 → 0.5.8

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: 8756a57ea9c8151eadaa993efee20e2d41ddba102bee5d4106e00c94318d328e
4
- data.tar.gz: c2400afcdcc2d5c8f22ed0da9e48cd843629f57747335265087a7e3e892d55d0
3
+ metadata.gz: 43739f63914a8070716c45a94f95c058b75efee0f4cd478a30d1cdc0e45e30c0
4
+ data.tar.gz: 44d66025f8ca816c618eb12ac4a7fee1fa315c4312af698909e87caa0bdb48ad
5
5
  SHA512:
6
- metadata.gz: 83cebc1a0570644f5dc1a48c16a5a38e11d73b9baf095f2627ef91676139c473f8027b608748dfe5d7df1926b17759e07dab85722fa0ced05b1656880fade8da
7
- data.tar.gz: ad2d7ee636584a077313323efacf8c274f25643cc78e85b4f4f0e01dfbbbb522e00b7e50c295ad1e2ff395300c8f4f0551e00bb7b2a514cc179f01b9d327487e
6
+ metadata.gz: e910d7b6fdaaab9873f5daac67009eab91681789372e00e9d0bdbbfa09782f4b67763ce09634245cf0c07325847c5ec90695323dec65aaa6d940d775a89447a8
7
+ data.tar.gz: bfcd42c97cc6361e58145aa3bf5f97c89d3e9b9d1a290f67a4ffb52e0829f9f0aff06c4d17a4d0ed1f83997e0917a1fbd11cdf340a6967fc7e8cfa3ad6dc6118
data/ChangeLog CHANGED
@@ -1,3 +1,31 @@
1
+ 2022-06 Release 0.5.8
2
+
3
+ Horst Duchene
4
+ * switch to github actions (56030d)
5
+
6
+ 2020-12 Release 0.5.7
7
+
8
+ Horst Duchene
9
+ * Fully automate dev setup with Gitpod (41dd00)
10
+ * Add Dockerfile to install graphviz (2bd738)
11
+ * Examples do not call dotty (6bba96)
12
+ * Add ruby license file (a21aa5)
13
+ ujihisa <ujihisa@users.noreply.github.com>
14
+ * Test against Ruby 2.6 and 2.7 as well (50ac7c)
15
+ * Fix dead links (9184f3)
16
+ Harry Lascelles <hlascelles@users.noreply.github.com>
17
+ * Update .travis.yml (45b9a2)
18
+ * Make the links more explicit (95dc3b)
19
+ Harry Lascelles
20
+ * Add explicit license to gemspec (de3647)
21
+
22
+ 2019-01 Release 0.5.6
23
+
24
+ Artemy Kirienko
25
+ * PR #42 Add method Graph#path?(u, v) to check if a path exists between two vertices
26
+ Horst Duchene
27
+ * Fix #47 set_to_begin for graph iterator (881aa8)
28
+
1
29
  2019-01 Release 0.5.4
2
30
 
3
31
  Lia Skalkos
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Ruby Graph Library (RGL) [<img src="https://secure.travis-ci.org/monora/rgl.png?branch=master" alt="Build Status" />](https://travis-ci.org/monora/rgl) [<img src="https://codeclimate.com/github/monora/rgl/badges/coverage.svg" />](https://codeclimate.com/github/monora/rgl/coverage) [<img src="https://badge.fury.io/rb/rgl.svg" alt="Version"/>](https://badge.fury.io/rb/rgl)
1
+ # Ruby Graph Library (RGL) [![test](https://github.com/monora/rgl/actions/workflows/ruby.yml/badge.svg)](https://github.com/monora/rgl/actions/workflows/ruby.yml) [<img src="https://codeclimate.com/github/monora/rgl/badges/coverage.svg" />](https://codeclimate.com/github/monora/rgl/coverage) [<img src="https://badge.fury.io/rb/rgl.svg" alt="Version"/>](https://badge.fury.io/rb/rgl) [![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/monora/rgl)
2
2
 
3
3
  RGL is a framework for graph data structures and algorithms.
4
4
 
@@ -123,6 +123,8 @@ After that you can run the tests:
123
123
 
124
124
  ## Example irb session with RGL
125
125
 
126
+ % irb -Ilib
127
+
126
128
  irb> require 'rgl/adjacency'
127
129
  irb> dg=RGL::DirectedAdjacencyGraph[1,2 ,2,3 ,2,4, 4,5, 6,4, 1,6]
128
130
  # Use DOT to visualize this graph:
@@ -171,6 +173,12 @@ Add inverse edge (4-2) to directed graph:
171
173
  irb> dg.remove_edge 4,2
172
174
  true
173
175
 
176
+ Check whether a path exists between vertices 1 and 5
177
+
178
+ irb> require 'rgl/path'
179
+ irb> dg.path?(1, 5)
180
+ true
181
+
174
182
  *Topological sort* is implemented as an iterator:
175
183
 
176
184
  require 'rgl/topsort'
@@ -253,6 +261,7 @@ See also http://github.com/monora/rgl/contributors.
253
261
 
254
262
  ## Copying
255
263
 
256
- RGL is Copyright (c) 2002,2004,2005,2008,2013,2015,2019 by Horst Duchene. It is
257
- free software, and may be redistributed under the terms specified in the
258
- README file of the Ruby distribution.
264
+ RGL is Copyright (c) 2002,2004,2005,2008,2013,2015,2019,2020 by Horst
265
+ Duchene. It is free software, and may be redistributed under the [Ruby
266
+ license](https://en.wikipedia.org/wiki/Ruby_License) and terms specified in
267
+ the LICENSE file.
data/Rakefile CHANGED
@@ -15,7 +15,7 @@ require 'rgl/base' # require base module to get RGL_VERSION
15
15
  SOURCES = FileList['lib/**/*.rb']
16
16
 
17
17
  # The default task is run if rake is given no explicit arguments.
18
- desc "Default Task"
18
+ desc 'Default Task'
19
19
  task :default => :test
20
20
 
21
21
  # Define a test task.
@@ -28,7 +28,7 @@ end
28
28
 
29
29
  # Git tagging
30
30
 
31
- desc "Commit all changes as a new version commit. Tag the commit with v<version> tag"
31
+ desc 'Commit all changes as a new version commit. Tag the commit with v<version> tag'
32
32
  task :tag do
33
33
  puts "Committing and tagging version #{RGL_VERSION}"
34
34
  `git commit -am 'Version #{RGL_VERSION}'`
@@ -44,13 +44,13 @@ Bundler::GemHelper.install_tasks
44
44
  # TAGS ---------------------------------------------------------------
45
45
 
46
46
  file 'tags' => SOURCES do
47
- print "Running ctags..."
48
- sh %{ctags #{SOURCES.join(' ')}} # vi tags
49
- puts "done."
47
+ print 'Running ctags...'
48
+ sh %(ctags #{SOURCES.join(' ')}) # vi tags
49
+ puts 'done.'
50
50
  end
51
51
 
52
52
  file 'TAGS' => SOURCES do
53
- sh %{etags #{SOURCES.join(' ')}} # emacs TAGS
53
+ sh %(etags #{SOURCES.join(' ')}) # emacs TAGS
54
54
  end
55
55
 
56
56
  # Misc tasks =========================================================
@@ -73,34 +73,34 @@ def show_line(msg, lines, loc)
73
73
  printf "%6s %6s %s\n", lines.to_s, loc.to_s, msg
74
74
  end
75
75
 
76
- desc "Count lines in the main files"
76
+ desc 'Count lines in the main files'
77
77
  task :lines do
78
78
  total_lines = 0
79
79
  total_code = 0
80
- show_line("File Name", "LINES", "LOC")
80
+ show_line('File Name', 'LINES', 'LOC')
81
81
  SOURCES.each do |fn|
82
82
  lines, codelines = count_lines(fn)
83
83
  show_line(fn, lines, codelines)
84
84
  total_lines += lines
85
- total_code += codelines
85
+ total_code += codelines
86
86
  end
87
- show_line("TOTAL", total_lines, total_code)
87
+ show_line('TOTAL', total_lines, total_code)
88
88
  end
89
89
 
90
90
  # simple rake task to output a changelog between two commits, tags ...
91
91
  # output is formatted simply, commits are grouped under each author name
92
92
  #
93
- desc "generate changelog with nice clean output"
94
- task :changelog, :since_c, :until_c do |t,args|
93
+ desc 'generate changelog with nice clean output'
94
+ task :changelog, :since_c, :until_c do |t, args|
95
95
  since_c = args[:since_c] || `git tag | tail -1`.chomp
96
96
  until_c = args[:until_c]
97
- cmd=`git log --pretty='format:%ci::%an <%ae>::%s::%H' #{since_c}..#{until_c}`
97
+ cmd = `git log --pretty='format:%ci::%an <%ae>::%s::%H' #{since_c}..#{until_c}`
98
98
 
99
99
  entries = Hash.new
100
100
  changelog_content = String.new
101
101
 
102
102
  cmd.split("\n").each do |entry|
103
- _, author, subject, hash = entry.chomp.split("::")
103
+ _, author, subject, hash = entry.chomp.split('::')
104
104
  entries[author] = Array.new unless entries[author]
105
105
  entries[author] << "#{subject} (#{hash[0..5]})" unless subject =~ /Merge/
106
106
  end
data/examples/examples.rb CHANGED
@@ -77,7 +77,7 @@ def bfs_example(g = cycle(5), start = g.detect { |x| true })
77
77
  end
78
78
 
79
79
  # Would like to have GraphXML here
80
- def graph_from_dotfile (file)
80
+ def graph_from_dotfile(file)
81
81
  g = RGL::AdjacencyGraph.new
82
82
  pattern = /\s*([^\"]+)[\"\s]*--[\"\s]*([^\"\[\;]+)/ # ugly but works
83
83
  IO.foreach(file) { |line|
@@ -94,21 +94,23 @@ def graph_from_dotfile (file)
94
94
  g
95
95
  end
96
96
 
97
- # ruby -Ilib -r examples/examples.rb -rrgl/dot -e'bfs_example(module_graph,RGL::AdjacencyGraph).dotty'
98
-
97
+ # ruby -Ilib examples/examples.rb
99
98
  if $0 == __FILE__
100
99
  require 'rgl/dot'
101
100
 
102
101
  dg = RGL::DirectedAdjacencyGraph[1,2, 2,3, 2,4, 4,5, 6,4, 1,6]
103
- dg.dotty
104
102
  dg.write_to_graphic_file
105
- bfs_example(dg, 1).dotty
106
- bfs_example(graph_from_dotfile('dot/unix.dot'), 'Interdata').dotty({ 'label' => 'Interdata Nachfolger', 'fontsize' => 12 })
107
103
 
104
+ # BFS tree from 1 of dg:
105
+ bfs_example(dg, 1).write_to_graphic_file('png', 'bfs_example')
106
+
107
+ # Unix history as a graph:
108
+ g = bfs_example(graph_from_dotfile('examples/unix.dot'), 'Interdata')
109
+ g.write_to_graphic_file('png', 'unix', { 'label' => 'Interdata Nachfolger', 'fontsize' => 12 })
110
+
111
+ # Modules included by AdjacencyGraph:
108
112
  g = module_graph
109
113
  tree = bfs_example(module_graph, RGL::AdjacencyGraph)
110
114
  g = g.vertices_filtered_by { |v| tree.has_vertex? v }
111
- g.write_to_graphic_file
112
- g.dotty
115
+ g.write_to_graphic_file('png', 'module_graph')
113
116
  end
114
-
data/examples/unix.dot ADDED
@@ -0,0 +1,53 @@
1
+ /* courtesy Ian Darwin and Geoff Collyer, Softquad Inc. */
2
+ digraph unix {
3
+ size="6,6";
4
+ "5th Edition" -> "6th Edition";
5
+ "5th Edition" -> "PWB 1.0";
6
+ "6th Edition" -> "LSX";
7
+ "6th Edition" -> "1 BSD";
8
+ "6th Edition" -> "Mini Unix";
9
+ "6th Edition" -> "Wollongong";
10
+ "6th Edition" -> "Interdata";
11
+ "Interdata" -> "Unix/TS 3.0";
12
+ "Interdata" -> "PWB 2.0";
13
+ "Interdata" -> "7th Edition";
14
+ "7th Edition" -> "8th Edition";
15
+ "7th Edition" -> "32V";
16
+ "7th Edition" -> "V7M";
17
+ "7th Edition" -> "Ultrix-11";
18
+ "7th Edition" -> "Xenix";
19
+ "7th Edition" -> "UniPlus+";
20
+ "V7M" -> "Ultrix-11";
21
+ "8th Edition" -> "9th Edition";
22
+ "1 BSD" -> "2 BSD";
23
+ "2 BSD" -> "2.8 BSD";
24
+ "2.8 BSD" -> "Ultrix-11";
25
+ "2.8 BSD" -> "2.9 BSD";
26
+ "32V" -> "3 BSD";
27
+ "3 BSD" -> "4 BSD";
28
+ "4 BSD" -> "4.1 BSD";
29
+ "4.1 BSD" -> "4.2 BSD";
30
+ "4.1 BSD" -> "2.8 BSD";
31
+ "4.1 BSD" -> "8th Edition";
32
+ "4.2 BSD" -> "4.3 BSD";
33
+ "4.2 BSD" -> "Ultrix-32";
34
+ "PWB 1.0" -> "PWB 1.2";
35
+ "PWB 1.0" -> "USG 1.0";
36
+ "PWB 1.2" -> "PWB 2.0";
37
+ "USG 1.0" -> "CB Unix 1";
38
+ "USG 1.0" -> "USG 2.0";
39
+ "CB Unix 1" -> "CB Unix 2";
40
+ "CB Unix 2" -> "CB Unix 3";
41
+ "CB Unix 3" -> "Unix/TS++";
42
+ "CB Unix 3" -> "PDP-11 Sys V";
43
+ "USG 2.0" -> "USG 3.0";
44
+ "USG 3.0" -> "Unix/TS 3.0";
45
+ "PWB 2.0" -> "Unix/TS 3.0";
46
+ "Unix/TS 1.0" -> "Unix/TS 3.0";
47
+ "Unix/TS 3.0" -> "TS 4.0";
48
+ "Unix/TS++" -> "TS 4.0";
49
+ "CB Unix 3" -> "TS 4.0";
50
+ "TS 4.0" -> "System V.0";
51
+ "System V.0" -> "System V.2";
52
+ "System V.2" -> "System V.3";
53
+ }
data/lib/rgl/base.rb CHANGED
@@ -4,7 +4,7 @@
4
4
  # library. The main module is RGL::Graph which defines the abstract behavior of
5
5
  # all graphs in the library.
6
6
 
7
- RGL_VERSION = "0.5.4"
7
+ RGL_VERSION = "0.5.8"
8
8
 
9
9
  module RGL
10
10
  class NotDirectedError < RuntimeError; end
data/lib/rgl/graphxml.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # graphxml.rb
2
2
  #
3
3
  # This file contains minimal support for creating RGL graphs from the GraphML
4
- # format (see http://www.graphdrawing.org/graphml). The main purpose is to
4
+ # format (see http://graphml.graphdrawing.org/). The main purpose is to
5
5
  # have a rich set of example graphs to have some more tests.
6
6
  #
7
7
  # See the examples directory, which contains a subdirectory _north_ with the
@@ -48,7 +48,7 @@ module RGL
48
48
  end # class MutableGraphParser
49
49
 
50
50
  # Initializes an RGL graph from a subset of the GraphML format given in
51
- # +source+ (see http://www.graphdrawing.org/graphml).
51
+ # +source+ (see http://graphml.graphdrawing.org/).
52
52
  #
53
53
  def from_graphxml(source)
54
54
  listener = MutableGraphParser.new(self)
data/lib/rgl/path.rb ADDED
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rgl/traversal'
4
+
5
+ module RGL
6
+ module Graph
7
+ # Checks whether a path exists between _source_ and _target_ vertices
8
+ # in the graph.
9
+ #
10
+ def path?(source, target)
11
+ return false unless has_vertex?(source)
12
+
13
+ bfs_iterator = bfs_iterator(source)
14
+ bfs_iterator.include?(target)
15
+ end
16
+ end
17
+ end
data/lib/rgl/rdot.rb CHANGED
@@ -328,7 +328,7 @@ module RGL
328
328
  # :call-seq:
329
329
  # graph << element -> graph
330
330
  #
331
- def << (element)
331
+ def <<(element)
332
332
  @elements << element
333
333
  self
334
334
  end
data/lib/rgl/traversal.rb CHANGED
@@ -58,9 +58,12 @@ module RGL
58
58
  # Reset the iterator to the initial state (i.e. at_beginning? == true).
59
59
  #
60
60
  def set_to_begin
61
+ # Reset color_map
62
+ @color_map = Hash.new(:WHITE)
61
63
  color_map[@start_vertex] = :GRAY
62
- @waiting = [@start_vertex] # a queue
64
+ @waiting = [@start_vertex] # a queue
63
65
  handle_tree_edge(nil, @start_vertex) # discovers start vertex
66
+ self
64
67
  end
65
68
 
66
69
  def basic_forward # :nodoc:
data/test/path_test.rb ADDED
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ require 'rgl/adjacency'
6
+ require 'rgl/path'
7
+
8
+ class TestPath < Test::Unit::TestCase
9
+ include RGL
10
+
11
+ def setup
12
+ edges = [[1, 2], [2, 3], [2, 4], [4, 5], [6, 4], [1, 6]]
13
+ @directed_graph, @undirected_graph =
14
+ [DirectedAdjacencyGraph, AdjacencyGraph].map do |klass|
15
+ graph = klass.new
16
+ graph.add_edges(*edges)
17
+ graph
18
+ end
19
+ end
20
+
21
+ def test_path_for_directed_graph
22
+ assert(@directed_graph.path?(1, 5))
23
+ end
24
+
25
+ def test_path_for_undirected_graph
26
+ assert(@undirected_graph.path?(1, 5))
27
+ end
28
+
29
+ def test_inverse_path_for_directed_graph
30
+ assert_equal(@directed_graph.path?(3, 1), false)
31
+ end
32
+
33
+ def test_inverse_path_for_undirected_graph
34
+ assert(@undirected_graph.path?(3, 1))
35
+ end
36
+
37
+ def test_path_for_directed_graph_wrong_source
38
+ assert_equal(@directed_graph.path?(0, 1), false)
39
+ end
40
+
41
+ def test_path_for_undirected_graph_wrong_source
42
+ assert_equal(@undirected_graph.path?(0, 1), false)
43
+ end
44
+
45
+ def test_path_for_directed_graph_wrong_target
46
+ assert_equal(@directed_graph.path?(4, 0), false)
47
+ end
48
+
49
+ def test_path_for_undirected_graph_wrong_target
50
+ assert_equal(@undirected_graph.path?(4, 0), false)
51
+ end
52
+ end
@@ -218,4 +218,30 @@ END
218
218
  dg.depth_first_search(vis) { |x| }
219
219
  assert_equal("(1 (2 (3 3)(4 (5 5) 4) 2)(6 6) 1)(10 (11 11) 10)", a)
220
220
  end
221
+
222
+ def test_bfs_stream_protocol
223
+ it = @dg.bfs_iterator(1)
224
+ assert_true(it.at_beginning?)
225
+
226
+ it.set_to_end()
227
+ assert_true(it.at_end?)
228
+
229
+ it.set_to_begin()
230
+ assert_true(it.at_beginning?)
231
+
232
+ assert_equal(it.to_a(), [1, 2, 6, 3, 4, 5])
233
+ end
234
+
235
+ def test_dfs_stream_protocol
236
+ it = @dg.dfs_iterator(1)
237
+ assert_true(it.at_beginning?)
238
+
239
+ it.set_to_end()
240
+ assert_true(it.at_end?)
241
+
242
+ it.set_to_begin()
243
+ assert_true(it.at_beginning?)
244
+
245
+ assert_equal(it.to_a(), [1, 6, 4, 5, 2, 3])
246
+ end
221
247
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rgl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.4
4
+ version: 0.5.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Horst Duchene
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire: rgl/base
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-02-06 00:00:00.000000000 Z
12
+ date: 2022-06-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: stream
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 0.5.2
20
+ version: 0.5.3
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 0.5.2
27
+ version: 0.5.3
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: lazy_priority_queue
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -39,6 +39,26 @@ dependencies:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: 0.1.0
42
+ - !ruby/object:Gem::Dependency
43
+ name: rexml
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '3.2'
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: 3.2.4
52
+ type: :runtime
53
+ prerelease: false
54
+ version_requirements: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - "~>"
57
+ - !ruby/object:Gem::Version
58
+ version: '3.2'
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 3.2.4
42
62
  - !ruby/object:Gem::Dependency
43
63
  name: rake
44
64
  requirement: !ruby/object:Gem::Requirement
@@ -165,6 +185,7 @@ files:
165
185
  - examples/north/g.14.9.graphml
166
186
  - examples/north2.rb
167
187
  - examples/rdep-rgl.rb
188
+ - examples/unix.dot
168
189
  - lib/rgl/adjacency.rb
169
190
  - lib/rgl/base.rb
170
191
  - lib/rgl/bellman_ford.rb
@@ -183,6 +204,7 @@ files:
183
204
  - lib/rgl/graphxml.rb
184
205
  - lib/rgl/implicit.rb
185
206
  - lib/rgl/mutable.rb
207
+ - lib/rgl/path.rb
186
208
  - lib/rgl/path_builder.rb
187
209
  - lib/rgl/prim.rb
188
210
  - lib/rgl/rdot.rb
@@ -205,6 +227,7 @@ files:
205
227
  - test/graph_test.rb
206
228
  - test/graph_xml_test.rb
207
229
  - test/implicit_test.rb
230
+ - test/path_test.rb
208
231
  - test/prim_test.rb
209
232
  - test/rdot_test.rb
210
233
  - test/test_helper.rb
@@ -212,9 +235,10 @@ files:
212
235
  - test/traversal_test.rb
213
236
  - test/undirected_graph_test.rb
214
237
  homepage: https://github.com/monora/rgl
215
- licenses: []
238
+ licenses:
239
+ - ruby
216
240
  metadata: {}
217
- post_install_message:
241
+ post_install_message:
218
242
  rdoc_options:
219
243
  - "--title"
220
244
  - RGL - Ruby Graph Library
@@ -234,8 +258,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
234
258
  - !ruby/object:Gem::Version
235
259
  version: '0'
236
260
  requirements: []
237
- rubygems_version: 3.0.2
238
- signing_key:
261
+ rubygems_version: 3.2.3
262
+ signing_key:
239
263
  specification_version: 4
240
264
  summary: Ruby Graph Library
241
265
  test_files: []