enju_loc 0.1.0.pre4 → 0.1.0.pre5

Sign up to get free protection for your applications and to get access to all the features.
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