tgf 1.0.0 → 1.1.0
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/lib/tgf.rb +23 -0
- data/test/test_tgf.rb +61 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a96992f1bba65c52fa98bb5bd3807745adbf861c
|
4
|
+
data.tar.gz: c2ca6531648d0657b8a62d6ff49136114a7d72a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 100aa7a1f6f20e75bdf0c50cca73255bc4091f9755321ef0e7a6b94dfbca315f6a4cba5be01840dce497eaf47acecbfe84a07dd2c495aebeb525995ed10f62a5
|
7
|
+
data.tar.gz: d2ebfa4fc348dab9595ce5cf8893110aa33088628100cb6429345980459ca243c530f04d72337ac024d0ddec52047899b85a22b34a0ac5813ed3c1b624bd1456
|
data/lib/tgf.rb
CHANGED
@@ -40,4 +40,27 @@ module TGF
|
|
40
40
|
|
41
41
|
return nodes, edges
|
42
42
|
end
|
43
|
+
|
44
|
+
##
|
45
|
+
# Prints a set of +TGF::Node+s and +TGF::Edge+s to +file+.
|
46
|
+
# +file+ can be any object that responds to +<<+; the graph
|
47
|
+
# is passed line by line to +<<+, and the return value is
|
48
|
+
# used as the object for the next call. The value +<<+ returns
|
49
|
+
# in the final invocation is returned by +write+.
|
50
|
+
|
51
|
+
def self.write file, nodes = [], edges = [], sep = $/
|
52
|
+
nodes.each do |node|
|
53
|
+
label = node.label.nil? ? '' : " #{node.label}"
|
54
|
+
file <<= "#{node.id}#{label}#{sep}"
|
55
|
+
end
|
56
|
+
return file if edges.empty?
|
57
|
+
|
58
|
+
file <<= "##{sep}"
|
59
|
+
edges.each do |edge|
|
60
|
+
label = edge.label.nil? ? '' : " #{edge.label}"
|
61
|
+
file <<= "#{edge.from} #{edge.to}#{label}#{sep}"
|
62
|
+
end
|
63
|
+
|
64
|
+
file
|
65
|
+
end
|
43
66
|
end
|
data/test/test_tgf.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
require 'minitest/autorun'
|
2
2
|
require 'tgf'
|
3
|
+
require 'tempfile'
|
3
4
|
|
4
|
-
class
|
5
|
+
class TGFParseTest < Minitest::Test
|
5
6
|
def test_simple
|
6
7
|
nodes, edges = TGF.parse "1\n2\n#\n1 2\n"
|
7
8
|
assert_equal 2, nodes.size
|
@@ -50,4 +51,63 @@ class TGFTest < Minitest::Test
|
|
50
51
|
assert_equal '2', edges[0].to
|
51
52
|
assert_equal 'hat', edges[0].label
|
52
53
|
end
|
54
|
+
|
55
|
+
def test_file_simple
|
56
|
+
file = Tempfile.new('tgf')
|
57
|
+
file.write "1\n2\n#\n1 2\n"
|
58
|
+
file.rewind
|
59
|
+
nodes, edges = TGF.parse file
|
60
|
+
assert_equal 2, nodes.size
|
61
|
+
assert_equal 1, edges.size
|
62
|
+
|
63
|
+
assert_equal '1', nodes[0].id
|
64
|
+
assert_nil nodes[0].label
|
65
|
+
|
66
|
+
assert_equal '2', nodes[1].id
|
67
|
+
assert_nil nodes[1].label
|
68
|
+
|
69
|
+
assert_equal '1', edges[0].from
|
70
|
+
assert_equal '2', edges[0].to
|
71
|
+
assert_nil edges[0].label
|
72
|
+
file.close!
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
class TGFWriteTest < Minitest::Test
|
77
|
+
def node id, label = nil
|
78
|
+
TGF::Node.new (label.nil? ? id.to_s : "#{id} #{label}")
|
79
|
+
end
|
80
|
+
|
81
|
+
def edge from, to, label = nil
|
82
|
+
TGF::Edge.new (label.nil? ? "#{from} #{to}" : "#{from} #{to} #{label}")
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_simple
|
86
|
+
text = TGF.write '', [node(1), node(2)], [edge(1,2)]
|
87
|
+
assert_equal "1\n2\n#\n1 2\n", text
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_custom_separator
|
91
|
+
text = TGF.write '', [node(1), node(2)], [edge(1,2)], ';'
|
92
|
+
assert_equal "1;2;#;1 2;", text
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_node_label
|
96
|
+
text = TGF.write '', [node(1, 'hat')]
|
97
|
+
assert_equal "1 hat\n", text
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_edge_label
|
101
|
+
text = TGF.write '', [], [edge(1, 2, 'hat')]
|
102
|
+
assert_equal "#\n1 2 hat\n", text
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_file_simple
|
106
|
+
file = Tempfile.new('tgf')
|
107
|
+
TGF.write file, [node(1), node(2)], [edge(1,2)]
|
108
|
+
file.rewind
|
109
|
+
assert_equal "1\n2\n#\n1 2\n", file.read
|
110
|
+
file.close!
|
111
|
+
end
|
53
112
|
end
|
113
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tgf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Remis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -24,7 +24,7 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.9'
|
27
|
-
description: A gem for parsing Trivial Graph Format files or strings
|
27
|
+
description: A gem for parsing & writing Trivial Graph Format files or strings
|
28
28
|
email: remis.thoughts@gmail.com
|
29
29
|
executables: []
|
30
30
|
extensions: []
|