cul_scv_hydra 0.10.0 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|