Class: Stanford::Mods::Record
- Inherits:
-
Mods::Record
- Object
- Mods::Record
- Stanford::Mods::Record
- Defined in:
- lib/stanford-mods.rb,
lib/stanford-mods/searchworks.rb
Direct Known Subclasses
Instance Method Summary collapse
-
#additional_authors_w_dates ⇒ Object
all names, in display form, except the main_author names will be the display_value_w_date form see Mods::Record.name in nom_terminology for details on the display_value algorithm.
-
#catkey ⇒ String
Value with the numeric catkey in it, or nil if none exists.
- #druid ⇒ Object
- #druid=(new_druid) ⇒ Object
-
#era_facet ⇒ Array<String>
subject/temporal values with trailing comma, semicolon, and backslash (and any preceding spaces) removed.
-
#format ⇒ String
select one or more format values from the controlled vocabulary here: searchworks-solr-lb.stanford.edu:8983/solr/select?facet.field=format&rows=0&facet.sort=index based on the dor_content_type.
-
#geographic_facet ⇒ Array<String>
geographic_search values with trailing comma, semicolon, and backslash (and any preceding spaces) removed.
-
#geographic_search ⇒ Array<String>
Values are the contents of: subject/geographic subject/hierarchicalGeographic subject/geographicCode (only include the translated value if it isn’t already present from other mods geo fields).
-
#get_bc_year(dates) ⇒ Object
get the 3 digit BC year, return it as a negative, so -700 for 300 BC.
-
#get_double_digit_century(dates) ⇒ Object
get a double digit century like ‘12th century’ from the date array.
-
#get_plain_four_digit_year(dates) ⇒ Object
get a 4 digit year like 1865 from the date array.
-
#get_single_digit_century(dates) ⇒ Object
get a single digit century like ‘9th century’ from the date array.
-
#get_three_digit_year(dates) ⇒ Object
get a 3 digit year like 965 from the date array.
- #is_date?(object) ⇒ Boolean
- #is_number?(object) ⇒ Boolean
-
#main_author_w_date ⇒ String
the first encountered <mods><name> element with marcrelator flavor role of ‘Creator’ or ‘Author’.
- #main_author_w_date_test ⇒ Object
- #place ⇒ Object
-
#pub_date ⇒ String
The year the object was published, , filtered based on max_pub_date and min_pub_date from the config file.
- #pub_date_display ⇒ Object
-
#pub_date_facet ⇒ Array[String]
Values for the pub date facet.
-
#pub_date_groups(year) ⇒ Array<String>
Values for the pub_date_group_facet.
-
#pub_date_sort ⇒ Object
creates a date suitable for sorting.
-
#pub_dates ⇒ Array<String>
get the dates from dateIssued, and dateCreated merged into 1 array.
-
#pub_year ⇒ String
Get the publish year from mods.
-
#subject_all_search ⇒ Array<String>
Values are the contents of: all subject subelements except subject/cartographic plus genre top level element.
-
#subject_names ⇒ Object
convenience method for subject/name/namePart values (to avoid parsing the mods for the same thing multiple times).
-
#subject_occupations ⇒ Object
convenience method for subject/occupation values (to avoid parsing the mods for the same thing multiple times).
-
#subject_other_search ⇒ Array<String>
Values are the contents of: subject/name subject/occupation - no subelements subject/titleInfo.
-
#subject_other_subvy_search ⇒ Array<String>
Values are the contents of: subject/temporal subject/genre.
-
#subject_temporal ⇒ Object
convenience method for subject/temporal values (to avoid parsing the mods for the same thing multiple times).
-
#subject_titles ⇒ Object
convenience method for subject/titleInfo values (to avoid parsing the mods for the same thing multiple times).
-
#subject_topics ⇒ Object
convenience method for subject/topic values (to avoid parsing the mods for the same thing multiple times).
-
#sw_addl_authors ⇒ Array<String>
Values for author_7xx_search field.
-
#sw_addl_titles ⇒ Array<String>
this includes all titles except.
-
#sw_corporate_authors ⇒ Array<String>
Values for author_corp_display.
-
#sw_full_title ⇒ String
Value for title_245_search, title_display, title_full_display.
-
#sw_full_title_without_commas ⇒ Object
remove trailing commas.
-
#sw_geographic_search(sep = ' ') ⇒ Array<String>
Values are the contents of: subject/geographic subject/hierarchicalGeographic subject/geographicCode (only include the translated value if it isn’t already present from other mods geo fields).
-
#sw_impersonal_authors ⇒ Array<String>
return the display_value_w_date for all <mods><name> elements that do not have type=‘personal’.
-
#sw_language_facet ⇒ Object
include langagues known to SearchWorks; try to error correct when possible (e.g. when ISO-639 disagrees with MARC standard).
- #sw_logger ⇒ Object
-
#sw_main_author ⇒ String
Value for author_1xx_search field.
-
#sw_meeting_authors ⇒ Array<String>
Values for author_meeting_display.
-
#sw_person_authors ⇒ Array<String>
Values for author_person_facet, author_person_display.
-
#sw_short_title ⇒ String
Value for title_245a_search field.
-
#sw_sort_author ⇒ String
Returns a sortable version of the main_author: main_author + sorting title which is the mods approximation of the value created for a marc record.
-
#sw_sort_title ⇒ String
Returns a sortable version of the main title.
-
#sw_subject_names(sep = ', ') ⇒ Array<String>
Values are the contents of: subject/name/namePart “Values from namePart subelements should be concatenated in the order they appear (e.g. ”Shakespeare, William, 1564-1616“)”.
-
#sw_subject_titles(sep = ' ') ⇒ Array<String>
Values are the contents of: subject/titleInfo/(subelements).
-
#topic_facet ⇒ Array<String>
Values are the contents of: subject/topic subject/name subject/title subject/occupation with trailing comma, semicolon, and backslash (and any preceding spaces) removed.
-
#topic_search ⇒ Array<String>
Values are the contents of: mods/genre mods/subject/topic.
Instance Method Details
#additional_authors_w_dates ⇒ Object
all names, in display form, except the main_author
names will be the display_value_w_date form
see Mods::Record.name in nom_terminology for details on the display_value algorithm
39 40 41 42 43 44 45 46 |
# File 'lib/stanford-mods.rb', line 39 def results = [] @mods_ng_xml.plain_name.each { |n| results << n.display_value_w_date } results.delete() results end |
#catkey ⇒ String
Returns value with the numeric catkey in it, or nil if none exists.
506 507 508 509 510 511 512 |
# File 'lib/stanford-mods/searchworks.rb', line 506 def catkey catkey=self.term_values([:record_info,:recordIdentifier]) if catkey and catkey.length>0 return catkey.first.gsub('a','') #need to ensure catkey is numeric only end nil end |
#druid ⇒ Object
516 517 518 |
# File 'lib/stanford-mods/searchworks.rb', line 516 def druid @druid ? @druid : 'Unknown item' end |
#druid=(new_druid) ⇒ Object
513 514 515 |
# File 'lib/stanford-mods/searchworks.rb', line 513 def druid= new_druid @druid=new_druid end |
#era_facet ⇒ Array<String>
subject/temporal values with trailing comma, semicolon, and backslash (and any preceding spaces) removed
502 503 504 |
# File 'lib/stanford-mods/searchworks.rb', line 502 def era_facet subject_temporal.map { |val| val.sub(/[\\,;]$/, '').strip } unless !subject_temporal end |
#format ⇒ String
select one or more format values from the controlled vocabulary here:
http://searchworks-solr-lb.stanford.edu:8983/solr/select?facet.field=format&rows=0&facet.sort=index
based on the dor_content_type
320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 |
# File 'lib/stanford-mods/searchworks.rb', line 320 def format val=[] formats = self.term_values(:typeOfResource) genres = self.term_values(:genre) issuance = self.term_values([:origin_info,:issuance]) if formats formats.each do |form| case form when 'text' val << 'Thesis' if genres and genres.include? 'thesis' val << 'Book' if issuance and issuance.include? 'monographic' val << 'Journal/Periodical' if issuance and issuance.include? 'continuing' val << 'Journal/Periodical' if genres and genres.include? 'article' when 'still image' val << 'Image' when 'mixed material' val << 'Manuscript/Archive' when 'moving image' val << 'Video' when 'three dimensional object' val " when 'cartographic'\n val << 'Map/Globe'\n when 'sound recording-musical'\n val << 'Music-Recording'\n when 'sound recording-nonmusical'\n val << 'Sound Recording'\n when 'software, multimedia'\n val << 'Computer File' \n else\n sw_logger.warn \"\#{druid} has an unknown typeOfResource \#{form}\"\n end\n end\n end\n if val.length>0\n return val.uniq\n end\n if not self.typeOfResource or self.typeOfResource.length == 0\n sw_logger.warn \"\#{druid} has no valid typeOfResource\"\n []\n end\nend\n" |
#geographic_facet ⇒ Array<String>
geographic_search values with trailing comma, semicolon, and backslash (and any preceding spaces) removed
496 497 498 |
# File 'lib/stanford-mods/searchworks.rb', line 496 def geographic_facet geographic_search.map { |val| val.sub(/[\\,;]$/, '').strip } unless !geographic_search end |
#geographic_search ⇒ Array<String>
Values are the contents of:
subject/geographic
subject/hierarchicalGeographic
subject/geographicCode (only include the translated value if it isn't already present from other mods geo fields)
235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 |
# File 'lib/stanford-mods/searchworks.rb', line 235 def geographic_search @geographic_search ||= begin result = self.sw_geographic_search # TODO: this should go into stanford-mods ... but then we have to set that gem up with a Logger # print a message for any unrecognized encodings xvals = self.subject.geographicCode.translated_value codes = self.term_values([:subject, :geographicCode]) if codes && codes.size > xvals.size self.subject.geographicCode.each { |n| if n. != 'marcgac' && n. != 'marccountry' sw_logger.info("#{druid} has subject geographicCode element with untranslated encoding (#{n.authority}): #{n.to_xml}") end } end # FIXME: stanford-mods should be returning [], not nil ... return nil if !result || result.empty? result end end |
#get_bc_year(dates) ⇒ Object
get the 3 digit BC year, return it as a negative, so -700 for 300 BC. Other methods will translate it to proper display, this is good for sorting.
605 606 607 608 609 610 611 612 613 614 |
# File 'lib/stanford-mods/searchworks.rb', line 605 def get_bc_year dates dates.each do |f_date| matches=f_date.scan(/\d{3} B.C./) if matches.length > 0 bc_year=matches.first[0..2] return (bc_year.to_i-1000).to_s end end return nil end |
#get_double_digit_century(dates) ⇒ Object
get a double digit century like ‘12th century’ from the date array
571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 |
# File 'lib/stanford-mods/searchworks.rb', line 571 def get_double_digit_century dates dates.each do |f_date| matches=f_date.scan(/\d{2}th/) if matches.length == 1 @pub_year=((matches.first[0,2].to_i)-1).to_s+'--' return @pub_year end #if there are multiples, check for ones with CE after them if matches.length > 0 matches.each do |match| pos = f_date.index(Regexp.new(match+'...CE')) pos = pos ? pos.to_i : f_date.index(Regexp.new(match+' century CE')) pos = pos ? pos.to_i : 0 if f_date.include?(match+' CE') or pos > 0 @pub_year=((match[0,2].to_i) - 1).to_s+'--' return @pub_year end end end end return nil end |
#get_plain_four_digit_year(dates) ⇒ Object
get a 4 digit year like 1865 from the date array
548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 |
# File 'lib/stanford-mods/searchworks.rb', line 548 def get_plain_four_digit_year dates dates.each do |f_date| matches=f_date.scan(/\d{4}/) if matches.length == 1 @pub_year=matches.first return matches.first else #if there are multiples, check for ones with CE after them matches.each do |match| #look for things like '1865-6 CE' pos = f_date.index(Regexp.new(match+'...CE')) pos = pos ? pos.to_i : 0 if f_date.include?(match+' CE') or pos > 0 @pub_year=match return match end end end end return nil end |
#get_single_digit_century(dates) ⇒ Object
get a single digit century like ‘9th century’ from the date array
617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 |
# File 'lib/stanford-mods/searchworks.rb', line 617 def get_single_digit_century dates dates.each do |f_date| matches=f_date.scan(/\d{1}th/) if matches.length == 1 @pub_year=((matches.first[0,2].to_i)-1).to_s+'--' return @pub_year end #if there are multiples, check for ones with CE after them if matches.length > 0 matches.each do |match| pos = f_date.index(Regexp.new(match+'...CE')) pos = pos ? pos.to_i : f_date.index(Regexp.new(match+' century CE')) pos = pos ? pos.to_i : 0 if f_date.include?(match+' CE') or pos > 0 @pub_year=((match[0,1].to_i) - 1).to_s+'--' return @pub_year end end end end return nil end |
#get_three_digit_year(dates) ⇒ Object
get a 3 digit year like 965 from the date array
595 596 597 598 599 600 601 602 603 |
# File 'lib/stanford-mods/searchworks.rb', line 595 def get_three_digit_year dates dates.each do |f_date| matches=f_date.scan(/\d{3}/) if matches.length > 0 return matches.first end end return nil end |
#is_date?(object) ⇒ Boolean
394 395 396 |
# File 'lib/stanford-mods/searchworks.rb', line 394 def is_date?(object) true if Date.parse(object) rescue false end |
#is_number?(object) ⇒ Boolean
391 392 393 |
# File 'lib/stanford-mods/searchworks.rb', line 391 def is_number?(object) true if Integer(object) rescue false end |
#main_author_w_date ⇒ String
the first encountered <mods><name> element with marcrelator flavor role of ‘Creator’ or ‘Author’. if no marcrelator ‘Creator’ or ‘Author’, the first name without a role. if no name without a role, then nil see Mods::Record.name in nom_terminology for details on the display_value algorithm
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/stanford-mods.rb', line 16 def result = nil first_wo_role = nil @mods_ng_xml.plain_name.each { |n| if n.role.size == 0 first_wo_role ||= n end n.role.each { |r| if r..include?('marcrelator') && (r.value.include?('Creator') || r.value.include?('Author')) result ||= n.display_value_w_date end } } if !result && first_wo_role result = first_wo_role.display_value_w_date end result end |
#main_author_w_date_test ⇒ Object
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 |
# File 'lib/stanford-mods/searchworks.rb', line 199 def result = nil first_wo_role = nil self.plain_name.each { |n| if n.role.size == 0 first_wo_role ||= n end n.role.each { |r| if r..include?('marcrelator') && (r.value.include?('Creator') || r.value.include?('Author')) result ||= n.display_value_w_date end } } if !result && first_wo_role result = first_wo_role.display_value_w_date end result end |
#place ⇒ Object
195 196 197 198 |
# File 'lib/stanford-mods/searchworks.rb', line 195 def place vals = self.term_values([:origin_info,:place,:placeTerm]) vals end |
#pub_date ⇒ String
The year the object was published, , filtered based on max_pub_date and min_pub_date from the config file
447 448 449 450 451 452 453 |
# File 'lib/stanford-mods/searchworks.rb', line 447 def pub_date val=pub_year if val return val end nil end |
#pub_date_display ⇒ Object
373 374 375 376 377 378 379 |
# File 'lib/stanford-mods/searchworks.rb', line 373 def pub_date_display if pub_dates pub_dates.first else nil end end |
#pub_date_facet ⇒ Array[String]
Values for the pub date facet. This is less strict than the 4 year date requirements for pub_date
456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 |
# File 'lib/stanford-mods/searchworks.rb', line 456 def pub_date_facet if pub_date if pub_date.start_with?('-') return (pub_date.to_i + 1000).to_s + ' B.C.' end if pub_date.include? '--' cent=pub_date[0,2].to_i cent+=1 cent=cent.to_s+'th century' return cent else return pub_date end else nil end end |
#pub_date_groups(year) ⇒ Array<String>
Returns values for the pub_date_group_facet.
290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 |
# File 'lib/stanford-mods/searchworks.rb', line 290 def pub_date_groups year if not year return nil end year=year.to_i current_year=Time.new.year.to_i result = [] if year >= current_year - 1 result << "This year" else if year >= current_year - 3 result << "Last 3 years" else if year >= current_year - 10 result << "Last 10 years" else if year >= current_year - 50 result << "Last 50 years" else result << "More than 50 years ago" end end end end end |
#pub_date_sort ⇒ Object
creates a date suitable for sorting. Guarnteed to be 4 digits or nil
433 434 435 436 437 438 439 440 441 442 443 444 |
# File 'lib/stanford-mods/searchworks.rb', line 433 def pub_date_sort pd=nil if pub_date pd=pub_date if pd.length == 3 pd='0'+pd end pd=pd.gsub('--','00') end raise "pub_date_sort was about to return a non 4 digit value #{pd}!" if pd and pd.length !=4 pd end |
#pub_dates ⇒ Array<String>
get the dates from dateIssued, and dateCreated merged into 1 array.
382 383 384 385 386 387 388 389 390 |
# File 'lib/stanford-mods/searchworks.rb', line 382 def pub_dates vals = self.term_values([:origin_info,:dateIssued]) if vals vals = vals.concat self.term_values([:origin_info,:dateCreated]) unless not self.term_values([:origin_info,:dateCreated]) else vals = self.term_values([:origin_info,:dateCreated]) end vals and vals.empty? ? nil : vals end |
#pub_year ⇒ String
Get the publish year from mods
400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 |
# File 'lib/stanford-mods/searchworks.rb', line 400 def pub_year #use the cached year if there is one if @pub_year if @pub_year == '' return nil end return @pub_year end dates=pub_dates if dates year=[] pruned_dates=[] dates.each do |f_date| #remove ? and [] pruned_dates << f_date.gsub('?','').gsub('[','').gsub(']','') end #try to find a date starting with the most normal date formats and progressing to more wonky ones @pub_year=get_plain_four_digit_year pruned_dates return @pub_year if @pub_year @pub_year=get_double_digit_century pruned_dates return @pub_year if @pub_year @pub_year=get_bc_year pruned_dates return @pub_year if @pub_year @pub_year=get_three_digit_year pruned_dates return @pub_year if @pub_year @pub_year=get_single_digit_century pruned_dates return @pub_year if @pub_year end @pub_year='' sw_logger.info("#{druid} no valid pub date found in '#{dates.to_s}'") return nil end |
#subject_all_search ⇒ Array<String>
Values are the contents of:
all subject subelements except subject/cartographic plus genre top level element
366 367 368 369 370 371 372 |
# File 'lib/stanford-mods/searchworks.rb', line 366 def subject_all_search vals = topic_search ? Array.new(topic_search) : [] vals.concat(geographic_search) if geographic_search vals.concat(subject_other_search) if subject_other_search vals.concat(subject_other_subvy_search) if subject_other_subvy_search vals.empty? ? nil : vals end |
#subject_names ⇒ Object
convenience method for subject/name/namePart values (to avoid parsing the mods for the same thing multiple times)
523 524 525 |
# File 'lib/stanford-mods/searchworks.rb', line 523 def subject_names @subject_names ||= self.sw_subject_names end |
#subject_occupations ⇒ Object
convenience method for subject/occupation values (to avoid parsing the mods for the same thing multiple times)
528 529 530 |
# File 'lib/stanford-mods/searchworks.rb', line 528 def subject_occupations @subject_occupations ||= self.term_values([:subject, :occupation]) end |
#subject_other_search ⇒ Array<String>
Values are the contents of:
subject/name
subject/occupation - no subelements
subject/titleInfo
262 263 264 265 266 267 268 269 |
# File 'lib/stanford-mods/searchworks.rb', line 262 def subject_other_search @subject_other_search ||= begin vals = subject_occupations ? Array.new(subject_occupations) : [] vals.concat(subject_names) if subject_names vals.concat(subject_titles) if subject_titles vals.empty? ? nil : vals end end |
#subject_other_subvy_search ⇒ Array<String>
Values are the contents of:
subject/temporal
subject/genre
275 276 277 278 279 280 281 282 283 284 285 286 287 288 |
# File 'lib/stanford-mods/searchworks.rb', line 275 def subject_other_subvy_search @subject_other_subvy_search ||= begin vals = subject_temporal ? Array.new(subject_temporal) : [] gvals = self.term_values([:subject, :genre]) vals.concat(gvals) if gvals # print a message for any temporal encodings self.subject.temporal.each { |n| sw_logger.info("#{druid} has subject temporal element with untranslated encoding: #{n.to_xml}") if !n.encoding.empty? } vals.empty? ? nil : vals end end |
#subject_temporal ⇒ Object
convenience method for subject/temporal values (to avoid parsing the mods for the same thing multiple times)
533 534 535 |
# File 'lib/stanford-mods/searchworks.rb', line 533 def subject_temporal @subject_temporal ||= self.term_values([:subject, :temporal]) end |
#subject_titles ⇒ Object
convenience method for subject/titleInfo values (to avoid parsing the mods for the same thing multiple times)
538 539 540 |
# File 'lib/stanford-mods/searchworks.rb', line 538 def subject_titles @subject_titles ||= self.sw_subject_titles end |
#subject_topics ⇒ Object
convenience method for subject/topic values (to avoid parsing the mods for the same thing multiple times)
543 544 545 |
# File 'lib/stanford-mods/searchworks.rb', line 543 def subject_topics @subject_topics ||= self.term_values([:subject, :topic]) end |
#sw_addl_authors ⇒ Array<String>
Returns values for author_7xx_search field.
62 63 64 |
# File 'lib/stanford-mods/searchworks.rb', line 62 def end |
#sw_addl_titles ⇒ Array<String>
this includes all titles except
116 117 118 |
# File 'lib/stanford-mods/searchworks.rb', line 116 def sw_addl_titles full_titles.select { |s| s !~ Regexp.new(Regexp.escape(sw_short_title)) } end |
#sw_corporate_authors ⇒ Array<String>
Returns values for author_corp_display.
78 79 80 81 |
# File 'lib/stanford-mods/searchworks.rb', line 78 def val=@mods_ng_xml.plain_name.select {|n| n.type_at == 'corporate'}.map { |n| n.display_value_w_date } val end |
#sw_full_title ⇒ String
Returns value for title_245_search, title_display, title_full_display.
106 107 108 109 110 111 112 |
# File 'lib/stanford-mods/searchworks.rb', line 106 def sw_full_title toret = full_titles ? full_titles.find { |s| s =~ Regexp.new(Regexp.escape(sw_short_title)) } : nil if toret toret = toret.gsub(/,$/, '') end toret end |
#sw_full_title_without_commas ⇒ Object
remove trailing commas
219 220 221 222 223 224 225 |
# File 'lib/stanford-mods/searchworks.rb', line 219 def sw_full_title_without_commas toret = self.sw_full_title if toret toret = toret.gsub(/,$/, '') end toret end |
#sw_geographic_search(sep = ' ') ⇒ Array<String>
Values are the contents of:
subject/geographic
subject/hierarchicalGeographic
subject/geographicCode (only include the translated value if it isn't already present from other mods geo fields)
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/stanford-mods/searchworks.rb', line 135 def sw_geographic_search(sep = ' ') result = term_values([:subject, :geographic]) || [] # hierarchicalGeographic has sub elements @mods_ng_xml.subject.hierarchicalGeographic.each { |hg_node| hg_vals = [] hg_node.element_children.each { |e| hg_vals << e.text unless e.text.empty? } result << hg_vals.join(sep) unless hg_vals.empty? } trans_code_vals = @mods_ng_xml.subject.geographicCode.translated_value if trans_code_vals trans_code_vals.each { |val| result << val if !result.include?(val) } end result end |
#sw_impersonal_authors ⇒ Array<String>
return the display_value_w_date for all <mods><name> elements that do not have type=‘personal’
73 74 75 |
# File 'lib/stanford-mods/searchworks.rb', line 73 def @mods_ng_xml.plain_name.select {|n| n.type_at != 'personal'}.map { |n| n.display_value_w_date } end |
#sw_language_facet ⇒ Object
include langagues known to SearchWorks; try to error correct when possible (e.g. when ISO-639 disagrees with MARC standard)
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/stanford-mods/searchworks.rb', line 11 def sw_language_facet result = [] @mods_ng_xml.language.each { |n| # get languageTerm codes and add their translations to the result n.code_term.each { |ct| if ct..match(/^iso639/) begin vals = ct.text.split(/[,|\ ]/).reject {|x| x.strip.length == 0 } vals.each do |v| iso639_val = ISO_639.find(v.strip).english_name if SEARCHWORKS_LANGUAGES.has_value?(iso639_val) result << iso639_val else result << SEARCHWORKS_LANGUAGES[v.strip] end end rescue => e # TODO: this should be written to a logger p "Couldn't find english name for #{ct.text}" result << SEARCHWORKS_LANGUAGES[v.strip] end else vals = ct.text.split(/[,|\ ]/).reject {|x| x.strip.length == 0 } vals.each do |v| result << SEARCHWORKS_LANGUAGES[v.strip] end end } # add languageTerm text values n.text_term.each { |tt| val = tt.text.strip result << val if val.length > 0 && SEARCHWORKS_LANGUAGES.has_value?(val) } # add language values that aren't in languageTerm subelement if n.languageTerm.size == 0 result << n.text if SEARCHWORKS_LANGUAGES.has_value?(n.text) end } result.uniq end |
#sw_logger ⇒ Object
227 228 229 |
# File 'lib/stanford-mods/searchworks.rb', line 227 def sw_logger @logger ||= Logger.new(STDOUT) end |
#sw_main_author ⇒ String
Returns value for author_1xx_search field.
57 58 59 |
# File 'lib/stanford-mods/searchworks.rb', line 57 def end |
#sw_meeting_authors ⇒ Array<String>
Returns values for author_meeting_display.
84 85 86 |
# File 'lib/stanford-mods/searchworks.rb', line 84 def @mods_ng_xml.plain_name.select {|n| n.type_at == 'conference'}.map { |n| n.display_value_w_date } end |
#sw_person_authors ⇒ Array<String>
Returns values for author_person_facet, author_person_display.
67 68 69 |
# File 'lib/stanford-mods/searchworks.rb', line 67 def personal_names_w_dates end |
#sw_short_title ⇒ String
Returns value for title_245a_search field.
101 102 103 |
# File 'lib/stanford-mods/searchworks.rb', line 101 def sw_short_title short_titles ? short_titles.first : nil end |
#sw_sort_author ⇒ String
Returns a sortable version of the main_author:
+ sorting title
which is the mods approximation of the value created for a marc record
92 93 94 95 96 |
# File 'lib/stanford-mods/searchworks.rb', line 92 def # substitute java Character.MAX_CODE_POINT for nil main_author so missing main authors sort last val = '' + ( ? : "\u{FFFF} ") + ( sort_title ? sort_title : '') val.gsub(/[[:punct:]]*/, '').strip end |
#sw_sort_title ⇒ String
Returns a sortable version of the main title
122 123 124 125 |
# File 'lib/stanford-mods/searchworks.rb', line 122 def sw_sort_title val = '' + ( sort_title ? sort_title : '') val.gsub(/[[:punct:]]*/, '').strip end |
#sw_subject_names(sep = ', ') ⇒ Array<String>
Values are the contents of:
subject/name/namePart
"Values from namePart subelements should be concatenated in the order they appear (e.g. "Shakespeare, William, 1564-1616")"
162 163 164 165 166 167 168 169 |
# File 'lib/stanford-mods/searchworks.rb', line 162 def sw_subject_names(sep = ', ') result = [] @mods_ng_xml.subject.name_el.select { |n_el| n_el.namePart }.each { |name_el_w_np| parts = name_el_w_np.namePart.map { |npn| npn.text unless npn.text.empty? }.compact result << parts.join(sep).strip unless parts.empty? } result end |
#sw_subject_titles(sep = ' ') ⇒ Array<String>
Values are the contents of:
subject/titleInfo/(subelements)
175 176 177 178 179 180 181 182 |
# File 'lib/stanford-mods/searchworks.rb', line 175 def sw_subject_titles(sep = ' ') result = [] @mods_ng_xml.subject.titleInfo.each { |ti_el| parts = ti_el.element_children.map { |el| el.text unless el.text.empty? }.compact result << parts.join(sep).strip unless parts.empty? } result end |
#topic_facet ⇒ Array<String>
Values are the contents of:
subject/topic
subject/name
subject/title
subject/occupation
with trailing comma, semicolon, and backslash (and any preceding spaces) removed
482 483 484 485 486 487 488 489 490 491 492 |
# File 'lib/stanford-mods/searchworks.rb', line 482 def topic_facet vals = subject_topics ? Array.new(subject_topics) : [] vals.concat(subject_names) if subject_names vals.concat(subject_titles) if subject_titles vals.concat(subject_occupations) if subject_occupations vals.map! { |val| v = val.sub(/[\\,;]$/, '') v.strip } vals.empty? ? nil : vals end |
#topic_search ⇒ Array<String>
Values are the contents of:
mods/genre
mods/subject/topic
188 189 190 191 192 193 194 |
# File 'lib/stanford-mods/searchworks.rb', line 188 def topic_search @topic_search ||= begin vals = self.term_values(:genre) || [] vals.concat(subject_topics) if subject_topics vals.empty? ? nil : vals end end |