taxonifi 0.2.0 → 0.3.2
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/.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
|