tgf 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/tgf.rb +23 -0
  3. data/test/test_tgf.rb +61 -1
  4. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 778b65f8f590c0ee1d45862fe2087033e450227c
4
- data.tar.gz: b114f6d6fdf8dfbf56bec05d18927c3a1c154756
3
+ metadata.gz: a96992f1bba65c52fa98bb5bd3807745adbf861c
4
+ data.tar.gz: c2ca6531648d0657b8a62d6ff49136114a7d72a1
5
5
  SHA512:
6
- metadata.gz: ccafbf74c3dcb2af553044a5d5e43007100b062fedeb0f7effba37c262ca85c274ff0fc3ec609fbf59e279a168ffff1dd8e0f0f9ba496fe568b1b8fb85cc5a91
7
- data.tar.gz: e8e5a7082ceff72e218d1621b3bfa807b35763c7f7594070c6376212dcb0a319f4be330fd448cb4b8a6da2137e715fe3dc20741698544dd395bbff60956ccafa
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
@@ -1,7 +1,8 @@
1
1
  require 'minitest/autorun'
2
2
  require 'tgf'
3
+ require 'tempfile'
3
4
 
4
- class TGFTest < Minitest::Test
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.0.0
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-04-29 00:00:00.000000000 Z
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: []