linkage 0.1.0.pre → 0.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/.yardopts +2 -0
- data/Guardfile +0 -1
- data/TODO +2 -0
- data/lib/linkage.rb +1 -0
- data/lib/linkage/comparator.rb +12 -2
- data/lib/linkage/comparators/strcompare.rb +68 -16
- data/lib/linkage/configuration.rb +112 -8
- data/lib/linkage/dataset.rb +124 -9
- data/lib/linkage/exceptions.rb +5 -0
- data/lib/linkage/field.rb +55 -18
- data/lib/linkage/field_set.rb +20 -0
- data/lib/linkage/helpers.rb +7 -0
- data/lib/linkage/helpers/csv.rb +28 -0
- data/lib/linkage/helpers/database.rb +47 -0
- data/lib/linkage/import_buffer.rb +3 -3
- data/lib/linkage/match_recorder.rb +4 -0
- data/lib/linkage/match_set.rb +51 -13
- data/lib/linkage/match_sets/csv.rb +36 -9
- data/lib/linkage/match_sets/database.rb +43 -2
- data/lib/linkage/matcher.rb +49 -3
- data/lib/linkage/result_set.rb +60 -22
- data/lib/linkage/result_sets/csv.rb +46 -28
- data/lib/linkage/result_sets/database.rb +44 -26
- data/lib/linkage/runner.rb +10 -0
- data/lib/linkage/score_recorder.rb +5 -0
- data/lib/linkage/score_set.rb +78 -20
- data/lib/linkage/score_sets/csv.rb +41 -15
- data/lib/linkage/score_sets/database.rb +43 -5
- data/lib/linkage/version.rb +1 -1
- data/linkage.gemspec +2 -0
- data/misc/uml/linkage.dia +0 -0
- data/misc/uml/linkage.png +0 -0
- data/misc/uml/linkage.svg +197 -0
- data/test/helper.rb +2 -11
- data/test/integration/test_database_result_set.rb +4 -2
- data/test/unit/comparators/test_strcompare.rb +29 -0
- data/test/unit/match_sets/test_csv.rb +44 -13
- data/test/unit/match_sets/test_database.rb +42 -1
- data/test/unit/result_sets/test_csv.rb +9 -69
- data/test/unit/result_sets/test_database.rb +20 -11
- data/test/unit/score_sets/test_csv.rb +68 -25
- data/test/unit/score_sets/test_database.rb +57 -1
- data/test/unit/test_comparator.rb +8 -0
- data/test/unit/test_configuration.rb +33 -6
- data/test/unit/test_dataset.rb +0 -7
- data/test/unit/test_matcher.rb +52 -3
- data/test/unit/test_result_set.rb +8 -14
- metadata +66 -32
@@ -2,50 +2,79 @@ require File.expand_path("../../test_match_sets", __FILE__)
|
|
2
2
|
|
3
3
|
class UnitTests::TestMatchSets::TestCSV < Test::Unit::TestCase
|
4
4
|
test "open_for_writing" do
|
5
|
-
match_set = Linkage::MatchSets::CSV.new('foo.csv')
|
5
|
+
match_set = Linkage::MatchSets::CSV.new(:filename => 'foo.csv')
|
6
|
+
expected_filename = File.expand_path('foo.csv')
|
7
|
+
File.expects(:exist?).with(expected_filename).returns(false)
|
6
8
|
csv = stub('csv')
|
7
|
-
CSV.expects(:open).with(
|
9
|
+
CSV.expects(:open).with(expected_filename, 'wb').returns(csv)
|
10
|
+
csv.expects(:<<).with(%w{id_1 id_2 score})
|
11
|
+
match_set.open_for_writing
|
12
|
+
end
|
13
|
+
|
14
|
+
test "open_for_writing with default options" do
|
15
|
+
match_set = Linkage::MatchSets::CSV.new
|
16
|
+
expected_filename = File.expand_path('matches.csv')
|
17
|
+
File.expects(:exist?).with(expected_filename).returns(false)
|
18
|
+
csv = stub('csv')
|
19
|
+
CSV.expects(:open).with(expected_filename, 'wb').returns(csv)
|
20
|
+
csv.expects(:<<).with(%w{id_1 id_2 score})
|
21
|
+
match_set.open_for_writing
|
22
|
+
end
|
23
|
+
|
24
|
+
test "open_for_writing with directory option" do
|
25
|
+
match_set = Linkage::MatchSets::CSV.new(:dir => 'foo')
|
26
|
+
|
27
|
+
expected_dir = File.expand_path('foo')
|
28
|
+
FileUtils.expects(:mkdir_p).with(expected_dir)
|
29
|
+
expected_filename = File.join(expected_dir, 'matches.csv')
|
30
|
+
File.expects(:exist?).with(expected_filename).returns(false)
|
31
|
+
csv = stub('csv')
|
32
|
+
CSV.expects(:open).with(expected_filename, 'wb').returns(csv)
|
8
33
|
csv.expects(:<<).with(%w{id_1 id_2 score})
|
9
34
|
match_set.open_for_writing
|
10
35
|
end
|
11
36
|
|
12
37
|
test "open_for_writing when already open" do
|
13
|
-
match_set = Linkage::MatchSets::CSV.new('foo.csv')
|
38
|
+
match_set = Linkage::MatchSets::CSV.new(:filename => 'foo.csv')
|
39
|
+
expected_filename = File.expand_path('foo.csv')
|
40
|
+
File.expects(:exist?).once.with(expected_filename).returns(false)
|
14
41
|
csv = stub('csv')
|
15
|
-
CSV.expects(:open).once.with(
|
42
|
+
CSV.expects(:open).once.with(expected_filename, 'wb').returns(csv)
|
16
43
|
csv.expects(:<<).once.with(%w{id_1 id_2 score})
|
17
44
|
match_set.open_for_writing
|
18
45
|
match_set.open_for_writing
|
19
46
|
end
|
20
47
|
|
21
48
|
test "open_for_writing when file exists" do
|
22
|
-
match_set = Linkage::MatchSets::CSV.new('foo.csv')
|
23
|
-
File.
|
49
|
+
match_set = Linkage::MatchSets::CSV.new(:filename => 'foo.csv')
|
50
|
+
expected_filename = File.expand_path('foo.csv')
|
51
|
+
File.expects(:exist?).with(expected_filename).returns(true)
|
24
52
|
assert_raises(Linkage::ExistsError) do
|
25
53
|
match_set.open_for_writing
|
26
54
|
end
|
27
55
|
end
|
28
56
|
|
29
57
|
test "open_for_writing when file exists and forcing overwrite" do
|
30
|
-
match_set = Linkage::MatchSets::CSV.new('foo.csv', :overwrite => true)
|
31
|
-
File.
|
58
|
+
match_set = Linkage::MatchSets::CSV.new(:filename => 'foo.csv', :overwrite => true)
|
59
|
+
expected_filename = File.expand_path('foo.csv')
|
60
|
+
File.stubs(:exist?).with(expected_filename).returns(true)
|
32
61
|
assert_nothing_raised do
|
33
62
|
csv = stub('csv')
|
34
|
-
CSV.expects(:open).with(
|
63
|
+
CSV.expects(:open).with(expected_filename, 'wb').returns(csv)
|
35
64
|
csv.expects(:<<).with(%w{id_1 id_2 score})
|
36
65
|
match_set.open_for_writing
|
37
66
|
end
|
38
67
|
end
|
39
68
|
|
40
69
|
test "add_match when unopened raises exception" do
|
41
|
-
match_set = Linkage::MatchSets::CSV.new('foo.csv')
|
70
|
+
match_set = Linkage::MatchSets::CSV.new(:filename => 'foo.csv')
|
42
71
|
assert_raises { match_set.add_match(1, 2, 1) }
|
43
72
|
end
|
44
73
|
|
45
74
|
test "add_match" do
|
46
75
|
tempfile = Tempfile.new('linkage')
|
47
76
|
tempfile.close
|
48
|
-
match_set = Linkage::MatchSets::CSV.new(tempfile.path, :overwrite => true)
|
77
|
+
match_set = Linkage::MatchSets::CSV.new(:filename => tempfile.path, :overwrite => true)
|
49
78
|
match_set.open_for_writing
|
50
79
|
match_set.add_match(1, 2, 1)
|
51
80
|
match_set.close
|
@@ -55,9 +84,11 @@ class UnitTests::TestMatchSets::TestCSV < Test::Unit::TestCase
|
|
55
84
|
end
|
56
85
|
|
57
86
|
test "add_match removes extra decimals" do
|
58
|
-
match_set = Linkage::MatchSets::CSV.new('foo.csv')
|
87
|
+
match_set = Linkage::MatchSets::CSV.new(:filename => 'foo.csv')
|
88
|
+
expected_filename = File.expand_path('foo.csv')
|
89
|
+
File.expects(:exist?).with(expected_filename).returns(false)
|
59
90
|
csv = stub('csv')
|
60
|
-
CSV.stubs(:open).with(
|
91
|
+
CSV.stubs(:open).with(expected_filename, 'wb').returns(csv)
|
61
92
|
csv.stubs(:<<).with(%w{id_1 id_2 score})
|
62
93
|
match_set.open_for_writing
|
63
94
|
|
@@ -4,6 +4,47 @@ class UnitTests::TestMatchSets::TestDatabase < Test::Unit::TestCase
|
|
4
4
|
def setup
|
5
5
|
@dataset = stub('dataset')
|
6
6
|
@database = stub('database', :[] => @dataset)
|
7
|
+
Sequel::Database.stubs(:===).with(@database).returns(true)
|
8
|
+
end
|
9
|
+
|
10
|
+
test "open_for_writing with uri string" do
|
11
|
+
Sequel.expects(:connect).with('foo://bar').returns(@database)
|
12
|
+
match_set = Linkage::MatchSets::Database.new('foo://bar')
|
13
|
+
@database.stubs(:table_exists?).with(:matches).returns(false)
|
14
|
+
@database.expects(:create_table).with(:matches)
|
15
|
+
@database.expects(:[]).with(:matches).returns(@dataset)
|
16
|
+
match_set.open_for_writing
|
17
|
+
end
|
18
|
+
|
19
|
+
test "open_for_writing with filename option" do
|
20
|
+
Sequel.expects(:connect).with(:adapter => :sqlite, :database => 'foo.db').returns(@database)
|
21
|
+
match_set = Linkage::MatchSets::Database.new(:filename => 'foo.db')
|
22
|
+
@database.stubs(:table_exists?).with(:matches).returns(false)
|
23
|
+
@database.expects(:create_table).with(:matches)
|
24
|
+
@database.expects(:[]).with(:matches).returns(@dataset)
|
25
|
+
match_set.open_for_writing
|
26
|
+
end
|
27
|
+
|
28
|
+
test "open_for_writing with default options" do
|
29
|
+
Sequel.expects(:connect).with(:adapter => :sqlite, :database => 'matches.db').returns(@database)
|
30
|
+
match_set = Linkage::MatchSets::Database.new
|
31
|
+
@database.stubs(:table_exists?).with(:matches).returns(false)
|
32
|
+
@database.expects(:create_table).with(:matches)
|
33
|
+
@database.expects(:[]).with(:matches).returns(@dataset)
|
34
|
+
match_set.open_for_writing
|
35
|
+
end
|
36
|
+
|
37
|
+
test "open_for_writing with directory option" do
|
38
|
+
expected_directory = File.expand_path('foo')
|
39
|
+
FileUtils.expects(:mkdir_p).with(expected_directory)
|
40
|
+
expected_filename = File.join(expected_directory, 'matches.db')
|
41
|
+
Sequel.expects(:connect).with(:adapter => :sqlite, :database => expected_filename).returns(@database)
|
42
|
+
|
43
|
+
match_set = Linkage::MatchSets::Database.new(:dir => 'foo')
|
44
|
+
@database.stubs(:table_exists?).with(:matches).returns(false)
|
45
|
+
@database.expects(:create_table).with(:matches)
|
46
|
+
@database.expects(:[]).with(:matches).returns(@dataset)
|
47
|
+
match_set.open_for_writing
|
7
48
|
end
|
8
49
|
|
9
50
|
test "open_for_writing for database with no matches table" do
|
@@ -33,7 +74,7 @@ class UnitTests::TestMatchSets::TestDatabase < Test::Unit::TestCase
|
|
33
74
|
end
|
34
75
|
|
35
76
|
test "open_for_writing when matches table already exists and in overwrite mode" do
|
36
|
-
match_set = Linkage::MatchSets::Database.new(@database, :overwrite => true)
|
77
|
+
match_set = Linkage::MatchSets::Database.new(@database, {:overwrite => true})
|
37
78
|
@database.expects(:drop_table?).with(:matches)
|
38
79
|
@database.expects(:create_table).with(:matches)
|
39
80
|
@database.expects(:[]).with(:matches).returns(@dataset)
|
@@ -9,99 +9,39 @@ class UnitTests::TestResultSets::TestCSV < Test::Unit::TestCase
|
|
9
9
|
FileUtils.remove_entry_secure(@tmpdir)
|
10
10
|
end
|
11
11
|
|
12
|
-
test "
|
12
|
+
test "default options" do
|
13
13
|
result_set = Linkage::ResultSets::CSV.new
|
14
14
|
|
15
|
-
expected_score_file = './scores.csv'
|
16
15
|
score_set = stub('score set')
|
17
|
-
Linkage::ScoreSets::CSV.expects(:new).with(
|
16
|
+
Linkage::ScoreSets::CSV.expects(:new).with({}).returns(score_set)
|
18
17
|
assert_same score_set, result_set.score_set
|
19
18
|
|
20
|
-
expected_match_file = './matches.csv'
|
21
19
|
match_set = stub('match set')
|
22
|
-
Linkage::MatchSets::CSV.expects(:new).with(
|
20
|
+
Linkage::MatchSets::CSV.expects(:new).with({}).returns(match_set)
|
23
21
|
assert_same match_set, result_set.match_set
|
24
22
|
end
|
25
23
|
|
26
24
|
test "directory option" do
|
27
|
-
|
28
|
-
:dir => File.join(@tmpdir, 'foo')
|
29
|
-
}
|
30
|
-
result_set = Linkage::ResultSets::CSV.new(opts)
|
31
|
-
assert Dir.exist?(opts[:dir])
|
25
|
+
result_set = Linkage::ResultSets::CSV.new(:dir => 'foo')
|
32
26
|
|
33
|
-
expected_score_file = File.join(@tmpdir, 'foo', 'scores.csv')
|
34
27
|
score_set = stub('score set')
|
35
|
-
Linkage::ScoreSets::CSV.expects(:new).with(
|
28
|
+
Linkage::ScoreSets::CSV.expects(:new).with({:dir => 'foo'}).returns(score_set)
|
36
29
|
assert_same score_set, result_set.score_set
|
37
30
|
|
38
|
-
expected_match_file = File.join(@tmpdir, 'foo', 'matches.csv')
|
39
31
|
match_set = stub('match set')
|
40
|
-
Linkage::MatchSets::CSV.expects(:new).with(
|
32
|
+
Linkage::MatchSets::CSV.expects(:new).with({:dir => 'foo'}).returns(match_set)
|
41
33
|
assert_same match_set, result_set.match_set
|
42
34
|
end
|
43
35
|
|
44
36
|
test "directory argument" do
|
45
|
-
|
46
|
-
result_set = Linkage::ResultSets::CSV.new(dir)
|
47
|
-
assert Dir.exist?(dir)
|
37
|
+
result_set = Linkage::ResultSets::CSV.new('foo')
|
48
38
|
|
49
|
-
expected_score_file = File.join(@tmpdir, 'foo', 'scores.csv')
|
50
39
|
score_set = stub('score set')
|
51
|
-
Linkage::ScoreSets::CSV.expects(:new).with(
|
40
|
+
Linkage::ScoreSets::CSV.expects(:new).with({:dir => 'foo'}).returns(score_set)
|
52
41
|
assert_same score_set, result_set.score_set
|
53
42
|
|
54
|
-
expected_match_file = File.join(@tmpdir, 'foo', 'matches.csv')
|
55
43
|
match_set = stub('match set')
|
56
|
-
Linkage::MatchSets::CSV.expects(:new).with(
|
57
|
-
assert_same match_set, result_set.match_set
|
58
|
-
end
|
59
|
-
|
60
|
-
test "directory path is expanded" do
|
61
|
-
opts = {
|
62
|
-
:dir => "~/foo"
|
63
|
-
}
|
64
|
-
FileUtils.expects(:mkdir_p).with(File.expand_path("~/foo"))
|
65
|
-
result_set = Linkage::ResultSets::CSV.new(opts)
|
66
|
-
end
|
67
|
-
|
68
|
-
test "custom filenames" do
|
69
|
-
opts = {
|
70
|
-
:dir => File.join(@tmpdir, 'foo'),
|
71
|
-
:scores => {:filename => 'foo-scores.csv'},
|
72
|
-
:matches => {:filename => 'foo-matches.csv'}
|
73
|
-
}
|
74
|
-
result_set = Linkage::ResultSets::CSV.new(opts)
|
75
|
-
assert Dir.exist?(opts[:dir])
|
76
|
-
|
77
|
-
expected_score_file = File.join(@tmpdir, 'foo', 'foo-scores.csv')
|
78
|
-
score_set = stub('score set')
|
79
|
-
Linkage::ScoreSets::CSV.expects(:new).with(expected_score_file, {}).returns(score_set)
|
80
|
-
assert_same score_set, result_set.score_set
|
81
|
-
|
82
|
-
expected_match_file = File.join(@tmpdir, 'foo', 'foo-matches.csv')
|
83
|
-
match_set = stub('match set')
|
84
|
-
Linkage::MatchSets::CSV.expects(:new).with(expected_match_file, {}).returns(match_set)
|
85
|
-
assert_same match_set, result_set.match_set
|
86
|
-
end
|
87
|
-
|
88
|
-
test "miscellaneous options" do
|
89
|
-
opts = {
|
90
|
-
:dir => File.join(@tmpdir, 'foo'),
|
91
|
-
:scores => {:foo => 'bar'},
|
92
|
-
:matches => {:baz => 'qux'}
|
93
|
-
}
|
94
|
-
result_set = Linkage::ResultSets::CSV.new(opts)
|
95
|
-
assert Dir.exist?(opts[:dir])
|
96
|
-
|
97
|
-
expected_score_file = File.join(@tmpdir, 'foo', 'scores.csv')
|
98
|
-
score_set = stub('score set')
|
99
|
-
Linkage::ScoreSets::CSV.expects(:new).with(expected_score_file, :foo => 'bar').returns(score_set)
|
100
|
-
assert_same score_set, result_set.score_set
|
101
|
-
|
102
|
-
expected_match_file = File.join(@tmpdir, 'foo', 'matches.csv')
|
103
|
-
match_set = stub('match set')
|
104
|
-
Linkage::MatchSets::CSV.expects(:new).with(expected_match_file, :baz => 'qux').returns(match_set)
|
44
|
+
Linkage::MatchSets::CSV.expects(:new).with({:dir => 'foo'}).returns(match_set)
|
105
45
|
assert_same match_set, result_set.match_set
|
106
46
|
end
|
107
47
|
|
@@ -1,10 +1,24 @@
|
|
1
1
|
require File.expand_path("../../test_result_sets", __FILE__)
|
2
2
|
|
3
3
|
class UnitTests::TestResultSets::TestDatabase < Test::Unit::TestCase
|
4
|
+
test "with default options" do
|
5
|
+
database = stub('database')
|
6
|
+
Sequel.expects(:connect).with(:adapter => :sqlite, :database => 'results.db').returns(database)
|
7
|
+
result_set = Linkage::ResultSets::Database.new
|
8
|
+
|
9
|
+
score_set = stub('score set')
|
10
|
+
Linkage::ScoreSets::Database.expects(:new).with(database, {}).returns(score_set)
|
11
|
+
assert_same score_set, result_set.score_set
|
12
|
+
|
13
|
+
match_set = stub('match set')
|
14
|
+
Linkage::MatchSets::Database.expects(:new).with(database, {}).returns(match_set)
|
15
|
+
assert_same match_set, result_set.match_set
|
16
|
+
end
|
17
|
+
|
4
18
|
test "with database object" do
|
5
19
|
database = stub('database')
|
6
|
-
|
7
|
-
result_set = Linkage::ResultSets::Database.new(database)
|
20
|
+
Sequel::Database.stubs(:===).with(database).returns(true)
|
21
|
+
result_set = Linkage::ResultSets::Database.new(database, {})
|
8
22
|
|
9
23
|
score_set = stub('score set')
|
10
24
|
Linkage::ScoreSets::Database.expects(:new).with(database, {}).returns(score_set)
|
@@ -43,22 +57,17 @@ class UnitTests::TestResultSets::TestDatabase < Test::Unit::TestCase
|
|
43
57
|
assert_same match_set, result_set.match_set
|
44
58
|
end
|
45
59
|
|
46
|
-
test "with
|
47
|
-
opts = {
|
48
|
-
:foo => 'bar',
|
49
|
-
:scores => {:baz => 'qux'},
|
50
|
-
:matches => {:corge => 'grault'}
|
51
|
-
}
|
60
|
+
test "with overwrite option" do
|
52
61
|
database = stub('database')
|
53
62
|
Sequel.expects(:connect).with(:foo => 'bar').returns(database)
|
54
|
-
result_set = Linkage::ResultSets::Database.new(
|
63
|
+
result_set = Linkage::ResultSets::Database.new({:foo => 'bar'}, {:overwrite => true})
|
55
64
|
|
56
65
|
score_set = stub('score set')
|
57
|
-
Linkage::ScoreSets::Database.expects(:new).with(database,
|
66
|
+
Linkage::ScoreSets::Database.expects(:new).with(database, {:overwrite => true}).returns(score_set)
|
58
67
|
assert_same score_set, result_set.score_set
|
59
68
|
|
60
69
|
match_set = stub('match set')
|
61
|
-
Linkage::MatchSets::Database.expects(:new).with(database,
|
70
|
+
Linkage::MatchSets::Database.expects(:new).with(database, {:overwrite => true}).returns(match_set)
|
62
71
|
assert_same match_set, result_set.match_set
|
63
72
|
end
|
64
73
|
|
@@ -2,69 +2,101 @@ require File.expand_path("../../test_score_sets", __FILE__)
|
|
2
2
|
|
3
3
|
class UnitTests::TestScoreSets::TestCSV < Test::Unit::TestCase
|
4
4
|
test "open_for_writing" do
|
5
|
-
score_set = Linkage::ScoreSets::CSV.new('foo.csv')
|
5
|
+
score_set = Linkage::ScoreSets::CSV.new(:filename => 'foo.csv')
|
6
|
+
expected_filename = File.expand_path('foo.csv')
|
7
|
+
File.expects(:exist?).with(expected_filename).returns(false)
|
6
8
|
csv = stub('csv')
|
7
|
-
CSV.expects(:open).with(
|
9
|
+
CSV.expects(:open).with(expected_filename, 'wb').returns(csv)
|
10
|
+
csv.expects(:<<).with(%w{comparator_id id_1 id_2 score})
|
11
|
+
score_set.open_for_writing
|
12
|
+
end
|
13
|
+
|
14
|
+
test "open_for_writing with default options" do
|
15
|
+
score_set = Linkage::ScoreSets::CSV.new
|
16
|
+
expected_filename = File.expand_path('scores.csv')
|
17
|
+
File.expects(:exist?).with(expected_filename).returns(false)
|
18
|
+
csv = stub('csv')
|
19
|
+
CSV.expects(:open).with(expected_filename, 'wb').returns(csv)
|
20
|
+
csv.expects(:<<).with(%w{comparator_id id_1 id_2 score})
|
21
|
+
score_set.open_for_writing
|
22
|
+
end
|
23
|
+
|
24
|
+
test "open_for_writing with directory option" do
|
25
|
+
score_set = Linkage::ScoreSets::CSV.new(:dir => 'foo')
|
26
|
+
|
27
|
+
expected_dir = File.expand_path('foo')
|
28
|
+
FileUtils.expects(:mkdir_p).with(expected_dir)
|
29
|
+
expected_filename = File.join(expected_dir, 'scores.csv')
|
30
|
+
csv = stub('csv')
|
31
|
+
CSV.expects(:open).with(expected_filename, 'wb').returns(csv)
|
8
32
|
csv.expects(:<<).with(%w{comparator_id id_1 id_2 score})
|
9
33
|
score_set.open_for_writing
|
10
34
|
end
|
11
35
|
|
12
36
|
test "open_for_writing when already open" do
|
13
|
-
score_set = Linkage::ScoreSets::CSV.new('foo.csv')
|
37
|
+
score_set = Linkage::ScoreSets::CSV.new(:filename => 'foo.csv')
|
38
|
+
expected_filename = File.expand_path('foo.csv')
|
39
|
+
File.expects(:exist?).with(expected_filename).returns(false)
|
14
40
|
csv = stub('csv')
|
15
|
-
CSV.expects(:open).once.with(
|
41
|
+
CSV.expects(:open).once.with(expected_filename, 'wb').returns(csv)
|
16
42
|
csv.expects(:<<).once.with(%w{comparator_id id_1 id_2 score})
|
17
43
|
score_set.open_for_writing
|
18
44
|
score_set.open_for_writing
|
19
45
|
end
|
20
46
|
|
21
47
|
test "open_for_writing when file exists" do
|
22
|
-
score_set = Linkage::ScoreSets::CSV.new('foo.csv')
|
23
|
-
File.
|
48
|
+
score_set = Linkage::ScoreSets::CSV.new(:filename => 'foo.csv')
|
49
|
+
expected_filename = File.expand_path('foo.csv')
|
50
|
+
File.expects(:exist?).with(expected_filename).returns(true)
|
24
51
|
assert_raises(Linkage::ExistsError) do
|
25
52
|
score_set.open_for_writing
|
26
53
|
end
|
27
54
|
end
|
28
55
|
|
29
56
|
test "open_for_writing when file exists and forcing overwrite" do
|
30
|
-
score_set = Linkage::ScoreSets::CSV.new('foo.csv', :overwrite => true)
|
31
|
-
File.
|
57
|
+
score_set = Linkage::ScoreSets::CSV.new(:filename => 'foo.csv', :overwrite => true)
|
58
|
+
expected_filename = File.expand_path('foo.csv')
|
59
|
+
File.stubs(:exist?).with(expected_filename).returns(true)
|
32
60
|
assert_nothing_raised do
|
33
61
|
csv = stub('csv')
|
34
|
-
CSV.expects(:open).with(
|
62
|
+
CSV.expects(:open).with(expected_filename, 'wb').returns(csv)
|
35
63
|
csv.expects(:<<).with(%w{comparator_id id_1 id_2 score})
|
36
64
|
score_set.open_for_writing
|
37
65
|
end
|
38
66
|
end
|
39
67
|
|
40
68
|
test "open_for_reading" do
|
41
|
-
score_set = Linkage::ScoreSets::CSV.new('foo.csv')
|
42
|
-
File.
|
69
|
+
score_set = Linkage::ScoreSets::CSV.new(:filename => 'foo.csv')
|
70
|
+
expected_filename = File.expand_path('foo.csv')
|
71
|
+
File.stubs(:exist?).with(expected_filename).returns(true)
|
43
72
|
csv = stub('csv')
|
44
|
-
CSV.expects(:open).with(
|
73
|
+
CSV.expects(:open).with(expected_filename, 'rb', {:headers => true}).returns(csv)
|
45
74
|
score_set.open_for_reading
|
46
75
|
end
|
47
76
|
|
48
77
|
test "open_for_reading when already open" do
|
49
|
-
score_set = Linkage::ScoreSets::CSV.new('foo.csv')
|
50
|
-
File.
|
78
|
+
score_set = Linkage::ScoreSets::CSV.new(:filename => 'foo.csv')
|
79
|
+
expected_filename = File.expand_path('foo.csv')
|
80
|
+
File.stubs(:exist?).with(expected_filename).returns(true)
|
51
81
|
csv = stub('csv')
|
52
|
-
CSV.expects(:open).once.with(
|
82
|
+
CSV.expects(:open).once.with(expected_filename, 'rb', {:headers => true}).returns(csv)
|
53
83
|
score_set.open_for_reading
|
54
84
|
score_set.open_for_reading
|
55
85
|
end
|
56
86
|
|
57
87
|
test "open_for_reading when file doesn't exist" do
|
58
|
-
score_set = Linkage::ScoreSets::CSV.new('foo.csv')
|
59
|
-
File.
|
88
|
+
score_set = Linkage::ScoreSets::CSV.new(:filename => 'foo.csv')
|
89
|
+
expected_filename = File.expand_path('foo.csv')
|
90
|
+
File.expects(:exist?).with(expected_filename).returns(false)
|
60
91
|
assert_raises(Linkage::MissingError) do
|
61
92
|
score_set.open_for_reading
|
62
93
|
end
|
63
94
|
end
|
64
95
|
|
65
96
|
test "open_for_writing when in read mode raises exception" do
|
66
|
-
score_set = Linkage::ScoreSets::CSV.new('foo.csv')
|
67
|
-
File.
|
97
|
+
score_set = Linkage::ScoreSets::CSV.new(:filename => 'foo.csv')
|
98
|
+
expected_filename = File.expand_path('foo.csv')
|
99
|
+
File.stubs(:exist?).with(expected_filename).returns(true)
|
68
100
|
csv = stub('csv')
|
69
101
|
CSV.stubs(:open).returns(csv)
|
70
102
|
score_set.open_for_reading
|
@@ -72,7 +104,7 @@ class UnitTests::TestScoreSets::TestCSV < Test::Unit::TestCase
|
|
72
104
|
end
|
73
105
|
|
74
106
|
test "open_for_reading when in write mode raises exception" do
|
75
|
-
score_set = Linkage::ScoreSets::CSV.new('foo.csv')
|
107
|
+
score_set = Linkage::ScoreSets::CSV.new(:filename => 'foo.csv')
|
76
108
|
csv = stub('csv', :<< => nil)
|
77
109
|
CSV.stubs(:open).returns(csv)
|
78
110
|
score_set.open_for_writing
|
@@ -80,13 +112,14 @@ class UnitTests::TestScoreSets::TestCSV < Test::Unit::TestCase
|
|
80
112
|
end
|
81
113
|
|
82
114
|
test "add_score when unopened raises exception" do
|
83
|
-
score_set = Linkage::ScoreSets::CSV.new('foo.csv')
|
115
|
+
score_set = Linkage::ScoreSets::CSV.new(:filename => 'foo.csv')
|
84
116
|
assert_raises { score_set.add_score(1, 1, 2, 1) }
|
85
117
|
end
|
86
118
|
|
87
119
|
test "add_score when in read mode raises exception" do
|
88
|
-
score_set = Linkage::ScoreSets::CSV.new('foo.csv')
|
89
|
-
File.
|
120
|
+
score_set = Linkage::ScoreSets::CSV.new(:filename => 'foo.csv')
|
121
|
+
expected_filename = File.expand_path('foo.csv')
|
122
|
+
File.stubs(:exist?).with(expected_filename).returns(true)
|
90
123
|
csv = stub('csv')
|
91
124
|
CSV.stubs(:open).returns(csv)
|
92
125
|
score_set.open_for_reading
|
@@ -96,7 +129,7 @@ class UnitTests::TestScoreSets::TestCSV < Test::Unit::TestCase
|
|
96
129
|
test "add_score" do
|
97
130
|
tempfile = Tempfile.new('linkage')
|
98
131
|
tempfile.close
|
99
|
-
score_set = Linkage::ScoreSets::CSV.new(tempfile.path, :overwrite => true)
|
132
|
+
score_set = Linkage::ScoreSets::CSV.new(:filename => tempfile.path, :overwrite => true)
|
100
133
|
score_set.open_for_writing
|
101
134
|
score_set.add_score(1, 1, 2, 1)
|
102
135
|
score_set.close
|
@@ -118,10 +151,13 @@ class UnitTests::TestScoreSets::TestCSV < Test::Unit::TestCase
|
|
118
151
|
3,4,5,0
|
119
152
|
EOF
|
120
153
|
tempfile.close
|
121
|
-
score_set = Linkage::ScoreSets::CSV.new(tempfile.path)
|
154
|
+
score_set = Linkage::ScoreSets::CSV.new(:filename => tempfile.path)
|
122
155
|
|
123
156
|
pairs = []
|
157
|
+
score_set.open_for_reading
|
124
158
|
score_set.each_pair { |*args| pairs << args }
|
159
|
+
score_set.close
|
160
|
+
|
125
161
|
assert_equal 4, pairs.length
|
126
162
|
|
127
163
|
pair_1 = pairs.detect { |pair| pair[0] == "1" && pair[1] == "2" }
|
@@ -145,6 +181,13 @@ class UnitTests::TestScoreSets::TestCSV < Test::Unit::TestCase
|
|
145
181
|
assert_equal expected_4, pair_4[2]
|
146
182
|
end
|
147
183
|
|
184
|
+
test "each_pair when not open for reading" do
|
185
|
+
score_set = Linkage::ScoreSets::CSV.new(:filename => "/foo/bar.csv")
|
186
|
+
assert_raise_message("not in read mode") do
|
187
|
+
score_set.each_pair { |*args| }
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
148
191
|
test "registers itself" do
|
149
192
|
assert_equal Linkage::ScoreSets::CSV, Linkage::ScoreSet['csv']
|
150
193
|
end
|