taxonifi 0.2.0 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +59 -0
- data/.travis.yml +11 -0
- data/Gemfile +5 -17
- data/Gemfile.lock +22 -40
- data/README.md +192 -0
- data/Rakefile +35 -26
- data/lib/export/format/base.rb +1 -1
- data/lib/export/format/species_file.rb +154 -152
- data/lib/lumper/clump.rb +1 -1
- data/lib/lumper/lumper.rb +22 -18
- data/lib/lumper/lumps/parent_child_name_collection.rb +1 -2
- data/lib/lumper/name_index.rb +21 -0
- data/lib/{models → model}/author_year.rb +2 -2
- data/lib/{models → model}/base.rb +35 -5
- data/lib/{models → model}/collection.rb +8 -1
- data/lib/{models → model}/name.rb +128 -36
- data/lib/{models → model}/name_collection.rb +134 -33
- data/lib/{models → model}/person.rb +1 -1
- data/lib/{models → model}/ref.rb +4 -2
- data/lib/model/ref_collection.rb +171 -0
- data/lib/{models → model}/species_name.rb +24 -3
- data/lib/splitter/builder.rb +1 -1
- data/lib/splitter/parser.rb +5 -0
- data/lib/splitter/tokens.rb +54 -9
- data/lib/taxonifi/version.rb +3 -0
- data/lib/taxonifi.rb +5 -9
- data/taxonifi.gemspec +29 -99
- data/test/helper.rb +1 -1
- data/test/test_exporter.rb +1 -1
- data/test/test_lumper_names.rb +9 -9
- data/test/test_lumper_refs.rb +4 -4
- data/test/test_parser.rb +97 -26
- data/test/test_splitter_tokens.rb +25 -4
- data/test/test_taxonifi_base.rb +1 -1
- data/test/test_taxonifi_geog.rb +1 -1
- data/test/test_taxonifi_name.rb +13 -14
- data/test/test_taxonifi_name_collection.rb +11 -5
- data/test/test_taxonifi_ref.rb +1 -1
- data/test/test_taxonifi_ref_collection.rb +40 -3
- data/test/test_taxonifi_species_name.rb +51 -1
- data/travis/before_install.sh +2 -0
- metadata +96 -66
- data/README.rdoc +0 -154
- data/VERSION +0 -1
- data/lib/models/ref_collection.rb +0 -107
- /data/lib/{models → model}/generic_object.rb +0 -0
- /data/lib/{models → model}/geog.rb +0 -0
- /data/lib/{models → model}/geog_collection.rb +0 -0
- /data/lib/{models → model}/shared_class_methods.rb +0 -0
data/test/test_parser.rb
CHANGED
@@ -2,35 +2,106 @@ require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
|
|
2
2
|
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/splitter/parser'))
|
3
3
|
|
4
4
|
class Test_TaxonifiSplitterParser < Test::Unit::TestCase
|
5
|
-
|
6
5
|
# TODO: this could also go to builder related tests
|
6
|
+
|
7
7
|
def test_that_parse_species_name_parses
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
8
|
+
lexer = Taxonifi::Splitter::Lexer.new("Foo stuff Smith, 1912", :species_name)
|
9
|
+
builder = Taxonifi::Model::SpeciesName.new
|
10
|
+
Taxonifi::Splitter::Parser.new(lexer, builder).parse_species_name
|
11
|
+
assert_equal "Foo", builder.genus.name
|
12
|
+
assert_equal "stuff", builder.species.name
|
13
|
+
assert_equal "Smith", builder.names.last.author
|
14
|
+
assert_equal 1912 , builder.names.last.year
|
15
|
+
assert_equal false, builder.names.last.parens
|
16
|
+
assert_equal "Foo stuff Smith, 1912", builder.display_name
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_that_parse_species_name_parses_subspecies
|
20
|
+
lexer = Taxonifi::Splitter::Lexer.new("Foo stuff things Smith, 1912", :species_name)
|
21
|
+
builder = Taxonifi::Model::SpeciesName.new
|
22
|
+
Taxonifi::Splitter::Parser.new(lexer, builder).parse_species_name
|
23
|
+
assert_equal "Foo", builder.genus.name
|
24
|
+
assert_equal "stuff", builder.species.name
|
25
|
+
assert_equal "things", builder.subspecies.name
|
26
|
+
assert_equal "Smith", builder.names.last.author
|
27
|
+
assert_equal 1912 , builder.names.last.year
|
28
|
+
assert_equal false, builder.names.last.parens
|
29
|
+
assert_equal "Foo stuff things Smith, 1912", builder.display_name
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_that_parse_species_name_parses_subgenera
|
33
|
+
lexer = Taxonifi::Splitter::Lexer.new("Foo (Bar) stuff things (Smith, 1912)", :species_name)
|
34
|
+
builder = Taxonifi::Model::SpeciesName.new
|
35
|
+
Taxonifi::Splitter::Parser.new(lexer, builder).parse_species_name
|
36
|
+
assert_equal "Foo", builder.genus.name
|
37
|
+
assert_equal "Bar", builder.subgenus.name
|
38
|
+
assert_equal builder.genus, builder.subgenus.parent
|
39
|
+
assert_equal "stuff", builder.species.name
|
40
|
+
assert_equal builder.subgenus, builder.species.parent
|
41
|
+
assert_equal "things", builder.subspecies.name
|
42
|
+
assert_equal builder.species, builder.subspecies.parent
|
43
|
+
assert_equal "Smith", builder.names.last.author
|
44
|
+
assert_equal 1912, builder.names.last.year
|
45
|
+
assert_equal true, builder.names.last.parens
|
46
|
+
assert_equal "Foo (Bar) stuff things (Smith, 1912)", builder.display_name
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_that_parse_species_name_parses_variety_following_subspecies
|
50
|
+
lexer = Taxonifi::Splitter::Lexer.new("Foo stuff things var. blorf Smith, 1912", :species_name)
|
51
|
+
builder = Taxonifi::Model::SpeciesName.new
|
52
|
+
Taxonifi::Splitter::Parser.new(lexer, builder).parse_species_name
|
53
|
+
assert_equal "Foo", builder.genus.name
|
54
|
+
assert_equal "stuff", builder.species.name
|
55
|
+
assert_equal "things", builder.subspecies.name
|
56
|
+
assert_equal "blorf", builder.variety.name
|
57
|
+
assert_equal "Smith", builder.names.last.author
|
58
|
+
assert_equal 1912 , builder.names.last.year
|
59
|
+
assert_equal false, builder.names.last.parens
|
60
|
+
assert_equal "Foo stuff things var. blorf Smith, 1912", builder.display_name
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
def test_that_parse_species_name_parses_variety_following_species
|
65
|
+
lexer = Taxonifi::Splitter::Lexer.new("Foo stuff v. blorf Smith, 1912", :species_name)
|
66
|
+
builder = Taxonifi::Model::SpeciesName.new
|
67
|
+
Taxonifi::Splitter::Parser.new(lexer, builder).parse_species_name
|
68
|
+
assert_equal "Foo", builder.genus.name
|
69
|
+
assert_equal "stuff", builder.species.name
|
70
|
+
assert_equal nil, builder.subspecies
|
71
|
+
assert_equal "blorf", builder.variety.name
|
72
|
+
assert_equal "Smith", builder.names.last.author
|
73
|
+
assert_equal 1912 , builder.names.last.year
|
74
|
+
assert_equal false, builder.names.last.parens
|
75
|
+
assert_equal "Foo stuff var. blorf Smith, 1912", builder.display_name
|
33
76
|
end
|
34
77
|
|
78
|
+
|
79
|
+
def test_that_parse_species_name_parses_variety_following_species_without_author_year
|
80
|
+
lexer = Taxonifi::Splitter::Lexer.new("Foo stuff v. blorf", :species_name)
|
81
|
+
builder = Taxonifi::Model::SpeciesName.new
|
82
|
+
Taxonifi::Splitter::Parser.new(lexer, builder).parse_species_name
|
83
|
+
assert_equal "Foo", builder.genus.name
|
84
|
+
assert_equal "stuff", builder.species.name
|
85
|
+
assert_equal nil, builder.subspecies
|
86
|
+
assert_equal "blorf", builder.variety.name
|
87
|
+
assert_equal nil, builder.names.last.parens # not set
|
88
|
+
assert_equal "Foo stuff var. blorf", builder.display_name
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
def test_that_parse_species_name_parses_variety_following_species_without_author_year_II
|
93
|
+
lexer = Taxonifi::Splitter::Lexer.new("Calyptonotus rolandri var. opacus", :species_name)
|
94
|
+
builder = Taxonifi::Model::SpeciesName.new
|
95
|
+
Taxonifi::Splitter::Parser.new(lexer, builder).parse_species_name
|
96
|
+
assert_equal "Calyptonotus", builder.genus.name
|
97
|
+
assert_equal "rolandri", builder.species.name
|
98
|
+
assert_equal nil, builder.subspecies
|
99
|
+
assert_equal "opacus", builder.variety.name
|
100
|
+
assert_equal nil, builder.names.last.parens # not set
|
101
|
+
assert_equal "Calyptonotus rolandri var. opacus", builder.display_name
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
|
35
106
|
end
|
36
107
|
|
@@ -14,6 +14,21 @@ end
|
|
14
14
|
|
15
15
|
class Test_TaxonifiSplitterTokens < Test::Unit::TestCase
|
16
16
|
|
17
|
+
def test_variety
|
18
|
+
lexer = Taxonifi::Splitter::Lexer.new("var. blorf")
|
19
|
+
assert lexer.pop(Taxonifi::Splitter::Tokens::Variety)
|
20
|
+
|
21
|
+
lexer = Taxonifi::Splitter::Lexer.new(" var. blorf")
|
22
|
+
assert lexer.pop(Taxonifi::Splitter::Tokens::Variety)
|
23
|
+
|
24
|
+
lexer = Taxonifi::Splitter::Lexer.new("v. blorf")
|
25
|
+
assert lexer.pop(Taxonifi::Splitter::Tokens::Variety)
|
26
|
+
|
27
|
+
lexer = Taxonifi::Splitter::Lexer.new(" v. blorf ")
|
28
|
+
assert lexer.pop(Taxonifi::Splitter::Tokens::Variety)
|
29
|
+
end
|
30
|
+
|
31
|
+
|
17
32
|
def test_year
|
18
33
|
lexer = Taxonifi::Splitter::Lexer.new("1235")
|
19
34
|
assert lexer.pop(Taxonifi::Splitter::Tokens::Year)
|
@@ -53,7 +68,7 @@ class Test_TaxonifiSplitterTokens < Test::Unit::TestCase
|
|
53
68
|
assert lexer.pop(Taxonifi::Splitter::Tokens::RightParen)
|
54
69
|
end
|
55
70
|
|
56
|
-
def
|
71
|
+
def test_comma
|
57
72
|
lexer = Taxonifi::Splitter::Lexer.new(",")
|
58
73
|
assert lexer.pop(Taxonifi::Splitter::Tokens::Comma)
|
59
74
|
end
|
@@ -167,9 +182,15 @@ class Test_TaxonifiSplitterTokens < Test::Unit::TestCase
|
|
167
182
|
"Costa Lima, A. M. da, C. A. Campos Seabra, and C. R. Hathaway", # 36
|
168
183
|
"Falcon, L. A., R. van den Bosch, C. A. Ferris, L. K. Stromberg, L. K. Etzel, R. E. Stinner, and T. F. Leigh", # 37
|
169
184
|
"Kinzer, R. E., J. W. Davis, Jr., J. R. Coppedge, and S. L. Jones", # 38
|
170
|
-
"Doesburg, P. H. van, Jr. "
|
185
|
+
"Doesburg, P. H. van, Jr. ", # 39
|
186
|
+
"Arias J. R., Young D. G." # 40
|
171
187
|
]
|
172
188
|
|
189
|
+
lexer = Taxonifi::Splitter::Lexer.new(auths[40])
|
190
|
+
assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
|
191
|
+
assert_equal ['Arias', 'Young'], t.names.collect{|n| n[:last_name] }
|
192
|
+
assert_equal [%w{J R}, %w{D G}] , t.names[0..1].collect{|n| n[:initials] }
|
193
|
+
|
173
194
|
lexer = Taxonifi::Splitter::Lexer.new(auths[39])
|
174
195
|
assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
|
175
196
|
assert_equal ['Doesburg'], t.names.collect{|n| n[:last_name] }
|
@@ -298,13 +319,13 @@ class Test_TaxonifiSplitterTokens < Test::Unit::TestCase
|
|
298
319
|
assert_equal 1, t.names.size
|
299
320
|
assert_equal "Smith", t.names[0][:last_name]
|
300
321
|
|
301
|
-
lexer = Taxonifi::Splitter::Lexer.new(auths[
|
322
|
+
lexer = Taxonifi::Splitter::Lexer.new(auths[13])
|
302
323
|
assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
|
303
324
|
assert_equal 2, t.names.size
|
304
325
|
assert_equal "Smith", t.names[0][:last_name]
|
305
326
|
assert_equal "Barnes", t.names[1][:last_name]
|
306
327
|
|
307
|
-
lexer = Taxonifi::Splitter::Lexer.new(auths[
|
328
|
+
lexer = Taxonifi::Splitter::Lexer.new(auths[12])
|
308
329
|
assert t = lexer.pop(Taxonifi::Splitter::Tokens::Authors)
|
309
330
|
assert_equal 2, t.names.size
|
310
331
|
assert_equal "Smith", t.names[0][:last_name]
|
data/test/test_taxonifi_base.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
|
2
|
-
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/model/base'))
|
3
3
|
|
4
4
|
class TestTaxonifiBase < Test::Unit::TestCase
|
5
5
|
|
data/test/test_taxonifi_geog.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
|
2
|
-
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/model/name'))
|
3
3
|
|
4
4
|
class TestTaxonifiGeog < Test::Unit::TestCase
|
5
5
|
|
data/test/test_taxonifi_name.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
|
2
|
-
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/model/name'))
|
3
3
|
|
4
4
|
class TestTaxonifiName < Test::Unit::TestCase
|
5
5
|
|
@@ -30,12 +30,12 @@ class TestTaxonifiName < Test::Unit::TestCase
|
|
30
30
|
n = Taxonifi::Model::Name.new()
|
31
31
|
assert n.respond_to?(:rank)
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
def test_that_name_has_an_author
|
35
35
|
n = Taxonifi::Model::Name.new()
|
36
36
|
assert n.respond_to?(:author)
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
def test_that_name_has_a_year
|
40
40
|
n = Taxonifi::Model::Name.new()
|
41
41
|
assert n.respond_to?(:year)
|
@@ -74,13 +74,12 @@ class TestTaxonifiName < Test::Unit::TestCase
|
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
|
-
|
77
|
+
def test_that_rank_can_be_set
|
78
78
|
n = Taxonifi::Model::Name.new()
|
79
79
|
n.rank = "family"
|
80
80
|
assert_equal "family", n.rank
|
81
81
|
end
|
82
82
|
|
83
|
-
|
84
83
|
def test_that_parent_is_higher_rank_than_child
|
85
84
|
n = Taxonifi::Model::Name.new()
|
86
85
|
n.rank = "genus"
|
@@ -111,11 +110,11 @@ class TestTaxonifiName < Test::Unit::TestCase
|
|
111
110
|
end
|
112
111
|
|
113
112
|
def create_a_few_names
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
113
|
+
@n0 = Taxonifi::Model::Name.new(:name => "Baridae", :rank => "Family", :id => 2)
|
114
|
+
@n1 = Taxonifi::Model::Name.new(:name => "Barinae", :rank => "Subfamily", :id => 15, :parent => @n0)
|
115
|
+
@n2 = Taxonifi::Model::Name.new(:name => "Foo", :rank => "Genus", :author => "Frank", :year => 2020, :id => 14, :parent => @n1 )
|
116
|
+
@n3 = Taxonifi::Model::Name.new(:name => "Bar", :rank => "Subgenus", :author => "Frank", :year => 2020, :id => 19, :parent => @n2 )
|
117
|
+
@n4 = Taxonifi::Model::Name.new(:name => "boo", :rank => "Species", :author => "Frank", :year => 2020, :id => 11, :parent => @n3 )
|
119
118
|
end
|
120
119
|
|
121
120
|
def dont_test_prologify
|
@@ -140,7 +139,7 @@ class TestTaxonifiName < Test::Unit::TestCase
|
|
140
139
|
def test_nomenclator_name
|
141
140
|
create_a_few_names
|
142
141
|
n5 = Taxonifi::Model::Name.new(:name => "beep", :rank => "Subspecies", :author => "Frank", :year => 2020, :id => 11, :parent => @n4 )
|
143
|
-
|
142
|
+
|
144
143
|
assert_equal 'Foo', @n2.nomenclator_name
|
145
144
|
assert_equal 'Foo (Bar)', @n3.nomenclator_name
|
146
145
|
assert_equal 'Foo (Bar) boo', @n4.nomenclator_name
|
@@ -165,14 +164,14 @@ class TestTaxonifiName < Test::Unit::TestCase
|
|
165
164
|
assert_equal '2-15-14g', @n2.parent_ids_sf_style
|
166
165
|
assert_equal '2-15', @n1.parent_ids_sf_style
|
167
166
|
end
|
168
|
-
|
167
|
+
|
169
168
|
def test_author_year_index
|
170
169
|
n = Taxonifi::Model::Name.new(author_year: 'Smith and Jones, 1920')
|
171
170
|
assert_equal '1920-||smith|-||jones|', n.author_year_index
|
172
171
|
end
|
173
172
|
|
174
173
|
def test_genus_group_parent
|
175
|
-
n1 = Taxonifi::Model::Name.new(name: "Fooidae", rank: "family",
|
174
|
+
n1 = Taxonifi::Model::Name.new(name: "Fooidae", rank: "family", author: nil, year: nil) #
|
176
175
|
n2 = Taxonifi::Model::Name.new(name: "Foo", rank: "genus", author: nil , year: nil, :parent => n1) # Foo
|
177
176
|
n3 = Taxonifi::Model::Name.new(name: "Bar", rank: "subgenus", author: nil , year: nil, :parent => n2) # Foo (Bar)
|
178
177
|
n4 = Taxonifi::Model::Name.new(name: "aus", rank: "species", author: nil , year: nil, :parent => n3) # Foo (Bar) aus
|
@@ -185,7 +184,7 @@ class TestTaxonifiName < Test::Unit::TestCase
|
|
185
184
|
#
|
186
185
|
# ICZN Subclass
|
187
186
|
#
|
188
|
-
|
187
|
+
|
189
188
|
def test_that_iczn_family_ends_in_idae
|
190
189
|
n = Taxonifi::Model::IcznName.new
|
191
190
|
assert_raise Taxonifi::NameError do
|
@@ -161,6 +161,12 @@ class TestTaxonifiNameCollection < Test::Unit::TestCase
|
|
161
161
|
assert_equal n11.id, c.name_exists?(n12)
|
162
162
|
end
|
163
163
|
|
164
|
+
def test_that_name_collection_can_assign_ref_collections
|
165
|
+
r = Taxonifi::Model::RefCollection.new
|
166
|
+
c = Taxonifi::Model::NameCollection.new(:ref_collection => r)
|
167
|
+
assert c.ref_collection == r
|
168
|
+
end
|
169
|
+
|
164
170
|
def test_that_name_collection_generate_ref_collection
|
165
171
|
c = Taxonifi::Model::NameCollection.new
|
166
172
|
c.generate_ref_collection
|
@@ -182,14 +188,14 @@ class TestTaxonifiNameCollection < Test::Unit::TestCase
|
|
182
188
|
|
183
189
|
c.generate_ref_collection
|
184
190
|
assert_equal 3, c.ref_collection.collection.size
|
185
|
-
|
186
|
-
assert_equal ['Jones'], c.ref_collection.collection.
|
187
|
-
assert_equal ['
|
188
|
-
assert_equal
|
189
|
-
assert_equal 2011, c.ref_collection.collection.first.year
|
191
|
+
assert_equal ['Smith', 'Jones'], c.ref_collection.collection.first.authors.collect{|r| r.last_name}
|
192
|
+
assert_equal ['Smith', 'Jones', 'Simon'], c.ref_collection.collection[1].authors.collect{|r| r.last_name}
|
193
|
+
assert_equal ['Jones'], c.ref_collection.collection.last.authors.collect{|r| r.last_name}
|
194
|
+
assert_equal 2011, c.ref_collection.collection.last.year
|
190
195
|
foo = 1
|
191
196
|
end
|
192
197
|
|
193
198
|
|
199
|
+
|
194
200
|
end
|
195
201
|
|
data/test/test_taxonifi_ref.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
|
2
|
-
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/model/ref'))
|
3
3
|
|
4
4
|
class TestTaxonifiRef < Test::Unit::TestCase
|
5
5
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'helper'
|
2
|
-
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/model/ref_collection'))
|
3
3
|
|
4
|
-
class
|
4
|
+
class TestTaxonifiRefCollection < Test::Unit::TestCase
|
5
5
|
|
6
6
|
def test_that_add_objects_adds_refs
|
7
7
|
c = Taxonifi::Model::RefCollection.new
|
@@ -51,18 +51,55 @@ class TestTaxonifiCollection < Test::Unit::TestCase
|
|
51
51
|
def test_uniquify_authors
|
52
52
|
c = Taxonifi::Model::RefCollection.new
|
53
53
|
['Smith, A.R. 1920', 'Jones, A.R. and Smith, A.R. 1940', 'Jones, B. 1999', 'Jones, A. R. 1922', 'Jones, A. R., Smith, A.R. and Frank, A. 1943'].each do |a|
|
54
|
+
# smith ar
|
55
|
+
# jones ar
|
56
|
+
# jones b
|
57
|
+
# frank a
|
54
58
|
n = Taxonifi::Model::Ref.new(:author_year => a)
|
55
59
|
c.add_object(n)
|
56
60
|
end
|
57
|
-
|
61
|
+
|
62
|
+
assert_equal 8, c.all_authors.size
|
58
63
|
assert_not_equal c.collection.first.authors.first, c.collection[1].authors.last
|
64
|
+
|
59
65
|
c.uniquify_authors(5)
|
66
|
+
assert_equal 4, c.all_authors.size
|
60
67
|
assert_equal c.collection.first.authors.first, c.collection[1].authors.last
|
61
68
|
assert_equal c.collection.first.authors.first, c.collection[4].authors[1]
|
62
69
|
assert_equal c.collection[1].authors.first, c.collection[3].authors.first
|
63
70
|
assert_equal 5, c.collection.first.authors.first.id
|
64
71
|
end
|
65
72
|
|
73
|
+
def test_uniquify_tricky_authors
|
74
|
+
c = Taxonifi::Model::RefCollection.new
|
75
|
+
['Quate and Quate, 1920',].each do |a|
|
76
|
+
n = Taxonifi::Model::Ref.new(:author_year => a)
|
77
|
+
c.add_object(n)
|
78
|
+
end
|
79
|
+
|
80
|
+
assert_equal 2, c.unique_authors.size
|
81
|
+
c.uniquify_authors(0)
|
82
|
+
assert_equal 2, c.unique_authors.size
|
83
|
+
assert_not_equal c.collection.first.authors.first, c.collection.first.authors.last
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_uniquify_trickier_authors
|
87
|
+
c = Taxonifi::Model::RefCollection.new
|
88
|
+
['Quate and Quate, 1920', 'Quate, Smith and Quate, 1921', 'Smith, 1930', 'Quate, Quate, and Smith, 2000'].each do |a|
|
89
|
+
# Quate1
|
90
|
+
# Quate2
|
91
|
+
# Smith1
|
92
|
+
n = Taxonifi::Model::Ref.new(:author_year => a)
|
93
|
+
c.add_object(n)
|
94
|
+
end
|
95
|
+
|
96
|
+
assert_equal 9, c.all_authors.size
|
97
|
+
c.uniquify_authors(0)
|
98
|
+
assert_equal 3, c.unique_authors.size
|
99
|
+
# assert_not_equal c.collection.first.authors.first, c.collection.first.authors.last
|
100
|
+
end
|
101
|
+
|
102
|
+
|
66
103
|
|
67
104
|
|
68
105
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
|
2
|
-
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/model/species_name'))
|
3
3
|
|
4
4
|
class TestTaxonifiSpeciesName < Test::Unit::TestCase
|
5
5
|
|
@@ -92,4 +92,54 @@ class TestTaxonifiSpeciesName < Test::Unit::TestCase
|
|
92
92
|
assert_equal "Foo (Bar) stuff things (Jones, 2012)", sn3.display_name
|
93
93
|
end
|
94
94
|
|
95
|
+
def test_new_from_string_for_simple_species_name
|
96
|
+
string = "Foo bar Smith, 1920"
|
97
|
+
sn = Taxonifi::Model::SpeciesName.new_from_string(string)
|
98
|
+
assert_equal "Foo", sn.genus.name
|
99
|
+
assert_equal "bar", sn.species.name
|
100
|
+
assert_equal 1920, sn.species.year
|
101
|
+
assert_equal "Smith", sn.species.authors.first.last_name
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_new_from_string_for_more_complex_species_name
|
105
|
+
string = 'Aus (Cus) bus dus (Smith, 1920)'
|
106
|
+
sn = Taxonifi::Model::SpeciesName.new_from_string(string)
|
107
|
+
assert_equal "Aus", sn.genus.name
|
108
|
+
assert_equal "Cus", sn.subgenus.name
|
109
|
+
assert_equal "bus", sn.species.name
|
110
|
+
assert_equal "dus", sn.subspecies.name
|
111
|
+
assert_equal 1920, sn.subspecies.year
|
112
|
+
assert_equal "Smith", sn.subspecies.authors.first.last_name
|
113
|
+
assert_equal true, sn.subspecies.parens
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_new_from_simple_ampersand_authors
|
117
|
+
string = 'Pericoma deceptrix Quate & Brown, 2004'
|
118
|
+
sn = Taxonifi::Model::SpeciesName.new_from_string(string)
|
119
|
+
assert_equal "Pericoma", sn.genus.name
|
120
|
+
assert_equal nil, sn.subgenus
|
121
|
+
assert_equal "deceptrix", sn.species.name
|
122
|
+
assert_equal nil, sn.subspecies
|
123
|
+
assert_equal 2004, sn.species.year
|
124
|
+
assert_equal "Quate", sn.species.authors.first.last_name
|
125
|
+
assert_equal "Brown", sn.species.authors.last.last_name
|
126
|
+
assert_equal false, sn.species.parens
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_new_from_simple_ampersand_parened_authors
|
130
|
+
string = 'Pericoma deceptrix (Quate & Brown, 2004)'
|
131
|
+
sn = Taxonifi::Model::SpeciesName.new_from_string(string)
|
132
|
+
assert_equal "Pericoma", sn.genus.name
|
133
|
+
assert_equal nil, sn.subgenus
|
134
|
+
assert_equal "deceptrix", sn.species.name
|
135
|
+
assert_equal nil, sn.subspecies
|
136
|
+
assert_equal 2004, sn.species.year
|
137
|
+
assert_equal "Quate", sn.species.authors.first.last_name
|
138
|
+
assert_equal "Brown", sn.species.authors.last.last_name
|
139
|
+
assert_equal true, sn.species.parens
|
140
|
+
end
|
141
|
+
|
142
|
+
|
143
|
+
|
144
|
+
|
95
145
|
end
|