blacklight-marc 6.0.0 → 7.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +1 -2
- data/.solr_wrapper.yaml +5 -0
- data/.travis.yml +9 -11
- data/Gemfile +30 -14
- data/README.md +29 -8
- data/Rakefile +8 -20
- 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 -50
- 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 +12 -12
- 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 +9 -39
- data/lib/blacklight/marc/indexer/formats.rb +13 -15
- 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 +16 -9
- data/lib/generators/blacklight/marc/templates/app/models/marc_indexer.rb +59 -59
- 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/_rest_managed.json +3 -0
- data/solr/conf/admin-extra.html +31 -0
- data/solr/conf/elevate.xml +36 -0
- data/solr/conf/mapping-ISOLatin1Accent.txt +246 -0
- data/solr/conf/protwords.txt +21 -0
- data/solr/conf/schema.xml +388 -0
- data/solr/conf/scripts.conf +24 -0
- data/solr/conf/solrconfig.xml +195 -0
- data/solr/conf/spellings.txt +2 -0
- data/solr/conf/stopwords.txt +58 -0
- data/solr/conf/stopwords_en.txt +58 -0
- data/solr/conf/synonyms.txt +31 -0
- data/solr/conf/xslt/example.xsl +132 -0
- data/solr/conf/xslt/example_atom.xsl +67 -0
- data/solr/conf/xslt/example_rss.xsl +66 -0
- data/solr/conf/xslt/luke.xsl +337 -0
- 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 +9 -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/spec_helper.rb +2 -2
- data/spec/test_app_templates/Gemfile.extra +2 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +15 -14
- 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 +85 -60
- data/app/helpers/blacklight_bookmarks_helper.rb +0 -3
- data/config/jetty.yml +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 982fc53944ac08a10b9fee904da008efa6c7a80a4c17a6abd7230a6d530afb09
|
4
|
+
data.tar.gz: 2df11802581af3d7f66ce71a174e3e1866f88b48a8587146e8273532ea74181e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 85d9056f0e7962ea4b0c2b5353456c2a0334f1833073224f92e3bbbb5ec13b8baf6074724f371423b7d784e6a811963bf0a6f2f3e43a37f8151575a85c6307ce
|
7
|
+
data.tar.gz: 8666db8e8109679087f4c774a1b7eb4a70a4d91075668f08115b11d527827c8225da37b98d904c27b7464bf5d9e2534594745bdd940ef15b6b6b76b65ce25d6f
|
data/.gitignore
CHANGED
data/.solr_wrapper.yaml
ADDED
data/.travis.yml
CHANGED
@@ -4,26 +4,24 @@ sudo: false
|
|
4
4
|
notifications:
|
5
5
|
email: false
|
6
6
|
|
7
|
-
rvm:
|
8
|
-
- 2.2.3
|
9
|
-
|
10
7
|
matrix:
|
11
8
|
include:
|
12
|
-
- rvm: 2.
|
13
|
-
env: "RAILS_VERSION=
|
14
|
-
- rvm: 2.
|
15
|
-
env: "RAILS_VERSION=
|
9
|
+
- rvm: 2.7.1
|
10
|
+
env: "RAILS_VERSION=6.0.3.2"
|
11
|
+
- rvm: 2.6.6
|
12
|
+
env: "RAILS_VERSION=6.0.3.2"
|
13
|
+
- rvm: 2.6.6
|
14
|
+
env: "RAILS_VERSION=5.2.4.3"
|
16
15
|
|
17
16
|
before_install:
|
18
17
|
- gem install bundler
|
19
18
|
|
20
|
-
env:
|
21
|
-
- "RAILS_VERSION=4.2.4"
|
22
|
-
|
23
19
|
notifications:
|
24
20
|
irc: "irc.freenode.org#blacklight"
|
25
21
|
email:
|
26
22
|
- blacklight-commits@googlegroups.com
|
27
23
|
|
28
24
|
global_env:
|
29
|
-
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true
|
25
|
+
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true
|
26
|
+
|
27
|
+
jdk: openjdk11
|
data/Gemfile
CHANGED
@@ -1,16 +1,18 @@
|
|
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
|
|
6
|
-
gem 'simplecov', '~> 0.10', require: false
|
7
|
-
gem 'coveralls', require: false
|
8
|
-
|
9
11
|
# BEGIN ENGINE_CART BLOCK
|
10
|
-
# engine_cart: 0.
|
11
|
-
# engine_cart stanza: 0.
|
12
|
+
# engine_cart: 1.0.1
|
13
|
+
# engine_cart stanza: 0.10.0
|
12
14
|
# the below comes from engine_cart, a gem used to test this Rails engine gem in the context of a Rails app.
|
13
|
-
file = File.expand_path(
|
15
|
+
file = File.expand_path('Gemfile', ENV['ENGINE_CART_DESTINATION'] || ENV['RAILS_ROOT'] || File.expand_path('.internal_test_app', File.dirname(__FILE__)))
|
14
16
|
if File.exist?(file)
|
15
17
|
begin
|
16
18
|
eval_gemfile file
|
@@ -21,15 +23,29 @@ if File.exist?(file)
|
|
21
23
|
else
|
22
24
|
Bundler.ui.warn "[EngineCart] Unable to find test application dependencies in #{file}, using placeholder dependencies"
|
23
25
|
|
24
|
-
|
26
|
+
if ENV['RAILS_VERSION']
|
27
|
+
if ENV['RAILS_VERSION'] == 'edge'
|
28
|
+
gem 'rails', github: 'rails/rails'
|
29
|
+
ENV['ENGINE_CART_RAILS_OPTIONS'] = '--edge --skip-turbolinks'
|
30
|
+
else
|
31
|
+
gem 'rails', ENV['RAILS_VERSION']
|
32
|
+
end
|
33
|
+
end
|
25
34
|
|
26
|
-
|
27
|
-
|
28
|
-
gem '
|
29
|
-
gem '
|
30
|
-
|
31
|
-
gem '
|
32
|
-
|
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'
|
41
|
+
when /^4.2/
|
42
|
+
gem 'responders', '~> 2.0'
|
43
|
+
gem 'sass-rails', '>= 5.0'
|
44
|
+
gem 'coffee-rails', '~> 4.1.0'
|
45
|
+
when /^4.[01]/
|
46
|
+
gem 'sass-rails', '< 5.0'
|
33
47
|
end
|
34
48
|
end
|
35
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:
|
@@ -16,8 +22,29 @@ And then execute:
|
|
16
22
|
|
17
23
|
After running the blacklight generator, run the blacklight_marc generator:
|
18
24
|
|
19
|
-
$ rails generate
|
25
|
+
$ rails generate blacklight:marc:install
|
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:
|
20
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
|
|
data/Rakefile
CHANGED
@@ -1,41 +1,29 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
-
ZIP_URL = "https://github.com/projectblacklight/blacklight-jetty/archive/v4.10.4.zip"
|
3
|
-
|
4
|
-
require 'jettywrapper'
|
5
2
|
require 'rspec/core/rake_task'
|
6
3
|
require 'engine_cart/rake_task'
|
7
4
|
|
8
|
-
EngineCart.fingerprint_proc = EngineCart.rails_fingerprint_proc
|
9
|
-
|
10
5
|
RSpec::Core::RakeTask.new(:spec)
|
11
6
|
|
12
7
|
task :default => [:ci]
|
13
8
|
|
14
|
-
task :ci => ['
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
9
|
+
task :ci => ['engine_cart:generate'] do
|
10
|
+
require 'solr_wrapper'
|
11
|
+
SolrWrapper.wrap(port: '8983') do |solr|
|
12
|
+
solr.with_collection(name: 'blacklight-core', dir: File.join(File.expand_path(File.dirname(__FILE__)), "solr", "conf")) do
|
13
|
+
Rake::Task["blacklight_marc:fixtures"].invoke
|
14
|
+
Rake::Task['spec'].invoke
|
15
|
+
end
|
19
16
|
end
|
20
|
-
raise "test failures: #{error}" if error
|
21
17
|
end
|
22
18
|
|
23
19
|
|
24
20
|
namespace :blacklight_marc do
|
25
21
|
|
26
22
|
desc "Load fixtures"
|
27
|
-
task :fixtures => [:generate] do
|
23
|
+
task :fixtures => ['engine_cart:generate'] do
|
28
24
|
within_test_app do
|
29
25
|
system "bundle exec rake solr:marc:index_test_data RAILS_ENV=test"
|
30
26
|
abort "Error running fixtures" unless $?.success?
|
31
27
|
end
|
32
28
|
end
|
33
|
-
|
34
|
-
desc "Clean out the test rails app"
|
35
|
-
task :clean => ['jetty:clean'] do
|
36
|
-
end
|
37
|
-
|
38
|
-
desc "Create the test rails app"
|
39
|
-
task :generate => ['engine_cart:generate'] do
|
40
|
-
end
|
41
29
|
end
|
@@ -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)
|
@@ -125,9 +127,9 @@ module Blacklight::Solr::Document::MarcExport
|
|
125
127
|
# it seems to want C form normalization, although RefWorks support
|
126
128
|
# couldn't tell me that. -jrochkind
|
127
129
|
text = ActiveSupport::Multibyte::Unicode.normalize(text, :c)
|
128
|
-
|
130
|
+
|
129
131
|
return text
|
130
|
-
end
|
132
|
+
end
|
131
133
|
|
132
134
|
# Endnote Import Format. See the EndNote User Guide at:
|
133
135
|
# http://www.endnote.com/support/enx3man-terms-win.asp
|
@@ -138,7 +140,7 @@ module Blacklight::Solr::Document::MarcExport
|
|
138
140
|
# endnote import format; the %0 is likely to be entirely illegal, the
|
139
141
|
# rest of the data is barely correct but messy. TODO, a new version of this,
|
140
142
|
# or better yet just an export_as_ris instead, which will be more general
|
141
|
-
# purpose.
|
143
|
+
# purpose.
|
142
144
|
def export_as_endnote()
|
143
145
|
end_note_format = {
|
144
146
|
"%A" => "100.a",
|
@@ -154,10 +156,12 @@ module Blacklight::Solr::Document::MarcExport
|
|
154
156
|
"%7" => "250.a"
|
155
157
|
}
|
156
158
|
marc_obj = to_marc
|
159
|
+
return unless marc_obj
|
160
|
+
|
157
161
|
# TODO. This should be rewritten to guess
|
158
162
|
# from actual Marc instead, probably.
|
159
163
|
format_str = 'Generic'
|
160
|
-
|
164
|
+
|
161
165
|
text = ''
|
162
166
|
text << "%0 #{ format_str }\n"
|
163
167
|
# If there is some reliable way of getting the language of a record we can add it here
|
@@ -170,7 +174,7 @@ module Blacklight::Solr::Document::MarcExport
|
|
170
174
|
else
|
171
175
|
second_value = []
|
172
176
|
end
|
173
|
-
|
177
|
+
|
174
178
|
if marc_obj[first_value[0].to_s]
|
175
179
|
marc_obj.find_all{|f| (first_value[0].to_s) === f.tag}.each do |field|
|
176
180
|
if field[first_value[1]].to_s or field[second_value[1]].to_s
|
@@ -190,11 +194,11 @@ module Blacklight::Solr::Document::MarcExport
|
|
190
194
|
end
|
191
195
|
|
192
196
|
protected
|
193
|
-
|
197
|
+
|
194
198
|
# Main method for defining chicago style citation. If we don't end up converting to using a citation formatting service
|
195
199
|
# we should make this receive a semantic document and not MARC so we can use this with other formats.
|
196
200
|
def chicago_citation(marc)
|
197
|
-
authors = get_all_authors(marc)
|
201
|
+
authors = get_all_authors(marc)
|
198
202
|
author_text = ""
|
199
203
|
unless authors[:primary_authors].blank?
|
200
204
|
if authors[:primary_authors].length > 10
|
@@ -226,7 +230,7 @@ module Blacklight::Solr::Document::MarcExport
|
|
226
230
|
author_text << "and #{name_reverse(author)}."
|
227
231
|
else
|
228
232
|
author_text << "#{name_reverse(author)}, "
|
229
|
-
end
|
233
|
+
end
|
230
234
|
end
|
231
235
|
else
|
232
236
|
author_text << authors[:primary_authors].first
|
@@ -242,7 +246,7 @@ module Blacklight::Solr::Document::MarcExport
|
|
242
246
|
authors[:compilers].each do |compiler|
|
243
247
|
temp_authors << [compiler, "comp."]
|
244
248
|
end
|
245
|
-
|
249
|
+
|
246
250
|
unless temp_authors.blank?
|
247
251
|
if temp_authors.length > 10
|
248
252
|
temp_authors.each_with_index do |author,index|
|
@@ -281,18 +285,18 @@ module Blacklight::Solr::Document::MarcExport
|
|
281
285
|
section_title << "."
|
282
286
|
end
|
283
287
|
end
|
284
|
-
|
288
|
+
|
285
289
|
if !authors[:primary_authors].blank? and (!authors[:translators].blank? or !authors[:editors].blank? or !authors[:compilers].blank?)
|
286
290
|
additional_title << "Translated by #{authors[:translators].collect{|name| name_reverse(name)}.join(" and ")}. " unless authors[:translators].blank?
|
287
291
|
additional_title << "Edited by #{authors[:editors].collect{|name| name_reverse(name)}.join(" and ")}. " unless authors[:editors].blank?
|
288
292
|
additional_title << "Compiled by #{authors[:compilers].collect{|name| name_reverse(name)}.join(" and ")}. " unless authors[:compilers].blank?
|
289
293
|
end
|
290
|
-
|
294
|
+
|
291
295
|
edition = ""
|
292
296
|
edition << setup_edition(marc) unless setup_edition(marc).nil?
|
293
|
-
|
297
|
+
|
294
298
|
pub_info = ""
|
295
|
-
if marc["260"] and (marc["260"]["a"] or marc["260"]["b"])
|
299
|
+
if marc["260"] and (marc["260"]["a"] or marc["260"]["b"])
|
296
300
|
pub_info << clean_end_punctuation(marc["260"]["a"]).strip if marc["260"]["a"]
|
297
301
|
pub_info << ": #{clean_end_punctuation(marc["260"]["b"]).strip}" if marc["260"]["b"]
|
298
302
|
pub_info << ", #{setup_pub_date(marc)}" if marc["260"]["c"]
|
@@ -301,7 +305,7 @@ module Blacklight::Solr::Document::MarcExport
|
|
301
305
|
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
306
|
pub_info << "#{marc["502"]["b"]}, #{marc["502"]["c"]}, #{clean_end_punctuation(marc["502"]["d"])}"
|
303
307
|
end
|
304
|
-
|
308
|
+
|
305
309
|
citation = ""
|
306
310
|
citation << "#{author_text} " unless author_text.blank?
|
307
311
|
citation << "<i>#{title}.</i> " unless title.blank?
|
@@ -311,13 +315,13 @@ module Blacklight::Solr::Document::MarcExport
|
|
311
315
|
citation << "#{pub_info}." unless pub_info.blank?
|
312
316
|
citation
|
313
317
|
end
|
314
|
-
|
315
|
-
|
316
|
-
|
318
|
+
|
319
|
+
|
320
|
+
|
317
321
|
def mla_citation(record)
|
318
322
|
text = ''
|
319
323
|
authors_final = []
|
320
|
-
|
324
|
+
|
321
325
|
#setup formatted author list
|
322
326
|
authors = get_author_list(record)
|
323
327
|
|
@@ -351,10 +355,10 @@ module Blacklight::Solr::Document::MarcExport
|
|
351
355
|
# Edition
|
352
356
|
edition_data = setup_edition(record)
|
353
357
|
text += edition_data + " " unless edition_data.nil?
|
354
|
-
|
358
|
+
|
355
359
|
# Publication
|
356
360
|
text += setup_pub_info(record) + ", " unless setup_pub_info(record).nil?
|
357
|
-
|
361
|
+
|
358
362
|
# Get Pub Date
|
359
363
|
text += setup_pub_date(record) unless setup_pub_date(record).nil?
|
360
364
|
if text[-1,1] != "."
|
@@ -367,7 +371,7 @@ module Blacklight::Solr::Document::MarcExport
|
|
367
371
|
text = ''
|
368
372
|
authors_list = []
|
369
373
|
authors_list_final = []
|
370
|
-
|
374
|
+
|
371
375
|
#setup formatted author list
|
372
376
|
authors = get_author_list(record)
|
373
377
|
authors.each do |l|
|
@@ -392,15 +396,15 @@ module Blacklight::Solr::Document::MarcExport
|
|
392
396
|
end
|
393
397
|
# Get Pub Date
|
394
398
|
text += "(" + setup_pub_date(record) + "). " unless setup_pub_date(record).nil?
|
395
|
-
|
399
|
+
|
396
400
|
# setup title info
|
397
401
|
title = setup_title_info(record)
|
398
402
|
text += "<i>" + title + "</i> " unless title.nil?
|
399
|
-
|
403
|
+
|
400
404
|
# Edition
|
401
405
|
edition_data = setup_edition(record)
|
402
406
|
text += edition_data + " " unless edition_data.nil?
|
403
|
-
|
407
|
+
|
404
408
|
# Publisher info
|
405
409
|
text += setup_pub_info(record) unless setup_pub_info(record).nil?
|
406
410
|
unless text.blank?
|
@@ -451,7 +455,7 @@ module Blacklight::Solr::Document::MarcExport
|
|
451
455
|
end
|
452
456
|
new_text.join(" ")
|
453
457
|
end
|
454
|
-
|
458
|
+
|
455
459
|
# This will replace the mla_citation_title method with a better understanding of how MLA and Chicago citation titles are formatted.
|
456
460
|
# This method will take in a string and capitalize all of the non-prepositions.
|
457
461
|
def citation_title(title_text)
|
@@ -482,18 +486,18 @@ module Blacklight::Solr::Document::MarcExport
|
|
482
486
|
end
|
483
487
|
text += b_title_info unless b_title_info.nil?
|
484
488
|
end
|
485
|
-
|
489
|
+
|
486
490
|
return nil if text.strip.blank?
|
487
491
|
clean_end_punctuation(text.strip) + "."
|
488
|
-
|
492
|
+
|
489
493
|
end
|
490
|
-
|
494
|
+
|
491
495
|
def clean_end_punctuation(text)
|
492
496
|
if [".",",",":",";","/"].include? text[-1,1]
|
493
497
|
return text[0,text.length-1]
|
494
498
|
end
|
495
499
|
text
|
496
|
-
end
|
500
|
+
end
|
497
501
|
|
498
502
|
def setup_edition(record)
|
499
503
|
edition_field = record.find{|f| f.tag == '250'}
|
@@ -503,9 +507,9 @@ module Blacklight::Solr::Document::MarcExport
|
|
503
507
|
return nil
|
504
508
|
else
|
505
509
|
return edition_data
|
506
|
-
end
|
510
|
+
end
|
507
511
|
end
|
508
|
-
|
512
|
+
|
509
513
|
def get_author_list(record)
|
510
514
|
author_list = []
|
511
515
|
authors_primary = record.find{|f| f.tag == '100'}
|
@@ -517,11 +521,11 @@ module Blacklight::Solr::Document::MarcExport
|
|
517
521
|
author_list.push(clean_end_punctuation(l.find{|s| s.code == 'a'}.value)) unless l.find{|s| s.code == 'a'}.value.nil?
|
518
522
|
end
|
519
523
|
end
|
520
|
-
|
524
|
+
|
521
525
|
author_list.uniq!
|
522
526
|
author_list
|
523
527
|
end
|
524
|
-
|
528
|
+
|
525
529
|
# 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
530
|
def get_all_authors(record)
|
527
531
|
translator_code = "trl"; editor_code = "edt"; compiler_code = "com"
|
@@ -547,7 +551,7 @@ module Blacklight::Solr::Document::MarcExport
|
|
547
551
|
end
|
548
552
|
{:primary_authors => primary_authors, :translators => translators, :editors => editors, :compilers => compilers}
|
549
553
|
end
|
550
|
-
|
554
|
+
|
551
555
|
def abbreviate_name(name)
|
552
556
|
name_parts = name.split(", ")
|
553
557
|
first_name_parts = name_parts.last.split(" ")
|
@@ -562,6 +566,5 @@ module Blacklight::Solr::Document::MarcExport
|
|
562
566
|
return name unless name =~ /,/
|
563
567
|
temp_name = name.split(", ")
|
564
568
|
return temp_name.last + " " + temp_name.first
|
565
|
-
end
|
566
|
-
|
567
|
-
end
|
569
|
+
end
|
570
|
+
end
|