cul_scv_hydra 0.7.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/app/models/bag_aggregator.rb +0 -1
- data/app/models/content_aggregator.rb +0 -1
- data/app/models/dcdocument.rb +2 -2
- data/app/models/generic_aggregator.rb +0 -1
- data/app/models/generic_object.rb +0 -1
- data/app/models/generic_resource.rb +2 -3
- data/app/models/jp2_image_aggregator.rb +2 -3
- data/app/models/mets_structured_aggregator.rb +0 -1
- data/app/models/resource.rb +2 -3
- data/app/models/static_audio_aggregator.rb +0 -1
- data/app/models/static_image_aggregator.rb +0 -1
- data/config/fedora.yml +19 -0
- data/config/predicate_mappings.yml +11 -9
- data/config/solr_value_maps.yml +2 -2
- data/lib/cul_scv_hydra/active_fedora/model/aggregator.rb +3 -3
- data/lib/cul_scv_hydra/active_fedora/model/common.rb +23 -15
- data/lib/cul_scv_hydra/active_fedora/model/resource.rb +1 -0
- data/lib/cul_scv_hydra/om/dc_metadata.rb +58 -32
- data/lib/cul_scv_hydra/om/scv_mods_document.rb +66 -56
- data/lib/cul_scv_hydra/om/standard_mods.rb +1 -3
- data/lib/cul_scv_hydra/solrizer/field_mapper.rb +88 -24
- data/lib/cul_scv_hydra/solrizer/terminology_based_solrizer.rb +26 -86
- data/lib/cul_scv_hydra/solrizer/value_mapper.rb +1 -1
- data/lib/cul_scv_hydra/version.rb +1 -1
- data/lib/tasks/cmodel.rake +13 -2
- metadata +16 -29
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YTI5YWY3ZWFjMWVhYjdjNjI4Mzc4MGRjYWNkNTg5MTk0MmNiZjY3Mg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YzU5YzY4YjY3OWFjYWM5NzllOWRiNDU2ZThiYTk0ZTgwMjg4ZWE4MQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YWU1Y2U2ZGQ5Zjg1ZDlhNmUxNzFmNDBjYTdhZjlmNDdjYjQ1MjhjYjc2YzVj
|
10
|
+
ZjBjYTcwMTY5NTViNTZiZTNhY2U3OTk1Yjc2YWFkODYxYTQyMzE4MjkwZDUz
|
11
|
+
YzBkNWM4ZTA4ZWNmNjk5NDA3M2YyY2JlNjNmNzNmZjk5NTYwNTM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZTI1ZjY5ZDRmYzM0MWVhZDQ5MmVmNWQwZDVlZWVjODJmNTVjZDBmMzA3ZWQ2
|
14
|
+
YTRhODNhYTI1Yjc5MmJkNGJmN2Y2OTBjOWM2NzRiM2FhODM1NzhjZjdkZTFi
|
15
|
+
ZmNlNzA2ZWM0NTFjODRjYWYwYWViMWRlNTRlZGE3NTM0ZGJjZjA=
|
@@ -4,7 +4,6 @@ class BagAggregator < ::ActiveFedora::Base
|
|
4
4
|
extend ActiveModel::Callbacks
|
5
5
|
include ::ActiveFedora::Finders
|
6
6
|
include ::ActiveFedora::DatastreamCollections
|
7
|
-
include ::ActiveFedora::Relationships
|
8
7
|
include ::Hydra::ModelMethods
|
9
8
|
include Cul::Scv::Hydra::ActiveFedora::Model::Common
|
10
9
|
include Cul::Scv::Hydra::ActiveFedora::Model::Aggregator
|
@@ -3,7 +3,6 @@ class ContentAggregator < ::ActiveFedora::Base
|
|
3
3
|
extend ActiveModel::Callbacks
|
4
4
|
include ::ActiveFedora::Finders
|
5
5
|
include ::ActiveFedora::DatastreamCollections
|
6
|
-
include ::ActiveFedora::Relationships
|
7
6
|
include ::Hydra::ModelMethods
|
8
7
|
include Cul::Scv::Hydra::ActiveFedora::Model::Common
|
9
8
|
include Cul::Scv::Hydra::ActiveFedora::Model::Aggregator
|
data/app/models/dcdocument.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
require "active-fedora"
|
2
2
|
class DcDocument < ActiveFedora::Base
|
3
|
+
include ::ActiveFedora::Associations
|
3
4
|
include ::ActiveFedora::Finders
|
4
5
|
include ::ActiveFedora::DatastreamCollections
|
5
|
-
include ::ActiveFedora::Relationships
|
6
6
|
include Hydra::ModelMethods
|
7
7
|
include Cul::Scv::Hydra::ActiveFedora::Model::Common
|
8
8
|
alias :file_objects :resources
|
9
9
|
|
10
|
-
|
10
|
+
has_many :parts, :property=>:cul_member_of, :class_name=>'ActiveFedora::Base'
|
11
11
|
|
12
12
|
def self.load_instance_from_solr(pid,solr_doc=nil)
|
13
13
|
if solr_doc.nil?
|
@@ -3,7 +3,6 @@ class GenericAggregator < ::ActiveFedora::Base
|
|
3
3
|
extend ActiveModel::Callbacks
|
4
4
|
include ::ActiveFedora::Finders
|
5
5
|
include ::ActiveFedora::DatastreamCollections
|
6
|
-
include ::ActiveFedora::Relationships
|
7
6
|
include ::Hydra::ModelMethods
|
8
7
|
include Cul::Scv::Hydra::ActiveFedora::Model::Common
|
9
8
|
include Cul::Scv::Hydra::ActiveFedora::Model::Aggregator
|
@@ -3,7 +3,6 @@ class GenericObject < ::ActiveFedora::Base
|
|
3
3
|
extend ActiveModel::Callbacks
|
4
4
|
include ::ActiveFedora::Finders
|
5
5
|
include ::ActiveFedora::DatastreamCollections
|
6
|
-
include ::ActiveFedora::Relationships
|
7
6
|
include ::Hydra::ModelMethods
|
8
7
|
include Cul::Scv::Hydra::ActiveFedora::Model::Common
|
9
8
|
include Cul::Scv::Hydra::ActiveFedora::Model::Aggregator
|
@@ -7,7 +7,6 @@ class GenericResource < ::ActiveFedora::Base
|
|
7
7
|
extend ActiveModel::Callbacks
|
8
8
|
include ::ActiveFedora::Finders
|
9
9
|
include ::ActiveFedora::DatastreamCollections
|
10
|
-
include ::ActiveFedora::Relationships
|
11
10
|
include ::Hydra::ModelMethods
|
12
11
|
include Cul::Scv::Hydra::ActiveFedora::Model::Common
|
13
12
|
include ::ActiveFedora::RelsInt
|
@@ -34,8 +33,8 @@ class GenericResource < ::ActiveFedora::Base
|
|
34
33
|
|
35
34
|
def to_solr(solr_doc = Hash.new, opts={})
|
36
35
|
super
|
37
|
-
unless solr_doc["
|
38
|
-
solr_doc["
|
36
|
+
unless solr_doc["extent_ssi"] || self.datastreams["content"].nil?
|
37
|
+
solr_doc["extent_ssi"] = [self.datastreams["content"].size]
|
39
38
|
end
|
40
39
|
solr_doc
|
41
40
|
end
|
@@ -3,7 +3,6 @@ class JP2ImageAggregator < ::ActiveFedora::Base
|
|
3
3
|
extend ActiveModel::Callbacks
|
4
4
|
include ::ActiveFedora::Finders
|
5
5
|
include ::ActiveFedora::DatastreamCollections
|
6
|
-
include ::ActiveFedora::Relationships
|
7
6
|
include ::Hydra::ModelMethods
|
8
7
|
include Cul::Scv::Hydra::ActiveFedora::Model::Common
|
9
8
|
include Cul::Scv::Hydra::ActiveFedora::Model::Aggregator
|
@@ -25,13 +24,13 @@ class JP2ImageAggregator < ::ActiveFedora::Base
|
|
25
24
|
source = self.datastreams["SOURCE"]
|
26
25
|
source.profile
|
27
26
|
if source.controlGroup == 'E'
|
28
|
-
solr_doc["
|
27
|
+
solr_doc["rft_id_ss"] = source.dsLocation
|
29
28
|
else
|
30
29
|
rc = ActiveFedora::RubydoraConnection.instance.connection
|
31
30
|
url = rc.config["url"]
|
32
31
|
uri = URI::parse(url)
|
33
32
|
url = "#{uri.scheme}://#{uri.host}:#{uri.port}/fedora/objects/#{pid}/datastreams/SOURCE/content"
|
34
|
-
solr_doc["
|
33
|
+
solr_doc["rft_id_ss"] = url
|
35
34
|
end
|
36
35
|
solr_doc
|
37
36
|
end
|
@@ -3,7 +3,6 @@ class METSStructuredAggregator < ::ActiveFedora::Base
|
|
3
3
|
extend ActiveModel::Callbacks
|
4
4
|
include ::ActiveFedora::Finders
|
5
5
|
include ::ActiveFedora::DatastreamCollections
|
6
|
-
include ::ActiveFedora::Relationships
|
7
6
|
include ::Hydra::ModelMethods
|
8
7
|
include Cul::Scv::Hydra::ActiveFedora::Model::Common
|
9
8
|
include Cul::Scv::Hydra::ActiveFedora::Model::Aggregator
|
data/app/models/resource.rb
CHANGED
@@ -6,7 +6,6 @@ class Resource < ::ActiveFedora::Base
|
|
6
6
|
extend ActiveModel::Callbacks
|
7
7
|
include ::ActiveFedora::Finders
|
8
8
|
include ::ActiveFedora::DatastreamCollections
|
9
|
-
include ::ActiveFedora::Relationships
|
10
9
|
include ::Hydra::ModelMethods
|
11
10
|
include Cul::Scv::Hydra::ActiveFedora::Model::Common
|
12
11
|
include Cul::Scv::Hydra::ActiveFedora::Model::Resource
|
@@ -28,8 +27,8 @@ class Resource < ::ActiveFedora::Base
|
|
28
27
|
|
29
28
|
def to_solr(solr_doc = Hash.new, opts={})
|
30
29
|
super
|
31
|
-
unless solr_doc["
|
32
|
-
solr_doc["
|
30
|
+
unless solr_doc["extent_ssi"] || self.datastreams["CONTENT"].nil?
|
31
|
+
solr_doc["extent_ssi"] = [self.datastreams["CONTENT"].size]
|
33
32
|
end
|
34
33
|
solr_doc
|
35
34
|
end
|
@@ -3,7 +3,6 @@ class StaticAudioAggregator < ::ActiveFedora::Base
|
|
3
3
|
extend ActiveModel::Callbacks
|
4
4
|
include ::ActiveFedora::Finders
|
5
5
|
include ::ActiveFedora::DatastreamCollections
|
6
|
-
include ::ActiveFedora::Relationships
|
7
6
|
include ::Hydra::ModelMethods
|
8
7
|
include Cul::Scv::Hydra::ActiveFedora::Model::Common
|
9
8
|
include Cul::Scv::Hydra::ActiveFedora::Model::Aggregator
|
@@ -3,7 +3,6 @@ class StaticImageAggregator < ::ActiveFedora::Base
|
|
3
3
|
extend ActiveModel::Callbacks
|
4
4
|
include ::ActiveFedora::Finders
|
5
5
|
include ::ActiveFedora::DatastreamCollections
|
6
|
-
include ::ActiveFedora::Relationships
|
7
6
|
include ::Hydra::ModelMethods
|
8
7
|
include Cul::Scv::Hydra::ActiveFedora::Model::Common
|
9
8
|
include Cul::Scv::Hydra::ActiveFedora::Model::Aggregator
|
data/config/fedora.yml
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
development:
|
2
|
+
:url: http://127.0.0.1:8983/fedora
|
3
|
+
:user: fedoraAdmin
|
4
|
+
:password: fedoraAdmin
|
5
|
+
# :url: http://sayers.cul.columbia.edu:8080/fedora
|
6
|
+
# :user: fedoraAdmin
|
7
|
+
# :password: f+BULUS*^
|
8
|
+
test:
|
9
|
+
:url: http://127.0.0.1:8983/fedora
|
10
|
+
:user: fedoraAdmin
|
11
|
+
:password: fedoraAdmin
|
12
|
+
production:
|
13
|
+
:url: http://alcott.cul.columbia.edu:8080/fedora
|
14
|
+
:user: fedoraAdmin
|
15
|
+
:password: f+BULUS*^
|
16
|
+
default:
|
17
|
+
:url: http://127.0.0.1:8983/fedora
|
18
|
+
:user: fedoraAdmin
|
19
|
+
:password: fedoraAdmin
|
@@ -18,6 +18,8 @@
|
|
18
18
|
:cul_has_member: hasMember
|
19
19
|
:cul_member_of: memberOf
|
20
20
|
:cul_metadata_for: metadataFor
|
21
|
+
http://creativecommons.org/ns#:
|
22
|
+
:cc_license: license
|
21
23
|
info:fedora/fedora-system:def/relations-external#:
|
22
24
|
:conforms_to: conformsTo
|
23
25
|
:has_annotation: hasAnnotation
|
@@ -45,23 +47,23 @@
|
|
45
47
|
info:fedora/fedora-system:def/model#:
|
46
48
|
:has_model: hasModel
|
47
49
|
http://purl.oclc.org/NET/CUL/RESOURCE/STILLIMAGE/BASIC/:
|
48
|
-
:
|
49
|
-
:
|
50
|
+
:image_width: imageWidth
|
51
|
+
:image_length: imageLength
|
50
52
|
http://purl.oclc.org/NET/CUL/RESOURCE/STILLIMAGE/ASSESSMENT/:
|
51
|
-
:
|
52
|
-
:
|
53
|
-
:
|
53
|
+
:x_sampling: xSamplingFrequency
|
54
|
+
:y_sampling: ySamplingFrequency
|
55
|
+
:sampling_unit: samplingFrequencyUnit
|
54
56
|
http://purl.org/dc/terms/:
|
55
57
|
:extent: extent
|
56
58
|
:format: format
|
57
59
|
:format_of: isFormatOf
|
58
60
|
http://www.w3.org/2003/12/exif/ns#:
|
59
|
-
:
|
60
|
-
:
|
61
|
+
:exif_image_width: imageWidth
|
62
|
+
:exif_image_length: imageLength
|
61
63
|
:x_resolution: xResolution
|
62
64
|
:y_resolution: yResolution
|
63
|
-
:
|
65
|
+
:resolution_unit: resolutionUnit
|
64
66
|
http://xmlns.com/foaf/0.1/:
|
65
67
|
:foaf_thumbnail: thumbnail
|
66
68
|
http://www.w3.org/1999/02/22-rdf-syntax-ns#:
|
67
|
-
:rdf_type: type
|
69
|
+
:rdf_type: type
|
data/config/solr_value_maps.yml
CHANGED
@@ -20,8 +20,8 @@
|
|
20
20
|
'NNC-RB' : 'Rare Book and Manuscript Library'
|
21
21
|
'NyNyCBL' : 'Burke Library at Union Theological Seminary'
|
22
22
|
'NyNyCOH' : 'Columbia Center for Oral History Collections'
|
23
|
-
:
|
24
|
-
'Customer Order Collection' : '
|
23
|
+
:project_to_facet :
|
24
|
+
'Customer Order Collection' : 'PRD Orders'
|
25
25
|
"Children's Drawings of the Spanish Civil War (online exhibition)" : 'Spanish Civil War'
|
26
26
|
"Jewels in her crown: treasures of Columbia University Libraries special collections" : 'Jewels in her Crown'
|
27
27
|
"Russian Imperial Corps of Pages" : 'Russian Corps of Pages'
|
@@ -3,7 +3,7 @@ module Aggregator
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
included do
|
6
|
-
has_many :parts, :property => :cul_member_of
|
6
|
+
has_many :parts, :property => :cul_member_of, :class_name=>'ActiveFedora::Base'
|
7
7
|
after_create :aggregator!
|
8
8
|
end
|
9
9
|
|
@@ -21,7 +21,7 @@ module Aggregator
|
|
21
21
|
container = "info:fedora/#{container}"
|
22
22
|
end
|
23
23
|
member.add_relationship(:cul_member_of, container)
|
24
|
-
member.datastreams["RELS-EXT"].
|
24
|
+
member.datastreams["RELS-EXT"].content_will_change!
|
25
25
|
member.save
|
26
26
|
end
|
27
27
|
|
@@ -37,7 +37,7 @@ module Aggregator
|
|
37
37
|
rel.object = container
|
38
38
|
rel.predicate = :cul_member_of
|
39
39
|
member.remove_relationship(rel)
|
40
|
-
member.datastreams["RELS-EXT"].
|
40
|
+
member.datastreams["RELS-EXT"].content_will_change!
|
41
41
|
member.save
|
42
42
|
end
|
43
43
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'active-fedora'
|
2
2
|
require 'uri'
|
3
3
|
module Cul::Scv::Hydra::ActiveFedora::Model
|
4
4
|
module Common
|
@@ -7,7 +7,7 @@ module Common
|
|
7
7
|
included do
|
8
8
|
define_model_callbacks :create
|
9
9
|
|
10
|
-
has_and_belongs_to_many :containers, :property=>:cul_member_of
|
10
|
+
has_and_belongs_to_many :containers, :property=>:cul_member_of, :class_name=>'ActiveFedora::Base'
|
11
11
|
has_metadata :name => "DC", :type=>Cul::Scv::Hydra::Om::DCMetadata, :versionable => true
|
12
12
|
has_metadata :name => "descMetadata", :type=>Cul::Scv::Hydra::Om::ModsDocument, :versionable => true
|
13
13
|
has_metadata :name => "rightsMetadata", :type=>::Hydra::Datastream::RightsMetadata, :versionable => true
|
@@ -16,7 +16,7 @@ module Common
|
|
16
16
|
|
17
17
|
module ClassMethods
|
18
18
|
def pid_namespace
|
19
|
-
|
19
|
+
'ldpd'
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -59,7 +59,7 @@ module Common
|
|
59
59
|
# end
|
60
60
|
#end
|
61
61
|
else
|
62
|
-
logger.warn
|
62
|
+
logger.warn 'parts not defined; was this an Aggregator?'
|
63
63
|
[]
|
64
64
|
end
|
65
65
|
end
|
@@ -133,31 +133,39 @@ module Common
|
|
133
133
|
def to_solr(solr_doc = Hash.new, opts={})
|
134
134
|
super
|
135
135
|
if has_desc?
|
136
|
-
solr_doc["
|
136
|
+
solr_doc["descriptor_ssi"] = ["mods"]
|
137
137
|
else
|
138
|
-
solr_doc["
|
138
|
+
solr_doc["descriptor_ssi"] = ["dublin core"]
|
139
139
|
end
|
140
140
|
# if no mods, pull some values from DC
|
141
|
-
if (solr_doc["
|
141
|
+
if (solr_doc["title_ssm"].nil? or solr_doc["title_ssm"].length == 0)
|
142
142
|
if self.dc.term_values(:dc_title).first
|
143
|
-
solr_doc["
|
143
|
+
solr_doc["title_ssm"] = [self.dc.term_values(:dc_title).first]
|
144
144
|
else
|
145
|
-
solr_doc["
|
145
|
+
solr_doc["title_ssm"] = [self.dc.term_values(:dc_identifier).first]
|
146
146
|
end
|
147
147
|
if self.dc.term_values(:dc_relation).first
|
148
148
|
self.dc.term_values(:dc_relation).each {|val|
|
149
149
|
if val =~ /clio:/
|
150
|
-
solr_doc["
|
151
|
-
solr_doc["
|
150
|
+
solr_doc["clio_ssim"] ||= []
|
151
|
+
solr_doc["clio_ssim"] << val.split(':')[-1]
|
152
152
|
end
|
153
153
|
}
|
154
154
|
end
|
155
155
|
end
|
156
|
-
if (solr_doc["
|
157
|
-
solr_doc["
|
156
|
+
if (solr_doc["title_ssm"].length > 1)
|
157
|
+
solr_doc["title_ssm"].uniq!
|
158
158
|
end
|
159
|
-
solr_doc["
|
160
|
-
solr_doc["
|
159
|
+
solr_doc["format_ssi"] = [self.route_as]
|
160
|
+
solr_doc["index_type_label_ssi"] = [self.index_type_label]
|
161
|
+
|
162
|
+
solr_doc.each_pair {|key, value|
|
163
|
+
if value.is_a? Array
|
164
|
+
value.each {|v| v.strip! unless v.nil? }
|
165
|
+
elsif value.is_a? String
|
166
|
+
value.strip!
|
167
|
+
end
|
168
|
+
}
|
161
169
|
solr_doc
|
162
170
|
end
|
163
171
|
|
@@ -63,6 +63,7 @@ module Resource
|
|
63
63
|
end
|
64
64
|
subject = RDF::URI(internal_uri)
|
65
65
|
predicate = RDF::URI("#{node.namespace.href}#{node.name}")
|
66
|
+
puts "Adding a resource predicate : #{predicate}"
|
66
67
|
query = RDF::Query.new({ :subject => {predicate => :object}})
|
67
68
|
relationships(predicate).dup.each { |stmt|
|
68
69
|
relationships.delete(stmt)
|
@@ -3,54 +3,80 @@ module Cul
|
|
3
3
|
module Scv
|
4
4
|
module Hydra
|
5
5
|
module Om
|
6
|
-
class DCMetadata < ::ActiveFedora::
|
7
|
-
|
6
|
+
class DCMetadata < ::ActiveFedora::OmDatastream
|
7
|
+
|
8
8
|
after_save :action_after_save
|
9
9
|
set_terminology do |t|
|
10
10
|
t.root(:path=>"dc", :namespace_prefix=>"oai_dc",
|
11
11
|
"xmlns:oai_dc"=>"http://www.openarchives.org/OAI/2.0/oai_dc/",
|
12
12
|
"xmlns:dc"=>"http://purl.org/dc/elements/1.1/",
|
13
13
|
:schema=>"http://www.openarchives.org/OAI/2.0/oai_dc.xsd")
|
14
|
-
t.dc_contributor(:path=>"contributor",
|
15
|
-
|
16
|
-
|
17
|
-
t.
|
18
|
-
|
19
|
-
|
20
|
-
t.
|
21
|
-
|
22
|
-
|
23
|
-
t.
|
24
|
-
|
25
|
-
|
26
|
-
t.
|
27
|
-
|
28
|
-
|
14
|
+
t.dc_contributor(:path=>"contributor",
|
15
|
+
:namespace_prefix=>"dc",
|
16
|
+
:index_as=>[:displayable, :searchable])
|
17
|
+
t.dc_coverage(:path=>"coverage",
|
18
|
+
:namespace_prefix=>"dc",
|
19
|
+
:index_as=>[:displayable, :searchable])
|
20
|
+
t.dc_creator(:path=>"creator",
|
21
|
+
:namespace_prefix=>"dc",
|
22
|
+
:index_as=>[:displayable, :searchable])
|
23
|
+
t.dc_date(:path=>"date",
|
24
|
+
:namespace_prefix=>"dc",
|
25
|
+
:index_as=>[:displayable, :searchable])
|
26
|
+
t.dc_description(:path=>"description",
|
27
|
+
:namespace_prefix=>"dc",
|
28
|
+
:index_as=>[:displayable, :searchable])
|
29
|
+
t.dc_format(:path=>"format",
|
30
|
+
:namespace_prefix=>"dc",
|
31
|
+
:index_as=>[:displayable, :searchable])
|
32
|
+
t.dc_identifier(:path=>"identifier",
|
33
|
+
:namespace_prefix=>"dc",
|
34
|
+
:index_as=>[:displayable, :searchable])
|
35
|
+
t.dc_language(:path=>"language",
|
36
|
+
:namespace_prefix=>"dc",
|
37
|
+
:index_as=>[:displayable, :searchable])
|
38
|
+
t.dc_publisher(:path=>"publisher",
|
39
|
+
:namespace_prefix=>"dc",
|
40
|
+
:index_as=>[:displayable, :searchable])
|
41
|
+
t.dc_relation(:path=>"relation",
|
42
|
+
:namespace_prefix=>"dc",
|
43
|
+
:index_as=>[:displayable, :searchable])
|
44
|
+
t.dc_rights(:path=>"rights",
|
45
|
+
:namespace_prefix=>"dc",
|
46
|
+
:index_as=>[:displayable, :searchable])
|
47
|
+
t.dc_source(:path=>"source",
|
48
|
+
:namespace_prefix=>"dc",
|
49
|
+
:index_as=>[:displayable, :searchable])
|
50
|
+
t.dc_subject(:path=>"subject",
|
51
|
+
:namespace_prefix=>"dc",
|
52
|
+
:index_as=>[:displayable, :searchable])
|
53
|
+
t.dc_title(:path=>"title",
|
54
|
+
:namespace_prefix=>"dc",
|
55
|
+
:index_as=>[:displayable, :searchable])
|
56
|
+
t.dc_type(:path=>"type",
|
57
|
+
:namespace_prefix=>"dc",
|
58
|
+
:index_as=>[:displayable, :searchable])
|
29
59
|
end
|
30
60
|
|
31
61
|
def self.xml_template
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
end
|
42
|
-
builder.doc.encoding = 'UTF-8'
|
43
|
-
builder.doc.root["xsi:schemaLocation"] = 'http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd'
|
44
|
-
return builder.doc
|
62
|
+
|
63
|
+
Nokogiri::XML::Document.parse(<<-src
|
64
|
+
<oai_dc:dc
|
65
|
+
xmlns:oai_dc='http://www.openarchives.org/OAI/2.0/oai_dc/'
|
66
|
+
xmlns:dc='http://purl.org/dc/elements/1.1/'
|
67
|
+
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
|
68
|
+
xsi:schemaLocation='http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd'></oai_dc:dc>
|
69
|
+
src
|
70
|
+
)
|
45
71
|
end
|
46
72
|
# Because FCRepo 3.5+ modifies DC on saves (to ensure that PID is a dc:identifier value),
|
47
73
|
# this datastream's content must be reloaded after saves
|
48
74
|
def action_after_save
|
49
|
-
self.dirty= false
|
50
75
|
@content = nil
|
51
76
|
@ng_xml = nil
|
52
|
-
|
77
|
+
remove_instance_variable(:@ng_xml)
|
53
78
|
end
|
79
|
+
|
54
80
|
def method_missing method, *args
|
55
81
|
query = false
|
56
82
|
_mname = method.id2name
|
@@ -5,90 +5,102 @@ module Cul
|
|
5
5
|
module Scv
|
6
6
|
module Hydra
|
7
7
|
module Om
|
8
|
-
class ModsDocument < ::ActiveFedora::
|
9
|
-
include OM::XML::
|
8
|
+
class ModsDocument < ::ActiveFedora::OmDatastream
|
9
|
+
include ::OM::XML::TerminologyBasedSolrizer
|
10
10
|
include Cul::Scv::Hydra::Solrizer::TerminologyBasedSolrizer
|
11
11
|
|
12
|
-
after_save :action_after_save
|
13
|
-
|
14
12
|
set_terminology do |t|
|
15
13
|
t.root(:path=>"mods",
|
16
14
|
:xmlns=>"http://www.loc.gov/mods/v3",
|
17
|
-
:schema=>"http://www.loc.gov/standards/mods/v3/mods-3-4.xsd")
|
18
|
-
|
19
|
-
|
20
|
-
|
15
|
+
:schema=>"http://www.loc.gov/standards/mods/v3/mods-3-4.xsd") {
|
16
|
+
}
|
17
|
+
|
18
|
+
t.main_title_info(:path=>'titleInfo', :index_as=>[], :attributes=>{:type=>:none}){
|
19
|
+
t.main_title(:path=>"title", :index_as=>[])
|
21
20
|
}
|
22
|
-
t.title(:proxy=>[:mods, :main_title_info, :main_title], :index_as=>[:displayable, :searchable, :sortable])
|
23
21
|
|
24
|
-
t.
|
22
|
+
t.title(:proxy=>[:mods, :main_title_info, :main_title],
|
23
|
+
:index_as=>[:displayable, :searchable, :sortable, :textable])
|
24
|
+
|
25
|
+
t.search_title_info(:path=>'titleInfo', :index_as=>[]){
|
25
26
|
t.search_title(:path=>'title', :index_as=>[:searchable])
|
26
27
|
}
|
27
|
-
t.project(:path=>"relatedItem", :attributes=>{:type=>"host", :displayLabel=>"Project"}, :index_as=>[
|
28
|
-
t.project_title_info(:path=>'titleInfo', :index_as=>[
|
29
|
-
t.lib_project(:path=>'title',:index_as=>[
|
30
|
-
t.lib_project_facet(:path=>'title', :index_as=>[:facetable, :not_searchable],:variant_of=>{:field_base=>'lib_project',:map=>:project_facet})
|
28
|
+
t.project(:path=>"relatedItem", :attributes=>{:type=>"host", :displayLabel=>"Project"}, :index_as=>[]){
|
29
|
+
t.project_title_info(:path=>'titleInfo', :index_as=>[]){
|
30
|
+
t.lib_project(:path=>'title',:index_as=>[])
|
31
31
|
}
|
32
32
|
}
|
33
|
-
t.collection(:path=>"relatedItem", :attributes=>{:type=>"host", :displayLabel=>"Collection"}, :index_as=>[
|
34
|
-
t.collection_title_info(:path=>'titleInfo', :index_as=>[
|
33
|
+
t.collection(:path=>"relatedItem", :attributes=>{:type=>"host", :displayLabel=>"Collection"}, :index_as=>[]){
|
34
|
+
t.collection_title_info(:path=>'titleInfo', :index_as=>[]){
|
35
35
|
t.lib_collection(:path=>'title', :index_as=>[:facetable, :displayable])
|
36
36
|
}
|
37
37
|
}
|
38
|
-
t.lib_project(:proxy=>[:project,:project_title_info, :lib_project]
|
38
|
+
t.lib_project(:proxy=>[:project,:project_title_info, :lib_project],
|
39
|
+
:index_as=>[:displayable, :searchable, :project_facetable, :textable])
|
39
40
|
t.lib_collection(:proxy=>[:collection,:collection_title_info, :lib_collection])
|
40
41
|
# pattern matches
|
41
|
-
t.identifier(:path=>"identifier", :attributes=>{:type=>"local"}, :
|
42
|
-
t.identifier_text(:ref=>:identifier, :index_as=>[:not_searchable, :textable])
|
42
|
+
t.identifier(:path=>"identifier", :attributes=>{:type=>"local"}, :index_as=>[:symbol, :textable])
|
43
43
|
t.clio(:path=>"identifier", :attributes=>{:type=>"CLIO"}, :data_type=>:symbol, :index_as=>[:searchable, :displayable])
|
44
44
|
t.abstract
|
45
45
|
t.subject {
|
46
46
|
t.topic
|
47
47
|
}
|
48
|
-
t.type_of_resource(:path=>"typeOfResource", :index_as=>[:
|
49
|
-
t.physical_description(:path=>"physicalDescription", :index_as=>[
|
50
|
-
t.form_marc(:path=>"form", :attributes=>{:authority=>"marcform"}, :index_as=>[:
|
51
|
-
t.form_aat(:path=>"form", :attributes=>{:authority=>"aat"}, :index_as=>[:
|
52
|
-
t.form(:attributes=>{:authority=>:none}, :index_as=>[:
|
53
|
-
t.form_nomarc(:path=>"form[@authority !='marcform']", :index_as=>[
|
48
|
+
t.type_of_resource(:path=>"typeOfResource", :index_as=>[:displayable])
|
49
|
+
t.physical_description(:path=>"physicalDescription", :index_as=>[]){
|
50
|
+
t.form_marc(:path=>"form", :attributes=>{:authority=>"marcform"}, :index_as=>[:displayable])
|
51
|
+
t.form_aat(:path=>"form", :attributes=>{:authority=>"aat"}, :index_as=>[:displayable])
|
52
|
+
t.form(:attributes=>{:authority=>:none}, :index_as=>[:displayable])
|
53
|
+
t.form_nomarc(:path=>"form[@authority !='marcform']", :index_as=>[])
|
54
54
|
t.extent(:path=>"extent", :index_as=>[:searchable, :displayable])
|
55
|
-
t.reformatting_quality(:path=>"reformattingQuality", :index_as=>[:
|
56
|
-
t.internet_media_type(:path=>"internetMediaType", :index_as=>[:
|
57
|
-
t.digital_origin(:path=>"digitalOrigin", :index_as=>[:
|
55
|
+
t.reformatting_quality(:path=>"reformattingQuality", :index_as=>[:displayable])
|
56
|
+
t.internet_media_type(:path=>"internetMediaType", :index_as=>[:displayable])
|
57
|
+
t.digital_origin(:path=>"digitalOrigin", :index_as=>[:displayable])
|
58
58
|
}
|
59
|
-
t.lib_format(:proxy=>[:physical_description, :form_nomarc])
|
60
|
-
t.location(:path=>"location", :index_as=>[
|
61
|
-
t.repo_text(:path=>"physicalLocation",:attributes=>{:authority=>:none}, :index_as=>[
|
62
|
-
t.
|
63
|
-
|
64
|
-
|
65
|
-
t.shelf_locator(:path=>"shelfLocator", :index_as=>[:
|
59
|
+
t.lib_format(:proxy=>[:physical_description, :form_nomarc], :index_as=>[:displayable, :facetable])
|
60
|
+
t.location(:path=>"location", :index_as=>[]){
|
61
|
+
t.repo_text(:path=>"physicalLocation",:attributes=>{:authority=>:none}, :index_as=>[])
|
62
|
+
t.lib_repo(:path=>"physicalLocation",
|
63
|
+
:attributes=>{:authority=>"marcorg"},
|
64
|
+
:index_as=>[])
|
65
|
+
t.shelf_locator(:path=>"shelfLocator", :index_as=>[:textable])
|
66
66
|
}
|
67
|
-
t.
|
68
|
-
|
67
|
+
t.lib_repo(:proxy=>[:location, :lib_repo],
|
68
|
+
:index_as=>[:marc_code_facetable, :marc_code_displayable,
|
69
|
+
:marc_code_textable])
|
70
|
+
t.lib_name(
|
71
|
+
:path=>'name',:attributes=>{:type=>'personal'},
|
72
|
+
:index_as=>[:facetable, :displayable, :searchable, :textable]){
|
73
|
+
t.name_part(:path=>'namePart', :index_as=>[])
|
69
74
|
}
|
70
|
-
t.name_corporate(
|
71
|
-
|
75
|
+
t.name_corporate(
|
76
|
+
:path=>'name',:attributes=>{:type=>'corporate'},
|
77
|
+
:index_as=>[:facetable, :displayable, :searchable],
|
78
|
+
:variant_of=>{:field_base=>:lib_name}){
|
79
|
+
t.name_part(
|
80
|
+
:path=>'namePart',
|
81
|
+
:index_as=>[])
|
72
82
|
}
|
73
|
-
t.note(:path=>"note", :index_as=>[:
|
74
|
-
t.access_condition(:path=>"accessCondition",
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
t.
|
79
|
-
|
80
|
-
|
83
|
+
t.note(:path=>"note", :index_as=>[:textable])
|
84
|
+
t.access_condition(:path=>"accessCondition",
|
85
|
+
:attributes=>{:type=>"useAndReproduction"},
|
86
|
+
:index_as => [:searchable, :symbol])
|
87
|
+
t.record_info(:path=>"recordInfo", :index_as=>[]) {
|
88
|
+
t.record_creation_date(:path=>"recordCreationDate",:attributes=>{:encoding=>"w3cdtf"}, :index_as=>[])
|
89
|
+
t.record_content_source(:path=>"recordContentSource",:attributes=>{:authority=>"marcorg"}, :index_as=>[])
|
90
|
+
t.language_of_cataloging(:path=>"languageOfCataloging", :index_as=>[]){
|
91
|
+
t.language_term(:path=>"languageTerm", :index_as=>[], :attributes=>{:type=>:none})
|
92
|
+
t.language_code(:path=>"languageTerm",:attributes=>{:type=>'code',:authority=>"iso639-2b"}, :index_as=>[])
|
81
93
|
}
|
82
|
-
t.record_origin(:path=>"recordOrigin", :index_as=>[
|
94
|
+
t.record_origin(:path=>"recordOrigin", :index_as=>[])
|
83
95
|
}
|
84
96
|
t.language_term(:proxy=>[:record_info, :language_of_cataloging, :language_term])
|
85
97
|
t.language_code(:proxy=>[:record_info, :language_of_cataloging, :language_code])
|
86
98
|
|
87
|
-
t.origin_info(:path=>"originInfo", :index_as=>[
|
88
|
-
t.date(:path=>"dateIssued", :attributes=>{:encoding=>'w3cdtf'}, :index_as=>[
|
89
|
-
t.key_date(:path=>"dateIssued", :attributes=>{:encoding=>'w3cdtf',:keyDate=>'yes'}, :index_as=>[
|
90
|
-
t.start_date(:path=>"dateIssued", :attributes=>{:encoding=>'w3cdtf',:keyDate=>'yes',:point=>'start'}, :index_as=>[
|
91
|
-
t.end_date(:path=>"dateIssued", :attributes=>{:encoding=>'w3cdtf',:point=>'end'}, :index_as=>[
|
99
|
+
t.origin_info(:path=>"originInfo", :index_as=>[]){
|
100
|
+
t.date(:path=>"dateIssued", :attributes=>{:encoding=>'w3cdtf'}, :index_as=>[])
|
101
|
+
t.key_date(:path=>"dateIssued", :attributes=>{:encoding=>'w3cdtf',:keyDate=>'yes'}, :index_as=>[])
|
102
|
+
t.start_date(:path=>"dateIssued", :attributes=>{:encoding=>'w3cdtf',:keyDate=>'yes',:point=>'start'}, :index_as=>[])
|
103
|
+
t.end_date(:path=>"dateIssued", :attributes=>{:encoding=>'w3cdtf',:point=>'end'}, :index_as=>[])
|
92
104
|
}
|
93
105
|
end
|
94
106
|
|
@@ -105,9 +117,7 @@ module Om
|
|
105
117
|
builder.doc.root["xsi:schemaLocation"] = 'http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-4.xsd'
|
106
118
|
return builder.doc
|
107
119
|
end
|
108
|
-
|
109
|
-
self.dirty= false
|
110
|
-
end
|
120
|
+
|
111
121
|
def method_missing method, *args
|
112
122
|
query = false
|
113
123
|
_mname = method.id2name
|
@@ -1,30 +1,94 @@
|
|
1
1
|
require 'solrizer'
|
2
|
-
module
|
3
|
-
|
4
|
-
|
2
|
+
module Solrizer::DefaultDescriptors
|
3
|
+
def self.textable
|
4
|
+
@textable_type ||= TextableDescriptor.new(:text, :indexed, :multivalued)
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.project_facetable
|
8
|
+
@project_facet_type ||= ProjectFacetDescriptor.new(:string, :indexed, :multivalued)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.marc_code_facetable
|
12
|
+
@marc_code_facet_type ||= MarcCodeFacetDescriptor.new(:string, :indexed, :multivalued)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.marc_code_displayable
|
16
|
+
@marc_code_type ||= MarcCodeDisplayDescriptor.new(:string, :stored, :indexed, :multivalued)
|
17
|
+
end
|
5
18
|
|
6
|
-
def self.
|
7
|
-
|
8
|
-
|
19
|
+
def self.marc_code_textable
|
20
|
+
@marc_code_map_text_type ||= MarcCodeTextableDescriptor.new(:text, :indexed, :multivalued)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.load_value_maps(config_path=nil)
|
24
|
+
if config_path.nil?
|
25
|
+
if defined?(Rails.root) && !Rails.root.nil?
|
26
|
+
config_path = File.join(Rails.root, "config", "solr_value_maps.yml")
|
27
|
+
end
|
28
|
+
# Default to using the config file within the gem
|
29
|
+
if !File.exist?(config_path.to_s)
|
30
|
+
logger.warn("ValueMapper: no field value maps at #{config_path}")
|
31
|
+
config_path = File.join(File.dirname(__FILE__), "..", "..", "..", "config", "solr_value_maps.yml")
|
32
|
+
end
|
33
|
+
if !File.exist?(config_path.to_s)
|
34
|
+
logger.warn("ValueMapper: no field value maps at #{File.expand_path(config_path)}")
|
35
|
+
return {}
|
36
|
+
end
|
9
37
|
end
|
10
|
-
|
11
|
-
|
12
|
-
|
38
|
+
logger.info("ValueMapper: loading field value maps from #{File.expand_path(config_path)}")
|
39
|
+
YAML::load(File.open(config_path))
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.value_maps
|
43
|
+
@@value_maps ||= load_value_maps
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
class TextableDescriptor < Solrizer::Descriptor
|
48
|
+
def name_and_converter(field_name, field_type)
|
49
|
+
['all_text_timv']
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
class ProjectFacetDescriptor < Solrizer::Descriptor
|
54
|
+
def converter(field_type)
|
55
|
+
map = Solrizer::DefaultDescriptors.value_maps[:project_to_facet] || {}
|
56
|
+
lambda {|value| (map.has_key? value) ? map[value] : value}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
class MarcCodeFacetDescriptor < Solrizer::Descriptor
|
61
|
+
def converter(field_type)
|
62
|
+
map = Solrizer::DefaultDescriptors.value_maps[:marc_to_facet] || {}
|
63
|
+
lambda {|value| (map.has_key? value) ? map[value] : value}
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class MarcCodeDisplayDescriptor < Solrizer::Descriptor
|
68
|
+
def converter(field_type)
|
69
|
+
map = Solrizer::DefaultDescriptors.value_maps[:marc_to_display] || {}
|
70
|
+
lambda {|value| (map.has_key? value) ? map[value] : value}
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
class MarcCodeTextableDescriptor < Solrizer::Descriptor
|
75
|
+
def name_and_converter(field_name, field_type)
|
76
|
+
['all_text_timv', converter(field_type)]
|
77
|
+
end
|
78
|
+
def converter(field_type)
|
79
|
+
fmap = Solrizer::DefaultDescriptors.value_maps[:marc_to_facet] || {}
|
80
|
+
dmap = Solrizer::DefaultDescriptors.value_maps[:marc_to_display] || {}
|
81
|
+
lambda do |value|
|
82
|
+
r = (fmap.has_key? value) ? [fmap[value]] : []
|
83
|
+
r << dmap[value] if (dmap.has_key? value)
|
84
|
+
r.join(' ')
|
85
|
+
end
|
13
86
|
end
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
# This is an override of a private method in the base class, and will have to be monitored for changes
|
20
|
-
def solr_name_and_mappings(field_name, field_type, index_type)
|
21
|
-
if index_type == :textable
|
22
|
-
result = orig_solr_name_and_mappings(field_name, field_type, :searchable)
|
23
|
-
result[0] = 'text'
|
24
|
-
return result
|
25
|
-
else
|
26
|
-
orig_solr_name_and_mappings(field_name, field_type, index_type)
|
87
|
+
end
|
88
|
+
class MarcCodeDisplayTextableDescriptor < MarcCodeDisplayDescriptor
|
89
|
+
def name_and_converter(field_name, field_type)
|
90
|
+
puts "MarcCodeDisplayTextableDescriptor"
|
91
|
+
['all_text_timv', converter(field_type)]
|
27
92
|
end
|
28
93
|
end
|
29
|
-
end
|
30
|
-
end
|
94
|
+
end
|
@@ -1,108 +1,48 @@
|
|
1
1
|
require 'om'
|
2
2
|
module Cul::Scv::Hydra::Solrizer::TerminologyBasedSolrizer
|
3
3
|
# copied from Solrizer::XML::TerminologyBasedSolrizer
|
4
|
-
def self.default_field_mapper
|
5
|
-
@@default_field_mapper ||= Cul::Scv::Hydra::Solrizer::FieldMapper.default
|
6
|
-
end
|
7
4
|
|
8
|
-
def self.
|
9
|
-
|
5
|
+
def self.included(klass)
|
6
|
+
klass.send(:extend, ClassMethods)
|
10
7
|
end
|
11
|
-
|
12
8
|
|
13
9
|
# Module Methods
|
14
|
-
|
15
|
-
# Build a solr document from +doc+ based on its terminology
|
16
|
-
# @param [OM::XML::Document] doc
|
17
|
-
# @param [Hash] (optional) solr_doc (values hash) to populate
|
18
|
-
def self.solrize(doc, solr_doc=Hash.new, field_mapper = nil)
|
19
|
-
unless doc.class.terminology.nil?
|
20
|
-
doc.class.terminology.terms.each_pair do |term_name,term|
|
21
|
-
doc.solrize_term(term, solr_doc, field_mapper)
|
22
|
-
# self.solrize_by_term(accessor_name, accessor_info, :solr_doc=>solr_doc)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
return solr_doc
|
27
|
-
end
|
28
|
-
|
29
|
-
# Populate a solr document with fields based on nodes in +xml+ corresponding to the
|
30
|
-
# term identified by +term_pointer+ within +terminology+
|
31
|
-
# @param [OM::XML::Document] doc xml document to extract values from
|
32
|
-
# @param [OM::XML::Term] term corresponding to desired xml values
|
33
|
-
# @param [Hash] (optional) solr_doc (values hash) to populate
|
34
|
-
# @param [Solrizer::FieldMapper] (optional) object that maps a term and its index options to solr field names
|
35
|
-
def self.solrize_term(doc, term, solr_doc = Hash.new, field_mapper = nil, opts={})
|
36
|
-
terminology = doc.class.terminology
|
37
|
-
parents = opts.fetch(:parents, [])
|
38
|
-
|
39
|
-
term_pointer = parents+[term.name]
|
40
|
-
nodeset = doc.find_by_terms(*term_pointer)
|
41
|
-
nodeset.each do |node|
|
42
|
-
# create solr fields
|
43
10
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
11
|
+
module ClassMethods
|
12
|
+
# Build a solr document from +doc+ based on its terminology
|
13
|
+
# @param [OM::XML::Document] doc
|
14
|
+
# @param [Hash] solr_doc (optional) solr_doc (values hash) to populate
|
15
|
+
def solrize(doc, solr_doc=Hash.new, field_mapper = nil)
|
16
|
+
unless doc.class.terminology.nil?
|
17
|
+
doc.class.terminology.terms.each_pair do |term_name,term|
|
18
|
+
doc.solrize_term(term, solr_doc, field_mapper) unless term.is_root_term?
|
48
19
|
end
|
49
20
|
end
|
21
|
+
|
22
|
+
return solr_doc
|
50
23
|
end
|
51
|
-
solr_doc
|
52
|
-
end
|
53
|
-
|
54
24
|
# Populate a solr document with solr fields corresponding to the given xml node
|
55
25
|
# Field names are generated using settings from the term in the +doc+'s terminology corresponding to +term_pointer+
|
56
26
|
# @param [Nokogiri::XML::Node] node to solrize
|
57
27
|
# @param [OM::XML::Document] doc document the node came from
|
58
28
|
# @param [Array] term_pointer Array pointing to the term that should be used for solrization settings
|
59
29
|
# @param [Hash] (optional) solr_doc (values hash) to populate
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
self.insert_field_value(solr_doc, term, hierarchical_field_name_base, node_value, field_mapper)
|
75
|
-
end
|
76
|
-
if term.variant_of and term.variant_of[:field_base]
|
77
|
-
self.insert_field_value(solr_doc, term, term.variant_of[:field_base], node_value, field_mapper, true)
|
30
|
+
def solrize_node(node_value, doc, term_pointer, term, solr_doc = Hash.new, field_mapper = nil, opts = {})
|
31
|
+
return solr_doc unless term.index_as && !term.index_as.empty?
|
32
|
+
generic_field_name_base = OM::XML::Terminology.term_generic_name(*term_pointer)
|
33
|
+
create_and_insert_terms(generic_field_name_base, node_value, term.index_as, solr_doc)
|
34
|
+
|
35
|
+
if term_pointer.length > 1
|
36
|
+
#hierarchical_field_name_base = OM::XML::Terminology.term_hierarchical_name(*term_pointer)
|
37
|
+
#create_and_insert_terms(hierarchical_field_name_base, node_value, term.index_as, solr_doc)
|
38
|
+
end
|
39
|
+
if term.variant_of and term.variant_of[:field_base]
|
40
|
+
#create_and_insert_terms(term.variant_of[:field_base], node_value, term.index_as, solr_doc)
|
41
|
+
create_and_insert_terms(term.variant_of[:field_base], node_value, term.index_as, solr_doc)
|
42
|
+
end
|
43
|
+
solr_doc
|
78
44
|
end
|
79
|
-
solr_doc
|
80
|
-
end
|
81
45
|
|
82
|
-
def self.insert_field_value(solr_doc, term, field_base_name, field_value, field_mapper=nil , unique=false)
|
83
|
-
field_mapper = self.default_field_mapper if field_mapper.nil?
|
84
|
-
field_mapper.solr_names_and_values(field_base_name, field_value, term.type, term.index_as).each { |field_name, field_value|
|
85
|
-
unless field_value.join("").strip.empty?
|
86
|
-
if term.variant_of and term.variant_of[:map]
|
87
|
-
field_value = default_value_mapper.solr_value(term.variant_of[:map], field_value)
|
88
|
-
end
|
89
|
-
Cul::Scv::Hydra::Solrizer::Extractor.insert_solr_field_value(solr_doc, field_name, field_value, (unique || (field_name == 'text')))
|
90
|
-
end
|
91
|
-
}
|
92
|
-
end
|
93
|
-
# Instance Methods
|
94
|
-
|
95
|
-
attr_accessor :field_mapper
|
96
|
-
|
97
|
-
def to_solr(solr_doc = Hash.new, field_mapper = self.field_mapper) # :nodoc:
|
98
|
-
::Solrizer::XML::TerminologyBasedSolrizer.solrize(self, solr_doc, field_mapper)
|
99
|
-
end
|
100
|
-
|
101
|
-
def solrize_term(term, solr_doc = Hash.new, field_mapper = self.field_mapper, opts={})
|
102
|
-
Cul::Scv::Hydra::Solrizer::TerminologyBasedSolrizer.solrize_term(self, term, solr_doc, field_mapper, opts)
|
103
46
|
end
|
104
47
|
|
105
|
-
def solrize_node(node, term_pointer, term, solr_doc = Hash.new, field_mapper = self.field_mapper, opts={})
|
106
|
-
Cul::Scv::Hydra::Solrizer::TerminologyBasedSolrizer.solrize_node(node, self, term_pointer, term, solr_doc, field_mapper, opts)
|
107
|
-
end
|
108
48
|
end # module
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Cul::Scv::Hydra::Solrizer
|
2
2
|
# This class uses a yaml map to translate field values for solr
|
3
3
|
class ValueMapper
|
4
|
-
def self.load_value_maps(config_path=nil)
|
4
|
+
def self.load_value_maps(config_path=nil)
|
5
5
|
if config_path.nil?
|
6
6
|
if defined?(Rails.root) && !Rails.root.nil?
|
7
7
|
config_path = File.join(Rails.root, "config", "solr_value_maps.yml")
|
data/lib/tasks/cmodel.rake
CHANGED
@@ -47,11 +47,21 @@ def content_for(pid)
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def load_content(content, pid)
|
50
|
-
|
50
|
+
begin
|
51
|
+
connection.ingest(:file=>StringIO.new(content), :pid=>pid)
|
52
|
+
rescue Exception => e
|
53
|
+
puts "possible problem with ingest of #{pid}: #{e.message}"
|
54
|
+
raise e
|
55
|
+
end
|
51
56
|
end
|
52
57
|
|
53
58
|
def purge(pid)
|
54
|
-
|
59
|
+
begin
|
60
|
+
connection.purge_object :pid=>pid
|
61
|
+
rescue Exception => e
|
62
|
+
puts "possible problem with purge of #{pid}: #{e.message}"
|
63
|
+
end
|
64
|
+
|
55
65
|
end
|
56
66
|
|
57
67
|
def reload(pid)
|
@@ -86,6 +96,7 @@ namespace :cul_scv_hydra do
|
|
86
96
|
task :reload_all => :environment do
|
87
97
|
pattern = ENV["PATTERN"]
|
88
98
|
pattern = Regexp.compile(pattern) if pattern
|
99
|
+
reload("ldpd:nullbind")
|
89
100
|
each_cmodel do |pid|
|
90
101
|
unless (pattern and not pid =~ pattern)
|
91
102
|
puts "reloading #{pid}"
|
metadata
CHANGED
@@ -1,71 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cul_scv_hydra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin Armintor
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-09-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: blacklight
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ! '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 4.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ! '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 4.0.0
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rails
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ~>
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 3.2.5
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ~>
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 3.2.5
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: active-fedora
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
31
|
- - ~>
|
46
32
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
33
|
+
version: 6.1.1
|
48
34
|
type: :runtime
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
38
|
- - ~>
|
53
39
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
40
|
+
version: 6.1.1
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: hydra-head
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
|
-
- -
|
45
|
+
- - '='
|
60
46
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
47
|
+
version: 6.2.2
|
62
48
|
type: :runtime
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
|
-
- -
|
52
|
+
- - '='
|
67
53
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
54
|
+
version: 6.2.2
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: active_fedora_finders
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,28 +100,28 @@ dependencies:
|
|
114
100
|
requirements:
|
115
101
|
- - ~>
|
116
102
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
103
|
+
version: 2.1.0
|
118
104
|
type: :runtime
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
107
|
requirements:
|
122
108
|
- - ~>
|
123
109
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
110
|
+
version: 2.1.0
|
125
111
|
- !ruby/object:Gem::Dependency
|
126
112
|
name: solrizer
|
127
113
|
requirement: !ruby/object:Gem::Requirement
|
128
114
|
requirements:
|
129
115
|
- - ~>
|
130
116
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
117
|
+
version: 3.0.0
|
132
118
|
type: :runtime
|
133
119
|
prerelease: false
|
134
120
|
version_requirements: !ruby/object:Gem::Requirement
|
135
121
|
requirements:
|
136
122
|
- - ~>
|
137
123
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
124
|
+
version: 3.0.0
|
139
125
|
- !ruby/object:Gem::Dependency
|
140
126
|
name: rspec
|
141
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -275,6 +261,7 @@ files:
|
|
275
261
|
- app/models/resource.rb
|
276
262
|
- app/models/static_audio_aggregator.rb
|
277
263
|
- app/models/static_image_aggregator.rb
|
264
|
+
- config/fedora.yml
|
278
265
|
- config/predicate_mappings.yml
|
279
266
|
- config/solr_mappings.yml
|
280
267
|
- config/solr_value_maps.yml
|
@@ -298,7 +285,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
298
285
|
version: '0'
|
299
286
|
requirements: []
|
300
287
|
rubyforge_project:
|
301
|
-
rubygems_version: 2.0.
|
288
|
+
rubygems_version: 2.0.7
|
302
289
|
signing_key:
|
303
290
|
specification_version: 4
|
304
291
|
summary: ActiveFedora, OM, and Solrizer implementations for CUL Staff Collection Viewer
|