gv 0.1.0 → 0.1.1

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
- SHA1:
3
- metadata.gz: 17e83e14df49d9b53bb2d2d32106be45b59bcfde
4
- data.tar.gz: 71612086bd7676a972c8f2de30e7017024694d5d
2
+ SHA256:
3
+ metadata.gz: 92d208286b90fddbf8c5c1660c0ef7a9c571c4de2c798f2329456cda47b1b375
4
+ data.tar.gz: 247302d77d98a3709826893687b518e78bbb4c59bd7e187ab46f91c8bdbe77e2
5
5
  SHA512:
6
- metadata.gz: 721459c62dd6543cc5a8510bcfc08c1abe87232dbaa621417537646d5f4b3196164b03027345b2580e00814d2a9d2dc4b5bb62812ede5fc9394023c07f67d962
7
- data.tar.gz: fc708e42515acb0102f8ab9bd4d6ebea51d5bd02c8069000b1345b4ecc9e175098d9355b067aa491ac6b8f1900dc046cde4d71ca3db7ee14095cbd1be7be7b34
6
+ metadata.gz: 153040bdbaed5d91e3438cb2354203b1c1dd8ba0fe9e328d7b23fb3101f7160f5cea7277f23d27ff58b434e9b175044e203a5b517316400835e9b9bf4c75d584
7
+ data.tar.gz: 34b4de2d1454cfdd059ee0fac8f989820fc39322dd3e27eb4607363f8c4966a60886e3fd52fc45442d4168bf887e2efa6122c16b97930e7ef813560bf9eb1693
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/gv.svg)](https://badge.fury.io/rb/gv)
2
- [![Yard Docs](http://img.shields.io/badge/yard-docs-blue.svg)](http://rubydoc.info/github/furunkel/gv/master/frames)
2
+ [![Inline docs](http://inch-ci.org/github/furunkel/gv.svg?branch=master)](http://inch-ci.org/github/furunkel/gv)
3
3
  [![Build Status](https://travis-ci.org/furunkel/gv.svg?branch=master)](https://travis-ci.org/furunkel/gv)
4
4
 
5
- # GV
5
+ # Graphviz FFI
6
6
 
7
- Ruby bindings for libgvc (Graphviz) using FFI.
7
+ Ruby bindings for libcgraph and libgvc (Graphviz) using FFI.
8
8
 
9
9
  ## Installation
10
10
 
@@ -49,6 +49,7 @@ graph = GV::Graph.load File.open('g.dot')
49
49
  # render graph
50
50
  graph.render
51
51
  ```
52
+ See the [documentation](http://www.rubydoc.info/gems/gv) for details.
52
53
 
53
54
  ## Contributing
54
55
 
data/gv.gemspec CHANGED
@@ -4,23 +4,25 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'gv/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "gv"
7
+ spec.name = 'gv'
8
8
  spec.version = GV::VERSION
9
- spec.authors = ["furunkel"]
10
- spec.email = ["julian@linux4you.it"]
9
+ spec.authors = ['furunkel']
10
+ spec.email = ['furunkel@polyadic.com']
11
11
  spec.summary = %q{Graphviz for Ruby, using libgvc via FFI}
12
- spec.homepage = "https://github.com/furunkel/gv"
13
- spec.license = "MIT"
12
+ spec.homepage = 'https://github.com/furunkel/gv'
13
+ spec.license = 'MIT'
14
14
 
15
15
  spec.files = `git ls-files -z`.split("\x0")
16
16
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
- spec.require_paths = ["lib"]
18
+ spec.require_paths = ['lib']
19
19
 
20
- spec.add_development_dependency "bundler", "~> 1.7"
21
- spec.add_development_dependency "rake", "~> 10.0"
22
- spec.add_development_dependency "minitest"
23
- spec.add_development_dependency "yard"
20
+ spec.add_dependency 'ffi', '>= 1.11'
24
21
 
25
- spec.add_dependency "ffi"
22
+ spec.add_development_dependency 'bundler', '>= 2'
23
+ spec.add_development_dependency 'rake', '>= 10.0'
24
+ spec.add_development_dependency 'yard', '>= 0.9'
25
+ spec.add_development_dependency 'minitest', '>= 5.8'
26
+ spec.add_development_dependency 'minitest-reporters', '> 1.1'
27
+ spec.add_development_dependency 'rubocop', '>= 0.41'
26
28
  end
data/lib/gv/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module GV
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/lib/gv.rb CHANGED
@@ -2,25 +2,22 @@ require 'gv/version'
2
2
  require 'ffi'
3
3
 
4
4
  module GV
5
-
6
- module LibCGraph
5
+ module Libcgraph
7
6
  extend FFI::Library
8
7
 
9
8
  ffi_lib 'cgraph'
10
9
 
11
10
  class AGraph < FFI::AutoPointer
12
11
  def self.release(ptr)
13
- LibCGraph.agclose(ptr) unless ptr.null?
12
+ Libcgraph.agclose(ptr) unless ptr.null?
14
13
  end
15
14
  end
16
15
 
17
-
18
16
  typedef :pointer, :ag_node
19
17
  typedef :pointer, :ag_edge
20
18
 
21
-
22
19
  attach_function :agmemread, [:string], AGraph
23
- attach_function :agopen, [:string, :long, :pointer], AGraph
20
+ attach_function :agopen, %i[string long pointer], AGraph
24
21
  attach_function :agclose, [AGraph], :int
25
22
 
26
23
  attach_variable :Agundirected, :long
@@ -37,36 +34,37 @@ module GV
37
34
 
38
35
  attach_function :agtail, [:ag_edge], :ag_node
39
36
  attach_function :aghead, [:ag_edge], :ag_node
40
- attach_function :agget, [:pointer, :string], :string
37
+ attach_function :agget, %i[pointer string], :string
41
38
 
42
- attach_function :agsafeset, [:pointer, :string, :string, :string], :pointer
39
+ attach_function :agsafeset, %i[pointer string string string], :pointer
43
40
  attach_function :agstrdup_html, [AGraph, :string], :pointer
44
41
  attach_function :agstrfree, [AGraph, :pointer], :int
45
42
 
46
43
  attach_function :agisdirected, [AGraph], :int
47
44
  attach_function :agisstrict, [AGraph], :int
48
45
  end
49
- private_constant :LibCGraph
46
+ private_constant :Libcgraph
50
47
 
51
- module LibGVC
48
+ module Libgvc
52
49
  extend FFI::Library
53
50
  ffi_lib 'gvc'
54
51
 
55
52
  typedef :pointer, :gvc
56
53
 
57
54
  attach_function :gvContext, [], :pointer
58
- attach_function :gvFreeLayout, [:gvc, LibCGraph::AGraph], :int
59
- attach_function :gvLayout, [:gvc, LibCGraph::AGraph, :string], :int
55
+ attach_function :gvFreeLayout, [:gvc, Libcgraph::AGraph], :int
56
+ attach_function :gvLayout, [:gvc, Libcgraph::AGraph, :string], :int
60
57
 
61
- attach_function :gvRenderFilename, [:gvc, LibCGraph::AGraph, :string, :string], :int
62
- attach_function :gvRenderData, [:gvc, LibCGraph::AGraph, :string, :pointer, :pointer], :int
58
+ attach_function :gvRenderFilename, [:gvc, Libcgraph::AGraph, :string, :string], :int
59
+ attach_function :gvRenderData, [:gvc, Libcgraph::AGraph, :string, :pointer, :pointer], :int
63
60
  attach_function :gvFreeRenderData, [:pointer], :void
64
61
  end
65
- private_constant :LibGVC
62
+ private_constant :Libgvc
66
63
 
64
+ # Common super-class for edges, nodes and graphs
67
65
  class Component
68
66
  # @!visibility private
69
- @@gvc = LibGVC.gvContext()
67
+ @@gvc = Libgvc.gvContext
70
68
 
71
69
  # @return [Graph, SubGraph] the graph this component belongs to
72
70
  attr_reader :graph
@@ -75,9 +73,9 @@ module GV
75
73
  # @param string [String] the HTML to parse
76
74
  # @return [Object] a HTML label
77
75
  def html(string)
78
- ptr = LibCGraph.agstrdup_html(graph.ptr, string)
76
+ ptr = Libcgraph.agstrdup_html(graph.ptr, string)
79
77
  string = ptr.read_string
80
- LibCGraph.agstrfree graph.ptr, ptr
78
+ Libcgraph.agstrfree graph.ptr, ptr
81
79
 
82
80
  string
83
81
  end
@@ -90,11 +88,11 @@ module GV
90
88
  other.is_a?(Component) && ptr == other.ptr
91
89
  end
92
90
 
93
- alias :eql? :==
91
+ alias eql? ==
94
92
 
95
93
  # @return [String] the component's name
96
94
  def name
97
- LibCGraph.agnameof ptr
95
+ Libcgraph.agnameof ptr
98
96
  end
99
97
 
100
98
  # Sets an attribute
@@ -102,7 +100,7 @@ module GV
102
100
  # @see http://www.graphviz.org/doc/info/attrs.html Node, Edge and Graph Attributes
103
101
  # @param value [Object] attribute value
104
102
  def []=(attr, value)
105
- LibCGraph.agsafeset(ptr, attr.to_s, value.to_s, "")
103
+ Libcgraph.agsafeset(ptr, attr.to_s, value.to_s, '')
106
104
  end
107
105
 
108
106
  # Retrieves the value of an attribute
@@ -110,48 +108,52 @@ module GV
110
108
  # @see http://www.graphviz.org/doc/info/attrs.html Node, Edge and Graph Attributes
111
109
  # @return [Object] the attribute value
112
110
  def [](attr)
113
- LibCGraph.agget(ptr, attr.to_s)
111
+ Libcgraph.agget(ptr, attr.to_s)
114
112
  end
115
113
 
116
114
  protected
115
+
117
116
  attr_reader :ptr
118
117
  end
119
118
 
119
+ # Represents a node in the graph
120
120
  class Node < Component
121
121
  def initialize(graph, name_or_ptr)
122
122
  @graph = graph
123
- case name_or_ptr
124
- when String
125
- @ptr = LibCGraph.agnode(graph.ptr, name_or_ptr, 1)
126
- else
127
- @ptr = name_or_ptr
128
- end
123
+ @ptr =
124
+ case name_or_ptr
125
+ when String
126
+ Libcgraph.agnode(graph.ptr, name_or_ptr, 1)
127
+ else
128
+ name_or_ptr
129
+ end
129
130
  end
130
131
  end
131
132
 
133
+ # Represents a connection between nodes
132
134
  class Edge < Component
133
135
  def initialize(graph, name, tail, head)
134
136
  @graph = graph
135
137
 
136
- @ptr = LibCGraph.agedge(graph.ptr, tail.ptr, head.ptr, name, 1)
138
+ @ptr = Libcgraph.agedge(graph.ptr, tail.ptr, head.ptr, name, 1)
137
139
  end
138
140
 
139
141
  # @return [Node] the head node of the edge
140
142
  def head
141
- Node.new @graph, LibCGraph.aghead(ptr)
143
+ Node.new @graph, Libcgraph.aghead(ptr)
142
144
  end
143
145
 
144
146
  # @return [Node] the tail node of the edge
145
147
  def tail
146
- Node.new @graph, LibCGraph.agtail(ptr)
148
+ Node.new @graph, Libcgraph.agtail(ptr)
147
149
  end
148
150
  end
149
151
 
152
+ # Common super-class for graphs and sub-graphs
150
153
  class BaseGraph < Component
151
-
152
154
  # Creates a new node
153
155
  # @param name [String] the name (identifier) of the node
154
- # @param attrs [Hash{String, Symbol => Object}] the attributes
156
+ # @param attrs [Hash{String, Symbol => Object}] the attributes
155
157
  # to associate with this node
156
158
  # @see http://www.graphviz.org/doc/info/attrs.html Node, Edge and Graph Attributes
157
159
  # @return [Node] the newly created node
@@ -186,15 +188,16 @@ module GV
186
188
 
187
189
  # @return whether this graph is directed
188
190
  def directed?
189
- LibCGraph.agisdirected(ptr) == 1
191
+ Libcgraph.agisdirected(ptr) == 1
190
192
  end
191
193
 
192
194
  # @return whether this graph is strict
193
195
  def strict?
194
- LibCGraph.agisstrict(ptr) == 1
196
+ Libcgraph.agisstrict(ptr) == 1
195
197
  end
196
198
 
197
199
  private
200
+
198
201
  def component(klass, args, attrs = {})
199
202
  comp = klass.new self, *args
200
203
 
@@ -204,18 +207,18 @@ module GV
204
207
 
205
208
  comp
206
209
  end
207
-
208
210
  end
209
211
 
212
+ # Represents a sub-graph
210
213
  class SubGraph < BaseGraph
211
214
  def initialize(graph, name)
212
215
  @graph = graph
213
- @ptr = LibCGraph.agsubg(graph.ptr, name, 1)
216
+ @ptr = Libcgraph.agsubg(graph.ptr, name, 1)
214
217
  end
215
218
  end
216
219
 
220
+ # Represents a toplevel graph
217
221
  class Graph < BaseGraph
218
-
219
222
  class << self
220
223
  private :new
221
224
 
@@ -227,19 +230,21 @@ module GV
227
230
  # @return [Graph] the newly created graph
228
231
  def open(name, type = :directed, strictness = :normal)
229
232
  ag_type = case [type, strictness]
230
- when [:directed, :normal] then LibCGraph.Agdirected
231
- when [:undirected, :normal] then LibCGraph.Agundirected
232
- when [:directed, :strict] then LibCGraph.Agstrictdirected
233
- when [:undirected, :strict] then LibCGraph.Agstrictundirected
234
- else
235
- raise ArgumentError, "invalid graph type #{[type, strictness]}"
236
- end
237
-
238
- graph = new(LibCGraph.agopen(name, ag_type, FFI::Pointer::NULL))
239
-
240
- if block_given?
241
- yield graph
242
- end
233
+ when %i[directed normal]
234
+ Libcgraph.Agdirected
235
+ when %i[undirected normal]
236
+ Libcgraph.Agundirected
237
+ when %i[directed strict]
238
+ Libcgraph.Agstrictdirected
239
+ when %i[undirected strict]
240
+ Libcgraph.Agstrictundirected
241
+ else
242
+ raise ArgumentError, "invalid graph type #{[type, strictness]}"
243
+ end
244
+
245
+ graph = new(Libcgraph.agopen(name, ag_type, FFI::Pointer::NULL))
246
+
247
+ yield graph if block_given?
243
248
 
244
249
  graph
245
250
  end
@@ -249,11 +254,11 @@ module GV
249
254
  # @return the newly loaded graph
250
255
  def load(io)
251
256
  data = if io.is_a? String
252
- io
253
- else
254
- io.read
255
- end
256
- new LibCGraph.agmemread(data)
257
+ io
258
+ else
259
+ io.read
260
+ end
261
+ new Libcgraph.agmemread(data)
257
262
  end
258
263
  end
259
264
 
@@ -271,9 +276,9 @@ module GV
271
276
  # @param layout [String] the layout to use, e.g. 'dot' or 'neato' etc.
272
277
  # @return [nil]
273
278
  def save(filename, format = 'png', layout = 'dot')
274
- LibGVC.gvLayout(@@gvc, ptr, layout.to_s)
275
- LibGVC.gvRenderFilename(@@gvc, ptr, format.to_s, filename);
276
- LibGVC.gvFreeLayout(@@gvc, ptr)
279
+ Libgvc.gvLayout(@@gvc, ptr, layout.to_s)
280
+ Libgvc.gvRenderFilename(@@gvc, ptr, format.to_s, filename)
281
+ Libgvc.gvFreeLayout(@@gvc, ptr)
277
282
 
278
283
  nil
279
284
  end
@@ -283,19 +288,19 @@ module GV
283
288
  # @param layout [String] the layout to use, e.g. 'dot' or 'neato' etc.
284
289
  # @return [String] the rendered graph in the given format
285
290
  def render(format = 'png', layout = 'dot')
286
- LibGVC.gvLayout(@@gvc, ptr, layout.to_s)
291
+ Libgvc.gvLayout(@@gvc, ptr, layout.to_s)
287
292
 
288
293
  data_ptr = FFI::MemoryPointer.new(:pointer, 1)
289
294
  len_ptr = FFI::MemoryPointer.new(:int, 1)
290
295
 
291
- LibGVC.gvRenderData(@@gvc, ptr, format.to_s, data_ptr, len_ptr);
296
+ Libgvc.gvRenderData(@@gvc, ptr, format.to_s, data_ptr, len_ptr)
292
297
  len = len_ptr.read_uint
293
298
  data_ptr = data_ptr.read_pointer
294
-
299
+
295
300
  data = data_ptr.read_string len
296
301
 
297
- LibGVC.gvFreeRenderData(data_ptr)
298
- LibGVC.gvFreeLayout(@@gvc, ptr)
302
+ Libgvc.gvFreeRenderData(data_ptr)
303
+ Libgvc.gvFreeLayout(@@gvc, ptr)
299
304
 
300
305
  data
301
306
  end
data/spec/graph_spec.rb CHANGED
@@ -1,36 +1,37 @@
1
1
  require_relative 'spec_helper'
2
+ require 'tmpdir'
2
3
 
3
4
  include GV
4
5
 
5
6
  describe Graph do
6
7
  describe :open do
7
- it "creates a new graph" do
8
+ it 'creates a new graph' do
8
9
  graph = Graph.open 'test'
9
- graph.directed?.must_equal true
10
- graph.strict?.must_equal false
10
+ assert graph.directed?
11
+ refute graph.strict?
11
12
 
12
13
  graph = Graph.open 'test', :directed, :strict
13
- graph.strict?.must_equal true
14
- graph.directed?.must_equal true
14
+ assert graph.strict?
15
+ assert graph.directed?
15
16
  end
16
17
 
17
- it "takes a block" do
18
+ it 'takes a block' do
18
19
  Graph.open 'test' do |g|
19
- g.directed?.must_equal true
20
- g.strict?.must_equal false
20
+ assert g.directed?
21
+ refute g.strict?
21
22
  end
22
23
  end
23
24
  end
24
25
 
25
26
  describe :load do
26
- it "loads graph from file" do
27
+ it 'loads graph from file' do
27
28
  f = lambda do |filename|
28
29
  graph = Graph.load filename
29
- graph.directed?.must_equal true
30
- graph.strict?.must_equal false
31
- graph.name.must_equal 'g'
30
+ assert graph.directed?
31
+ refute graph.strict?
32
+ assert_equal 'g', graph.name
32
33
  end
33
-
34
+
34
35
  filename = File.join(__dir__, 'simple_graph.dot')
35
36
  file = File.open filename
36
37
  f.call file
@@ -45,12 +46,12 @@ describe Graph do
45
46
  @graph = Graph.open 'test'
46
47
  end
47
48
 
48
- it "creates a new node" do
49
- @graph.node('test').must_be_kind_of Node
49
+ it 'creates a new node' do
50
+ assert_kind_of Node, @graph.node('test')
50
51
  end
51
52
 
52
- it "sets given attributes" do
53
- @graph.node('test', color: 'green')[:color].must_equal 'green'
53
+ it 'sets given attributes' do
54
+ assert_equal 'green', @graph.node('test', color: 'green')[:color]
54
55
  end
55
56
  end
56
57
 
@@ -59,23 +60,22 @@ describe Graph do
59
60
  @graph = Graph.open 'test'
60
61
  end
61
62
 
62
- it "creates a new sub graph" do
63
- @graph.sub_graph('test').must_be_kind_of SubGraph
63
+ it 'creates a new sub graph' do
64
+ assert_kind_of SubGraph, @graph.sub_graph('test')
64
65
  end
65
66
 
66
- it "sets given attributes" do
67
- @graph.sub_graph('test', color: 'green')[:color].must_equal 'green'
67
+ it 'sets given attributes' do
68
+ assert_equal 'green', @graph.sub_graph('test', color: 'green')[:color]
68
69
  end
69
70
 
70
- it "takes a block" do
71
+ it 'takes a block' do
71
72
  graph = @graph.sub_graph('test') do |g|
72
73
  g[:color] = 'green'
73
74
  end
74
- graph[:color].must_equal 'green'
75
+ assert_equal 'green', graph[:color]
75
76
  end
76
77
  end
77
78
 
78
-
79
79
  describe :edge do
80
80
  before do
81
81
  @graph = Graph.open 'test'
@@ -83,35 +83,38 @@ describe Graph do
83
83
  @tail = @graph.node 'tail'
84
84
  end
85
85
 
86
- it "creates a new edge" do
87
- @graph.edge('test', @tail, @head).must_be_kind_of Edge
86
+ it 'creates a new edge' do
87
+ assert_kind_of Edge, @graph.edge('test', @tail, @head)
88
88
  end
89
89
 
90
- it "sets given attributes" do
91
- @graph.edge('test', @tail, @head, color: 'green')[:color].must_equal 'green'
90
+ it 'sets given attributes' do
91
+ assert_equal 'green', @graph.edge('test', @tail, @head, color: 'green')[:color]
92
92
  end
93
93
  end
94
94
 
95
95
  describe :save do
96
- it "renders the graph to the given filename" do
96
+ it 'renders the graph to the given filename' do
97
97
  graph = Graph.open 'test'
98
98
  graph.edge 'e', graph.node('A'), graph.node('B')
99
- filename = File.join Dir.tmpdir, Dir::Tmpname.make_tmpname(['gv_test', '.png'], nil)
100
- graph.save filename
101
- File.file?(filename).must_equal true
102
- File.unlink filename
99
+ Tempfile.create(%w(gv_test .png)) do |file|
100
+ graph.save file.path
101
+ assert_equal true, File.file?(file.path)
102
+ end
103
103
  end
104
104
  end
105
105
 
106
106
  describe :render do
107
- it "renders the graph to a string" do
107
+ it 'renders the graph to a string' do
108
108
  graph = Graph.open 'test'
109
- graph.edge 'e', graph.node('A'), graph.node('B', shape: 'polygon', label: graph.html('<b>bold</b>'))
109
+ graph.edge 'e', graph.node('A'),
110
+ graph.node('B', shape: 'polygon',
111
+ label: graph.html('<b>bold</b>'))
112
+
110
113
  data = graph.render
111
114
 
112
115
  graph = nil
113
116
  GC.start
114
- data.must_be_kind_of String
117
+ assert_kind_of String, data
115
118
 
116
119
  File.write 'spec/render.png', data
117
120
  end
@@ -127,17 +130,17 @@ describe Edge do
127
130
  end
128
131
 
129
132
  it 'gives access to head and tail' do
130
- @edge.head.must_equal @head
131
- @edge.tail.must_equal @tail
133
+ assert_equal @head, @edge.head
134
+ assert_equal @tail, @edge.tail
132
135
  end
133
136
 
134
137
  it 'gives access to name' do
135
- @edge.name.must_equal 'test'
138
+ assert_equal 'test', @edge.name
136
139
  end
137
140
 
138
141
  it 'gives access to attributes' do
139
- @edge[:color].must_equal nil
142
+ assert_nil @edge[:color]
140
143
  @edge[:color] = 'green'
141
- @edge[:color].must_equal 'green'
144
+ assert_equal 'green', @edge[:color]
142
145
  end
143
146
  end
data/spec/render.png CHANGED
Binary file
data/spec/spec_helper.rb CHANGED
@@ -1,2 +1,5 @@
1
1
  require 'gv'
2
- require 'minitest/autorun'
2
+ require 'minitest/reporters'
3
+ require 'minitest/autorun'
4
+
5
+ Minitest::Reporters.use!
metadata CHANGED
@@ -1,88 +1,116 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - furunkel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-14 00:00:00.000000000 Z
11
+ date: 2023-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ffi
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '1.11'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '1.11'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - "~>"
31
+ - - ">="
18
32
  - !ruby/object:Gem::Version
19
- version: '1.7'
33
+ version: '2'
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - "~>"
38
+ - - ">="
25
39
  - !ruby/object:Gem::Version
26
- version: '1.7'
40
+ version: '2'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - "~>"
45
+ - - ">="
32
46
  - !ruby/object:Gem::Version
33
47
  version: '10.0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - "~>"
52
+ - - ">="
39
53
  - !ruby/object:Gem::Version
40
54
  version: '10.0'
41
55
  - !ruby/object:Gem::Dependency
42
- name: minitest
56
+ name: yard
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - ">="
46
60
  - !ruby/object:Gem::Version
47
- version: '0'
61
+ version: '0.9'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - ">="
53
67
  - !ruby/object:Gem::Version
54
- version: '0'
68
+ version: '0.9'
55
69
  - !ruby/object:Gem::Dependency
56
- name: yard
70
+ name: minitest
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - ">="
60
74
  - !ruby/object:Gem::Version
61
- version: '0'
75
+ version: '5.8'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - ">="
67
81
  - !ruby/object:Gem::Version
68
- version: '0'
82
+ version: '5.8'
69
83
  - !ruby/object:Gem::Dependency
70
- name: ffi
84
+ name: minitest-reporters
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
101
  - - ">="
74
102
  - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :runtime
103
+ version: '0.41'
104
+ type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
108
  - - ">="
81
109
  - !ruby/object:Gem::Version
82
- version: '0'
110
+ version: '0.41'
83
111
  description:
84
112
  email:
85
- - julian@linux4you.it
113
+ - furunkel@polyadic.com
86
114
  executables: []
87
115
  extensions: []
88
116
  extra_rdoc_files: []
@@ -120,8 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
148
  - !ruby/object:Gem::Version
121
149
  version: '0'
122
150
  requirements: []
123
- rubyforge_project:
124
- rubygems_version: 2.5.1
151
+ rubygems_version: 3.3.3
125
152
  signing_key:
126
153
  specification_version: 4
127
154
  summary: Graphviz for Ruby, using libgvc via FFI
@@ -130,4 +157,3 @@ test_files:
130
157
  - spec/render.png
131
158
  - spec/simple_graph.dot
132
159
  - spec/spec_helper.rb
133
- has_rdoc: