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.
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: []