blacklight-marc 6.3.0 → 7.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +45 -0
- data/{.solr_wrapper.yml → .solr_wrapper.yaml} +0 -0
- data/Gemfile +12 -0
- data/README.md +28 -7
- data/app/assets/stylesheets/blacklight_marc.scss +4 -6
- data/app/helpers/blacklight_marc_helper.rb +5 -4
- data/app/models/concerns/blacklight/solr/document/marc.rb +13 -12
- data/app/models/concerns/blacklight/solr/document/marc_export.rb +53 -52
- data/app/views/bookmarks/_endnote.html.erb +1 -1
- data/app/views/bookmarks/_refworks.html.erb +1 -1
- data/app/views/catalog/_marc_view.html.erb +4 -4
- data/app/views/catalog/endnote.endnote.erb +1 -1
- data/app/views/catalog/librarian_view.html.erb +7 -4
- data/blacklight-marc.gemspec +4 -5
- data/config/routes.rb +1 -1
- data/lib/blacklight/marc/catalog.rb +9 -15
- data/lib/blacklight/marc/engine.rb +2 -0
- data/lib/blacklight/marc/indexer.rb +5 -41
- data/lib/blacklight/marc/indexer/formats.rb +1 -1
- data/lib/blacklight/marc/routes.rb +2 -39
- data/lib/blacklight/marc/routes/marc_viewable.rb +20 -0
- data/lib/blacklight/marc/version.rb +1 -1
- data/lib/generators/blacklight/marc/install_generator.rb +15 -8
- data/lib/generators/blacklight/marc/templates/app/models/marc_indexer.rb +57 -57
- data/lib/generators/blacklight/marc/templates/config/translation_maps/callnumber_map.properties +149 -11
- data/lib/railties/solr_marc.rake +33 -33
- data/solr/conf/schema.xml +322 -563
- data/solr/conf/solrconfig.xml +78 -294
- data/spec/controllers/catalog_controller_spec.rb +11 -6
- data/spec/features/bookmarks_spec.rb +2 -1
- data/spec/features/search_formats_spec.rb +3 -3
- data/spec/integration/solr_document_spec.rb +19 -19
- data/spec/lib/blacklight_solr_document_marc_spec.rb +7 -7
- data/spec/lib/indexer/dewey_spec.rb +4 -4
- data/spec/lib/indexer/formats_spec.rb +1 -1
- data/spec/lib/marc_export_spec.rb +46 -46
- data/spec/lib/tasks/solr_marc_task_spec.rb +7 -7
- data/spec/lib/traject_indexer_spec.rb +6 -2
- data/spec/routing/routes_spec.rb +0 -6
- data/spec/test_app_templates/Gemfile.extra +2 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +14 -13
- data/spec/views/bookmarks/_endnote.html.erb_spec.rb +16 -6
- data/spec/views/bookmarks/_refworks.html.erb_spec.rb +17 -7
- data/spec/views/catalog/index.atom.builder_spec.rb +12 -17
- data/test_support/config/translation_maps/test_formats.properties +3 -1
- metadata +18 -43
- data/.travis.yml +0 -21
- data/app/helpers/blacklight_bookmarks_helper.rb +0 -3
- data/solr/sample_solr_documents.yml +0 -2692
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67e4c2b3e51422a3801fda3a61fe549e73889f43cdee3571c35368f44f10490e
|
4
|
+
data.tar.gz: dec3a61d6f54c91811d37afa6d9a4462255c224c33d1f7a0448d1de3028161ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 57f8a9949505a58970bae0a8aaf9f25a0d46c1d7d80272cf19c8a5ff43aa2833c3676e9f5246dd88c8954d33d6699601ddf463429ae30cb916a762616b7014eb
|
7
|
+
data.tar.gz: 959d4dae4de2e8f5378cd7379b3863a1ca70408f9d6e0ba95bed151651ec6bc5b4f052167782caf53f3d1c351e6747f68be5841825888a4be724ee3c02ad1330
|
@@ -0,0 +1,45 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ master ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ master ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
test:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
strategy:
|
13
|
+
matrix:
|
14
|
+
rails_version: [6.1.1]
|
15
|
+
ruby: [2.7, 3.0]
|
16
|
+
env:
|
17
|
+
RAILS_VERSION: ${{ matrix.rails_version }}
|
18
|
+
steps:
|
19
|
+
- uses: actions/checkout@v2
|
20
|
+
- name: Set up Ruby ${{ matrix.ruby }}
|
21
|
+
uses: ruby/setup-ruby@v1
|
22
|
+
with:
|
23
|
+
ruby-version: ${{ matrix.ruby }}
|
24
|
+
- name: Install dependencies with Rails ${{ matrix.rails_version }}
|
25
|
+
run: bundle install
|
26
|
+
- name: Run tests
|
27
|
+
run: bundle exec rake
|
28
|
+
test_rails52:
|
29
|
+
runs-on: ubuntu-latest
|
30
|
+
strategy:
|
31
|
+
matrix:
|
32
|
+
rails_version: [5.2.4.4, 6.0.3.4]
|
33
|
+
ruby: [2.7]
|
34
|
+
env:
|
35
|
+
RAILS_VERSION: ${{ matrix.rails_version }}
|
36
|
+
steps:
|
37
|
+
- uses: actions/checkout@v2
|
38
|
+
- name: Set up Ruby ${{ matrix.ruby }}
|
39
|
+
uses: ruby/setup-ruby@v1
|
40
|
+
with:
|
41
|
+
ruby-version: ${{ matrix.ruby }}
|
42
|
+
- name: Install dependencies with Rails ${{ matrix.rails_version }}
|
43
|
+
run: bundle install
|
44
|
+
- name: Run tests
|
45
|
+
run: bundle exec rake
|
File without changes
|
data/Gemfile
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
+
git_source(:github) do |repo_name|
|
4
|
+
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?('/')
|
5
|
+
"https://github.com/#{repo_name}.git"
|
6
|
+
end
|
7
|
+
|
3
8
|
# Please see blacklight_marc.gemspec for dependency information.
|
4
9
|
gemspec path: File.expand_path('..', __FILE__)
|
5
10
|
|
@@ -28,6 +33,11 @@ else
|
|
28
33
|
end
|
29
34
|
|
30
35
|
case ENV['RAILS_VERSION']
|
36
|
+
when /^6.0/
|
37
|
+
gem 'sass-rails', '>= 6'
|
38
|
+
gem 'webpacker', '~> 4.0'
|
39
|
+
when /^5.[12]/
|
40
|
+
gem 'sass-rails', '~> 5.0'
|
31
41
|
when /^4.2/
|
32
42
|
gem 'responders', '~> 2.0'
|
33
43
|
gem 'sass-rails', '>= 5.0'
|
@@ -37,3 +47,5 @@ else
|
|
37
47
|
end
|
38
48
|
end
|
39
49
|
# END ENGINE_CART BLOCK
|
50
|
+
|
51
|
+
eval_gemfile File.expand_path("spec/test_app_templates/Gemfile.extra", File.dirname(__FILE__))
|
data/README.md
CHANGED
@@ -1,9 +1,15 @@
|
|
1
|
-
[![Build Status](https://travis-ci.org/projectblacklight/
|
1
|
+
[![Build Status](https://travis-ci.org/projectblacklight/blacklight-marc.png?branch=master)](https://travis-ci.org/projectblacklight/blacklight-marc)
|
2
2
|
|
3
3
|
# Blacklight::Marc
|
4
4
|
|
5
5
|
MARC-specific enhancements for [Blacklight](https://github.com/projectblacklight/blacklight)
|
6
6
|
|
7
|
+
## Features
|
8
|
+
* Rake task `solr:marc:index` to import .mrc files using Traject and app/models/marc_indexer
|
9
|
+
* "Librarian View" at `catalog/:id/librarian_view`
|
10
|
+
* Export records to refworks and endnote
|
11
|
+
* Blacklight::Solr::Document mixins for exporting and transforming MARC data from a stored Solr field
|
12
|
+
|
7
13
|
## Installation
|
8
14
|
|
9
15
|
Add this line to your application's Gemfile:
|
@@ -18,6 +24,27 @@ After running the blacklight generator, run the blacklight_marc generator:
|
|
18
24
|
|
19
25
|
$ rails generate blacklight:marc:install
|
20
26
|
|
27
|
+
|
28
|
+
## How does it work?
|
29
|
+
This generator injects an include into CatalogController (parent class of BookmarksController):
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
include Blacklight::Marc::Catalog
|
33
|
+
```
|
34
|
+
|
35
|
+
and the following code is generated into SolrDocument:
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
use_extension( Blacklight::Solr::Document::Marc) do |document|
|
39
|
+
document.key?( :marc_display )
|
40
|
+
end
|
41
|
+
```
|
42
|
+
|
43
|
+
This means, the extension will be applied on the instance if the backing hash
|
44
|
+
has a field called `marc_display`.
|
45
|
+
|
46
|
+
|
47
|
+
## Indexing
|
21
48
|
The generator will create a model called MarcIndexer. This model can be customized by modifying
|
22
49
|
the field configurations in its initializer as a Traject 2 indexer; new indexing behaviors can
|
23
50
|
be added to it via mixins or inline methods. Two example mixins are provided:
|
@@ -35,12 +62,6 @@ MarcIndexer
|
|
35
62
|
end
|
36
63
|
end
|
37
64
|
```
|
38
|
-
## Features
|
39
|
-
* Rake task `solr:marc:index` to import .mrc files using Traject and app/models/marc_indexer
|
40
|
-
* Librarian view at `catalog/:id/librarian_view`
|
41
|
-
* Export records to refworks and endnote
|
42
|
-
* Blacklight::Solr::Document mixins for exporting and transforming MARC data from a stored Solr field
|
43
|
-
|
44
65
|
|
45
66
|
## Documentation, Information and Support
|
46
67
|
|
@@ -12,6 +12,9 @@ $marc_item_separator: 1px solid $text-muted !default;
|
|
12
12
|
#marc_view
|
13
13
|
{
|
14
14
|
text-align:left;
|
15
|
+
/* https://meyerweb.com/eric/thoughts/2010/02/12/fixed-monospace-sizing/ */
|
16
|
+
font-family: "Courier New", monospace, serif;
|
17
|
+
font-size: 1em;
|
15
18
|
|
16
19
|
.field
|
17
20
|
{
|
@@ -22,7 +25,7 @@ $marc_item_separator: 1px solid $text-muted !default;
|
|
22
25
|
.ind1, .ind2
|
23
26
|
{
|
24
27
|
display:inline;
|
25
|
-
padding:0 $
|
28
|
+
padding: 0 ($spacer / 2);
|
26
29
|
}
|
27
30
|
|
28
31
|
.subfields
|
@@ -35,8 +38,3 @@ $marc_item_separator: 1px solid $text-muted !default;
|
|
35
38
|
float:left;
|
36
39
|
}
|
37
40
|
}
|
38
|
-
|
39
|
-
/* refworks uses a form; we need to give it some additional padding to make it look like a link */
|
40
|
-
#refworks-form .btn {
|
41
|
-
padding: $nav-link-padding;
|
42
|
-
}
|
@@ -1,18 +1,18 @@
|
|
1
1
|
module BlacklightMarcHelper
|
2
2
|
|
3
3
|
# This method should move to BlacklightMarc in Blacklight 6.x
|
4
|
-
def refworks_export_url params = {}
|
4
|
+
def refworks_export_url params = {}, *_
|
5
5
|
"http://www.refworks.com/express/expressimport.asp?vendor=#{CGI.escape(params[:vendor] || application_name)}&filter=#{CGI.escape(params[:filter] || "MARC Format")}&encoding=65001" + (("&url=#{CGI.escape(params[:url])}" if params[:url]) || "")
|
6
6
|
end
|
7
7
|
|
8
|
-
def refworks_solr_document_path opts = {}
|
8
|
+
def refworks_solr_document_path opts = {}, *_
|
9
9
|
if opts[:id]
|
10
10
|
refworks_export_url(url: solr_document_url(opts[:id], format: :refworks_marc_txt))
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
# For exporting a single endnote document. (endnote_catalog_path is defined by blacklight-marc and it is used for multiple document export)
|
15
|
-
def single_endnote_catalog_path opts = {}
|
15
|
+
def single_endnote_catalog_path opts = {}, *_
|
16
16
|
solr_document_path(opts.merge(format: 'endnote'))
|
17
17
|
end
|
18
18
|
|
@@ -33,7 +33,8 @@ module BlacklightMarcHelper
|
|
33
33
|
val = ''
|
34
34
|
documents.each do |doc|
|
35
35
|
if doc.exports_as? :endnote
|
36
|
-
|
36
|
+
endnote = doc.export_as(:endnote)
|
37
|
+
val += "#{endnote}\n" if endnote
|
37
38
|
end
|
38
39
|
end
|
39
40
|
val
|
@@ -6,7 +6,7 @@
|
|
6
6
|
# then provides various transformations/exports of that Marc via the included
|
7
7
|
# Blacklight::Solr::Document::MarcExport module.
|
8
8
|
#
|
9
|
-
# This extension would normally be registered using
|
9
|
+
# This extension would normally be registered using
|
10
10
|
# Blacklight::Solr::Document#use_extension. eg:
|
11
11
|
#
|
12
12
|
# SolrDocument.use_extension( Blacklight::Solr::Document::Marc ) { |document| my_logic_for_document_has_marc?( document ) }
|
@@ -20,15 +20,15 @@ require 'marc'
|
|
20
20
|
|
21
21
|
module Blacklight::Solr::Document::Marc
|
22
22
|
|
23
|
-
include Blacklight::Solr::Document::MarcExport # All our export_as stuff based on to_marc.
|
24
|
-
|
23
|
+
include Blacklight::Solr::Document::MarcExport # All our export_as stuff based on to_marc.
|
24
|
+
|
25
25
|
class UnsupportedMarcFormatType < RuntimeError; end
|
26
|
-
|
26
|
+
|
27
27
|
def self.extended(document)
|
28
|
-
# Register our exportable formats, we inherit these from MarcExport
|
28
|
+
# Register our exportable formats, we inherit these from MarcExport
|
29
29
|
Blacklight::Solr::Document::MarcExport.register_export_formats( document )
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
# ruby-marc object
|
33
33
|
def to_marc
|
34
34
|
@_ruby_marc_obj ||= load_marc
|
@@ -50,29 +50,30 @@ module Blacklight::Solr::Document::Marc
|
|
50
50
|
return MARC::Record.new_from_hash( JSON.parse( fetch(_marc_source_field) ) )
|
51
51
|
else
|
52
52
|
raise UnsupportedMarcFormatType.new("Only marcxml, marc21, and json are supported, this documents format is #{_marc_format_type} and the current extension parameters are #{self.class.extension_parameters.inspect}")
|
53
|
-
end
|
53
|
+
end
|
54
54
|
rescue Exception => e
|
55
55
|
raise e if e.is_a? UnsupportedMarcFormatType
|
56
56
|
|
57
57
|
Rails.logger.error("Blacklight failed to parse MARC record. Exception was: #{e}")
|
58
|
+
nil
|
58
59
|
end
|
59
|
-
|
60
|
+
|
60
61
|
def marc_record_from_marcxml
|
61
62
|
MARC::XMLReader.new(StringIO.new( fetch(_marc_source_field) )).to_a.first
|
62
63
|
end
|
63
|
-
|
64
|
+
|
64
65
|
def _marc_helper
|
65
66
|
@_marc_helper ||= (
|
66
67
|
Blacklight::Marc::Document.new fetch(_marc_source_field), _marc_format_type )
|
67
68
|
end
|
68
69
|
|
69
|
-
def _marc_source_field
|
70
|
+
def _marc_source_field
|
70
71
|
self.class.extension_parameters[:marc_source_field]
|
71
72
|
end
|
72
73
|
|
73
74
|
def _marc_format_type
|
74
75
|
#TODO: Raise if not present
|
75
|
-
self.class.extension_parameters[:marc_format_type]
|
76
|
+
self.class.extension_parameters[:marc_format_type]
|
76
77
|
end
|
77
|
-
|
78
|
+
|
78
79
|
end
|
@@ -4,13 +4,13 @@
|
|
4
4
|
# it for your own custom Blacklight document Marc extension too -- just
|
5
5
|
# include this module in any document extension (or any other class)
|
6
6
|
# that provides a #to_marc returning a ruby-marc object. This module will add
|
7
|
-
# in export_as translation methods for a variety of formats.
|
7
|
+
# in export_as translation methods for a variety of formats.
|
8
8
|
module Blacklight::Solr::Document::MarcExport
|
9
|
-
|
9
|
+
|
10
10
|
def self.register_export_formats(document)
|
11
11
|
document.will_export_as(:xml)
|
12
12
|
document.will_export_as(:marc, "application/marc")
|
13
|
-
# marcxml content type:
|
13
|
+
# marcxml content type:
|
14
14
|
# http://tools.ietf.org/html/draft-denenberg-mods-etc-media-types-00
|
15
15
|
document.will_export_as(:marcxml, "application/marcxml+xml")
|
16
16
|
document.will_export_as(:openurl_ctx_kev, "application/x-openurl-ctx-kev")
|
@@ -27,20 +27,20 @@ module Blacklight::Solr::Document::MarcExport
|
|
27
27
|
to_marc.to_xml.to_s
|
28
28
|
end
|
29
29
|
alias_method :export_as_xml, :export_as_marcxml
|
30
|
-
|
31
|
-
|
30
|
+
|
31
|
+
|
32
32
|
# TODO This exporting as formatted citation thing should be re-thought
|
33
33
|
# redesigned at some point to be more general purpose, but this
|
34
34
|
# is in-line with what we had before, but at least now attached
|
35
|
-
# to the document extension where it belongs.
|
35
|
+
# to the document extension where it belongs.
|
36
36
|
def export_as_apa_citation_txt
|
37
37
|
apa_citation( to_marc )
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
def export_as_mla_citation_txt
|
41
41
|
mla_citation( to_marc )
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
def export_as_chicago_citation_txt
|
45
45
|
chicago_citation( to_marc )
|
46
46
|
end
|
@@ -52,8 +52,8 @@ module Blacklight::Solr::Document::MarcExport
|
|
52
52
|
# more sensibly. The "format" argument was in the old marc.marc.to_zotero
|
53
53
|
# call, but didn't neccesarily do what it thought it did anyway. Left in
|
54
54
|
# for now for backwards compatibilty, but should be replaced by
|
55
|
-
# just ruby OpenURL.
|
56
|
-
def export_as_openurl_ctx_kev(format = nil)
|
55
|
+
# just ruby OpenURL.
|
56
|
+
def export_as_openurl_ctx_kev(format = nil)
|
57
57
|
title = to_marc.find{|field| field.tag == '245'}
|
58
58
|
author = to_marc.find{|field| field.tag == '100'}
|
59
59
|
corp_author = to_marc.find{|field| field.tag == '110'}
|
@@ -100,11 +100,13 @@ module Blacklight::Solr::Document::MarcExport
|
|
100
100
|
|
101
101
|
# This format used to be called 'refworks', which wasn't really
|
102
102
|
# accurate, sounds more like 'refworks tagged format'. Which this
|
103
|
-
# is not, it's instead some weird under-documented Refworks
|
103
|
+
# is not, it's instead some weird under-documented Refworks
|
104
104
|
# proprietary marc-ish in text/plain format. See
|
105
|
-
# http://robotlibrarian.billdueber.com/sending-marcish-data-to-refworks/
|
105
|
+
# http://robotlibrarian.billdueber.com/2009/05/sending-marcish-data-to-refworks/
|
106
106
|
def export_as_refworks_marc_txt
|
107
|
-
|
107
|
+
marc_obj = to_marc
|
108
|
+
return unless marc_obj
|
109
|
+
fields = marc_obj.find_all { |f| ('000'..'999') === f.tag }
|
108
110
|
text = "LEADER #{to_marc.leader}"
|
109
111
|
fields.each do |field|
|
110
112
|
unless ["940","999"].include?(field.tag)
|
@@ -124,10 +126,8 @@ module Blacklight::Solr::Document::MarcExport
|
|
124
126
|
# As of 11 May 2010, Refworks has a problem with UTF-8 if it's decomposed,
|
125
127
|
# it seems to want C form normalization, although RefWorks support
|
126
128
|
# couldn't tell me that. -jrochkind
|
127
|
-
text
|
128
|
-
|
129
|
-
return text
|
130
|
-
end
|
129
|
+
text.unicode_normalize(:nfc)
|
130
|
+
end
|
131
131
|
|
132
132
|
# Endnote Import Format. See the EndNote User Guide at:
|
133
133
|
# http://www.endnote.com/support/enx3man-terms-win.asp
|
@@ -138,7 +138,7 @@ module Blacklight::Solr::Document::MarcExport
|
|
138
138
|
# endnote import format; the %0 is likely to be entirely illegal, the
|
139
139
|
# rest of the data is barely correct but messy. TODO, a new version of this,
|
140
140
|
# or better yet just an export_as_ris instead, which will be more general
|
141
|
-
# purpose.
|
141
|
+
# purpose.
|
142
142
|
def export_as_endnote()
|
143
143
|
end_note_format = {
|
144
144
|
"%A" => "100.a",
|
@@ -154,10 +154,12 @@ module Blacklight::Solr::Document::MarcExport
|
|
154
154
|
"%7" => "250.a"
|
155
155
|
}
|
156
156
|
marc_obj = to_marc
|
157
|
+
return unless marc_obj
|
158
|
+
|
157
159
|
# TODO. This should be rewritten to guess
|
158
160
|
# from actual Marc instead, probably.
|
159
161
|
format_str = 'Generic'
|
160
|
-
|
162
|
+
|
161
163
|
text = ''
|
162
164
|
text << "%0 #{ format_str }\n"
|
163
165
|
# If there is some reliable way of getting the language of a record we can add it here
|
@@ -170,7 +172,7 @@ module Blacklight::Solr::Document::MarcExport
|
|
170
172
|
else
|
171
173
|
second_value = []
|
172
174
|
end
|
173
|
-
|
175
|
+
|
174
176
|
if marc_obj[first_value[0].to_s]
|
175
177
|
marc_obj.find_all{|f| (first_value[0].to_s) === f.tag}.each do |field|
|
176
178
|
if field[first_value[1]].to_s or field[second_value[1]].to_s
|
@@ -190,11 +192,11 @@ module Blacklight::Solr::Document::MarcExport
|
|
190
192
|
end
|
191
193
|
|
192
194
|
protected
|
193
|
-
|
195
|
+
|
194
196
|
# Main method for defining chicago style citation. If we don't end up converting to using a citation formatting service
|
195
197
|
# we should make this receive a semantic document and not MARC so we can use this with other formats.
|
196
198
|
def chicago_citation(marc)
|
197
|
-
authors = get_all_authors(marc)
|
199
|
+
authors = get_all_authors(marc)
|
198
200
|
author_text = ""
|
199
201
|
unless authors[:primary_authors].blank?
|
200
202
|
if authors[:primary_authors].length > 10
|
@@ -226,7 +228,7 @@ module Blacklight::Solr::Document::MarcExport
|
|
226
228
|
author_text << "and #{name_reverse(author)}."
|
227
229
|
else
|
228
230
|
author_text << "#{name_reverse(author)}, "
|
229
|
-
end
|
231
|
+
end
|
230
232
|
end
|
231
233
|
else
|
232
234
|
author_text << authors[:primary_authors].first
|
@@ -242,7 +244,7 @@ module Blacklight::Solr::Document::MarcExport
|
|
242
244
|
authors[:compilers].each do |compiler|
|
243
245
|
temp_authors << [compiler, "comp."]
|
244
246
|
end
|
245
|
-
|
247
|
+
|
246
248
|
unless temp_authors.blank?
|
247
249
|
if temp_authors.length > 10
|
248
250
|
temp_authors.each_with_index do |author,index|
|
@@ -281,18 +283,18 @@ module Blacklight::Solr::Document::MarcExport
|
|
281
283
|
section_title << "."
|
282
284
|
end
|
283
285
|
end
|
284
|
-
|
286
|
+
|
285
287
|
if !authors[:primary_authors].blank? and (!authors[:translators].blank? or !authors[:editors].blank? or !authors[:compilers].blank?)
|
286
288
|
additional_title << "Translated by #{authors[:translators].collect{|name| name_reverse(name)}.join(" and ")}. " unless authors[:translators].blank?
|
287
289
|
additional_title << "Edited by #{authors[:editors].collect{|name| name_reverse(name)}.join(" and ")}. " unless authors[:editors].blank?
|
288
290
|
additional_title << "Compiled by #{authors[:compilers].collect{|name| name_reverse(name)}.join(" and ")}. " unless authors[:compilers].blank?
|
289
291
|
end
|
290
|
-
|
292
|
+
|
291
293
|
edition = ""
|
292
294
|
edition << setup_edition(marc) unless setup_edition(marc).nil?
|
293
|
-
|
295
|
+
|
294
296
|
pub_info = ""
|
295
|
-
if marc["260"] and (marc["260"]["a"] or marc["260"]["b"])
|
297
|
+
if marc["260"] and (marc["260"]["a"] or marc["260"]["b"])
|
296
298
|
pub_info << clean_end_punctuation(marc["260"]["a"]).strip if marc["260"]["a"]
|
297
299
|
pub_info << ": #{clean_end_punctuation(marc["260"]["b"]).strip}" if marc["260"]["b"]
|
298
300
|
pub_info << ", #{setup_pub_date(marc)}" if marc["260"]["c"]
|
@@ -301,7 +303,7 @@ module Blacklight::Solr::Document::MarcExport
|
|
301
303
|
elsif marc["502"] and (marc["502"]["b"] or marc["502"]["c"] or marc["502"]["d"]) #sometimes the dissertation note is encoded in pieces in the $b $c and $d sub fields instead of lumped into the $a
|
302
304
|
pub_info << "#{marc["502"]["b"]}, #{marc["502"]["c"]}, #{clean_end_punctuation(marc["502"]["d"])}"
|
303
305
|
end
|
304
|
-
|
306
|
+
|
305
307
|
citation = ""
|
306
308
|
citation << "#{author_text} " unless author_text.blank?
|
307
309
|
citation << "<i>#{title}.</i> " unless title.blank?
|
@@ -311,13 +313,13 @@ module Blacklight::Solr::Document::MarcExport
|
|
311
313
|
citation << "#{pub_info}." unless pub_info.blank?
|
312
314
|
citation
|
313
315
|
end
|
314
|
-
|
315
|
-
|
316
|
-
|
316
|
+
|
317
|
+
|
318
|
+
|
317
319
|
def mla_citation(record)
|
318
320
|
text = ''
|
319
321
|
authors_final = []
|
320
|
-
|
322
|
+
|
321
323
|
#setup formatted author list
|
322
324
|
authors = get_author_list(record)
|
323
325
|
|
@@ -351,10 +353,10 @@ module Blacklight::Solr::Document::MarcExport
|
|
351
353
|
# Edition
|
352
354
|
edition_data = setup_edition(record)
|
353
355
|
text += edition_data + " " unless edition_data.nil?
|
354
|
-
|
356
|
+
|
355
357
|
# Publication
|
356
358
|
text += setup_pub_info(record) + ", " unless setup_pub_info(record).nil?
|
357
|
-
|
359
|
+
|
358
360
|
# Get Pub Date
|
359
361
|
text += setup_pub_date(record) unless setup_pub_date(record).nil?
|
360
362
|
if text[-1,1] != "."
|
@@ -367,7 +369,7 @@ module Blacklight::Solr::Document::MarcExport
|
|
367
369
|
text = ''
|
368
370
|
authors_list = []
|
369
371
|
authors_list_final = []
|
370
|
-
|
372
|
+
|
371
373
|
#setup formatted author list
|
372
374
|
authors = get_author_list(record)
|
373
375
|
authors.each do |l|
|
@@ -392,15 +394,15 @@ module Blacklight::Solr::Document::MarcExport
|
|
392
394
|
end
|
393
395
|
# Get Pub Date
|
394
396
|
text += "(" + setup_pub_date(record) + "). " unless setup_pub_date(record).nil?
|
395
|
-
|
397
|
+
|
396
398
|
# setup title info
|
397
399
|
title = setup_title_info(record)
|
398
400
|
text += "<i>" + title + "</i> " unless title.nil?
|
399
|
-
|
401
|
+
|
400
402
|
# Edition
|
401
403
|
edition_data = setup_edition(record)
|
402
404
|
text += edition_data + " " unless edition_data.nil?
|
403
|
-
|
405
|
+
|
404
406
|
# Publisher info
|
405
407
|
text += setup_pub_info(record) unless setup_pub_info(record).nil?
|
406
408
|
unless text.blank?
|
@@ -451,7 +453,7 @@ module Blacklight::Solr::Document::MarcExport
|
|
451
453
|
end
|
452
454
|
new_text.join(" ")
|
453
455
|
end
|
454
|
-
|
456
|
+
|
455
457
|
# This will replace the mla_citation_title method with a better understanding of how MLA and Chicago citation titles are formatted.
|
456
458
|
# This method will take in a string and capitalize all of the non-prepositions.
|
457
459
|
def citation_title(title_text)
|
@@ -482,18 +484,18 @@ module Blacklight::Solr::Document::MarcExport
|
|
482
484
|
end
|
483
485
|
text += b_title_info unless b_title_info.nil?
|
484
486
|
end
|
485
|
-
|
487
|
+
|
486
488
|
return nil if text.strip.blank?
|
487
489
|
clean_end_punctuation(text.strip) + "."
|
488
|
-
|
490
|
+
|
489
491
|
end
|
490
|
-
|
492
|
+
|
491
493
|
def clean_end_punctuation(text)
|
492
494
|
if [".",",",":",";","/"].include? text[-1,1]
|
493
495
|
return text[0,text.length-1]
|
494
496
|
end
|
495
497
|
text
|
496
|
-
end
|
498
|
+
end
|
497
499
|
|
498
500
|
def setup_edition(record)
|
499
501
|
edition_field = record.find{|f| f.tag == '250'}
|
@@ -503,9 +505,9 @@ module Blacklight::Solr::Document::MarcExport
|
|
503
505
|
return nil
|
504
506
|
else
|
505
507
|
return edition_data
|
506
|
-
end
|
508
|
+
end
|
507
509
|
end
|
508
|
-
|
510
|
+
|
509
511
|
def get_author_list(record)
|
510
512
|
author_list = []
|
511
513
|
authors_primary = record.find{|f| f.tag == '100'}
|
@@ -517,11 +519,11 @@ module Blacklight::Solr::Document::MarcExport
|
|
517
519
|
author_list.push(clean_end_punctuation(l.find{|s| s.code == 'a'}.value)) unless l.find{|s| s.code == 'a'}.value.nil?
|
518
520
|
end
|
519
521
|
end
|
520
|
-
|
522
|
+
|
521
523
|
author_list.uniq!
|
522
524
|
author_list
|
523
525
|
end
|
524
|
-
|
526
|
+
|
525
527
|
# This is a replacement method for the get_author_list method. This new method will break authors out into primary authors, translators, editors, and compilers
|
526
528
|
def get_all_authors(record)
|
527
529
|
translator_code = "trl"; editor_code = "edt"; compiler_code = "com"
|
@@ -547,7 +549,7 @@ module Blacklight::Solr::Document::MarcExport
|
|
547
549
|
end
|
548
550
|
{:primary_authors => primary_authors, :translators => translators, :editors => editors, :compilers => compilers}
|
549
551
|
end
|
550
|
-
|
552
|
+
|
551
553
|
def abbreviate_name(name)
|
552
554
|
name_parts = name.split(", ")
|
553
555
|
first_name_parts = name_parts.last.split(" ")
|
@@ -562,6 +564,5 @@ module Blacklight::Solr::Document::MarcExport
|
|
562
564
|
return name unless name =~ /,/
|
563
565
|
temp_name = name.split(", ")
|
564
566
|
return temp_name.last + " " + temp_name.first
|
565
|
-
end
|
566
|
-
|
567
|
-
end
|
567
|
+
end
|
568
|
+
end
|