stanford-mods 2.2.1 → 2.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1349b54281f4c2383a7f1fb60faecf8567a3c0cd
4
- data.tar.gz: 31df104c5dd8d57eea168f802a04e8a3b4263157
3
+ metadata.gz: d876e2b5f5ab556e1140c7846fe5a6b23bdc3163
4
+ data.tar.gz: 4c150486603f2ae953ed0ee7546502cbc2ab1ea2
5
5
  SHA512:
6
- metadata.gz: 56063abe20c48c0c7bf6ea615a8091cb2abc0eb4dc81a25ef1c3ae1611cee8c9fcf4b15854404a920f0ef21e5982817d9447af626a6b35eb4c0030c42b3db631
7
- data.tar.gz: b3f29a4557713e94e4cd0d0db9dab6354927d065255c945b9434efa14e5f226cc281db974cd1fe61b4bb44aa39f72f59987973b5071adcd2a6753bda121ffdbe
6
+ metadata.gz: 9416188a4effed446e89fc9474996d02e2c0d9ab167ac80dd7ec960a83e3973edadb67ec9698d2db8bcf52b1ec594e3267542fdd057e0df51759d3ceb21c97b8
7
+ data.tar.gz: 1ee250dcef68b1ac7239d241977cb18e41b76dcd03df8e7e6df756a412f81670d2ca0d2d9d2b1a478e21ba5f0862993a43c48019de24dd46bf69a25531007284
@@ -27,19 +27,18 @@ module Stanford
27
27
  # get languageTerm codes and add their translations to the result
28
28
  n.code_term.each { |ct|
29
29
  if ct.authority =~ /^iso639/
30
- begin
31
- vals = ct.text.split(/[,|\ ]/).reject { |x| x.strip.empty? }
32
- vals.each do |v|
30
+ vals = ct.text.split(/[,|\ ]/).reject { |x| x.strip.empty? }
31
+ vals.each do |v|
32
+ if ISO_639.find(v.strip)
33
33
  iso639_val = ISO_639.find(v.strip).english_name
34
34
  if SEARCHWORKS_LANGUAGES.has_value?(iso639_val)
35
35
  result << iso639_val
36
36
  else
37
37
  result << SEARCHWORKS_LANGUAGES[v.strip]
38
38
  end
39
+ else
40
+ logger.warn "Couldn't find english name for #{ct.text}"
39
41
  end
40
- rescue
41
- # TODO: this should be written to a logger
42
- p "Couldn't find english name for #{ct.text}"
43
42
  end
44
43
  else
45
44
  vals = ct.text.split(/[,|\ ]/).reject { |x| x.strip.empty? }
@@ -127,25 +126,42 @@ module Stanford
127
126
 
128
127
  # @return [String] value for title_245a_search field
129
128
  def sw_short_title
130
- short_titles ? short_titles.first : nil
129
+ short_titles ? short_titles.compact.reject(&:empty?).first : nil
130
+ end
131
+
132
+ # @return [Nokogiri::XML::NodeSet] title_info nodes, rejecting ones that just have blank text values
133
+ def present_title_info_nodes
134
+ mods_ng_xml.title_info.reject {|node| node.text.strip.empty?}
135
+ end
136
+
137
+ # @return [Nokogiri::XML::Node] the first titleInfo node if present, else nil
138
+ def first_title_info_node
139
+ present_title_info_nodes ? present_title_info_nodes.first : nil
131
140
  end
132
141
 
142
+ # @return [String] the nonSort text portion of the titleInfo node as a string (if non-empty, else nil)
143
+ def nonSort_title
144
+ first_title_info_node.nonSort.text.strip.empty? ? nil : first_title_info_node.nonSort.text.strip
145
+ end
146
+
147
+ # @return [String] the text of the titleInfo node as a string (if non-empty, else nil)
148
+ def title
149
+ first_title_info_node.title.text.strip.empty? ? nil : first_title_info_node.title.text.strip
150
+ end
151
+
133
152
  # @return [String] value for title_245_search, title_full_display
134
153
  def sw_full_title
135
- outer_nodes = mods_ng_xml.title_info
136
- outer_node = outer_nodes ? outer_nodes.first : nil
137
- return nil unless outer_node
138
- nonSort = outer_node.nonSort.text.strip.empty? ? nil : outer_node.nonSort.text.strip
139
- title = outer_node.title.text.strip.empty? ? nil : outer_node.title.text.strip
140
- preSubTitle = nonSort ? [nonSort, title].compact.join(" ") : title
154
+
155
+ return nil unless first_title_info_node
156
+ preSubTitle = nonSort_title ? [nonSort_title, title].compact.join(" ") : title
141
157
  preSubTitle.sub!(/:$/, '') if preSubTitle # remove trailing colon
142
158
 
143
- subTitle = outer_node.subTitle.text.strip
159
+ subTitle = first_title_info_node.subTitle.text.strip
144
160
  preParts = subTitle.empty? ? preSubTitle : preSubTitle + " : " + subTitle
145
161
  preParts.sub!(/\.$/, '') if preParts # remove trailing period
146
162
 
147
- partName = outer_node.partName.text.strip unless outer_node.partName.text.strip.empty?
148
- partNumber = outer_node.partNumber.text.strip unless outer_node.partNumber.text.strip.empty?
163
+ partName = first_title_info_node.partName.text.strip unless first_title_info_node.partName.text.strip.empty?
164
+ partNumber = first_title_info_node.partNumber.text.strip unless first_title_info_node.partNumber.text.strip.empty?
149
165
  partNumber.sub!(/,$/, '') if partNumber # remove trailing comma
150
166
  if partNumber && partName
151
167
  parts = partNumber + ", " + partName
@@ -157,6 +173,7 @@ module Stanford
157
173
  parts.sub!(/\.$/, '') if parts
158
174
 
159
175
  result = parts ? preParts + ". " + parts : preParts
176
+ return nil unless result
160
177
  result += "." unless result =~ /[[:punct:]]$/
161
178
  result.strip!
162
179
  result = nil if result.empty?
@@ -182,15 +199,8 @@ module Stanford
182
199
  # Returns a sortable version of the main title
183
200
  # @return [String] value for title_sort field
184
201
  def sw_sort_title
185
- # get nonSort piece
186
- outer_nodes = mods_ng_xml.title_info
187
- outer_node = outer_nodes ? outer_nodes.first : nil
188
- if outer_node
189
- nonSort = outer_node.nonSort.text.strip.empty? ? nil : outer_node.nonSort.text.strip
190
- end
191
-
192
202
  val = '' + (sw_full_title ? sw_full_title : '')
193
- val.sub!(Regexp.new("^" + Regexp.escape(nonSort)), '') if nonSort
203
+ val.sub!(Regexp.new("^" + Regexp.escape(nonSort_title)), '') if nonSort_title
194
204
  val.gsub!(/[[:punct:]]*/, '').strip
195
205
  val.squeeze(" ").strip
196
206
  end
@@ -1,6 +1,6 @@
1
1
  module Stanford
2
2
  module Mods
3
3
  # this is the Ruby Gem version
4
- VERSION = "2.2.1".freeze
4
+ VERSION = "2.2.2".freeze
5
5
  end
6
6
  end
@@ -13,7 +13,50 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
13
13
  expect(langs.size).to eq(3)
14
14
  expect(langs).to include("Persian", "Arabic", "Dutch")
15
15
  expect(langs).not_to include("Dutch; Flemish")
16
+ end
17
+ it "should return a language string from lookup for a valid language code that has a type=code specified but no authority" do
18
+ m = "<mods #{@ns_decl}> <language><languageTerm type='code'>eng</languageTerm></language></mods>"
19
+ @smods_rec.from_str m
20
+ langs = @smods_rec.sw_language_facet
21
+ expect(langs.size).to eq(1)
22
+ expect(langs).to eq ["English"]
23
+ expect(langs).not_to include("eng")
24
+ end
25
+ it "should return nil for a language code that has a type=code specified but no authority" do
26
+ m = "<mods #{@ns_decl}> <language><languageTerm type='code'>bogus</languageTerm></language></mods>"
27
+ @smods_rec.from_str m
28
+ langs = @smods_rec.sw_language_facet
29
+ expect(langs.size).to be 1
30
+ expect(langs).to eq [nil]
16
31
  end
32
+ it "should return nothing when the authority and type=code are specified but the language code cannot be found" do
33
+ m = "<mods #{@ns_decl}><language><languageTerm authority='iso639-2b' type='code'>bogus</languageTerm></language></mods>"
34
+ @smods_rec.from_str m
35
+ expect(@smods_rec.logger).to receive(:warn).with(/Couldn't find english name for bogus/)
36
+ langs = @smods_rec.sw_language_facet
37
+ expect(langs.size).to eq(0)
38
+ end
39
+ it "should return nothing for a language code that has no authority or type specified" do
40
+ m = "<mods #{@ns_decl}> <language><languageTerm>bogus</languageTerm></language></mods>"
41
+ @smods_rec.from_str m
42
+ langs = @smods_rec.sw_language_facet
43
+ expect(langs.size).to be 0
44
+ expect(langs).to eq []
45
+ end
46
+ it "should return nothing for a language code that has an unknown authority and doesn't have a type specified" do
47
+ m = "<mods #{@ns_decl}> <language><languageTerm authority='bogus-authority'>bogus</languageTerm></language></mods>"
48
+ @smods_rec.from_str m
49
+ langs = @smods_rec.sw_language_facet
50
+ expect(langs.size).to be 0
51
+ expect(langs).to eq []
52
+ end
53
+ it "should return nothing for a blank languageTerm node (even when the authority is valid)" do
54
+ m = "<mods #{@ns_decl}> <language><languageTerm authority='iso639-2b' type='code'></languageTerm></language></mods>"
55
+ @smods_rec.from_str m
56
+ langs = @smods_rec.sw_language_facet
57
+ expect(langs.size).to be 0
58
+ expect(langs).to eq []
59
+ end
17
60
  it "should not have duplicates" do
18
61
  m = "<mods #{@ns_decl}><language><languageTerm type='code' authority='iso639-2b'>eng</languageTerm><languageTerm type='text'>English</languageTerm></language></mods>"
19
62
  @smods_rec.from_str m
@@ -7,7 +7,7 @@ describe 'title fields (searchworks.rb)' do
7
7
  @smods_rec.from_str m
8
8
  end
9
9
 
10
- context 'short title (for title_245a_search, title_245a_display) ' do
10
+ context 'short title (for title_245a_search, title_245a_display)' do
11
11
  it 'should call :short_titles' do
12
12
  expect(@smods_rec).to receive(:short_titles) # in Mods gem
13
13
  @smods_rec.sw_short_title
@@ -17,6 +17,16 @@ describe 'title fields (searchworks.rb)' do
17
17
  end
18
18
  end
19
19
 
20
+ context 'blank title node' do
21
+ it 'should deal with a second blank titleInfo node' do
22
+ m = "<mods #{@ns_decl}><titleInfo> </titleInfo><otherStuff>goes here</otherStuff><titleInfo><title>Jerk</title><subTitle>A Tale of Tourettes</subTitle><nonSort>The</nonSort></titleInfo></mods>"
23
+ smods_rec_blank_node = Stanford::Mods::Record.new
24
+ smods_rec_blank_node.from_str m
25
+ expect(smods_rec_blank_node.sw_short_title).to eq 'The Jerk'
26
+ expect(smods_rec_blank_node.sw_full_title).to eq 'The Jerk : A Tale of Tourettes.'
27
+ end
28
+ end
29
+
20
30
  context 'full title (for title_245_search, title_full_display)' do
21
31
  it 'should be a String' do
22
32
  expect(@smods_rec.sw_full_title).to eq 'The Jerk : A Tale of Tourettes.'
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: 2.2.1
4
+ version: 2.2.2
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: 2016-08-05 00:00:00.000000000 Z
12
+ date: 2016-09-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mods
@@ -171,7 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
171
  version: '0'
172
172
  requirements: []
173
173
  rubyforge_project:
174
- rubygems_version: 2.4.6
174
+ rubygems_version: 2.4.5.1
175
175
  signing_key:
176
176
  specification_version: 4
177
177
  summary: Stanford specific wrangling of MODS metadata
@@ -195,3 +195,4 @@ test_files:
195
195
  - spec/searchworks_title_spec.rb
196
196
  - spec/spec_helper.rb
197
197
  - spec/sw_publication_spec.rb
198
+ has_rdoc: