tgf 1.0.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 +7 -0
- data/.gemtest +0 -0
- data/Rakefile +8 -0
- data/lib/tgf.rb +43 -0
- data/test/test_tgf.rb +53 -0
- metadata +62 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 778b65f8f590c0ee1d45862fe2087033e450227c
|
4
|
+
data.tar.gz: b114f6d6fdf8dfbf56bec05d18927c3a1c154756
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ccafbf74c3dcb2af553044a5d5e43007100b062fedeb0f7effba37c262ca85c274ff0fc3ec609fbf59e279a168ffff1dd8e0f0f9ba496fe568b1b8fb85cc5a91
|
7
|
+
data.tar.gz: e8e5a7082ceff72e218d1621b3bfa807b35763c7f7594070c6376212dcb0a319f4be330fd448cb4b8a6da2137e715fe3dc20741698544dd395bbff60956ccafa
|
data/.gemtest
ADDED
File without changes
|
data/Rakefile
ADDED
data/lib/tgf.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
|
2
|
+
##
|
3
|
+
# A module to read the Trivial Graph Format
|
4
|
+
|
5
|
+
module TGF
|
6
|
+
|
7
|
+
class Node
|
8
|
+
def initialize line
|
9
|
+
match = /^(\S+)(?:\s+(.*))?$/.match line
|
10
|
+
@id, @label = match[1], match[2]
|
11
|
+
end
|
12
|
+
attr_reader :id, :label
|
13
|
+
end
|
14
|
+
|
15
|
+
class Edge
|
16
|
+
def initialize line
|
17
|
+
match = /^(\S+)\s+(\S+)(?:\s+(.*))?$/.match line
|
18
|
+
@from, @to, @label = match[1], match[2], match[3]
|
19
|
+
end
|
20
|
+
attr_reader :from, :to, :label
|
21
|
+
end
|
22
|
+
|
23
|
+
##
|
24
|
+
# Parses a file using +each_line+ returning two values; an
|
25
|
+
# +Array+ of +TGF::Node+s and an +Array+ of +TGF::Edge+s.
|
26
|
+
|
27
|
+
def self.parse file, sep = $/
|
28
|
+
parsing_nodes, nodes, edges = true, [], []
|
29
|
+
|
30
|
+
file.each_line(sep) do |line|
|
31
|
+
line.chomp! sep
|
32
|
+
if line.strip == '#'
|
33
|
+
parsing_nodes = false
|
34
|
+
elsif parsing_nodes
|
35
|
+
nodes << Node.new(line)
|
36
|
+
else
|
37
|
+
edges << Edge.new(line)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
return nodes, edges
|
42
|
+
end
|
43
|
+
end
|
data/test/test_tgf.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'tgf'
|
3
|
+
|
4
|
+
class TGFTest < Minitest::Test
|
5
|
+
def test_simple
|
6
|
+
nodes, edges = TGF.parse "1\n2\n#\n1 2\n"
|
7
|
+
assert_equal 2, nodes.size
|
8
|
+
assert_equal 1, edges.size
|
9
|
+
|
10
|
+
assert_equal '1', nodes[0].id
|
11
|
+
assert_nil nodes[0].label
|
12
|
+
|
13
|
+
assert_equal '2', nodes[1].id
|
14
|
+
assert_nil nodes[1].label
|
15
|
+
|
16
|
+
assert_equal '1', edges[0].from
|
17
|
+
assert_equal '2', edges[0].to
|
18
|
+
assert_nil edges[0].label
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_custom_separator
|
22
|
+
nodes, edges = TGF.parse '1;2;#;1 2;', ';'
|
23
|
+
assert_equal 2, nodes.size
|
24
|
+
assert_equal 1, edges.size
|
25
|
+
|
26
|
+
assert_equal '1', nodes[0].id
|
27
|
+
assert_nil nodes[0].label
|
28
|
+
|
29
|
+
assert_equal '2', nodes[1].id
|
30
|
+
assert_nil nodes[1].label
|
31
|
+
|
32
|
+
assert_equal '1', edges[0].from
|
33
|
+
assert_equal '2', edges[0].to
|
34
|
+
assert_nil edges[0].label
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_node_label
|
38
|
+
nodes, edges = TGF.parse "1 hat\n"
|
39
|
+
assert_equal 1, nodes.size
|
40
|
+
|
41
|
+
assert_equal '1', nodes[0].id
|
42
|
+
assert_equal 'hat', nodes[0].label
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_edge_label
|
46
|
+
nodes, edges = TGF.parse "#\n1 2 hat\n"
|
47
|
+
assert_equal 1, edges.size
|
48
|
+
|
49
|
+
assert_equal '1', edges[0].from
|
50
|
+
assert_equal '2', edges[0].to
|
51
|
+
assert_equal 'hat', edges[0].label
|
52
|
+
end
|
53
|
+
end
|
metadata
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tgf
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Remis
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-04-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.9'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.9'
|
27
|
+
description: A gem for parsing Trivial Graph Format files or strings
|
28
|
+
email: remis.thoughts@gmail.com
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- ".gemtest"
|
34
|
+
- Rakefile
|
35
|
+
- lib/tgf.rb
|
36
|
+
- test/test_tgf.rb
|
37
|
+
homepage: https://github.com/remis-thoughts/tgf
|
38
|
+
licenses:
|
39
|
+
- Apache-2.0
|
40
|
+
metadata: {}
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options: []
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
requirements: []
|
56
|
+
rubyforge_project:
|
57
|
+
rubygems_version: 2.2.2
|
58
|
+
signing_key:
|
59
|
+
specification_version: 4
|
60
|
+
summary: Trivial Graph Format (TGF)
|
61
|
+
test_files:
|
62
|
+
- test/test_tgf.rb
|