stanford-mods 2.2.1 → 2.2.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 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: