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
@@ -1,4 +1,4 @@
|
|
1
|
-
<% if @
|
1
|
+
<% if @response.documents.any? {|d| d.exports_as? :endnote } %>
|
2
2
|
<li class="endnote">
|
3
3
|
<%= link_to t('blacklight.tools.endnote'), bookmarks_path(:endnote, search_state.params_for_search), :class => "btn btn-default", :id => "endnoteLink" %>
|
4
4
|
</li>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<% if @
|
1
|
+
<% if @response.documents.any? {|d| d.exports_as? :refworks_marc_txt } %>
|
2
2
|
<li class="refworks">
|
3
3
|
<%= link_to t('blacklight.tools.refworks'), refworks_export_url(url: bookmarks_export_url(:refworks_marc_txt, search_state.params_for_search)), :class => "btn btn-default", :id => "refworksLink" %>
|
4
4
|
</li>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<div id="marc_view" class="modal-body">
|
2
|
-
<% fields =
|
3
|
-
<div class="field"><%= t('blacklight.search.librarian_view.leader', :leader =>
|
2
|
+
<% fields = document.to_marc.find_all{|f| ('000'..'999') === f.tag } %>
|
3
|
+
<div class="field"><%= t('blacklight.search.librarian_view.leader', :leader => document.to_marc.leader) %></div>
|
4
4
|
<%- fields.each do |field| -%>
|
5
5
|
<%- unless field.tag.to_s == "940" -%>
|
6
6
|
<div class="field">
|
@@ -14,10 +14,10 @@
|
|
14
14
|
</span>
|
15
15
|
<%- else -%>
|
16
16
|
<div class="ind1">
|
17
|
-
<%= !field.indicator1.blank? ? field.indicator1 : " 
|
17
|
+
<%= !field.indicator1.blank? ? field.indicator1 : " ".html_safe -%>
|
18
18
|
</div>
|
19
19
|
<div class="ind2">
|
20
|
-
<%= !field.indicator2.blank? ? field.indicator2 : " 
|
20
|
+
<%= !field.indicator2.blank? ? field.indicator2 : " ".html_safe -%>
|
21
21
|
</div>
|
22
22
|
</div>
|
23
23
|
<div class="subfields">
|
@@ -1 +1 @@
|
|
1
|
-
<%= render_endnote_texts(@documents) %>
|
1
|
+
<%= render_endnote_texts(@response.documents) %>
|
@@ -1,10 +1,13 @@
|
|
1
1
|
|
2
2
|
<div class="modal-header">
|
3
|
-
<
|
4
|
-
<
|
3
|
+
<h1 class="modal-title"><%= t('blacklight.search.librarian_view.title') %></h1>
|
4
|
+
<button type="button" class="blacklight-modal-close close" data-dismiss="modal" aria-label="Close">
|
5
|
+
<span aria-hidden="true">×</span>
|
6
|
+
</button>
|
5
7
|
</div>
|
6
|
-
<%- if @
|
7
|
-
<%= render "marc_view" %>
|
8
|
+
<%- if @response.documents.first.respond_to?(:to_marc) -%>
|
9
|
+
<%= render "marc_view", document: @response.documents.first %>
|
8
10
|
<%- else %>
|
9
11
|
<%= t('blacklight.search.librarian_view.empty') %>
|
10
12
|
<%- end -%>
|
13
|
+
|
data/blacklight-marc.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.description = %q{MARC support for Blacklight}
|
11
11
|
spec.summary = %q{MARC support for Blacklight}
|
12
12
|
spec.homepage = "https://github.com/projectblacklight/blacklight-marc"
|
13
|
-
spec.license = "Apache
|
13
|
+
spec.license = "Apache-2.0"
|
14
14
|
|
15
15
|
spec.files = `git ls-files -z`.split("\x0")
|
16
16
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
@@ -18,21 +18,21 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency 'blacklight', '
|
22
|
-
|
23
|
-
spec.add_development_dependency "bundler", "~> 1.3"
|
24
|
-
spec.add_development_dependency "rake"
|
25
|
-
spec.add_development_dependency "rspec-rails", '~> 3.0'
|
26
|
-
spec.add_development_dependency "rspec-activemodel-mocks"
|
27
|
-
spec.add_development_dependency "jettywrapper"
|
28
|
-
spec.add_development_dependency "capybara"
|
29
|
-
spec.add_development_dependency "engine_cart", "~> 0.8"
|
30
|
-
|
21
|
+
spec.add_dependency 'blacklight', '~> 7.0'
|
31
22
|
spec.add_dependency "library_stdnums"
|
32
23
|
spec.add_dependency "rails"
|
33
24
|
# Let's allow future versions of marc, count on
|
34
25
|
# them to be backwards compat until 1.1
|
35
26
|
spec.add_dependency "marc", ">= 0.4.3", "< 1.1" # Marc record parser.
|
36
|
-
spec.add_dependency "traject", "~>
|
27
|
+
spec.add_dependency "traject", "~>3.0"
|
37
28
|
spec.add_dependency 'marc-fastxmlwriter' # NO REXML
|
29
|
+
|
30
|
+
spec.add_development_dependency "bundler"
|
31
|
+
spec.add_development_dependency "rake"
|
32
|
+
spec.add_development_dependency "rspec-rails", '~> 4.0'
|
33
|
+
spec.add_development_dependency "rspec-activemodel-mocks"
|
34
|
+
spec.add_development_dependency "solr_wrapper"
|
35
|
+
spec.add_development_dependency "capybara"
|
36
|
+
spec.add_development_dependency "simplecov"
|
37
|
+
spec.add_development_dependency "engine_cart", "~> 2.0"
|
38
38
|
end
|
data/config/routes.rb
CHANGED
@@ -9,7 +9,7 @@ Rails.application.routes.draw do
|
|
9
9
|
#
|
10
10
|
# These routes can be injected into your Rails application by adding
|
11
11
|
# Blacklight.add_routes(self)
|
12
|
-
# to the application's ./config/routes.rb. The injected routes can be
|
12
|
+
# to the application's ./config/routes.rb. The injected routes can be
|
13
13
|
# customized as well, e.g.:
|
14
14
|
# Blacklight.add_routes(self, :only => [:bookmarks]) # will only look bookmark routes
|
15
15
|
# Blacklight.add_routes(self, :except => [:catalog]) # will not load catalog routes
|
@@ -3,25 +3,19 @@ module Blacklight::Marc
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
included do
|
6
|
-
add_show_tools_partial(:librarian_view, if: :render_librarian_view_control?, define_method: false)
|
7
|
-
add_show_tools_partial(:refworks, if: :render_refworks_action?, modal: false)
|
8
|
-
add_show_tools_partial(:endnote, if: :render_endnote_action?, modal: false, path: :single_endnote_catalog_path, define_method: false)
|
6
|
+
blacklight_config.add_show_tools_partial(:librarian_view, if: :render_librarian_view_control?, define_method: false)
|
7
|
+
blacklight_config.add_show_tools_partial(:refworks, if: :render_refworks_action?, modal: false)
|
8
|
+
blacklight_config.add_show_tools_partial(:endnote, if: :render_endnote_action?, modal: false, path: :single_endnote_catalog_path, define_method: false)
|
9
9
|
end
|
10
10
|
|
11
11
|
def librarian_view
|
12
|
-
@response,
|
13
|
-
|
14
|
-
respond_to do |format|
|
15
|
-
format.html
|
16
|
-
format.js { render :layout => false }
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
# grabs a bunch of documents to export to endnote
|
21
|
-
def endnote
|
22
|
-
@response, @documents = fetch(Array(params[:id]))
|
12
|
+
@response, deprecated_document = search_service.fetch params[:id]
|
13
|
+
@document = ActiveSupport::Deprecation::DeprecatedObjectProxy.new(deprecated_document, "The @document instance variable is deprecated and will be removed in Blacklight-marc 8.0")
|
23
14
|
respond_to do |format|
|
24
|
-
format.
|
15
|
+
format.html do
|
16
|
+
return render layout: false if request.xhr?
|
17
|
+
# Otherwise draw the full page
|
18
|
+
end
|
25
19
|
end
|
26
20
|
end
|
27
21
|
|
@@ -14,6 +14,8 @@ module Blacklight::Marc
|
|
14
14
|
end
|
15
15
|
|
16
16
|
initializer 'blacklight_marc.initialize' do |app|
|
17
|
+
require 'blacklight/solr/document'
|
18
|
+
|
17
19
|
Mime::Type.register_alias "text/plain", :refworks_marc_txt
|
18
20
|
Mime::Type.register_alias "text/plain", :openurl_kev
|
19
21
|
Mime::Type.register "application/x-endnote-refer", :endnote
|
@@ -1,14 +1,15 @@
|
|
1
1
|
require 'library_stdnums'
|
2
|
-
|
2
|
+
require 'traject'
|
3
|
+
require 'traject/null_writer'
|
3
4
|
require 'traject/macros/marc21_semantics'
|
4
|
-
|
5
|
+
|
5
6
|
require 'traject/macros/marc_format_classifier'
|
6
|
-
|
7
|
+
|
7
8
|
require 'traject/solr_json_writer'
|
8
9
|
require 'traject/marc_reader'
|
9
10
|
require 'marc/fastxmlwriter'
|
10
11
|
|
11
|
-
class Blacklight::Marc::Indexer < Traject::Indexer
|
12
|
+
class Blacklight::Marc::Indexer < Traject::Indexer::MarcIndexer
|
12
13
|
autoload :Dewey, 'blacklight/marc/indexer/dewey'
|
13
14
|
autoload :Formats, 'blacklight/marc/indexer/formats'
|
14
15
|
|
@@ -34,47 +35,16 @@ class Blacklight::Marc::Indexer < Traject::Indexer
|
|
34
35
|
provide "log.batch_size", 10_000
|
35
36
|
end
|
36
37
|
end
|
37
|
-
|
38
|
-
|
39
|
-
if block.arity == 3
|
40
|
-
block.call(record,accumulator,options)
|
41
|
-
else
|
42
|
-
block.call(record,accumulator)
|
43
|
-
end
|
44
|
-
accumulator.replace Array(accumulator[0]) # just take the first
|
45
|
-
end
|
46
|
-
end
|
47
|
-
def map_value block, options={}
|
48
|
-
if translation_map_arg = options.delete(:translation_map)
|
49
|
-
translation_map = Traject::TranslationMap.new(translation_map_arg)
|
50
|
-
else
|
51
|
-
translation_map = nil
|
52
|
-
end
|
53
|
-
lambda do |record, accumulator|
|
54
|
-
if block.arity == 3
|
55
|
-
block.call(record,accumulator,options)
|
56
|
-
else
|
57
|
-
block.call(record,accumulator)
|
58
|
-
end
|
59
|
-
if translation_map
|
60
|
-
translation_map.translate_array! accumulator
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
def trim block, options={}
|
38
|
+
|
39
|
+
def trim
|
65
40
|
lambda do |record, accumulator|
|
66
|
-
vals = []
|
67
|
-
if block.arity == 3
|
68
|
-
block.call(record,accumulator,options)
|
69
|
-
else
|
70
|
-
block.call(record,accumulator)
|
71
|
-
end
|
72
41
|
accumulator.each {|x| x.strip!}
|
73
42
|
end
|
74
43
|
end
|
44
|
+
|
75
45
|
def get_xml options={}
|
76
46
|
lambda do |record, accumulator|
|
77
47
|
accumulator << MARC::FastXMLWriter.encode(record)
|
78
48
|
end
|
79
49
|
end
|
80
|
-
end
|
50
|
+
end
|
@@ -5,7 +5,7 @@ module Blacklight::Marc::Indexer::Formats
|
|
5
5
|
v = v.upcase
|
6
6
|
case
|
7
7
|
when (v.start_with? 'A')
|
8
|
-
vals << (v == 'AD'
|
8
|
+
vals << (v == 'AD' ? 'Atlas' : 'Map')
|
9
9
|
when (v.start_with? 'C')
|
10
10
|
case
|
11
11
|
when (v == "CA")
|
@@ -107,7 +107,7 @@ module Blacklight::Marc::Indexer::Formats
|
|
107
107
|
field007hasC
|
108
108
|
end
|
109
109
|
|
110
|
-
def self.map_leader(f_000,field007hasC,vals)
|
110
|
+
def self.map_leader(f_000,field007hasC,vals,record)
|
111
111
|
f_000 = f_000.upcase
|
112
112
|
case
|
113
113
|
when (f_000.start_with? 'C')
|
@@ -137,17 +137,15 @@ module Blacklight::Marc::Indexer::Formats
|
|
137
137
|
when (f_000.start_with? 'A')
|
138
138
|
if f_000 == 'AM'
|
139
139
|
vals << ((field007hasC) ? "eBook" : "Book")
|
140
|
-
elsif f_000 == 'AS'
|
140
|
+
elsif f_000 == 'AS'
|
141
141
|
# Look in 008 to determine what type of Continuing Resource
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
vals << 'Serial'
|
150
|
-
end
|
142
|
+
format_code = Traject::Macros::Marc21.extract_marc_from(record, "008[21]", first: true, default: "").first.upcase
|
143
|
+
if format_code == 'N'
|
144
|
+
vals << 'Newspaper'
|
145
|
+
elsif format_code == 'P'
|
146
|
+
vals << 'Journal'
|
147
|
+
else
|
148
|
+
vals << 'Serial'
|
151
149
|
end
|
152
150
|
end
|
153
151
|
end
|
@@ -174,12 +172,12 @@ module Blacklight::Marc::Indexer::Formats
|
|
174
172
|
else
|
175
173
|
# check the Leader - this is NOT a repeating field
|
176
174
|
# if we find a matching value there, grab it and return.
|
177
|
-
FormatMap.map_leader(record.leader[6,2],field007hasC,vals)
|
175
|
+
FormatMap.map_leader(record.leader[6,2],field007hasC,vals,record)
|
178
176
|
unless vals.empty?
|
179
177
|
vals.uniq!
|
180
178
|
accumulator.concat vals
|
181
179
|
else
|
182
|
-
FormatMap.map_leader(record.leader[6],field007hasC,vals)
|
180
|
+
FormatMap.map_leader(record.leader[6],field007hasC,vals,record)
|
183
181
|
if vals.empty?
|
184
182
|
accumulator.concat ['Unknown']
|
185
183
|
else
|
@@ -191,4 +189,4 @@ module Blacklight::Marc::Indexer::Formats
|
|
191
189
|
end
|
192
190
|
end
|
193
191
|
end
|
194
|
-
end
|
192
|
+
end
|
@@ -1,43 +1,6 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
module Blacklight::Marc
|
3
|
-
|
4
|
-
|
5
|
-
def initialize(router, options)
|
6
|
-
@router = router
|
7
|
-
@options = options
|
8
|
-
end
|
9
|
-
|
10
|
-
def draw
|
11
|
-
route_sets.each do |r|
|
12
|
-
self.send(r)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
protected
|
17
|
-
|
18
|
-
def add_routes &blk
|
19
|
-
@router.instance_exec(@options, &blk)
|
20
|
-
end
|
21
|
-
|
22
|
-
def route_sets
|
23
|
-
(@options[:only] || default_route_sets) - (@options[:except] || [])
|
24
|
-
end
|
25
|
-
|
26
|
-
def default_route_sets
|
27
|
-
[:catalog]
|
28
|
-
end
|
29
|
-
|
30
|
-
module RouteSets
|
31
|
-
def catalog
|
32
|
-
add_routes do |options|
|
33
|
-
# Catalog stuff.
|
34
|
-
get 'catalog/:id/librarian_view', :to => "catalog#librarian_view", :as => "librarian_view_solr_document"
|
35
|
-
get "catalog/endnote", :as => "endnote_solr_document"
|
36
|
-
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
include RouteSets
|
3
|
+
module Routes
|
4
|
+
require 'blacklight/marc/routes/marc_viewable'
|
42
5
|
end
|
43
6
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Blacklight
|
3
|
+
module Marc
|
4
|
+
module Routes
|
5
|
+
class MarcViewable
|
6
|
+
def initialize(defaults = {})
|
7
|
+
@defaults = defaults
|
8
|
+
end
|
9
|
+
|
10
|
+
def call(mapper, options = {})
|
11
|
+
options = @defaults.merge(options)
|
12
|
+
|
13
|
+
mapper.member do
|
14
|
+
mapper.match 'librarian_view', via: :get
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -16,7 +16,7 @@ module Blacklight::Marc
|
|
16
16
|
source_root File.expand_path('../templates', __FILE__)
|
17
17
|
|
18
18
|
def assets
|
19
|
-
insert_into_file "app/assets/stylesheets/blacklight.
|
19
|
+
insert_into_file "app/assets/stylesheets/blacklight.scss", after: "@import 'blacklight/blacklight';" do
|
20
20
|
<<-EOF
|
21
21
|
|
22
22
|
@import 'blacklight_marc';
|
@@ -36,18 +36,18 @@ EOF
|
|
36
36
|
def add_marc_extension_to_solrdocument
|
37
37
|
|
38
38
|
insert_into_file "app/models/solr_document.rb", :after => "include Blacklight::Solr::Document" do <<EOF
|
39
|
-
|
39
|
+
|
40
40
|
# The following shows how to setup this blacklight document to display marc documents
|
41
|
-
extension_parameters[:marc_source_field] = :
|
41
|
+
extension_parameters[:marc_source_field] = :marc_ss
|
42
42
|
extension_parameters[:marc_format_type] = :marcxml
|
43
43
|
use_extension( Blacklight::Solr::Document::Marc) do |document|
|
44
|
-
document.key?( :
|
44
|
+
document.key?( SolrDocument.extension_parameters[:marc_source_field] )
|
45
45
|
end
|
46
46
|
|
47
47
|
field_semantics.merge!(
|
48
|
-
:title => "
|
49
|
-
:author => "
|
50
|
-
:language => "
|
48
|
+
:title => "title_ssm",
|
49
|
+
:author => "author_ssm",
|
50
|
+
:language => "language_ssim",
|
51
51
|
:format => "format"
|
52
52
|
)
|
53
53
|
|
@@ -56,7 +56,7 @@ EOF
|
|
56
56
|
end
|
57
57
|
|
58
58
|
# Add MARC behaviors to the catalog controller
|
59
|
-
def inject_blacklight_controller_behavior
|
59
|
+
def inject_blacklight_controller_behavior
|
60
60
|
inject_into_file "app/controllers/catalog_controller.rb", after:"include Blacklight::Catalog" do
|
61
61
|
"\n include Blacklight::Marc::Catalog\n"
|
62
62
|
end
|
@@ -64,7 +64,14 @@ EOF
|
|
64
64
|
|
65
65
|
|
66
66
|
def inject_blacklight_marc_routes
|
67
|
-
route
|
67
|
+
route <<-EOF
|
68
|
+
concern :marc_viewable, Blacklight::Marc::Routes::MarcViewable.new
|
69
|
+
EOF
|
70
|
+
|
71
|
+
inject_into_file "config/routes.rb", after: "resources :solr_documents, only: [:show], path: '/catalog', controller: 'catalog' do" do
|
72
|
+
"\n concerns [:exportable, :marc_viewable]\nINJECT_FLAG"
|
73
|
+
end
|
74
|
+
gsub_file "config/routes.rb", /[\n]INJECT_FLAG\s+concerns \:exportable/,""
|
68
75
|
end
|
69
76
|
|
70
77
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
$:.unshift './config'
|
2
2
|
class MarcIndexer < Blacklight::Marc::Indexer
|
3
|
-
# this mixin defines lambda
|
3
|
+
# this mixin defines lambda factory method get_format for legacy marc formats
|
4
4
|
include Blacklight::Marc::Indexer::Formats
|
5
5
|
|
6
6
|
def initialize
|
@@ -13,39 +13,38 @@ class MarcIndexer < Blacklight::Marc::Indexer
|
|
13
13
|
provide 'solr_writer.max_skipped', -1
|
14
14
|
end
|
15
15
|
|
16
|
-
to_field "id",
|
17
|
-
to_field '
|
18
|
-
to_field "
|
16
|
+
to_field "id", extract_marc("001"), trim, first_only
|
17
|
+
to_field 'marc_ss', get_xml
|
18
|
+
to_field "all_text_timv", extract_all_marc_values do |r, acc|
|
19
19
|
acc.replace [acc.join(' ')] # turn it into a single string
|
20
20
|
end
|
21
|
-
|
22
|
-
to_field "
|
21
|
+
|
22
|
+
to_field "language_ssim", marc_languages("008[35-37]:041a:041d:")
|
23
23
|
to_field "format", get_format
|
24
|
-
to_field "
|
24
|
+
to_field "isbn_tsim", extract_marc('020a', separator: nil) do |rec, acc|
|
25
25
|
orig = acc.dup
|
26
26
|
acc.map!{|x| StdNum::ISBN.allNormalizedValues(x)}
|
27
27
|
acc << orig
|
28
28
|
acc.flatten!
|
29
29
|
acc.uniq!
|
30
30
|
end
|
31
|
-
|
32
|
-
to_field '
|
33
|
-
|
31
|
+
|
32
|
+
to_field 'material_type_ssm', extract_marc('300a'), trim_punctuation
|
33
|
+
|
34
34
|
# Title fields
|
35
35
|
# primary title
|
36
|
-
|
37
|
-
to_field '
|
38
|
-
to_field '
|
39
|
-
|
40
|
-
|
36
|
+
to_field 'title_tsim', extract_marc('245a')
|
37
|
+
to_field 'title_ssm', extract_marc('245a', alternate_script: false), trim_punctuation
|
38
|
+
to_field 'title_vern_ssm', extract_marc('245a', alternate_script: :only), trim_punctuation
|
39
|
+
|
41
40
|
# subtitle
|
42
|
-
|
43
|
-
to_field '
|
44
|
-
to_field '
|
45
|
-
to_field '
|
46
|
-
|
41
|
+
|
42
|
+
to_field 'subtitle_tsim', extract_marc('245b')
|
43
|
+
to_field 'subtitle_ssm', extract_marc('245b', alternate_script: false), trim_punctuation
|
44
|
+
to_field 'subtitle_vern_ssm', extract_marc('245b', alternate_script: :only), trim_punctuation
|
45
|
+
|
47
46
|
# additional title fields
|
48
|
-
to_field '
|
47
|
+
to_field 'title_addl_tsim',
|
49
48
|
extract_marc(%W{
|
50
49
|
245abnps
|
51
50
|
130#{ATOZ}
|
@@ -57,31 +56,31 @@ class MarcIndexer < Blacklight::Marc::Indexer
|
|
57
56
|
246abcdefgnp
|
58
57
|
247abcdefgnp
|
59
58
|
}.join(':'))
|
60
|
-
|
61
|
-
to_field '
|
59
|
+
|
60
|
+
to_field 'title_added_entry_tsim', extract_marc(%W{
|
62
61
|
700gklmnoprst
|
63
62
|
710fgklmnopqrst
|
64
63
|
711fgklnpst
|
65
64
|
730abcdefgklmnopqrst
|
66
65
|
740anp
|
67
66
|
}.join(':'))
|
68
|
-
|
69
|
-
to_field '
|
70
|
-
|
71
|
-
to_field '
|
72
|
-
|
67
|
+
|
68
|
+
to_field 'title_series_tsim', extract_marc("440anpv:490av")
|
69
|
+
|
70
|
+
to_field 'title_si', marc_sortable_title
|
71
|
+
|
73
72
|
# Author fields
|
74
|
-
|
75
|
-
to_field '
|
76
|
-
to_field '
|
77
|
-
to_field '
|
78
|
-
to_field '
|
79
|
-
|
73
|
+
|
74
|
+
to_field 'author_tsim', extract_marc("100abcegqu:110abcdegnu:111acdegjnqu")
|
75
|
+
to_field 'author_addl_tsim', extract_marc("700abcegqu:710abcdegnu:711acdegjnqu")
|
76
|
+
to_field 'author_ssm', extract_marc("100abcdq:110#{ATOZ}:111#{ATOZ}", alternate_script: false)
|
77
|
+
to_field 'author_vern_ssm', extract_marc("100abcdq:110#{ATOZ}:111#{ATOZ}", alternate_script: :only)
|
78
|
+
|
80
79
|
# JSTOR isn't an author. Try to not use it as one
|
81
|
-
to_field '
|
82
|
-
|
80
|
+
to_field 'author_si', marc_sortable_author
|
81
|
+
|
83
82
|
# Subject fields
|
84
|
-
to_field '
|
83
|
+
to_field 'subject_tsim', extract_marc(%W(
|
85
84
|
600#{ATOU}
|
86
85
|
610#{ATOU}
|
87
86
|
611#{ATOU}
|
@@ -90,38 +89,39 @@ class MarcIndexer < Blacklight::Marc::Indexer
|
|
90
89
|
651ae
|
91
90
|
653a:654abcde:655abc
|
92
91
|
).join(':'))
|
93
|
-
to_field '
|
94
|
-
to_field '
|
95
|
-
to_field '
|
96
|
-
to_field '
|
97
|
-
|
92
|
+
to_field 'subject_addl_tsim', extract_marc("600vwxyz:610vwxyz:611vwxyz:630vwxyz:650vwxyz:651vwxyz:654vwxyz:655vwxyz")
|
93
|
+
to_field 'subject_ssim', extract_marc("600abcdq:610ab:611ab:630aa:650aa:653aa:654ab:655ab"), trim_punctuation
|
94
|
+
to_field 'subject_era_ssim', extract_marc("650y:651y:654y:655y"), trim_punctuation
|
95
|
+
to_field 'subject_geo_ssim', extract_marc("651a:650z"), trim_punctuation
|
96
|
+
|
98
97
|
# Publication fields
|
99
|
-
to_field '
|
100
|
-
to_field '
|
101
|
-
to_field '
|
102
|
-
|
98
|
+
to_field 'published_ssm', extract_marc('260a', alternate_script: false), trim_punctuation
|
99
|
+
to_field 'published_vern_ssm', extract_marc('260a', alternate_script: :only), trim_punctuation
|
100
|
+
to_field 'pub_date_si', marc_publication_date
|
101
|
+
to_field 'pub_date_ssim', marc_publication_date
|
102
|
+
|
103
103
|
# Call Number fields
|
104
|
-
to_field '
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
end
|
104
|
+
to_field 'lc_callnum_ssm', extract_marc('050ab'), first_only
|
105
|
+
|
106
|
+
first_letter = lambda {|rec, acc| acc.map!{|x| x[0]} }
|
107
|
+
to_field 'lc_1letter_ssim', extract_marc('050ab'), first_only, first_letter, translation_map('callnumber_map')
|
109
108
|
|
110
109
|
alpha_pat = /\A([A-Z]{1,3})\d.*\Z/
|
111
|
-
|
110
|
+
alpha_only = lambda do |rec, acc|
|
112
111
|
acc.map! do |x|
|
113
112
|
(m = alpha_pat.match(x)) ? m[1] : nil
|
114
113
|
end
|
115
114
|
acc.compact! # eliminate nils
|
116
115
|
end
|
116
|
+
to_field 'lc_alpha_ssim', extract_marc('050a'), alpha_only, first_only
|
117
|
+
|
118
|
+
to_field 'lc_b4cutter_ssim', extract_marc('050a'), first_only
|
117
119
|
|
118
|
-
to_field 'lc_b4cutter_facet', extract_marc('050a', :first=>true)
|
119
|
-
|
120
120
|
# URL Fields
|
121
|
-
|
121
|
+
|
122
122
|
notfulltext = /abstract|description|sample text|table of contents|/i
|
123
|
-
|
124
|
-
to_field('
|
123
|
+
|
124
|
+
to_field('url_fulltext_ssm') do |rec, acc|
|
125
125
|
rec.fields('856').each do |f|
|
126
126
|
case f.indicator2
|
127
127
|
when '0'
|
@@ -140,7 +140,7 @@ class MarcIndexer < Blacklight::Marc::Indexer
|
|
140
140
|
end
|
141
141
|
|
142
142
|
# Very similar to url_fulltext_display. Should DRY up.
|
143
|
-
to_field '
|
143
|
+
to_field 'url_suppl_ssm' do |rec, acc|
|
144
144
|
rec.fields('856').each do |f|
|
145
145
|
case f.indicator2
|
146
146
|
when '2'
|
@@ -158,4 +158,4 @@ class MarcIndexer < Blacklight::Marc::Indexer
|
|
158
158
|
end
|
159
159
|
end
|
160
160
|
end
|
161
|
-
end
|
161
|
+
end
|