cul_scv_hydra 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/models/bag_aggregator.rb +3 -2
- data/app/models/concerns/cul.rb +7 -0
- data/{lib/cul_scv_hydra/active_fedora.rb → app/models/concerns/cul/scv/hydra/models.rb} +4 -5
- data/{lib/cul_scv_hydra/active_fedora/model → app/models/concerns/cul/scv/hydra/models}/aggregator.rb +3 -3
- data/{lib/cul_scv_hydra/active_fedora/model → app/models/concerns/cul/scv/hydra/models}/common.rb +36 -9
- data/{lib/cul_scv_hydra/active_fedora/model → app/models/concerns/cul/scv/hydra/models}/resource.rb +2 -2
- data/app/models/content_aggregator.rb +3 -2
- data/app/models/cul/scv/hydra/datastreams/dc_metadata.rb +109 -0
- data/app/models/cul/scv/hydra/datastreams/mods_document.rb +157 -0
- data/{lib/cul_scv_hydra/active_fedora/model → app/models/cul/scv/hydra/datastreams}/struct_metadata.rb +10 -4
- data/app/models/dcdocument.rb +2 -1
- data/app/models/generic_aggregator.rb +4 -3
- data/app/models/generic_object.rb +3 -2
- data/app/models/generic_resource.rb +2 -1
- data/app/models/jp2_image_aggregator.rb +3 -2
- data/app/models/mets_structured_aggregator.rb +3 -2
- data/app/models/resource.rb +3 -2
- data/app/models/static_audio_aggregator.rb +3 -2
- data/app/models/static_image_aggregator.rb +3 -2
- data/bin/rails +12 -0
- data/lib/cul_scv_hydra.rb +0 -1
- data/lib/cul_scv_hydra/engine.rb +15 -0
- data/lib/cul_scv_hydra/om.rb +0 -2
- data/lib/cul_scv_hydra/om/standard_mods.rb +8 -0
- data/lib/cul_scv_hydra/version.rb +1 -1
- data/lib/tasks/cmodel.rake +11 -2
- metadata +29 -61
- data/lib/cul_scv_hydra/active_fedora/model.rb +0 -9
- data/lib/cul_scv_hydra/active_fedora/model/nokogiri_datastreams.rb +0 -142
- data/lib/cul_scv_hydra/om/dc_metadata.rb +0 -102
- data/lib/cul_scv_hydra/om/scv_mods_document.rb +0 -150
@@ -1,12 +1,13 @@
|
|
1
1
|
require "active-fedora"
|
2
2
|
require "active_fedora_finders"
|
3
|
+
require "hydra-core"
|
3
4
|
class BagAggregator < ::ActiveFedora::Base
|
4
5
|
extend ActiveModel::Callbacks
|
5
6
|
include ::ActiveFedora::Finders
|
6
7
|
include ::ActiveFedora::DatastreamCollections
|
7
8
|
include ::Hydra::ModelMethods
|
8
|
-
include Cul::Scv::Hydra::
|
9
|
-
include Cul::Scv::Hydra::
|
9
|
+
include Cul::Scv::Hydra::Models::Common
|
10
|
+
include Cul::Scv::Hydra::Models::Aggregator
|
10
11
|
|
11
12
|
alias :file_objects :resources
|
12
13
|
|
@@ -0,0 +1,7 @@
|
|
1
|
+
module Cul
|
2
|
+
extend ActiveSupport::Autoload
|
3
|
+
autoload :'Scv::Hydra::Models', 'cul/scv/hydra/models'
|
4
|
+
autoload :'Scv::Hydra::Models::Common', 'cul/scv/hydra/models/common'
|
5
|
+
autoload :'Scv::Hydra::Models::Aggregator', 'cul/scv/hydra/models/aggregator'
|
6
|
+
autoload :'Scv::Hydra::Models::Resource', 'cul/scv/hydra/models/resource'
|
7
|
+
end
|
@@ -3,9 +3,9 @@ require "cul_scv_hydra/om"
|
|
3
3
|
require 'uri'
|
4
4
|
require 'rdf'
|
5
5
|
module Cul
|
6
|
-
|
7
|
-
|
8
|
-
module
|
6
|
+
module Scv
|
7
|
+
module Hydra
|
8
|
+
module Models
|
9
9
|
AGGREGATOR_TYPE = (URI.parse("http://purl.oclc.org/NET/CUL/Aggregator"))
|
10
10
|
RESOURCE_TYPE = (URI.parse("http://purl.oclc.org/NET/CUL/Resource"))
|
11
11
|
MEMBER_QUERY = <<-SPARQL
|
@@ -14,5 +14,4 @@ module Cul
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
17
|
-
end
|
18
|
-
require 'cul_scv_hydra/active_fedora/model.rb'
|
17
|
+
end
|
@@ -1,15 +1,15 @@
|
|
1
|
-
module Cul::Scv::Hydra::
|
1
|
+
module Cul::Scv::Hydra::Models
|
2
2
|
module Aggregator
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
included do
|
6
|
-
has_metadata :name => "structMetadata", :type=>Cul::Scv::Hydra::
|
6
|
+
has_metadata :name => "structMetadata", :type=>Cul::Scv::Hydra::Datastreams::StructMetadata, :versionable => true, :controlGroup => 'M'
|
7
7
|
has_many :parts, :property => :cul_member_of, :class_name=>'ActiveFedora::Base'
|
8
8
|
after_create :aggregator!
|
9
9
|
end
|
10
10
|
|
11
11
|
def aggregator!
|
12
|
-
add_relationship(:rdf_type, Cul::Scv::Hydra::
|
12
|
+
add_relationship(:rdf_type, Cul::Scv::Hydra::Models::AGGREGATOR_TYPE.to_s)
|
13
13
|
@metadata_is_dirty = true
|
14
14
|
self.save
|
15
15
|
end
|
data/{lib/cul_scv_hydra/active_fedora/model → app/models/concerns/cul/scv/hydra/models}/common.rb
RENAMED
@@ -1,15 +1,18 @@
|
|
1
1
|
require 'active-fedora'
|
2
2
|
require 'uri'
|
3
|
-
module Cul::Scv::Hydra::
|
3
|
+
module Cul::Scv::Hydra::Models
|
4
4
|
module Common
|
5
5
|
extend ActiveSupport::Concern
|
6
|
-
|
6
|
+
DC_SPEC = {
|
7
|
+
:name => "DC", :type=>Cul::Scv::Hydra::Datastreams::DCMetadata,
|
8
|
+
:versionable => true, :label => 'Dublin Core Record for this object'
|
9
|
+
}
|
7
10
|
included do
|
8
11
|
define_model_callbacks :create
|
9
|
-
|
10
12
|
has_and_belongs_to_many :containers, :property=>:cul_member_of, :class_name=>'ActiveFedora::Base'
|
11
|
-
has_metadata :name => "DC", :type=>Cul::Scv::Hydra::
|
12
|
-
|
13
|
+
has_metadata :name => "DC", :type=>Cul::Scv::Hydra::Datastreams::DCMetadata, :versionable => true
|
14
|
+
#self.ds_specs['DC'] = DC_SPEC
|
15
|
+
has_metadata :name => "descMetadata", :type=>Cul::Scv::Hydra::Datastreams::ModsDocument, :versionable => true
|
13
16
|
has_metadata :name => "rightsMetadata", :type=>::Hydra::Datastream::RightsMetadata, :versionable => true
|
14
17
|
|
15
18
|
end
|
@@ -18,6 +21,31 @@ module Common
|
|
18
21
|
def pid_namespace
|
19
22
|
'ldpd'
|
20
23
|
end
|
24
|
+
|
25
|
+
# override a buggy impl in AF
|
26
|
+
def has_datastream(args)
|
27
|
+
unless args.has_key?(:name)
|
28
|
+
return false
|
29
|
+
end
|
30
|
+
unless args.has_key?(:prefix)
|
31
|
+
args.merge!({:prefix=>args[:name].to_s.upcase})
|
32
|
+
end
|
33
|
+
unless class_named_datastreams_desc.has_key?(args[:name])
|
34
|
+
class_named_datastreams_desc[args[:name]] = {}
|
35
|
+
end
|
36
|
+
|
37
|
+
args.merge!({:mimeType=>args[:mime_type]}) if args.has_key?(:mime_type)
|
38
|
+
|
39
|
+
unless class_named_datastreams_desc[args[:name]].has_key?(:type)
|
40
|
+
#default to type ActiveFedora::Datastream
|
41
|
+
args[:type] ||= ActiveFedora::Datastream
|
42
|
+
end
|
43
|
+
args[:type] = args[:type].constantize if args[:type].is_a? String
|
44
|
+
raise args[:type] unless args[:type].name
|
45
|
+
class_named_datastreams_desc[args[:name]]= args
|
46
|
+
create_named_datastream_finders(args[:name],args[:prefix])
|
47
|
+
create_named_datastream_update_methods(args[:name])
|
48
|
+
end
|
21
49
|
end
|
22
50
|
|
23
51
|
def rdf_type
|
@@ -102,15 +130,15 @@ module Common
|
|
102
130
|
end
|
103
131
|
|
104
132
|
def index_type_label
|
105
|
-
riquery = Cul::Scv::Hydra::
|
133
|
+
riquery = Cul::Scv::Hydra::Models::MEMBER_QUERY.gsub(/%PID%/, self.pid)
|
106
134
|
begin
|
107
135
|
docs = ::ActiveFedora::Base.connection_for_pid(self.pid).find_by_sparql riquery
|
108
136
|
rescue Exception=>e
|
109
137
|
docs = self.parts
|
110
138
|
end
|
111
|
-
if docs.
|
139
|
+
if docs.size == 0
|
112
140
|
label = "EMPTY"
|
113
|
-
elsif docs.
|
141
|
+
elsif docs.size == 1
|
114
142
|
label = "SINGLE PART"
|
115
143
|
else
|
116
144
|
label = "MULTIPART"
|
@@ -180,7 +208,6 @@ module Common
|
|
180
208
|
params.each_pair do |dsid, ds_params|
|
181
209
|
if datastreams.include?(dsid)
|
182
210
|
verify_params = ds_params.dup
|
183
|
-
current_indexed_attributes = {}
|
184
211
|
changed = false
|
185
212
|
verify_params.each { |pointer, values|
|
186
213
|
changed ||= value_changed?(datastreams[dsid],pointer,values)
|
data/{lib/cul_scv_hydra/active_fedora/model → app/models/concerns/cul/scv/hydra/models}/resource.rb
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
module Cul::Scv::Hydra::
|
1
|
+
module Cul::Scv::Hydra::Models
|
2
2
|
module Resource
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
# constants #
|
@@ -35,7 +35,7 @@ module Resource
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def resource!
|
38
|
-
add_relationship(:rdf_type, Cul::Scv::Hydra::
|
38
|
+
add_relationship(:rdf_type, Cul::Scv::Hydra::Models::RESOURCE_TYPE.to_s)
|
39
39
|
@metadata_is_dirty = true
|
40
40
|
update
|
41
41
|
end
|
@@ -1,11 +1,12 @@
|
|
1
1
|
require "active-fedora"
|
2
|
+
require "active_fedora_finders"
|
2
3
|
class ContentAggregator < ::ActiveFedora::Base
|
3
4
|
extend ActiveModel::Callbacks
|
4
5
|
include ::ActiveFedora::Finders
|
5
6
|
include ::ActiveFedora::DatastreamCollections
|
6
7
|
include ::Hydra::ModelMethods
|
7
|
-
include Cul::Scv::Hydra::
|
8
|
-
include Cul::Scv::Hydra::
|
8
|
+
include Cul::Scv::Hydra::Models::Common
|
9
|
+
include Cul::Scv::Hydra::Models::Aggregator
|
9
10
|
|
10
11
|
alias :file_objects :resources
|
11
12
|
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'active-fedora'
|
2
|
+
module Cul
|
3
|
+
module Scv
|
4
|
+
module Hydra
|
5
|
+
module Datastreams
|
6
|
+
class DCMetadata < ::ActiveFedora::OmDatastream
|
7
|
+
|
8
|
+
after_save :action_after_save
|
9
|
+
set_terminology do |t|
|
10
|
+
t.root(:path=>"dc", :namespace_prefix=>"oai_dc",
|
11
|
+
"xmlns:oai_dc"=>"http://www.openarchives.org/OAI/2.0/oai_dc/",
|
12
|
+
"xmlns:dc"=>"http://purl.org/dc/elements/1.1/",
|
13
|
+
:schema=>"http://www.openarchives.org/OAI/2.0/oai_dc.xsd")
|
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
|
+
:type=>:string,
|
35
|
+
:index_as=>[:symbol])
|
36
|
+
t.dc_language(:path=>"language",
|
37
|
+
:namespace_prefix=>"dc",
|
38
|
+
:index_as=>[:displayable, :searchable])
|
39
|
+
t.dc_publisher(:path=>"publisher",
|
40
|
+
:namespace_prefix=>"dc",
|
41
|
+
:index_as=>[:displayable, :searchable])
|
42
|
+
t.dc_relation(:path=>"relation",
|
43
|
+
:namespace_prefix=>"dc",
|
44
|
+
:index_as=>[:displayable, :searchable])
|
45
|
+
t.dc_rights(:path=>"rights",
|
46
|
+
:namespace_prefix=>"dc",
|
47
|
+
:index_as=>[:displayable, :searchable])
|
48
|
+
t.dc_source(:path=>"source",
|
49
|
+
:namespace_prefix=>"dc",
|
50
|
+
:index_as=>[:displayable, :searchable])
|
51
|
+
t.dc_subject(:path=>"subject",
|
52
|
+
:namespace_prefix=>"dc",
|
53
|
+
:index_as=>[:displayable, :searchable])
|
54
|
+
t.dc_title(:path=>"title",
|
55
|
+
:namespace_prefix=>"dc",
|
56
|
+
:index_as=>[:displayable, :searchable])
|
57
|
+
t.dc_type(:path=>"type",
|
58
|
+
:namespace_prefix=>"dc",
|
59
|
+
:index_as=>[:displayable, :searchable])
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.xml_template
|
63
|
+
|
64
|
+
Nokogiri::XML::Document.parse(<<-src
|
65
|
+
<oai_dc:dc
|
66
|
+
xmlns:oai_dc='http://www.openarchives.org/OAI/2.0/oai_dc/'
|
67
|
+
xmlns:dc='http://purl.org/dc/elements/1.1/'
|
68
|
+
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
|
69
|
+
xsi:schemaLocation='http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd'></oai_dc:dc>
|
70
|
+
src
|
71
|
+
)
|
72
|
+
end
|
73
|
+
# Because FCRepo 3.5+ modifies DC on saves (to ensure that PID is a dc:identifier value),
|
74
|
+
# this datastream's content must be reloaded after saves
|
75
|
+
def action_after_save
|
76
|
+
@content = nil
|
77
|
+
@ng_xml = nil
|
78
|
+
remove_instance_variable(:@ng_xml)
|
79
|
+
end
|
80
|
+
|
81
|
+
def prefix
|
82
|
+
if ::ActiveFedora::VERSION >= '8'
|
83
|
+
Rails.logger.warn("the prefix method of #{self.class.name} was overriden to maintain backwards compatibility")
|
84
|
+
end
|
85
|
+
''
|
86
|
+
end
|
87
|
+
|
88
|
+
def method_missing method, *args
|
89
|
+
query = false
|
90
|
+
_mname = method.id2name
|
91
|
+
if _mname[-1,1] == '?'
|
92
|
+
query = true
|
93
|
+
_mname = _mname[0,_mname.length-1]
|
94
|
+
end
|
95
|
+
_msym = _mname.to_sym
|
96
|
+
has_term = self.class.terminology.has_term?(_msym)
|
97
|
+
return false if query and not has_term
|
98
|
+
_r = super(_mname.to_sym, *args)
|
99
|
+
if query
|
100
|
+
_r.length > 0
|
101
|
+
else
|
102
|
+
_r
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,157 @@
|
|
1
|
+
require 'active-fedora'
|
2
|
+
require 'solrizer'
|
3
|
+
require 'cul_scv_hydra/solrizer'
|
4
|
+
module Cul
|
5
|
+
module Scv
|
6
|
+
module Hydra
|
7
|
+
module Datastreams
|
8
|
+
class ModsDocument < ::ActiveFedora::OmDatastream
|
9
|
+
include ::OM::XML::TerminologyBasedSolrizer
|
10
|
+
include Cul::Scv::Hydra::Solrizer::TerminologyBasedSolrizer
|
11
|
+
include Cul::Scv::Hydra::Solrizer::ScvModsFieldable
|
12
|
+
|
13
|
+
map_field("lib_repo_sim", :marc_to_facet)
|
14
|
+
map_field("lib_repo_ssm", :marc_to_display)
|
15
|
+
map_field("lib_project_sim", :project_to_facet)
|
16
|
+
|
17
|
+
set_terminology do |t|
|
18
|
+
t.root(:path=>"mods",
|
19
|
+
:xmlns=>"http://www.loc.gov/mods/v3",
|
20
|
+
:schema=>"http://www.loc.gov/standards/mods/v3/mods-3-4.xsd") {
|
21
|
+
}
|
22
|
+
|
23
|
+
t.main_title_info(:path=>'titleInfo', :index_as=>[], :attributes=>{:type=>:none}){
|
24
|
+
t.non_sort(:path=>"nonSort", :index_as=>[])
|
25
|
+
t.main_title(:path=>"title", :index_as=>[])
|
26
|
+
}
|
27
|
+
|
28
|
+
t.title(:proxy=>[:mods, :main_title_info, :main_title], :type=>:string,
|
29
|
+
:index_as=>[:searchable, :sortable, :textable])
|
30
|
+
t.title_display(:proxy=>[:mods, :main_title_info], :type=>:string,
|
31
|
+
:index_as=>[:displayable])
|
32
|
+
|
33
|
+
t.search_title_info(:path=>'titleInfo', :index_as=>[]){
|
34
|
+
t.search_title(:path=>'title', :index_as=>[:searchable])
|
35
|
+
}
|
36
|
+
t.project(:path=>"relatedItem", :attributes=>{:type=>"host", :displayLabel=>"Project"}, :index_as=>[]){
|
37
|
+
t.project_title_info(:path=>'titleInfo', :index_as=>[]){
|
38
|
+
t.lib_project(:path=>'title',:index_as=>[])
|
39
|
+
}
|
40
|
+
}
|
41
|
+
t.collection(:path=>"relatedItem", :attributes=>{:type=>"host", :displayLabel=>"Collection"}, :index_as=>[]){
|
42
|
+
t.collection_title_info(:path=>'titleInfo', :index_as=>[:facetable, :displayable]){
|
43
|
+
t.lib_collection(:path=>'title', :index_as=>[])
|
44
|
+
}
|
45
|
+
}
|
46
|
+
t.lib_project(:proxy=>[:project,:project_title_info],
|
47
|
+
:index_as=>[:displayable, :searchable, :project_facetable, :textable])
|
48
|
+
t.lib_collection(:proxy=>[:collection,:collection_title_info])
|
49
|
+
# pattern matches
|
50
|
+
t.identifier(:path=>"identifier", :attributes=>{:type=>"local"}, :type=>:string, :index_as=>[:symbol, :textable])
|
51
|
+
t.clio(:path=>"identifier", :attributes=>{:type=>"CLIO"}, :data_type=>:symbol, :index_as=>[:symbol, :textable])
|
52
|
+
t.abstract
|
53
|
+
t.subject {
|
54
|
+
t.topic
|
55
|
+
}
|
56
|
+
t.type_of_resource(:path=>"typeOfResource", :index_as=>[:displayable])
|
57
|
+
t.physical_description(:path=>"physicalDescription", :index_as=>[]){
|
58
|
+
t.form_marc(:path=>"form", :attributes=>{:authority=>"marcform"}, :index_as=>[:displayable])
|
59
|
+
t.form_aat(:path=>"form", :attributes=>{:authority=>"aat"}, :index_as=>[:displayable])
|
60
|
+
t.form(:attributes=>{:authority=>:none}, :index_as=>[:displayable])
|
61
|
+
t.form_nomarc(:path=>"form[@authority !='marcform']", :index_as=>[])
|
62
|
+
t.extent(:path=>"extent", :index_as=>[:searchable, :displayable])
|
63
|
+
t.reformatting_quality(:path=>"reformattingQuality", :index_as=>[:displayable])
|
64
|
+
t.internet_media_type(:path=>"internetMediaType", :index_as=>[:displayable])
|
65
|
+
t.digital_origin(:path=>"digitalOrigin", :index_as=>[:displayable])
|
66
|
+
}
|
67
|
+
t.lib_format(:proxy=>[:physical_description, :form_nomarc], :index_as=>[:displayable, :facetable])
|
68
|
+
t.location(:path=>"location", :index_as=>[]){
|
69
|
+
t.repo_text(:path=>"physicalLocation",:attributes=>{:authority=>:none}, :index_as=>[])
|
70
|
+
t.lib_repo(:path=>"physicalLocation",
|
71
|
+
:attributes=>{:authority=>"marcorg"},
|
72
|
+
:index_as=>[])
|
73
|
+
t.shelf_locator(:path=>"shelfLocator", :index_as=>[:textable])
|
74
|
+
}
|
75
|
+
t.lib_repo(:proxy=>[:location, :lib_repo], :type=>:text,
|
76
|
+
:index_as=>[:marc_code_facetable, :marc_code_displayable, :marc_code_textable])
|
77
|
+
t.lib_name(
|
78
|
+
:path=>'name',:attributes=>{:type=>'personal'},
|
79
|
+
:index_as=>[:facetable, :displayable, :searchable, :textable]){
|
80
|
+
t.name_part(:path=>'namePart', :index_as=>[])
|
81
|
+
}
|
82
|
+
t.name_corporate(
|
83
|
+
:path=>'name',:attributes=>{:type=>'corporate'},
|
84
|
+
:index_as=>[:facetable, :displayable, :searchable],
|
85
|
+
:variant_of=>{:field_base=>:lib_name}){
|
86
|
+
t.name_part(
|
87
|
+
:path=>'namePart',
|
88
|
+
:index_as=>[])
|
89
|
+
}
|
90
|
+
t.note(:path=>"note", :index_as=>[:textable])
|
91
|
+
t.access_condition(:path=>"accessCondition",
|
92
|
+
:attributes=>{:type=>"useAndReproduction"},
|
93
|
+
:index_as => [:searchable, :symbol])
|
94
|
+
t.record_info(:path=>"recordInfo", :index_as=>[]) {
|
95
|
+
t.record_creation_date(:path=>"recordCreationDate",:attributes=>{:encoding=>"w3cdtf"}, :index_as=>[])
|
96
|
+
t.record_content_source(:path=>"recordContentSource",:attributes=>{:authority=>"marcorg"}, :index_as=>[])
|
97
|
+
t.language_of_cataloging(:path=>"languageOfCataloging", :index_as=>[]){
|
98
|
+
t.language_term(:path=>"languageTerm", :index_as=>[], :attributes=>{:type=>:none})
|
99
|
+
t.language_code(:path=>"languageTerm",:attributes=>{:type=>'code',:authority=>"iso639-2b"}, :index_as=>[])
|
100
|
+
}
|
101
|
+
t.record_origin(:path=>"recordOrigin", :index_as=>[])
|
102
|
+
}
|
103
|
+
t.language_term(:proxy=>[:record_info, :language_of_cataloging, :language_term])
|
104
|
+
t.language_code(:proxy=>[:record_info, :language_of_cataloging, :language_code])
|
105
|
+
|
106
|
+
t.origin_info(:path=>"originInfo", :index_as=>[]){
|
107
|
+
t.date(:path=>"dateIssued", :attributes=>{:encoding=>'w3cdtf'}, :index_as=>[])
|
108
|
+
t.lib_date(:path=>"dateIssued", :attributes=>{:encoding=>'w3cdtf',:keyDate=>'yes'},
|
109
|
+
:index_as=>[:date_sortable])
|
110
|
+
t.start_date(:path=>"dateIssued", :attributes=>{:encoding=>'w3cdtf',:keyDate=>'yes',:point=>'start'}, :index_as=>[])
|
111
|
+
t.end_date(:path=>"dateIssued", :attributes=>{:encoding=>'w3cdtf',:point=>'end'}, :index_as=>[])
|
112
|
+
}
|
113
|
+
end
|
114
|
+
|
115
|
+
def self.xml_template
|
116
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
117
|
+
xml.mods(:version=>"3.4",
|
118
|
+
"xmlns"=>"http://www.loc.gov/mods/v3",
|
119
|
+
"xmlns:xlink"=>"http://www.w3.org/1999/xlink",
|
120
|
+
"xmlns:xsi"=>"http://www.w3.org/2001/XMLSchema-instance"){
|
121
|
+
}
|
122
|
+
end
|
123
|
+
builder.doc.encoding = 'UTF-8'
|
124
|
+
# for some reason, this is the only way to get an equivalent nokogiri root node; the attribute can't be in the original builder call
|
125
|
+
builder.doc.root["xsi:schemaLocation"] = 'http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-4.xsd'
|
126
|
+
return builder.doc
|
127
|
+
end
|
128
|
+
|
129
|
+
def prefix
|
130
|
+
if ::ActiveFedora::VERSION >= '8'
|
131
|
+
Rails.logger.warn("the prefix method of #{self.class.name} was overriden to maintain backwards compatibility")
|
132
|
+
end
|
133
|
+
''
|
134
|
+
end
|
135
|
+
|
136
|
+
def method_missing method, *args
|
137
|
+
query = false
|
138
|
+
_mname = method.id2name
|
139
|
+
if _mname[-1,1] == '?'
|
140
|
+
query = true
|
141
|
+
_mname = _mname[0,_mname.length-1]
|
142
|
+
end
|
143
|
+
_msym = _mname.to_sym
|
144
|
+
has_term = self.class.terminology.has_term?(_msym)
|
145
|
+
return false if query and not has_term
|
146
|
+
_r = super(_mname.to_sym, *args)
|
147
|
+
if query
|
148
|
+
_r.length > 0
|
149
|
+
else
|
150
|
+
_r
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|