stanford-mods 0.0.27 → 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 +4 -4
- data/README.rdoc +1 -0
- data/lib/stanford-mods/searchworks.rb +70 -24
- data/lib/stanford-mods/version.rb +1 -1
- data/spec/searchworks_format_spec.rb +139 -24
- data/spec/searchworks_pub_dates_spec.rb +0 -2
- data/spec/searchworks_spec.rb +0 -87
- data/spec/searchworks_title_spec.rb +578 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1bb292e526add1944d2595260b5edfdd66950fb
|
4
|
+
data.tar.gz: e814a340c6e3ceff0f0d5b373631409c3f5f0253
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e9f4f142a9b09f8a61d82570b1fe0588dd3224645de7047e9b9229ff47c0efc15a12bba4583d0edce2ed2d36a2beddddb66edc3ea1edcc9010a6146136c8e1a5
|
7
|
+
data.tar.gz: b17d44c20f7bf39645f0659ddf034d6846c13ee6a548da2386b454269144882314acb34cfbde2d7a0baacd4e63f0d9d59aa9a859c4acf41f4cc651c15eb3ae18
|
data/README.rdoc
CHANGED
@@ -59,6 +59,7 @@ Example Using SearchWorks Mixins:
|
|
59
59
|
6. Create new Pull Request
|
60
60
|
|
61
61
|
== Releases
|
62
|
+
* <b>1.0.0</b> sw_full_title now includes partName and partNumber; sw_title_display created to be like sw_full_title but without trailing punctuation; sw format for typeOfResource sound recording; genre value is librettos, plural; sw format algorithm accommodates first letter upcase; genre value report does NOT map to a format, genre value 'project report' with ToR text is 'Book'
|
62
63
|
* <b>0.0.27</b> add genres 'Issue brief', 'Book chapter' and 'Working paper' to map to searchworks format 'Book'
|
63
64
|
* <b>0.0.26</b> map typeOfResource 'sound recording-musical' to searchworks format 'Music - Recording' with spaces
|
64
65
|
* <b>0.0.25</b> map typeOfResource 'text' and genre 'report' to searchworks format 'Book'
|
@@ -75,7 +75,7 @@ module Stanford
|
|
75
75
|
|
76
76
|
# @return [Array<String>] values for author_corp_display
|
77
77
|
def sw_corporate_authors
|
78
|
-
val
|
78
|
+
val = @mods_ng_xml.plain_name.select {|n| n.type_at == 'corporate'}.map { |n| n.display_value_w_date }
|
79
79
|
val
|
80
80
|
end
|
81
81
|
|
@@ -123,13 +123,46 @@ module Stanford
|
|
123
123
|
short_titles ? short_titles.first : nil
|
124
124
|
end
|
125
125
|
|
126
|
-
# @return [String] value for title_245_search,
|
126
|
+
# @return [String] value for title_245_search, title_full_display
|
127
127
|
def sw_full_title
|
128
|
-
|
129
|
-
|
130
|
-
|
128
|
+
outer_nodes = @mods_ng_xml.title_info
|
129
|
+
outer_node = outer_nodes ? outer_nodes.first : nil
|
130
|
+
if outer_node
|
131
|
+
nonSort = outer_node.nonSort.text.strip.empty? ? nil : outer_node.nonSort.text.strip
|
132
|
+
title = outer_node.title.text.strip.empty? ? nil: outer_node.title.text.strip
|
133
|
+
preSubTitle = nonSort ? [nonSort, title].compact.join(" ") : title
|
134
|
+
preSubTitle.sub!(/:$/, '') if preSubTitle # remove trailing colon
|
135
|
+
|
136
|
+
subTitle = outer_node.subTitle.text.strip
|
137
|
+
preParts = subTitle.empty? ? preSubTitle : preSubTitle + " : " + subTitle
|
138
|
+
preParts.sub!(/\.$/, '') if preParts # remove trailing period
|
139
|
+
|
140
|
+
partName = outer_node.partName.text.strip unless outer_node.partName.text.strip.empty?
|
141
|
+
partNumber = outer_node.partNumber.text.strip unless outer_node.partNumber.text.strip.empty?
|
142
|
+
partNumber.sub!(/,$/, '') if partNumber # remove trailing comma
|
143
|
+
if partNumber && partName
|
144
|
+
parts = partNumber + ", " + partName
|
145
|
+
elsif partNumber
|
146
|
+
parts = partNumber
|
147
|
+
elsif partName
|
148
|
+
parts = partName
|
149
|
+
end
|
150
|
+
parts.sub!(/\.$/, '') if parts
|
151
|
+
|
152
|
+
result = parts ? preParts + ". " + parts : preParts
|
153
|
+
result += "." if !result.match(/[[:punct:]]$/)
|
154
|
+
result = nil if result.empty?
|
155
|
+
result
|
156
|
+
else
|
157
|
+
nil
|
131
158
|
end
|
132
|
-
|
159
|
+
end
|
160
|
+
|
161
|
+
# @return [String] value for title_display (like title_full_display without trailing punctuation)
|
162
|
+
def sw_title_display
|
163
|
+
result = sw_full_title ? sw_full_title : nil
|
164
|
+
result.sub!(/[[:punct:]]$/, '') if result
|
165
|
+
result
|
133
166
|
end
|
134
167
|
|
135
168
|
# this includes all titles except
|
@@ -141,17 +174,25 @@ module Stanford
|
|
141
174
|
# Returns a sortable version of the main title
|
142
175
|
# @return [String] value for title_sort field
|
143
176
|
def sw_sort_title
|
144
|
-
|
145
|
-
|
177
|
+
# get nonSort piece
|
178
|
+
outer_nodes = @mods_ng_xml.title_info
|
179
|
+
outer_node = outer_nodes ? outer_nodes.first : nil
|
180
|
+
if outer_node
|
181
|
+
nonSort = outer_node.nonSort.text.strip.empty? ? nil : outer_node.nonSort.text.strip
|
182
|
+
end
|
183
|
+
|
184
|
+
val = '' + ( sw_full_title ? sw_full_title : '')
|
185
|
+
val.sub!(Regexp.new("^" + nonSort), '') if nonSort
|
186
|
+
val.gsub!(/[[:punct:]]*/, '').strip
|
187
|
+
val.squeeze(" ").strip
|
146
188
|
end
|
147
189
|
|
148
190
|
#remove trailing commas
|
191
|
+
# @deprecated in favor of sw_title_display
|
149
192
|
def sw_full_title_without_commas
|
150
|
-
|
151
|
-
if
|
152
|
-
|
153
|
-
end
|
154
|
-
toret
|
193
|
+
result = self.sw_full_title
|
194
|
+
result.sub!(/,$/, '') if result
|
195
|
+
result
|
155
196
|
end
|
156
197
|
|
157
198
|
# ---- end TITLE ----
|
@@ -501,23 +542,28 @@ module Stanford
|
|
501
542
|
val << 'Computer File'
|
502
543
|
when 'sound recording-musical'
|
503
544
|
val << 'Music - Recording'
|
504
|
-
when 'sound recording-nonmusical'
|
545
|
+
when 'sound recording-nonmusical', 'sound recording'
|
505
546
|
val << 'Sound Recording'
|
506
547
|
when 'still image'
|
507
548
|
val << 'Image'
|
508
549
|
when 'text'
|
509
550
|
val << 'Book' if issuance and issuance.include? 'monographic'
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
val << '
|
551
|
+
book_genres = ['book chapter', 'Book chapter', 'Book Chapter',
|
552
|
+
'issue brief', 'Issue brief', 'Issue Brief',
|
553
|
+
'librettos', 'Librettos',
|
554
|
+
'project report', 'Project report', 'Project Report',
|
555
|
+
'technical report', 'Technical report', 'Technical Report',
|
556
|
+
'working paper', 'Working paper', 'Working Paper']
|
557
|
+
val << 'Book' if genres and !(genres & book_genres).empty?
|
558
|
+
conf_pub = ['conference publication', 'Conference publication', 'Conference Publication']
|
559
|
+
val << 'Conference Proceedings' if genres and !(genres & conf_pub).empty?
|
517
560
|
val << 'Journal/Periodical' if issuance and issuance.include? 'continuing'
|
518
|
-
|
519
|
-
val << '
|
520
|
-
|
561
|
+
article = ['article', 'Article']
|
562
|
+
val << 'Journal/Periodical' if genres and !(genres & article).empty?
|
563
|
+
stu_proj_rpt = ['student project report', 'Student project report', 'Student Project report', 'Student Project Report']
|
564
|
+
val << 'Other' if genres and !(genres & stu_proj_rpt).empty?
|
565
|
+
thesis = ['thesis', 'Thesis']
|
566
|
+
val << 'Thesis' if genres and !(genres & thesis).empty?
|
521
567
|
when 'three dimensional object'
|
522
568
|
val << 'Other'
|
523
569
|
end
|
@@ -13,38 +13,81 @@ describe "Format field from Searchworks mixin for Stanford::Mods::Record" do
|
|
13
13
|
it 'originInfo/issuance monographic' do
|
14
14
|
m = "<mods #{@ns_decl}><typeOfResource>text</typeOfResource><originInfo><issuance>monographic</issuance></originInfo></mods>"
|
15
15
|
@smods_rec.from_str(m)
|
16
|
-
@smods_rec.format.
|
16
|
+
expect(@smods_rec.format).to eq ['Book']
|
17
17
|
end
|
18
18
|
context "genre" do
|
19
19
|
it "'book chapter'", :email => 'mods-squad 2014-05-22, Joanna Dyla' do
|
20
20
|
m = "<mods #{@ns_decl}><genre>book chapter</genre><typeOfResource>text</typeOfResource></mods>"
|
21
21
|
@smods_rec.from_str(m)
|
22
|
-
@smods_rec.format.
|
22
|
+
expect(@smods_rec.format).to eq ['Book']
|
23
|
+
m = "<mods #{@ns_decl}><genre>Book chapter</genre><typeOfResource>text</typeOfResource></mods>"
|
24
|
+
@smods_rec.from_str(m)
|
25
|
+
expect(@smods_rec.format).to eq ['Book']
|
26
|
+
m = "<mods #{@ns_decl}><genre>Book Chapter</genre><typeOfResource>text</typeOfResource></mods>"
|
27
|
+
@smods_rec.from_str(m)
|
28
|
+
expect(@smods_rec.format).to eq ['Book']
|
23
29
|
end
|
24
30
|
it "'issue brief'", :email => 'mods-squad 2014-05-22, Joanna Dyla' do
|
25
31
|
m = "<mods #{@ns_decl}><genre>issue brief</genre><typeOfResource>text</typeOfResource></mods>"
|
26
32
|
@smods_rec.from_str(m)
|
27
|
-
@smods_rec.format.
|
33
|
+
expect(@smods_rec.format).to eq ['Book']
|
34
|
+
m = "<mods #{@ns_decl}><genre>Issue brief</genre><typeOfResource>text</typeOfResource></mods>"
|
35
|
+
@smods_rec.from_str(m)
|
36
|
+
expect(@smods_rec.format).to eq ['Book']
|
37
|
+
m = "<mods #{@ns_decl}><genre>Issue Brief</genre><typeOfResource>text</typeOfResource></mods>"
|
38
|
+
@smods_rec.from_str(m)
|
39
|
+
expect(@smods_rec.format).to eq ['Book']
|
28
40
|
end
|
29
|
-
it "'
|
41
|
+
it "'librettos'", :jira => 'INDEX-98' do
|
42
|
+
m = "<mods #{@ns_decl}><genre>librettos</genre><typeOfResource>text</typeOfResource></mods>"
|
43
|
+
@smods_rec.from_str(m)
|
44
|
+
expect(@smods_rec.format).to eq ['Book']
|
45
|
+
m = "<mods #{@ns_decl}><genre>Librettos</genre><typeOfResource>text</typeOfResource></mods>"
|
46
|
+
@smods_rec.from_str(m)
|
47
|
+
expect(@smods_rec.format).to eq ['Book']
|
48
|
+
end
|
49
|
+
it "'libretto' isn't valid", :jira => 'INDEX-98' do
|
30
50
|
m = "<mods #{@ns_decl}><genre>libretto</genre><typeOfResource>text</typeOfResource></mods>"
|
31
51
|
@smods_rec.from_str(m)
|
32
|
-
@smods_rec.format.
|
52
|
+
expect(@smods_rec.format).to eq []
|
53
|
+
end
|
54
|
+
it "'project report'", :jira => 'GRYP-170', :github => 'gdor-indexer/#7' do
|
55
|
+
m = "<mods #{@ns_decl}><genre>project report</genre><typeOfResource>text</typeOfResource></mods>"
|
56
|
+
@smods_rec.from_str(m)
|
57
|
+
expect(@smods_rec.format).to eq ['Book']
|
58
|
+
m = "<mods #{@ns_decl}><genre>Project report</genre><typeOfResource>text</typeOfResource></mods>"
|
59
|
+
@smods_rec.from_str(m)
|
60
|
+
expect(@smods_rec.format).to eq ['Book']
|
61
|
+
m = "<mods #{@ns_decl}><genre>Project Report</genre><typeOfResource>text</typeOfResource></mods>"
|
62
|
+
@smods_rec.from_str(m)
|
63
|
+
expect(@smods_rec.format).to eq ['Book']
|
33
64
|
end
|
34
|
-
it "'report'", :jira => 'GRYP-170', :github => 'gdor-indexer/#7' do
|
65
|
+
it "'report' isn't valid", :jira => 'GRYP-170', :github => 'gdor-indexer/#7' do
|
35
66
|
m = "<mods #{@ns_decl}><genre>report</genre><typeOfResource>text</typeOfResource></mods>"
|
36
67
|
@smods_rec.from_str(m)
|
37
|
-
@smods_rec.format.
|
68
|
+
expect(@smods_rec.format).to eq []
|
38
69
|
end
|
39
70
|
it "'technical report'", :jira => 'GRYPHONDOR-207' do
|
40
71
|
m = "<mods #{@ns_decl}><genre>technical report</genre><typeOfResource>text</typeOfResource></mods>"
|
41
72
|
@smods_rec.from_str(m)
|
42
|
-
@smods_rec.format.
|
73
|
+
expect(@smods_rec.format).to eq ['Book']
|
74
|
+
m = "<mods #{@ns_decl}><genre>Technical report</genre><typeOfResource>text</typeOfResource></mods>"
|
75
|
+
@smods_rec.from_str(m)
|
76
|
+
expect(@smods_rec.format).to eq ['Book']
|
77
|
+
m = "<mods #{@ns_decl}><genre>Technical Report</genre><typeOfResource>text</typeOfResource></mods>"
|
78
|
+
@smods_rec.from_str(m)
|
79
|
+
expect(@smods_rec.format).to eq ['Book']
|
43
80
|
end
|
44
81
|
it "'working paper'", :email => 'mods-squad 2014-05-22, Joanna Dyla' do
|
45
82
|
m = "<mods #{@ns_decl}><genre>working paper</genre><typeOfResource>text</typeOfResource></mods>"
|
46
83
|
@smods_rec.from_str(m)
|
47
|
-
@smods_rec.format.
|
84
|
+
expect(@smods_rec.format).to eq ['Book']
|
85
|
+
m = "<mods #{@ns_decl}><genre>Working paper</genre><typeOfResource>text</typeOfResource></mods>"
|
86
|
+
@smods_rec.from_str(m)
|
87
|
+
expect(@smods_rec.format).to eq ['Book']
|
88
|
+
m = "<mods #{@ns_decl}><genre>Working Paper</genre><typeOfResource>text</typeOfResource></mods>"
|
89
|
+
@smods_rec.from_str(m)
|
90
|
+
expect(@smods_rec.format).to eq ['Book']
|
48
91
|
end
|
49
92
|
end
|
50
93
|
end
|
@@ -54,67 +97,139 @@ describe "Format field from Searchworks mixin for Stanford::Mods::Record" do
|
|
54
97
|
it "no genre (e.g. Dataset)" do
|
55
98
|
m = "<mods #{@ns_decl}><typeOfResource>software, multimedia</typeOfResource></mods>"
|
56
99
|
@smods_rec.from_str(m)
|
57
|
-
@smods_rec.format.
|
100
|
+
expect(@smods_rec.format).to eq ['Computer File']
|
58
101
|
end
|
59
102
|
it "genre 'game'", :jira => 'GRYPHONDOR-207' do
|
60
103
|
m = "<mods #{@ns_decl}><genre>game</genre><typeOfResource>software, multimedia</typeOfResource></mods>"
|
61
104
|
@smods_rec.from_str(m)
|
62
|
-
@smods_rec.format.
|
105
|
+
expect(@smods_rec.format).to eq ['Computer File']
|
106
|
+
m = "<mods #{@ns_decl}><genre>Game</genre><typeOfResource>software, multimedia</typeOfResource></mods>"
|
107
|
+
@smods_rec.from_str(m)
|
108
|
+
expect(@smods_rec.format).to eq ['Computer File']
|
63
109
|
end
|
64
110
|
end
|
65
111
|
|
66
112
|
it "Conference Proceedings: typeOfResource 'text', genre 'conference publication'", :jira => 'GRYPHONDOR-207' do
|
67
113
|
m = "<mods #{@ns_decl}><genre>conference publication</genre><typeOfResource>text</typeOfResource></mods>"
|
68
114
|
@smods_rec.from_str(m)
|
69
|
-
@smods_rec.format.
|
115
|
+
expect(@smods_rec.format).to eq ['Conference Proceedings']
|
116
|
+
m = "<mods #{@ns_decl}><genre>Conference publication</genre><typeOfResource>text</typeOfResource></mods>"
|
117
|
+
@smods_rec.from_str(m)
|
118
|
+
expect(@smods_rec.format).to eq ['Conference Proceedings']
|
119
|
+
m = "<mods #{@ns_decl}><genre>Conference Publication</genre><typeOfResource>text</typeOfResource></mods>"
|
120
|
+
@smods_rec.from_str(m)
|
121
|
+
expect(@smods_rec.format).to eq ['Conference Proceedings']
|
70
122
|
end
|
71
123
|
|
72
124
|
it "Journal/Periodical: typeOfResource 'text', genre 'article'" do
|
73
125
|
m = "<mods #{@ns_decl}><typeOfResource>text</typeOfResource><genre>article</genre></mods>"
|
74
126
|
@smods_rec.from_str(m)
|
75
|
-
@smods_rec.format.
|
127
|
+
expect(@smods_rec.format).to eq ['Journal/Periodical']
|
128
|
+
m = "<mods #{@ns_decl}><typeOfResource>text</typeOfResource><genre>Article</genre></mods>"
|
129
|
+
@smods_rec.from_str(m)
|
130
|
+
expect(@smods_rec.format).to eq ['Journal/Periodical']
|
76
131
|
end
|
77
132
|
|
78
133
|
it "Image: typeOfResource 'still image'" do
|
79
134
|
m = "<mods #{@ns_decl}><typeOfResource>still image</typeOfResource></mods>"
|
80
135
|
@smods_rec.from_str(m)
|
81
|
-
@smods_rec.format.
|
136
|
+
expect(@smods_rec.format).to eq ['Image']
|
82
137
|
end
|
83
138
|
|
84
139
|
it "Music - Recording: typeOfResource 'sound recording-musical'", :jira => 'GRYPHONDOR-207' do
|
85
140
|
m = "<mods #{@ns_decl}><typeOfResource>sound recording-musical</typeOfResource></mods>"
|
86
141
|
@smods_rec.from_str(m)
|
87
|
-
@smods_rec.format.
|
142
|
+
expect(@smods_rec.format).to eq ['Music - Recording']
|
88
143
|
end
|
89
144
|
|
90
145
|
it "Music - Score: typeOfResource 'notated music'" do
|
91
146
|
m = "<mods #{@ns_decl}><typeOfResource>notated music</typeOfResource></mods>"
|
92
147
|
@smods_rec.from_str(m)
|
93
|
-
@smods_rec.format.
|
148
|
+
expect(@smods_rec.format).to eq ['Music - Score']
|
94
149
|
end
|
95
150
|
|
96
151
|
it "Other: typeOfResource 'text', genre 'student project report'", :email => 'from Vitus, August 16, 2013' do
|
97
152
|
m = "<mods #{@ns_decl}><genre>student project report</genre><typeOfResource>text</typeOfResource></mods>"
|
98
153
|
@smods_rec.from_str(m)
|
99
|
-
@smods_rec.format.
|
154
|
+
expect(@smods_rec.format).to eq ['Other']
|
155
|
+
m = "<mods #{@ns_decl}><genre>Student project report</genre><typeOfResource>text</typeOfResource></mods>"
|
156
|
+
@smods_rec.from_str(m)
|
157
|
+
expect(@smods_rec.format).to eq ['Other']
|
158
|
+
m = "<mods #{@ns_decl}><genre>Student Project report</genre><typeOfResource>text</typeOfResource></mods>"
|
159
|
+
@smods_rec.from_str(m)
|
160
|
+
expect(@smods_rec.format).to eq ['Other']
|
161
|
+
m = "<mods #{@ns_decl}><genre>Student Project Report</genre><typeOfResource>text</typeOfResource></mods>"
|
162
|
+
@smods_rec.from_str(m)
|
163
|
+
expect(@smods_rec.format).to eq ['Other']
|
100
164
|
end
|
101
165
|
|
102
|
-
|
103
|
-
|
166
|
+
context "Sound Recording:" do
|
167
|
+
it "typeOfResource 'sound recording-nonmusical', genre 'sound", :jira => 'GRYPHONDOR-207' do
|
168
|
+
m = "<mods #{@ns_decl}><genre>sound</genre><typeOfResource>sound recording-nonmusical</typeOfResource></mods>"
|
169
|
+
@smods_rec.from_str(m)
|
170
|
+
expect(@smods_rec.format).to eq ['Sound Recording']
|
171
|
+
m = "<mods #{@ns_decl}><genre>Sound</genre><typeOfResource>sound recording-nonmusical</typeOfResource></mods>"
|
172
|
+
@smods_rec.from_str(m)
|
173
|
+
expect(@smods_rec.format).to eq ['Sound Recording']
|
174
|
+
end
|
175
|
+
it "typeOfResource 'sound recording', genre 'sound", :jira => 'INDEX-94' do
|
176
|
+
m = "<mods #{@ns_decl}><genre>sound</genre><typeOfResource>sound recording</typeOfResource></mods>"
|
177
|
+
@smods_rec.from_str(m)
|
178
|
+
expect(@smods_rec.format).to eq ['Sound Recording']
|
179
|
+
m = "<mods #{@ns_decl}><genre>Sound</genre><typeOfResource>sound recording</typeOfResource></mods>"
|
180
|
+
@smods_rec.from_str(m)
|
181
|
+
expect(@smods_rec.format).to eq ['Sound Recording']
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
it "Thesis: typeOfResource 'text', genre 'thesis'" do
|
186
|
+
m = "<mods #{@ns_decl}><typeOfResource>text</typeOfResource><genre>thesis</genre></mods>"
|
187
|
+
@smods_rec.from_str(m)
|
188
|
+
expect(@smods_rec.format).to eq ['Thesis']
|
189
|
+
m = "<mods #{@ns_decl}><typeOfResource>text</typeOfResource><genre>Thesis</genre></mods>"
|
104
190
|
@smods_rec.from_str(m)
|
105
|
-
@smods_rec.format.
|
191
|
+
expect(@smods_rec.format).to eq ['Thesis']
|
106
192
|
end
|
107
193
|
|
108
194
|
context "Video: typeOfResource 'moving image'" do
|
109
195
|
it "no genre" do
|
110
196
|
m = "<mods #{@ns_decl}><typeOfResource>moving image</typeOfResource></mods>"
|
111
197
|
@smods_rec.from_str(m)
|
112
|
-
@smods_rec.format.
|
198
|
+
expect(@smods_rec.format).to eq ['Video']
|
113
199
|
end
|
114
200
|
it "genre 'motion picture'", :jira => 'GRYPHONDOR-207' do
|
115
201
|
m = "<mods #{@ns_decl}><genre>motion picture</genre><typeOfResource>moving image</typeOfResource></mods>"
|
116
202
|
@smods_rec.from_str(m)
|
117
|
-
@smods_rec.format.
|
203
|
+
expect(@smods_rec.format).to eq ['Video']
|
204
|
+
m = "<mods #{@ns_decl}><genre>Motion Picture</genre><typeOfResource>moving image</typeOfResource></mods>"
|
205
|
+
@smods_rec.from_str(m)
|
206
|
+
expect(@smods_rec.format).to eq ['Video']
|
207
|
+
m = "<mods #{@ns_decl}><genre>Motion Picture</genre><typeOfResource>moving image</typeOfResource></mods>"
|
208
|
+
@smods_rec.from_str(m)
|
209
|
+
expect(@smods_rec.format).to eq ['Video']
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
context "multiple format values", :jira => 'INDEX-32' do
|
214
|
+
it "multiple typeOfResource elements" do
|
215
|
+
m = "<mods #{@ns_decl}><typeOfResource>moving image</typeOfResource><typeOfResource>sound recording</typeOfResource></mods>"
|
216
|
+
@smods_rec.from_str(m)
|
217
|
+
expect(@smods_rec.format).to eq ['Video', 'Sound Recording']
|
218
|
+
end
|
219
|
+
it "multiple genre elements, single typeOfResource" do
|
220
|
+
m = "<mods #{@ns_decl}><typeOfResource>text</typeOfResource><genre>librettos</genre><genre>article</genre></mods>"
|
221
|
+
@smods_rec.from_str(m)
|
222
|
+
expect(@smods_rec.format).to eq ['Book', 'Journal/Periodical']
|
223
|
+
end
|
224
|
+
it "mish mash" do
|
225
|
+
m = "<mods #{@ns_decl}><typeOfResource>text</typeOfResource><typeOfResource>still image</typeOfResource><genre>librettos</genre><genre>article</genre></mods>"
|
226
|
+
@smods_rec.from_str(m)
|
227
|
+
expect(@smods_rec.format).to eq ['Book', 'Journal/Periodical', 'Image']
|
228
|
+
end
|
229
|
+
it "doesn't give duplicate values" do
|
230
|
+
m = "<mods #{@ns_decl}><typeOfResource>text</typeOfResource><genre>librettos</genre><genre>issue brief</genre></mods>"
|
231
|
+
@smods_rec.from_str(m)
|
232
|
+
expect(@smods_rec.format).to eq ['Book']
|
118
233
|
end
|
119
234
|
end
|
120
235
|
|
@@ -123,7 +238,7 @@ describe "Format field from Searchworks mixin for Stanford::Mods::Record" do
|
|
123
238
|
<dateCreated>1904</dateCreated>
|
124
239
|
</originInfo></mods>"
|
125
240
|
@smods_rec.from_str(m)
|
126
|
-
@smods_rec.format.
|
241
|
+
expect(@smods_rec.format).to eq []
|
127
242
|
end
|
128
243
|
|
129
244
|
it "empty Array if weird typeOfResource value" do
|
@@ -131,6 +246,6 @@ describe "Format field from Searchworks mixin for Stanford::Mods::Record" do
|
|
131
246
|
<typeOfResource>foo</typeOfResource>
|
132
247
|
</originInfo></mods>"
|
133
248
|
@smods_rec.from_str(m)
|
134
|
-
@smods_rec.format.
|
249
|
+
expect(@smods_rec.format).to eq []
|
135
250
|
end
|
136
251
|
end
|
data/spec/searchworks_spec.rb
CHANGED
@@ -109,92 +109,5 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
|
|
109
109
|
end
|
110
110
|
end
|
111
111
|
end # context sw author methods
|
112
|
-
|
113
|
-
context "sw title methods" do
|
114
|
-
before(:all) do
|
115
|
-
m = "<mods #{@ns_decl}><titleInfo><title>Jerk</title><subTitle>A Tale of Tourettes</subTitle><nonSort>The</nonSort></titleInfo></mods>"
|
116
|
-
@smods_rec.from_str m
|
117
|
-
end
|
118
|
-
|
119
|
-
context "short title (for title_245a_search, title_245a_display) " do
|
120
|
-
it "should call :short_titles" do
|
121
|
-
@smods_rec.should_receive(:short_titles) # in Mods gem
|
122
|
-
@smods_rec.sw_short_title
|
123
|
-
end
|
124
|
-
it "should be a String" do
|
125
|
-
@smods_rec.sw_short_title.should == 'The Jerk'
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
context "full title (for title_245_search, title_display, title_full_display)" do
|
130
|
-
it "should call :full_titles" do
|
131
|
-
@smods_rec.should_receive(:full_titles) # in Mods gem
|
132
|
-
@smods_rec.sw_full_title
|
133
|
-
end
|
134
|
-
it "should be a String" do
|
135
|
-
@smods_rec.sw_full_title.should == 'The Jerk A Tale of Tourettes'
|
136
|
-
end
|
137
|
-
it 'should escape regex characters in the sw_short_title' do
|
138
|
-
m = "<mods #{@ns_decl}><titleInfo>
|
139
|
-
<title>Pius V. Saint, [Michaele Gisleri),</title>
|
140
|
-
</titleInfo></mods>"
|
141
|
-
@smods_rec.from_str m
|
142
|
-
@smods_rec.sw_full_title.should == 'Pius V. Saint, [Michaele Gisleri)'
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
context "additional titles (for title_variant_search)" do
|
147
|
-
before(:all) do
|
148
|
-
m = "<mods #{@ns_decl}>
|
149
|
-
<titleInfo type='alternative'><title>Alternative</title></titleInfo>
|
150
|
-
<titleInfo><title>Jerk</title><nonSort>The</nonSort></titleInfo>
|
151
|
-
<titleInfo><title>Joke</title></titleInfo>
|
152
|
-
</mods>"
|
153
|
-
@smods_rec.from_str(m)
|
154
|
-
@addl_titles = @smods_rec.sw_addl_titles
|
155
|
-
end
|
156
|
-
it "should not include the main title" do
|
157
|
-
@addl_titles.size.should == 2
|
158
|
-
@addl_titles.should_not include(@smods_rec.sw_full_title)
|
159
|
-
end
|
160
|
-
it "should include any extra main titles" do
|
161
|
-
@addl_titles.should include('Joke')
|
162
|
-
end
|
163
|
-
it "should include all alternative titles" do
|
164
|
-
@addl_titles.should include('Alternative')
|
165
|
-
end
|
166
|
-
it 'shold escape the short title in the regexp' do
|
167
|
-
m = "<mods #{@ns_decl}>
|
168
|
-
<titleInfo type='alternative'><title>Alternative</title></titleInfo>
|
169
|
-
<titleInfo><title>[Jerk)</title><nonSort>The</nonSort></titleInfo>
|
170
|
-
<titleInfo><title>Joke]</title></titleInfo>
|
171
|
-
</mods>"
|
172
|
-
@smods_rec.from_str(m)
|
173
|
-
@addl_titles = @smods_rec.sw_addl_titles
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
context "sort title" do
|
178
|
-
it "should be a String" do
|
179
|
-
@smods_rec.sw_sort_title.should be_an_instance_of(String)
|
180
|
-
end
|
181
|
-
it "should use the sort title, as retrieved by :sort_title" do
|
182
|
-
@smods_rec.should_receive(:sort_title) # in Mods gem
|
183
|
-
@smods_rec.sw_sort_title
|
184
|
-
end
|
185
|
-
it "should not begin or end with whitespace" do
|
186
|
-
m = "<mods #{@ns_decl}>
|
187
|
-
<titleInfo><title> Jerk </title></titleInfo>
|
188
|
-
</mods>"
|
189
|
-
@smods_rec.from_str(m)
|
190
|
-
@smods_rec.sw_sort_title.should == @smods_rec.sw_sort_title.strip
|
191
|
-
end
|
192
|
-
it "should not have any punctuation marks" do
|
193
|
-
r = Stanford::Mods::Record.new
|
194
|
-
r.from_str "<mods #{@ns_decl}><titleInfo><title>J,e.r;;;k</title></titleInfo></mods>"
|
195
|
-
r.sw_sort_title.should =~ /^Jerk$/
|
196
|
-
end
|
197
|
-
end
|
198
|
-
end # content sw title methods
|
199
112
|
|
200
113
|
end
|
@@ -0,0 +1,578 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe "title fields from Searchworks mixin for Stanford::Mods::Record" do
|
5
|
+
before(:all) do
|
6
|
+
@smods_rec = Stanford::Mods::Record.new
|
7
|
+
@ns_decl = "xmlns='#{Mods::MODS_NS}'"
|
8
|
+
m = "<mods #{@ns_decl}><titleInfo><title>Jerk</title><subTitle>A Tale of Tourettes</subTitle><nonSort>The</nonSort></titleInfo></mods>"
|
9
|
+
@smods_rec.from_str m
|
10
|
+
end
|
11
|
+
|
12
|
+
context "short title (for title_245a_search, title_245a_display) " do
|
13
|
+
it "should call :short_titles" do
|
14
|
+
@smods_rec.should_receive(:short_titles) # in Mods gem
|
15
|
+
@smods_rec.sw_short_title
|
16
|
+
end
|
17
|
+
it "should be a String" do
|
18
|
+
expect(@smods_rec.sw_short_title).to eq 'The Jerk'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "full title (for title_245_search, title_full_display)" do
|
23
|
+
it "should be a String" do
|
24
|
+
expect(@smods_rec.sw_full_title).to eq 'The Jerk : A Tale of Tourettes.'
|
25
|
+
end
|
26
|
+
it 'should cope with regex chars' do
|
27
|
+
m = "<mods #{@ns_decl}><titleInfo>
|
28
|
+
<title>Pius V. Saint, [Michaele Gisleri),</title>
|
29
|
+
</titleInfo></mods>"
|
30
|
+
@smods_rec.from_str m
|
31
|
+
expect(@smods_rec.sw_full_title).to eq 'Pius V. Saint, [Michaele Gisleri),'
|
32
|
+
end
|
33
|
+
|
34
|
+
context "punctuation" do
|
35
|
+
context "no subtitle" do
|
36
|
+
it "end title with a period" do
|
37
|
+
m = "<mods #{@ns_decl}>
|
38
|
+
<titleInfo>
|
39
|
+
<nonSort>The</nonSort>
|
40
|
+
<title>Olympics</title>
|
41
|
+
</titleInfo></mods>"
|
42
|
+
@smods_rec.from_str(m)
|
43
|
+
expect(@smods_rec.sw_full_title).to eq 'The Olympics.'
|
44
|
+
end
|
45
|
+
it "title already ends in period" do
|
46
|
+
m = "<mods #{@ns_decl}>
|
47
|
+
<titleInfo>
|
48
|
+
<nonSort>The</nonSort>
|
49
|
+
<title>Olympics.</title>
|
50
|
+
</titleInfo></mods>"
|
51
|
+
@smods_rec.from_str(m)
|
52
|
+
expect(@smods_rec.sw_full_title).to eq 'The Olympics.'
|
53
|
+
end
|
54
|
+
it "title already ends in other punctuation" do
|
55
|
+
m = "<mods #{@ns_decl}>
|
56
|
+
<titleInfo>
|
57
|
+
<nonSort>The</nonSort>
|
58
|
+
<title>Olympics!</title>
|
59
|
+
</titleInfo></mods>"
|
60
|
+
@smods_rec.from_str(m)
|
61
|
+
expect(@smods_rec.sw_full_title).to eq 'The Olympics!'
|
62
|
+
end
|
63
|
+
end # no subtitle
|
64
|
+
context "subtitle" do
|
65
|
+
it "end title with a colon" do
|
66
|
+
m = "<mods #{@ns_decl}>
|
67
|
+
<titleInfo>
|
68
|
+
<nonSort>The</nonSort>
|
69
|
+
<title>Olympics</title>
|
70
|
+
<subTitle>a history</subTitle>
|
71
|
+
</titleInfo></mods>"
|
72
|
+
@smods_rec.from_str(m)
|
73
|
+
expect(@smods_rec.sw_full_title).to eq 'The Olympics : a history.'
|
74
|
+
end
|
75
|
+
it "title already ends with colon" do
|
76
|
+
m = "<mods #{@ns_decl}>
|
77
|
+
<titleInfo>
|
78
|
+
<nonSort>The</nonSort>
|
79
|
+
<title>Olympics:</title>
|
80
|
+
<subTitle>a history</subTitle>
|
81
|
+
</titleInfo></mods>"
|
82
|
+
@smods_rec.from_str(m)
|
83
|
+
expect(@smods_rec.sw_full_title).to eq 'The Olympics : a history.'
|
84
|
+
end #
|
85
|
+
# "end subtitle with period" - see above
|
86
|
+
it "subtitle already ends with period" do
|
87
|
+
m = "<mods #{@ns_decl}>
|
88
|
+
<titleInfo>
|
89
|
+
<nonSort>The</nonSort>
|
90
|
+
<title>Olympics</title>
|
91
|
+
<subTitle>a history.</subTitle>
|
92
|
+
</titleInfo></mods>"
|
93
|
+
@smods_rec.from_str(m)
|
94
|
+
expect(@smods_rec.sw_full_title).to eq 'The Olympics : a history.'
|
95
|
+
end
|
96
|
+
it "subtitle already ends with other punctuation" do
|
97
|
+
m = "<mods #{@ns_decl}>
|
98
|
+
<titleInfo>
|
99
|
+
<nonSort>The</nonSort>
|
100
|
+
<title>Olympics</title>
|
101
|
+
<subTitle>a history?</subTitle>
|
102
|
+
</titleInfo></mods>"
|
103
|
+
@smods_rec.from_str(m)
|
104
|
+
expect(@smods_rec.sw_full_title).to eq 'The Olympics : a history?'
|
105
|
+
end
|
106
|
+
end # subtitle
|
107
|
+
context "partName" do
|
108
|
+
context "no partNumber" do
|
109
|
+
it "end partName with period" do
|
110
|
+
m = "<mods #{@ns_decl}>
|
111
|
+
<titleInfo>
|
112
|
+
<nonSort>The</nonSort>
|
113
|
+
<title>Olympics</title>
|
114
|
+
<subTitle>a history</subTitle>
|
115
|
+
<partName>Ancient</partName>
|
116
|
+
</titleInfo></mods>"
|
117
|
+
@smods_rec.from_str(m)
|
118
|
+
expect(@smods_rec.sw_full_title).to eq 'The Olympics : a history. Ancient.'
|
119
|
+
m = "<mods #{@ns_decl}>
|
120
|
+
<titleInfo>
|
121
|
+
<title>cfb</title>
|
122
|
+
<partName>Appendix</partName>
|
123
|
+
</titleInfo></mods>"
|
124
|
+
@smods_rec.from_str(m)
|
125
|
+
expect(@smods_rec.sw_full_title).to eq 'cfb. Appendix.'
|
126
|
+
end
|
127
|
+
it "partName already ends with period" do
|
128
|
+
m = "<mods #{@ns_decl}>
|
129
|
+
<titleInfo>
|
130
|
+
<nonSort>The</nonSort>
|
131
|
+
<title>Olympics</title>
|
132
|
+
<subTitle>a history</subTitle>
|
133
|
+
<partName>Ancient.</partName>
|
134
|
+
</titleInfo></mods>"
|
135
|
+
@smods_rec.from_str(m)
|
136
|
+
expect(@smods_rec.sw_full_title).to eq 'The Olympics : a history. Ancient.'
|
137
|
+
m = "<mods #{@ns_decl}>
|
138
|
+
<titleInfo>
|
139
|
+
<title>cfb</title>
|
140
|
+
<partName>Appendix.</partName>
|
141
|
+
</titleInfo></mods>"
|
142
|
+
@smods_rec.from_str(m)
|
143
|
+
expect(@smods_rec.sw_full_title).to eq 'cfb. Appendix.'
|
144
|
+
end
|
145
|
+
end # no partNumber
|
146
|
+
context "partNumber" do
|
147
|
+
it "end partNumber with comma" do
|
148
|
+
m = "<mods #{@ns_decl}>
|
149
|
+
<titleInfo>
|
150
|
+
<nonSort>The</nonSort>
|
151
|
+
<title>Olympics</title>
|
152
|
+
<subTitle>a history</subTitle>
|
153
|
+
<partNumber>Part 1</partNumber>
|
154
|
+
<partName>Ancient</partName>
|
155
|
+
</titleInfo></mods>"
|
156
|
+
@smods_rec.from_str(m)
|
157
|
+
expect(@smods_rec.sw_full_title).to eq 'The Olympics : a history. Part 1, Ancient.'
|
158
|
+
m = "<mods #{@ns_decl}>
|
159
|
+
<titleInfo>
|
160
|
+
<title>cfb</title>
|
161
|
+
<partNumber>1894</partNumber>
|
162
|
+
<partName>Appendix</partName>
|
163
|
+
</titleInfo></mods>"
|
164
|
+
@smods_rec.from_str(m)
|
165
|
+
expect(@smods_rec.sw_full_title).to eq 'cfb. 1894, Appendix.'
|
166
|
+
end
|
167
|
+
it "partNumber already ends with comma" do
|
168
|
+
m = "<mods #{@ns_decl}>
|
169
|
+
<titleInfo>
|
170
|
+
<nonSort>The</nonSort>
|
171
|
+
<title>Olympics</title>
|
172
|
+
<subTitle>a history</subTitle>
|
173
|
+
<partNumber>Part 1,</partNumber>
|
174
|
+
<partName>Ancient</partName>
|
175
|
+
</titleInfo></mods>"
|
176
|
+
@smods_rec.from_str(m)
|
177
|
+
expect(@smods_rec.sw_full_title).to eq 'The Olympics : a history. Part 1, Ancient.'
|
178
|
+
m = "<mods #{@ns_decl}>
|
179
|
+
<titleInfo>
|
180
|
+
<title>cfb</title>
|
181
|
+
<partNumber>1894,</partNumber>
|
182
|
+
<partName>Appendix</partName>
|
183
|
+
</titleInfo></mods>"
|
184
|
+
@smods_rec.from_str(m)
|
185
|
+
expect(@smods_rec.sw_full_title).to eq 'cfb. 1894, Appendix.'
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end # partName
|
189
|
+
context "no partName, but partNumber" do
|
190
|
+
it "end partNumber with period" do
|
191
|
+
m = "<mods #{@ns_decl}>
|
192
|
+
<titleInfo>
|
193
|
+
<nonSort>The</nonSort>
|
194
|
+
<title>Olympics</title>
|
195
|
+
<subTitle>a history</subTitle>
|
196
|
+
<partNumber>Part 1</partNumber>
|
197
|
+
</titleInfo></mods>"
|
198
|
+
@smods_rec.from_str(m)
|
199
|
+
expect(@smods_rec.sw_full_title).to eq 'The Olympics : a history. Part 1.'
|
200
|
+
m = "<mods #{@ns_decl}>
|
201
|
+
<titleInfo>
|
202
|
+
<title>cfb</title>
|
203
|
+
<partNumber>1894</partNumber>
|
204
|
+
</titleInfo></mods>"
|
205
|
+
@smods_rec.from_str(m)
|
206
|
+
expect(@smods_rec.sw_full_title).to eq 'cfb. 1894.'
|
207
|
+
end
|
208
|
+
it "parNumber already ends in period" do
|
209
|
+
m = "<mods #{@ns_decl}>
|
210
|
+
<titleInfo>
|
211
|
+
<nonSort>The</nonSort>
|
212
|
+
<title>Olympics</title>
|
213
|
+
<subTitle>a history</subTitle>
|
214
|
+
<partNumber>Part 1.</partNumber>
|
215
|
+
</titleInfo></mods>"
|
216
|
+
@smods_rec.from_str(m)
|
217
|
+
expect(@smods_rec.sw_full_title).to eq 'The Olympics : a history. Part 1.'
|
218
|
+
m = "<mods #{@ns_decl}>
|
219
|
+
<titleInfo>
|
220
|
+
<title>cfb</title>
|
221
|
+
<partNumber>1894.</partNumber>
|
222
|
+
</titleInfo></mods>"
|
223
|
+
@smods_rec.from_str(m)
|
224
|
+
expect(@smods_rec.sw_full_title).to eq 'cfb. 1894.'
|
225
|
+
end
|
226
|
+
it "partNumber already ends with other punctuation" do
|
227
|
+
m = "<mods #{@ns_decl}>
|
228
|
+
<titleInfo>
|
229
|
+
<nonSort>The</nonSort>
|
230
|
+
<title>Olympics</title>
|
231
|
+
<subTitle>a history</subTitle>
|
232
|
+
<partNumber>Part 1!</partNumber>
|
233
|
+
</titleInfo></mods>"
|
234
|
+
@smods_rec.from_str(m)
|
235
|
+
expect(@smods_rec.sw_full_title).to eq 'The Olympics : a history. Part 1!'
|
236
|
+
m = "<mods #{@ns_decl}>
|
237
|
+
<titleInfo>
|
238
|
+
<title>cfb</title>
|
239
|
+
<partNumber>1894?</partNumber>
|
240
|
+
</titleInfo></mods>"
|
241
|
+
@smods_rec.from_str(m)
|
242
|
+
expect(@smods_rec.sw_full_title).to eq 'cfb. 1894?'
|
243
|
+
end
|
244
|
+
end # no partName but partNumber
|
245
|
+
end # punctuation
|
246
|
+
end # sw_full_title
|
247
|
+
|
248
|
+
context "sw_title_display removes end punctuation of sw_full_title_display" do
|
249
|
+
context "no subtitle" do
|
250
|
+
it "end title with a period" do
|
251
|
+
m = "<mods #{@ns_decl}>
|
252
|
+
<titleInfo>
|
253
|
+
<nonSort>The</nonSort>
|
254
|
+
<title>Olympics</title>
|
255
|
+
</titleInfo></mods>"
|
256
|
+
@smods_rec.from_str(m)
|
257
|
+
expect(@smods_rec.sw_title_display).to eq 'The Olympics'
|
258
|
+
end
|
259
|
+
it "title already ends in period" do
|
260
|
+
m = "<mods #{@ns_decl}>
|
261
|
+
<titleInfo>
|
262
|
+
<nonSort>The</nonSort>
|
263
|
+
<title>Olympics.</title>
|
264
|
+
</titleInfo></mods>"
|
265
|
+
@smods_rec.from_str(m)
|
266
|
+
expect(@smods_rec.sw_title_display).to eq 'The Olympics'
|
267
|
+
end
|
268
|
+
it "title already ends in other punctuation" do
|
269
|
+
m = "<mods #{@ns_decl}>
|
270
|
+
<titleInfo>
|
271
|
+
<nonSort>The</nonSort>
|
272
|
+
<title>Olympics!</title>
|
273
|
+
</titleInfo></mods>"
|
274
|
+
@smods_rec.from_str(m)
|
275
|
+
expect(@smods_rec.sw_title_display).to eq 'The Olympics'
|
276
|
+
end
|
277
|
+
end # no subtitle
|
278
|
+
context "subtitle" do
|
279
|
+
it "end title with a colon" do
|
280
|
+
m = "<mods #{@ns_decl}>
|
281
|
+
<titleInfo>
|
282
|
+
<nonSort>The</nonSort>
|
283
|
+
<title>Olympics</title>
|
284
|
+
<subTitle>a history</subTitle>
|
285
|
+
</titleInfo></mods>"
|
286
|
+
@smods_rec.from_str(m)
|
287
|
+
expect(@smods_rec.sw_title_display).to eq 'The Olympics : a history'
|
288
|
+
end
|
289
|
+
it "title already ends with colon" do
|
290
|
+
m = "<mods #{@ns_decl}>
|
291
|
+
<titleInfo>
|
292
|
+
<nonSort>The</nonSort>
|
293
|
+
<title>Olympics:</title>
|
294
|
+
<subTitle>a history</subTitle>
|
295
|
+
</titleInfo></mods>"
|
296
|
+
@smods_rec.from_str(m)
|
297
|
+
expect(@smods_rec.sw_title_display).to eq 'The Olympics : a history'
|
298
|
+
end #
|
299
|
+
# "end subtitle with period" - see above
|
300
|
+
it "subtitle already ends with period" do
|
301
|
+
m = "<mods #{@ns_decl}>
|
302
|
+
<titleInfo>
|
303
|
+
<nonSort>The</nonSort>
|
304
|
+
<title>Olympics</title>
|
305
|
+
<subTitle>a history.</subTitle>
|
306
|
+
</titleInfo></mods>"
|
307
|
+
@smods_rec.from_str(m)
|
308
|
+
expect(@smods_rec.sw_title_display).to eq 'The Olympics : a history'
|
309
|
+
end
|
310
|
+
it "subtitle already ends with other punctuation" do
|
311
|
+
m = "<mods #{@ns_decl}>
|
312
|
+
<titleInfo>
|
313
|
+
<nonSort>The</nonSort>
|
314
|
+
<title>Olympics</title>
|
315
|
+
<subTitle>a history?</subTitle>
|
316
|
+
</titleInfo></mods>"
|
317
|
+
@smods_rec.from_str(m)
|
318
|
+
expect(@smods_rec.sw_title_display).to eq 'The Olympics : a history'
|
319
|
+
end
|
320
|
+
end # subtitle
|
321
|
+
context "partName" do
|
322
|
+
context "no partNumber" do
|
323
|
+
it "end partName with period" do
|
324
|
+
m = "<mods #{@ns_decl}>
|
325
|
+
<titleInfo>
|
326
|
+
<nonSort>The</nonSort>
|
327
|
+
<title>Olympics</title>
|
328
|
+
<subTitle>a history</subTitle>
|
329
|
+
<partName>Ancient</partName>
|
330
|
+
</titleInfo></mods>"
|
331
|
+
@smods_rec.from_str(m)
|
332
|
+
expect(@smods_rec.sw_title_display).to eq 'The Olympics : a history. Ancient'
|
333
|
+
m = "<mods #{@ns_decl}>
|
334
|
+
<titleInfo>
|
335
|
+
<title>cfb</title>
|
336
|
+
<partName>Appendix</partName>
|
337
|
+
</titleInfo></mods>"
|
338
|
+
@smods_rec.from_str(m)
|
339
|
+
expect(@smods_rec.sw_title_display).to eq 'cfb. Appendix'
|
340
|
+
end
|
341
|
+
it "partName already ends with period" do
|
342
|
+
m = "<mods #{@ns_decl}>
|
343
|
+
<titleInfo>
|
344
|
+
<nonSort>The</nonSort>
|
345
|
+
<title>Olympics</title>
|
346
|
+
<subTitle>a history</subTitle>
|
347
|
+
<partName>Ancient.</partName>
|
348
|
+
</titleInfo></mods>"
|
349
|
+
@smods_rec.from_str(m)
|
350
|
+
expect(@smods_rec.sw_title_display).to eq 'The Olympics : a history. Ancient'
|
351
|
+
m = "<mods #{@ns_decl}>
|
352
|
+
<titleInfo>
|
353
|
+
<title>cfb</title>
|
354
|
+
<partName>Appendix.</partName>
|
355
|
+
</titleInfo></mods>"
|
356
|
+
@smods_rec.from_str(m)
|
357
|
+
expect(@smods_rec.sw_title_display).to eq 'cfb. Appendix'
|
358
|
+
end
|
359
|
+
end # no partNumber
|
360
|
+
context "partNumber" do
|
361
|
+
it "end partNumber with comma" do
|
362
|
+
m = "<mods #{@ns_decl}>
|
363
|
+
<titleInfo>
|
364
|
+
<nonSort>The</nonSort>
|
365
|
+
<title>Olympics</title>
|
366
|
+
<subTitle>a history</subTitle>
|
367
|
+
<partNumber>Part 1</partNumber>
|
368
|
+
<partName>Ancient</partName>
|
369
|
+
</titleInfo></mods>"
|
370
|
+
@smods_rec.from_str(m)
|
371
|
+
expect(@smods_rec.sw_title_display).to eq 'The Olympics : a history. Part 1, Ancient'
|
372
|
+
m = "<mods #{@ns_decl}>
|
373
|
+
<titleInfo>
|
374
|
+
<title>cfb</title>
|
375
|
+
<partNumber>1894</partNumber>
|
376
|
+
<partName>Appendix</partName>
|
377
|
+
</titleInfo></mods>"
|
378
|
+
@smods_rec.from_str(m)
|
379
|
+
expect(@smods_rec.sw_title_display).to eq 'cfb. 1894, Appendix'
|
380
|
+
end
|
381
|
+
it "partNumber already ends with comma" do
|
382
|
+
m = "<mods #{@ns_decl}>
|
383
|
+
<titleInfo>
|
384
|
+
<nonSort>The</nonSort>
|
385
|
+
<title>Olympics</title>
|
386
|
+
<subTitle>a history</subTitle>
|
387
|
+
<partNumber>Part 1,</partNumber>
|
388
|
+
<partName>Ancient</partName>
|
389
|
+
</titleInfo></mods>"
|
390
|
+
@smods_rec.from_str(m)
|
391
|
+
expect(@smods_rec.sw_title_display).to eq 'The Olympics : a history. Part 1, Ancient'
|
392
|
+
m = "<mods #{@ns_decl}>
|
393
|
+
<titleInfo>
|
394
|
+
<title>cfb</title>
|
395
|
+
<partNumber>1894,</partNumber>
|
396
|
+
<partName>Appendix</partName>
|
397
|
+
</titleInfo></mods>"
|
398
|
+
@smods_rec.from_str(m)
|
399
|
+
expect(@smods_rec.sw_title_display).to eq 'cfb. 1894, Appendix'
|
400
|
+
end
|
401
|
+
end
|
402
|
+
end # partName
|
403
|
+
context "no partName, but partNumber" do
|
404
|
+
it "end partNumber with period" do
|
405
|
+
m = "<mods #{@ns_decl}>
|
406
|
+
<titleInfo>
|
407
|
+
<nonSort>The</nonSort>
|
408
|
+
<title>Olympics</title>
|
409
|
+
<subTitle>a history</subTitle>
|
410
|
+
<partNumber>Part 1</partNumber>
|
411
|
+
</titleInfo></mods>"
|
412
|
+
@smods_rec.from_str(m)
|
413
|
+
expect(@smods_rec.sw_title_display).to eq 'The Olympics : a history. Part 1'
|
414
|
+
m = "<mods #{@ns_decl}>
|
415
|
+
<titleInfo>
|
416
|
+
<title>cfb</title>
|
417
|
+
<partNumber>1894</partNumber>
|
418
|
+
</titleInfo></mods>"
|
419
|
+
@smods_rec.from_str(m)
|
420
|
+
expect(@smods_rec.sw_title_display).to eq 'cfb. 1894'
|
421
|
+
end
|
422
|
+
it "parNumber already ends in period" do
|
423
|
+
m = "<mods #{@ns_decl}>
|
424
|
+
<titleInfo>
|
425
|
+
<nonSort>The</nonSort>
|
426
|
+
<title>Olympics</title>
|
427
|
+
<subTitle>a history</subTitle>
|
428
|
+
<partNumber>Part 1.</partNumber>
|
429
|
+
</titleInfo></mods>"
|
430
|
+
@smods_rec.from_str(m)
|
431
|
+
expect(@smods_rec.sw_title_display).to eq 'The Olympics : a history. Part 1'
|
432
|
+
m = "<mods #{@ns_decl}>
|
433
|
+
<titleInfo>
|
434
|
+
<title>cfb</title>
|
435
|
+
<partNumber>1894.</partNumber>
|
436
|
+
</titleInfo></mods>"
|
437
|
+
@smods_rec.from_str(m)
|
438
|
+
expect(@smods_rec.sw_title_display).to eq 'cfb. 1894'
|
439
|
+
end
|
440
|
+
it "partNumber already ends with other punctuation" do
|
441
|
+
m = "<mods #{@ns_decl}>
|
442
|
+
<titleInfo>
|
443
|
+
<nonSort>The</nonSort>
|
444
|
+
<title>Olympics</title>
|
445
|
+
<subTitle>a history</subTitle>
|
446
|
+
<partNumber>Part 1!</partNumber>
|
447
|
+
</titleInfo></mods>"
|
448
|
+
@smods_rec.from_str(m)
|
449
|
+
expect(@smods_rec.sw_title_display).to eq 'The Olympics : a history. Part 1'
|
450
|
+
m = "<mods #{@ns_decl}>
|
451
|
+
<titleInfo>
|
452
|
+
<title>cfb</title>
|
453
|
+
<partNumber>1894?</partNumber>
|
454
|
+
</titleInfo></mods>"
|
455
|
+
@smods_rec.from_str(m)
|
456
|
+
expect(@smods_rec.sw_title_display).to eq 'cfb. 1894'
|
457
|
+
end
|
458
|
+
end # no partName but partNumber
|
459
|
+
end # sw_title_display
|
460
|
+
|
461
|
+
context "additional titles (for title_variant_search)" do
|
462
|
+
before(:all) do
|
463
|
+
m = "<mods #{@ns_decl}>
|
464
|
+
<titleInfo type='alternative'><title>Alternative</title></titleInfo>
|
465
|
+
<titleInfo><title>Jerk</title><nonSort>The</nonSort></titleInfo>
|
466
|
+
<titleInfo><title>Joke</title></titleInfo>
|
467
|
+
</mods>"
|
468
|
+
@smods_rec.from_str(m)
|
469
|
+
@addl_titles = @smods_rec.sw_addl_titles
|
470
|
+
end
|
471
|
+
it "should not include the main title" do
|
472
|
+
expect(@addl_titles.size).to eq 2
|
473
|
+
expect(@addl_titles).not_to include(@smods_rec.sw_full_title)
|
474
|
+
end
|
475
|
+
it "should include any extra main titles" do
|
476
|
+
expect(@addl_titles).to include('Joke')
|
477
|
+
end
|
478
|
+
it "should include all alternative titles" do
|
479
|
+
expect(@addl_titles).to include('Alternative')
|
480
|
+
end
|
481
|
+
it 'should cope with regexp chars in the short title when determining addl titles' do
|
482
|
+
m = "<mods #{@ns_decl}>
|
483
|
+
<titleInfo type='alternative'><title>Alternative</title></titleInfo>
|
484
|
+
<titleInfo><title>[Jerk)</title><nonSort>The</nonSort></titleInfo>
|
485
|
+
<titleInfo><title>Joke]</title></titleInfo>
|
486
|
+
</mods>"
|
487
|
+
@smods_rec.from_str(m)
|
488
|
+
expect(@smods_rec.sw_addl_titles).to eq ['Alternative', 'Joke]']
|
489
|
+
end
|
490
|
+
end
|
491
|
+
|
492
|
+
context "sort title" do
|
493
|
+
it "should be a String" do
|
494
|
+
expect(@smods_rec.sw_sort_title).to be_an_instance_of(String)
|
495
|
+
end
|
496
|
+
it "should use the sw_full_title as a starting point" do
|
497
|
+
@smods_rec.should_receive(:sw_full_title)
|
498
|
+
@smods_rec.sw_sort_title
|
499
|
+
end
|
500
|
+
it "should not begin or end with whitespace" do
|
501
|
+
m = "<mods #{@ns_decl}>
|
502
|
+
<titleInfo><title> Jerk </title></titleInfo>
|
503
|
+
</mods>"
|
504
|
+
@smods_rec.from_str(m)
|
505
|
+
expect(@smods_rec.sw_sort_title).to eq @smods_rec.sw_sort_title.strip
|
506
|
+
end
|
507
|
+
it "should not have any punctuation marks" do
|
508
|
+
r = Stanford::Mods::Record.new
|
509
|
+
r.from_str "<mods #{@ns_decl}><titleInfo><title>J,e.r;;;k</title></titleInfo></mods>"
|
510
|
+
expect(r.sw_sort_title).to match /^Jerk$/
|
511
|
+
end
|
512
|
+
end
|
513
|
+
|
514
|
+
context "part number should be in full title and sort title", :jira => ['INDEX-31', 'GRYPHONDOR-372'] do
|
515
|
+
before(:all) do
|
516
|
+
@mccarthy_smods_rec = Stanford::Mods::Record.new
|
517
|
+
mccarthy = "<mods #{@ns_decl}>
|
518
|
+
<titleInfo>
|
519
|
+
<title>McCarthy, John</title>
|
520
|
+
<partNumber>Part 2</partNumber>
|
521
|
+
</titleInfo></mods>"
|
522
|
+
@mccarthy_smods_rec.from_str(mccarthy)
|
523
|
+
@insp_general_smods_rec = Stanford::Mods::Record.new
|
524
|
+
insp_general = "<mods #{@ns_decl}>
|
525
|
+
<titleInfo>
|
526
|
+
<title>Semiannual report to Congress</title>
|
527
|
+
<partNumber>October 1, 1998 - March 31, 1999</partNumber>
|
528
|
+
</titleInfo>
|
529
|
+
<titleInfo type=\"uniform\">
|
530
|
+
<title>Semiannual report to Congress (Online)</title>
|
531
|
+
</titleInfo></mods>"
|
532
|
+
@insp_general_smods_rec.from_str(insp_general)
|
533
|
+
@cfb_smods_rec = Stanford::Mods::Record.new
|
534
|
+
cfb = "<mods #{@ns_decl}>
|
535
|
+
<titleInfo>
|
536
|
+
<title>cfb</title>
|
537
|
+
<partNumber>1894</partNumber>
|
538
|
+
<partName>Appendix</partName>
|
539
|
+
</titleInfo></mods>"
|
540
|
+
@cfb_smods_rec.from_str(cfb)
|
541
|
+
@all_smods_rec = Stanford::Mods::Record.new
|
542
|
+
all = "<mods #{@ns_decl}>
|
543
|
+
<titleInfo>
|
544
|
+
<nonSort>The</nonSort>
|
545
|
+
<title>Olympics</title>
|
546
|
+
<subTitle>a history</subTitle>
|
547
|
+
<partNumber>Part 1</partNumber>
|
548
|
+
<partName>Ancient</partName>
|
549
|
+
</titleInfo></mods>"
|
550
|
+
@all_smods_rec.from_str(all)
|
551
|
+
end
|
552
|
+
it "short titles" do
|
553
|
+
expect(@mccarthy_smods_rec.sw_short_title).to eql 'McCarthy, John'
|
554
|
+
expect(@insp_general_smods_rec.sw_short_title).to eql 'Semiannual report to Congress'
|
555
|
+
expect(@cfb_smods_rec.sw_short_title).to eql 'cfb'
|
556
|
+
expect(@all_smods_rec.sw_short_title).to eql 'The Olympics'
|
557
|
+
end
|
558
|
+
it "full titles" do
|
559
|
+
expect(@mccarthy_smods_rec.sw_full_title).to eql 'McCarthy, John. Part 2.'
|
560
|
+
expect(@insp_general_smods_rec.sw_full_title).to eql 'Semiannual report to Congress. October 1, 1998 - March 31, 1999.'
|
561
|
+
expect(@cfb_smods_rec.sw_full_title).to eql 'cfb. 1894, Appendix.'
|
562
|
+
expect(@all_smods_rec.sw_full_title).to eql 'The Olympics : a history. Part 1, Ancient.'
|
563
|
+
end
|
564
|
+
it "additional titles" do
|
565
|
+
expect(@mccarthy_smods_rec.sw_addl_titles).to eql []
|
566
|
+
expect(@insp_general_smods_rec.sw_addl_titles).to eql []
|
567
|
+
expect(@cfb_smods_rec.sw_addl_titles).to eql []
|
568
|
+
expect(@all_smods_rec.sw_addl_titles).to eql []
|
569
|
+
end
|
570
|
+
it "sort title" do
|
571
|
+
expect(@mccarthy_smods_rec.sw_sort_title).to eql 'McCarthy John Part 2'
|
572
|
+
expect(@insp_general_smods_rec.sw_sort_title).to eql 'Semiannual report to Congress October 1 1998 March 31 1999'
|
573
|
+
expect(@cfb_smods_rec.sw_sort_title).to eql 'cfb 1894 Appendix'
|
574
|
+
expect(@all_smods_rec.sw_sort_title).to eql 'Olympics a history Part 1 Ancient'
|
575
|
+
end
|
576
|
+
end
|
577
|
+
|
578
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stanford-mods
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Naomi Dushay
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-06-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mods
|
@@ -111,6 +111,7 @@ files:
|
|
111
111
|
- spec/searchworks_spec.rb
|
112
112
|
- spec/searchworks_subject_raw_spec.rb
|
113
113
|
- spec/searchworks_subject_spec.rb
|
114
|
+
- spec/searchworks_title_spec.rb
|
114
115
|
- spec/spec_helper.rb
|
115
116
|
- stanford-mods.gemspec
|
116
117
|
homepage: https://github.com/sul-dlss/stanford-mods
|
@@ -143,5 +144,6 @@ test_files:
|
|
143
144
|
- spec/searchworks_spec.rb
|
144
145
|
- spec/searchworks_subject_raw_spec.rb
|
145
146
|
- spec/searchworks_subject_spec.rb
|
147
|
+
- spec/searchworks_title_spec.rb
|
146
148
|
- spec/spec_helper.rb
|
147
149
|
has_rdoc:
|