enju_loc 0.1.0.pre4 → 0.1.0.pre5

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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/app/helpers/loc_search_helper.rb +1 -1
  4. data/app/models/loc_search.rb +12 -11
  5. data/app/views/loc_search/index.html.erb +1 -1
  6. data/lib/enju_loc/loc_search.rb +105 -104
  7. data/lib/enju_loc/version.rb +1 -1
  8. data/spec/cassette_library/LocSearch/_ModsRecord/should_parse_MODS_metadata.yml +8 -8
  9. data/spec/cassette_library/LocSearch/_import_from_sru_response/should_create_a_valid_manifestation.yml +9 -9
  10. data/spec/cassette_library/LocSearch/_import_from_sru_response/should_create_lcsh_subjects_only.yml +9 -9
  11. data/spec/cassette_library/LocSearch/_import_from_sru_response/should_create_multiple_series_statements.yml +9 -9
  12. data/spec/cassette_library/LocSearch/_import_from_sru_response/should_distinguish_title_information_with_subject.yml +9 -9
  13. data/spec/cassette_library/LocSearch/_import_from_sru_response/should_import_a_manifestation_that_has_invalid_classification.yml +9 -9
  14. data/spec/cassette_library/LocSearch/_import_from_sru_response/should_import_another_serial.yml +22 -22
  15. data/spec/cassette_library/LocSearch/_import_from_sru_response/should_import_audio_book.yml +9 -9
  16. data/spec/cassette_library/LocSearch/_import_from_sru_response/should_import_e-resource.yml +12 -13
  17. data/spec/cassette_library/LocSearch/_import_from_sru_response/should_import_e-resource_packaged_.yml +25 -25
  18. data/spec/cassette_library/LocSearch/_import_from_sru_response/should_import_lccn_exact_math.yml +57 -0
  19. data/spec/cassette_library/LocSearch/_import_from_sru_response/should_import_notated_music.yml +55 -56
  20. data/spec/cassette_library/LocSearch/_import_from_sru_response/should_import_note_fields.yml +9 -9
  21. data/spec/cassette_library/LocSearch/_import_from_sru_response/should_import_publication_year.yml +14 -14
  22. data/spec/cassette_library/LocSearch/_import_from_sru_response/should_import_serial.yml +22 -23
  23. data/spec/cassette_library/LocSearch/_import_from_sru_response/should_import_video_publication.yml +10 -10
  24. data/spec/cassette_library/LocSearch/_import_from_sru_response/should_parse_title_information_properly.yml +10 -10
  25. data/spec/cassette_library/LocSearch/_import_from_sru_response/should_support_name_and_title_subjects.yml +10 -10
  26. data/spec/cassette_library/LocSearch/_search/should_return_a_search_result.yml +119 -83
  27. data/spec/cassette_library/LocSearchController/GET_index/should_get_index.yml +119 -83
  28. data/spec/cassette_library/LocSearchController/GET_index/should_get_index_with_page_parameter.yml +99 -102
  29. data/spec/cassette_library/LocSearchController/POST_create/should_create_a_bibliographic_record_if_lccn_is_set.yml +12 -12
  30. data/spec/cassette_library/LocSearchController/POST_create/should_not_create_a_bibliographic_record_if_lccn_is_not_set.yml +7 -7
  31. data/spec/dummy/app/assets/javascripts/application.js +2 -2
  32. data/spec/models/loc_search_spec.rb +6 -0
  33. metadata +35 -21
  34. data/spec/dummy/app/models/setting.rb +0 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1d6f7ddad0b22f2b23741d4e91c73f27ad22827c
4
- data.tar.gz: daa82be27e7d64aa3fef0a31d3b46ec5294721dc
3
+ metadata.gz: ae84ef37831bd60f287da64e91b8e37128c281c8
4
+ data.tar.gz: 1c749625e555c67d1059f68ebacddadc67df260f
5
5
  SHA512:
6
- metadata.gz: 34eec96ca78e77b7f9304d1644bed1ca1ca7eb0e522ae6760e2f2e6cf4cc819ff4666f70cb0a2cd30162e13f5dd41dc5c97b547dd55671d0697265aea49fbe3e
7
- data.tar.gz: 3971a831b8c62dee85e6ce3afde3901be6228371d78c5bbb44fdd5a4f5bb488495ea84f64401ecfc44d19b01bb3fa8d7919e9d615407fc14e3a47b6af8c0e0bc
6
+ metadata.gz: d89d1aa88540c8554f5147c18ecbe5c605c4cd8a5763d2e257d5996ded6f97265db8e6bd72a45addf90e1c2e9be9915980393004bf3b33898f378cfd239d505e
7
+ data.tar.gz: 1649bf7e6028c3fcecaa672ffa71dde9f67e651b31fe66f02d8a6362aa039d663785c26bd07a4f7a287130be5a6054dacdaaf03d3795e9451d5cd48b0c926dea
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2013 YOURNAME
1
+ Copyright 2015 Project Next-L
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -9,7 +9,7 @@ module LocSearchHelper
9
9
  .id).first.try(:manifestation)
10
10
  end
11
11
  unless manifestation
12
- link_to t('enju_loc.add'), loc_search_index_path(:book => {:lccn => lccn}), :method => :post
12
+ button_to t('enju_loc.add'), loc_search_index_path(book: {lccn: lccn}), method: :post, data: {disable_with: t('page.saving')}
13
13
  else
14
14
  link_to t('enju_loc.already_exists'), manifestation
15
15
  end
@@ -49,7 +49,7 @@ class LocSearch
49
49
  def title
50
50
  @node.xpath( './/dc:title', DC_NS ).first.content
51
51
  end
52
- def lccn
52
+ def lccn
53
53
  @node.xpath( './/dc:identifier[@type="lccn"]', DC_NS ).first.content
54
54
  end
55
55
  def creator
@@ -64,8 +64,8 @@ class LocSearch
64
64
  options[ :startRecord ] = ( page - 1 ) * 10 + 1
65
65
  options.delete :page
66
66
  end
67
- options = { :maximumRecords => 10, :recordSchema => :mods }.merge(options)
68
- options = options.merge( { :query => query, :version => "1.1", :operation => "searchRetrieve" } )
67
+ options = { maximumRecords: 10, recordSchema: :mods }.merge(options)
68
+ options = options.merge( { query: query, version: "1.1", operation: "searchRetrieve" } )
69
69
  params = options.map do |k, v|
70
70
  "#{ URI.escape( k.to_s ) }=#{ URI.escape( v.to_s ) }"
71
71
  end.join( '&' )
@@ -73,14 +73,14 @@ class LocSearch
73
73
  end
74
74
 
75
75
  def self.search( query, options = {} )
76
- if query and not query.empty?
76
+ if query and !query.empty?
77
77
  url = make_sru_request_uri(query, options)
78
78
  doc = Nokogiri::XML(Faraday.get(url).body)
79
79
  items = doc.search('//zs:record').map{|e| ModsRecord.new e }
80
- @results = { :items => items,
81
- :total_entries => doc.xpath('//zs:numberOfRecords').first.try(:content).to_i }
80
+ @results = { items: items,
81
+ total_entries: doc.xpath('//zs:numberOfRecords').first.try(:content).to_i }
82
82
  else
83
- { :items => [], :total_entries => 0 }
83
+ { items: [], total_entries: 0 }
84
84
  end
85
85
  end
86
86
 
@@ -89,11 +89,12 @@ class LocSearch
89
89
  identifier_type_lccn = IdentifierType.create!(name: 'lccn') unless identifier_type_lccn
90
90
  identifier = Identifier.where(body: lccn, identifier_type_id: identifier_type_lccn.id).first
91
91
  return if identifier
92
- url = make_sru_request_uri("bath.lccn=#{ lccn }")
93
- response = Nokogiri::XML(Faraday.get(url).body).at( '//zs:recordData', {"zs" => "http://www.loc.gov/zing/srw/"} )
94
- return unless response.try(:content)
92
+ url = make_sru_request_uri("bath.lccn=\"^#{ lccn }\"")
93
+ response = Nokogiri::XML(Faraday.get(url).body)
94
+ record = response.at( '//zs:recordData', {"zs" => "http://www.loc.gov/zing/srw/"} )
95
+ return unless record.try(:content)
95
96
  doc = Nokogiri::XML::Document.new
96
- doc << response.at( "//mods:mods", { "mods" => "http://www.loc.gov/mods/v3" } )
97
+ doc << record.at( "//mods:mods", { "mods" => "http://www.loc.gov/mods/v3" } )
97
98
  Manifestation.import_record_from_loc(doc)
98
99
  end
99
100
  end
@@ -39,7 +39,7 @@
39
39
  <%= paginate(@books) %>
40
40
 
41
41
  <% else %>
42
- <%= javascript_tag("$('#search_form_top').focus()") -%>
42
+ <%= javascript_tag("$(function(){$('#search_form_top').focus()})") -%>
43
43
  <% end %>
44
44
 
45
45
  </div>
@@ -14,7 +14,7 @@ module EnjuLoc
14
14
  startrecord = 1
15
15
  end
16
16
  url = LOC_SRU_BASEURL + "?operation=searchRetrieve&version=1.1&=query=#{ URI.escape(query) }"
17
- cont = open( url ){|io| io.read }
17
+ cont = Faraday.get(url).body
18
18
  parser = LibXML::XML::Parser.string( cont )
19
19
  doc = parser.parse
20
20
  end
@@ -38,11 +38,11 @@ module EnjuLoc
38
38
  record_identifier = doc.at( '//mods:recordInfo/mods:recordIdentifier', NS ).try(:content)
39
39
  identifier_type = IdentifierType.where(name: 'loc_identifier').first
40
40
  identifier_type = IdentifierType.create!(name: 'loc_identifier') unless identifier_type
41
- loc_identifier = Identifier.where(:body => record_identifier, :identifier_type_id => identifier_type.id).first
41
+ loc_identifier = Identifier.where(body: record_identifier, :identifier_type_id => identifier_type.id).first
42
42
  return loc_identifier.manifestation if loc_identifier
43
43
 
44
44
  publishers = []
45
- doc.xpath('//mods:publisher',NS).each do |publisher|
45
+ doc.xpath('//mods:publisher', NS).each do |publisher|
46
46
  publishers << {
47
47
  :full_name => publisher.content,
48
48
  #:agent_identifier => publisher.attributes["about"].try(:content)
@@ -64,22 +64,22 @@ module EnjuLoc
64
64
  language_id = 1
65
65
  end
66
66
 
67
- isbn = Lisbn.new(doc.at('/mods:mods/mods:identifier[@type="isbn"]',NS).try(:content).to_s).try(:isbn)
68
- lccn = StdNum::LCCN.normalize(doc.at('/mods:mods/mods:identifier[@type="lccn"]',NS).try(:content).to_s)
69
- issn = StdNum::ISSN.normalize(doc.at('/mods:mods/mods:identifier[@type="issn"]',NS).try(:content).to_s)
70
- issn_l = StdNum::ISSN.normalize(doc.at('/mods:mods/mods:identifier[@type="issn-l"]',NS).try(:content).to_s)
67
+ isbn = Lisbn.new(doc.at('/mods:mods/mods:identifier[@type="isbn"]', NS).try(:content).to_s).try(:isbn)
68
+ lccn = StdNum::LCCN.normalize(doc.at('/mods:mods/mods:identifier[@type="lccn"]', NS).try(:content).to_s)
69
+ issn = StdNum::ISSN.normalize(doc.at('/mods:mods/mods:identifier[@type="issn"]', NS).try(:content).to_s)
70
+ issn_l = StdNum::ISSN.normalize(doc.at('/mods:mods/mods:identifier[@type="issn-l"]', NS).try(:content).to_s)
71
71
 
72
72
  types = get_mods_carrier_and_content_types( doc )
73
73
  content_type = types[ :content_type ]
74
74
  carrier_type = types[ :carrier_type ]
75
75
 
76
- record_identifier = doc.at('//mods:recordInfo/mods:recordIdentifier',NS).try(:content)
77
- description = doc.xpath('//mods:abstract',NS).collect(&:content).join("\n")
78
- edition_string = doc.at('//mods:edition',NS).try(:content)
76
+ record_identifier = doc.at('//mods:recordInfo/mods:recordIdentifier', NS).try(:content)
77
+ description = doc.xpath('//mods:abstract', NS).collect(&:content).join("\n")
78
+ edition_string = doc.at('//mods:edition', NS).try(:content)
79
79
  extent = get_mods_extent(doc)
80
80
  note = get_mods_note(doc)
81
81
  frequency = get_mods_frequency(doc)
82
- issuance = doc.at('//mods:issuance',NS).try(:content)
82
+ issuance = doc.at('//mods:issuance', NS).try(:content)
83
83
  is_serial = true if issuance == "serial"
84
84
  statement_of_responsibility = get_mods_statement_of_responsibility(doc)
85
85
  access_address = get_mods_access_address(doc)
@@ -105,27 +105,27 @@ module EnjuLoc
105
105
  :access_address => access_address,
106
106
  :note => note,
107
107
  :publication_place => publication_place,
108
- :serial => is_serial,
108
+ :serial => is_serial
109
109
  )
110
110
  identifier = {}
111
111
  if isbn
112
- identifier[:isbn] = Identifier.new(:body => isbn)
112
+ identifier[:isbn] = Identifier.new(body: isbn)
113
113
  identifier[:isbn].identifier_type = IdentifierType.where(name: 'isbn').first || IdnetifierType.create!(name: 'isbn')
114
114
  end
115
115
  if loc_identifier
116
- identifier[:loc_identifier] = Identifier.new(:body => loc_identifier)
116
+ identifier[:loc_identifier] = Identifier.new(body: loc_identifier)
117
117
  identifier[:loc_identifier].identifier_type = IdentifierType.where(name: 'loc_identifier').first || IdnetifierType.create!(name: 'loc_identifier')
118
118
  end
119
119
  if lccn
120
- identifier[:lccn] = Identifier.new(:body => lccn)
120
+ identifier[:lccn] = Identifier.new(body: lccn)
121
121
  identifier[:lccn].identifier_type = IdentifierType.where(name: 'lccn').first || IdentifierType.create!(name: 'lccn')
122
122
  end
123
123
  if issn
124
- identifier[:issn] = Identifier.new(:body => issn)
124
+ identifier[:issn] = Identifier.new(body: issn)
125
125
  identifier[:issn].identifier_type = IdentifierType.where(name: 'issn').first || IdentifierType.create!(name: 'issn')
126
126
  end
127
127
  if issn_l
128
- identifier[:issn_l] = Identifier.new(:body => issn_l)
128
+ identifier[:issn_l] = Identifier.new(body: issn_l)
129
129
  identifier[:issn_l].identifier_type = IdentifierType.where(name: 'issn_l').first || IdentifierType.create!(name: 'issn_l')
130
130
  end
131
131
  manifestation.carrier_type = carrier_type if carrier_type
@@ -137,10 +137,10 @@ module EnjuLoc
137
137
  end
138
138
  manifestation.publishers << publisher_agents
139
139
  manifestation.creators << creator_agents
140
- create_subject_related_elements(doc, manifestation)
141
- create_series_statement(doc, manifestation)
140
+ create_loc_subject_related_elements(doc, manifestation)
141
+ create_loc_series_statement(doc, manifestation)
142
142
  if is_serial
143
- create_series_master(doc, manifestation)
143
+ create_loc_series_master(doc, manifestation)
144
144
  end
145
145
  end
146
146
  end
@@ -148,13 +148,14 @@ module EnjuLoc
148
148
  end
149
149
 
150
150
  private
151
- def create_subject_related_elements(doc, manifestation)
151
+
152
+ def create_loc_subject_related_elements(doc, manifestation)
152
153
  subjects = get_mods_subjects(doc)
153
154
  classifications = get_mods_classifications(doc)
154
155
  if defined?(EnjuSubject)
155
156
  subject_heading_type = SubjectHeadingType.where(name: 'lcsh').first || SubjectHeadingType.create!(name: 'lcsh')
156
157
  subjects.each do |term|
157
- subject = Subject.where(:term => term[:term]).first
158
+ subject = Subject.where(term: term[:term]).first
158
159
  unless subject
159
160
  subject = Subject.new(term)
160
161
  subject.subject_heading_type = subject_heading_type
@@ -176,8 +177,8 @@ module EnjuLoc
176
177
  end
177
178
  end
178
179
 
179
- def create_series_statement(doc, manifestation)
180
- doc.xpath('//mods:relatedItem[@type="series"]/mods:titleInfo/mods:title',NS).each do |series|
180
+ def create_loc_series_statement(doc, manifestation)
181
+ doc.xpath('//mods:relatedItem[@type="series"]/mods:titleInfo/mods:title', NS).each do |series|
181
182
  series_title = title = series.try(:content)
182
183
  if title
183
184
  series_title = title.split(';')[0].strip
@@ -191,12 +192,12 @@ module EnjuLoc
191
192
  end
192
193
  end
193
194
 
194
- def create_series_master(doc, manifestation)
195
+ def create_loc_series_master(doc, manifestation)
195
196
  titles = get_mods_titles(doc)
196
197
  series_statement = SeriesStatement.new(
197
198
  :original_title => titles[:original_title],
198
199
  :title_alternative => titles[:title_alternative],
199
- :series_master => true,
200
+ :series_master => true
200
201
  )
201
202
  if series_statement.try(:save)
202
203
  manifestation.series_statements << series_statement
@@ -206,19 +207,19 @@ module EnjuLoc
206
207
  def get_mods_titles(doc)
207
208
  original_title = ""
208
209
  title_alternatives = []
209
- doc.xpath('//mods:mods/mods:titleInfo',NS).each do |e|
210
+ doc.xpath('//mods:mods/mods:titleInfo', NS).each do |e|
210
211
  type = e.attributes["type"].try(:content)
211
212
  case type
212
213
  when "alternative", "translated", "abbreviated", "uniform"
213
- title_alternatives << e.at('./mods:title',NS).content
214
+ title_alternatives << e.at('./mods:title', NS).content
214
215
  else
215
- nonsort = e.at('./mods:nonSort',NS).try(:content)
216
+ nonsort = e.at('./mods:nonSort', NS).try(:content)
216
217
  original_title << nonsort if nonsort
217
- original_title << e.at('./mods:title',NS).try(:content)
218
- subtitle = e.at('./mods:subTitle',NS).try(:content)
218
+ original_title << e.at('./mods:title', NS).try(:content)
219
+ subtitle = e.at('./mods:subTitle', NS).try(:content)
219
220
  original_title << " : #{ subtitle }" if subtitle
220
- partnumber = e.at('./mods:partNumber',NS).try(:content)
221
- partname = e.at('./mods:partName',NS).try(:content)
221
+ partnumber = e.at('./mods:partNumber', NS).try(:content)
222
+ partname = e.at('./mods:partName', NS).try(:content)
222
223
  partname = [ partnumber, partname ].compact.join( ": " )
223
224
  original_title << ". #{ partname }" unless partname.blank?
224
225
  end
@@ -227,81 +228,81 @@ module EnjuLoc
227
228
  end
228
229
 
229
230
  def get_mods_language(doc)
230
- language = doc.at('//mods:language/mods:languageTerm[@authority="iso639-2b"]',NS).try(:content)
231
+ language = doc.at('//mods:language/mods:languageTerm[@authority="iso639-2b"]', NS).try(:content)
231
232
  end
232
233
 
233
234
  def get_mods_access_address(doc)
234
235
  access_address = nil
235
- url = doc.at('//mods:location/mods:url',NS)
236
+ url = doc.at('//mods:location/mods:url', NS)
236
237
  if url
237
238
  usage = url.attributes["usage"].try(:content)
238
239
  case usage
239
240
  when "primary display", "primary"
240
- access_address = url.try(:content)
241
+ access_address = url.try(:content)
242
+ end
241
243
  end
244
+ access_address
242
245
  end
243
- access_address
244
- end
245
246
 
246
- def get_mods_publication_place(doc)
247
- place = doc.at('//mods:originInfo/mods:place/mods:placeTerm[@type="text"]',NS).try(:content)
248
- end
247
+ def get_mods_publication_place(doc)
248
+ place = doc.at('//mods:originInfo/mods:place/mods:placeTerm[@type="text"]', NS).try(:content)
249
+ end
249
250
 
250
- def get_mods_extent(doc)
251
- extent = doc.at('//mods:extent',NS).try(:content)
252
- value = {:start_page => nil, :end_page => nil, :height => nil}
253
- if extent
254
- extent = extent.split(';')
255
- page = extent[0].try(:strip)
256
- if page =~ /(\d+)\s*(p|page)/
257
- value[:start_page] = 1
258
- value[:end_page] = $1.dup.to_i
259
- end
260
- height = extent[1].try(:strip)
261
- if height =~ /(\d+)\s*cm/
262
- value[:height] = $1.dup.to_i
251
+ def get_mods_extent(doc)
252
+ extent = doc.at('//mods:extent', NS).try(:content)
253
+ value = {:start_page => nil, :end_page => nil, :height => nil}
254
+ if extent
255
+ extent = extent.split(';')
256
+ page = extent[0].try(:strip)
257
+ if page =~ /(\d+)\s*(p|page)/
258
+ value[:start_page] = 1
259
+ value[:end_page] = $1.dup.to_i
260
+ end
261
+ height = extent[1].try(:strip)
262
+ if height =~ /(\d+)\s*cm/
263
+ value[:height] = $1.dup.to_i
264
+ end
263
265
  end
266
+ value
264
267
  end
265
- value
266
- end
267
268
 
268
- def get_mods_statement_of_responsibility(doc)
269
- note = doc.at('//mods:note[@type="statement of responsibility"]',NS).try(:content)
270
- if note.blank?
271
- note = get_mods_creators(doc).map{|e| e[:full_name] }.join( " ; " )
269
+ def get_mods_statement_of_responsibility(doc)
270
+ note = doc.at('//mods:note[@type="statement of responsibility"]', NS).try(:content)
271
+ if note.blank?
272
+ note = get_mods_creators(doc).map{|e| e[:full_name] }.join( " ; " )
273
+ end
274
+ note
272
275
  end
273
- note
274
- end
275
276
 
276
- def get_mods_note(doc)
277
- notes = []
278
- doc.xpath('//mods:note',NS).each do |note|
279
- type = note.attributes['type'].try(:content)
280
- next if type == "statement of responsibility"
281
- note_s = note.try( :content )
282
- notes << note_s unless note_s.blank?
283
- end
284
- if notes.empty?
285
- nil
286
- else
287
- notes.join( ";\n" )
277
+ def get_mods_note(doc)
278
+ notes = []
279
+ doc.xpath('//mods:note', NS).each do |note|
280
+ type = note.attributes['type'].try(:content)
281
+ next if type == "statement of responsibility"
282
+ note_s = note.try( :content )
283
+ notes << note_s unless note_s.blank?
284
+ end
285
+ if notes.empty?
286
+ nil
287
+ else
288
+ notes.join( ";\n" )
289
+ end
288
290
  end
289
- end
290
291
 
291
- def get_mods_date_of_publication(doc)
292
- dates = []
293
- doc.xpath('//mods:dateIssued',NS).each do |pub_date|
294
- pub_date = pub_date.content.sub( /\A[cp]/, '' )
295
- next unless pub_date =~ /^\d+(-\d\d?){0,2}$/
296
- date = pub_date.split('-')
297
- if date[0] and date[1]
298
- dates << sprintf("%04d-%02d", date[0], date[1])
299
- else
300
- dates << pub_date
292
+ def get_mods_date_of_publication(doc)
293
+ dates = []
294
+ doc.xpath('//mods:dateIssued', NS).each do |pub_date|
295
+ pub_date = pub_date.content.sub( /\A[cp]/, '' )
296
+ next unless pub_date =~ /^\d+(-\d\d?){0,2}$/
297
+ date = pub_date.split('-')
298
+ if date[0] and date[1]
299
+ dates << sprintf("%04d-%02d", date[0], date[1])
300
+ else
301
+ dates << pub_date
302
+ end
301
303
  end
304
+ dates.compact.first
302
305
  end
303
- dates.compact.first
304
- end
305
306
 
306
307
  # derived from marcfrequency: http://www.loc.gov/standards/valuelist/marcfrequency.html
307
308
  MARCFREQUENCY = [
@@ -321,11 +322,11 @@ module EnjuLoc
321
322
  "Annual",
322
323
  "Biennial",
323
324
  "Triennial",
324
- "Completely irregular",
325
+ "Completely irregular"
325
326
  ]
326
327
  def get_mods_frequency(doc)
327
328
  frequencies = []
328
- doc.xpath('//mods:frequency',NS).each do |freq|
329
+ doc.xpath('//mods:frequency', NS).each do |freq|
329
330
  frequency = freq.try(:content)
330
331
  MARCFREQUENCY.each do |freq_regex|
331
332
  if /\A(#{freq_regex})/ =~ frequency
@@ -339,9 +340,9 @@ module EnjuLoc
339
340
 
340
341
  def get_mods_creators(doc)
341
342
  creators = []
342
- doc.xpath('/mods:mods/mods:name',NS).each do |creator|
343
+ doc.xpath('/mods:mods/mods:name', NS).each do |creator|
343
344
  creators << {
344
- :full_name => creator.xpath('./mods:namePart',NS).collect(&:content).join( ", " ),
345
+ full_name: creator.xpath('./mods:namePart', NS).collect(&:content).join(", ")
345
346
  }
346
347
  end
347
348
  creators.uniq
@@ -350,26 +351,26 @@ module EnjuLoc
350
351
  # TODO:only LCSH-based parsing...
351
352
  def get_mods_subjects(doc)
352
353
  subjects = []
353
- doc.xpath('//mods:subject[@authority="lcsh"]',NS).each do |s|
354
+ doc.xpath('//mods:subject[@authority="lcsh"]', NS).each do |s|
354
355
  subject = []
355
- s.xpath('./*',NS).each do |subelement|
356
+ s.xpath('./*', NS).each do |subelement|
356
357
  type = subelement.name
357
358
  case subelement.name
358
359
  when "topic", "geographic", "genre", "temporal"
359
- subject << { :type => type , :term => subelement.try(:content) }
360
+ subject << { type: type , term: subelement.try(:content) }
360
361
  when "titleInfo"
361
- subject << { :type => type, :term => subelement.at('./mods:title',NS).try(:content) }
362
+ subject << { type: type, term: subelement.at('./mods:title', NS).try(:content) }
362
363
  when "name"
363
- name = subelement.xpath('./mods:namePart',NS).map{|e| e.try(:content) }.join( ", " )
364
- subject << { :type => type, :term => name }
364
+ name = subelement.xpath('./mods:namePart', NS).map{|e| e.try(:content) }.join(", ")
365
+ subject << { type: type, term: name }
365
366
  end
366
367
  end
367
368
  next if subject.compact.empty?
368
369
  if subject.size > 1 and subject[0][:type] == "name" and subject[1][:type] == "titleInfo"
369
- subject[0..1] = { :term => subject[0..1].map{|e|e[:term]}.join( ". " ) }
370
+ subject[0..1] = { term: subject[0..1].map{|e|e[:term]}.join(". ") }
370
371
  end
371
372
  subjects << {
372
- :term => subject.map{|e|e[:term]}.compact.join( "--" )
373
+ term: subject.map{|e|e[:term]}.compact.join("--")
373
374
  }
374
375
  end
375
376
  subjects
@@ -378,7 +379,7 @@ module EnjuLoc
378
379
  # TODO:support only DDC.
379
380
  def get_mods_classifications(doc)
380
381
  classifications = []
381
- doc.xpath('//mods:classification[@authority="ddc"]',NS).each do|c|
382
+ doc.xpath('//mods:classification[@authority="ddc"]', NS).each do|c|
382
383
  ddc = c.content
383
384
  if ddc
384
385
  classifications << ddc.split(/[^\d\.]/).first.try(:strip)
@@ -389,7 +390,7 @@ module EnjuLoc
389
390
 
390
391
  def get_mods_carrier_and_content_types(doc)
391
392
  carrier_type = content_type = nil
392
- doc.xpath('//mods:form',NS).each do |e|
393
+ doc.xpath('//mods:form', NS).each do |e|
393
394
  authority = e.attributes['authority'].try(:content)
394
395
  case authority
395
396
  when "gmd"
@@ -440,7 +441,7 @@ module EnjuLoc
440
441
  #carrier_type = CarrierType.where(name: 'other').first
441
442
  when "motion picture", "film cartridge", "film cassette", "film reel"
442
443
  content_type = ContentType.where(name: 'two_dimensional_moving_image').first
443
- when "sound recording", "cylinder", "roll", "sound cartridge", "sound cassette","sound-tape reel", "sound-track film", "wire recording"
444
+ when "sound recording", "cylinder", "roll", "sound cartridge", "sound cassette","sound-tape reel", "sound-track film", "wire recording"
444
445
  content_type = ContentType.where(name: 'performed_music').first
445
446
  when "sound disc"
446
447
  content_type = ContentType.where(name: 'performed_music').first
@@ -491,7 +492,7 @@ module EnjuLoc
491
492
  end
492
493
  end
493
494
  end
494
- doc.xpath('//mods:genre',NS).each do |e|
495
+ doc.xpath('//mods:genre', NS).each do |e|
495
496
  authority = e.attributes['authority'].try(:content)
496
497
  case authority
497
498
  when "rdacontent"
@@ -499,7 +500,7 @@ module EnjuLoc
499
500
  content_type = ContentType.where(name: 'other').first unless content_type
500
501
  end
501
502
  end
502
- type = doc.at('//mods:typeOfResource',NS).try(:content)
503
+ type = doc.at('//mods:typeOfResource', NS).try(:content)
503
504
  case type
504
505
  when "text"
505
506
  content_type = ContentType.where(name: 'text').first