tgf 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|