active-fedora 1.1.8 → 1.1.9
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/README.textile +5 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/active-fedora.gemspec +9 -7
- data/lib/active_fedora/base.rb +44 -50
- data/lib/active_fedora/metadata_datastream.rb +105 -33
- data/lib/active_fedora/metadata_datastream_helper.rb +3 -1
- data/lib/active_fedora/nokogiri_datastream.rb +51 -2
- data/lib/active_fedora/rels_ext_datastream.rb +0 -1
- data/lib/hydra.rb +1 -1
- data/lib/hydra/sample_mods_datastream.rb +100 -0
- data/spec/hydrangea_fixture_mods_article1.foxml.xml +225 -0
- data/spec/integration/full_featured_model_spec.rb +1 -2
- data/spec/integration/mods_article_integration_spec.rb +45 -0
- data/spec/unit/base_extra_spec.rb +11 -4
- data/spec/unit/base_spec.rb +64 -99
- data/spec/unit/metadata_datastream_spec.rb +109 -1
- data/spec/unit/nokogiri_datastream_spec.rb +154 -5
- data/spec/unit/solr_config_options_spec.rb +4 -2
- metadata +11 -9
- data/lib/hydra/mods_article.rb +0 -49
- data/lib/hydra/opinionated_mods_document.rb +0 -14
data/README.textile
CHANGED
@@ -31,6 +31,11 @@ export FEDORA_HOME=/path/to/hydra/jetty/fedora/default
|
|
31
31
|
$FEDORA_HOME/client/bin/fedora-ingest-demos.sh localhost 8983 fedoraAdmin fedoraAdmin http
|
32
32
|
<pre>
|
33
33
|
|
34
|
+
You must ingest one fixture using the import_fixture rake task provided by the hydra project:
|
35
|
+
<pre>
|
36
|
+
rake hydra:import_fixture pid=hydrangea:fixture_mods_article1
|
37
|
+
</pre>
|
38
|
+
|
34
39
|
Now you're ready to run
|
35
40
|
|
36
41
|
<pre>
|
data/Rakefile
CHANGED
@@ -21,7 +21,7 @@ begin
|
|
21
21
|
gem.add_dependency('mime-types', '>= 1.16')
|
22
22
|
gem.add_dependency('multipart-post')
|
23
23
|
gem.add_dependency('nokogiri')
|
24
|
-
gem.add_dependency('om', '>= 0.1.
|
24
|
+
gem.add_dependency('om', '>= 0.1.7')
|
25
25
|
# gem.add_dependency('yaml')
|
26
26
|
|
27
27
|
gem.add_development_dependency "rspec", ">= 1.2.9"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.1.
|
1
|
+
1.1.9
|
data/active-fedora.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{active-fedora}
|
8
|
-
s.version = "1.1.
|
8
|
+
s.version = "1.1.9"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Matt Zumwalt", "McClain Looney"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-07-02}
|
13
13
|
s.description = %q{ActiveFedora provides for creating and managing objects in the Fedora Repository Architecture.}
|
14
14
|
s.email = %q{matt.zumwalt@yourmediashelf.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -209,8 +209,7 @@ Gem::Specification.new do |s|
|
|
209
209
|
"lib/fedora/generic_search.rb",
|
210
210
|
"lib/fedora/repository.rb",
|
211
211
|
"lib/hydra.rb",
|
212
|
-
"lib/hydra/
|
213
|
-
"lib/hydra/opinionated_mods_document.rb",
|
212
|
+
"lib/hydra/sample_mods_datastream.rb",
|
214
213
|
"lib/ruby-fedora.rb",
|
215
214
|
"lib/util/class_level_inheritable_attributes.rb",
|
216
215
|
"script/console",
|
@@ -226,6 +225,7 @@ Gem::Specification.new do |s|
|
|
226
225
|
"spec/fixtures/mods_articles/hydrangea_article1.xml",
|
227
226
|
"spec/fixtures/oh_qdc.xml",
|
228
227
|
"spec/fixtures/test_12.foxml.xml",
|
228
|
+
"spec/hydrangea_fixture_mods_article1.foxml.xml",
|
229
229
|
"spec/integration/base_file_management_spec.rb",
|
230
230
|
"spec/integration/base_loader_spec.rb",
|
231
231
|
"spec/integration/base_spec.rb",
|
@@ -235,6 +235,7 @@ Gem::Specification.new do |s|
|
|
235
235
|
"spec/integration/fedora_object_spec.rb",
|
236
236
|
"spec/integration/full_featured_model_spec.rb",
|
237
237
|
"spec/integration/model_spec.rb",
|
238
|
+
"spec/integration/mods_article_integration_spec.rb",
|
238
239
|
"spec/integration/rels_ext_datastream_spec.rb",
|
239
240
|
"spec/integration/repository_spec.rb",
|
240
241
|
"spec/integration/rf_fedora_object_spec.rb",
|
@@ -294,6 +295,7 @@ Gem::Specification.new do |s|
|
|
294
295
|
"spec/integration/fedora_object_spec.rb",
|
295
296
|
"spec/integration/full_featured_model_spec.rb",
|
296
297
|
"spec/integration/model_spec.rb",
|
298
|
+
"spec/integration/mods_article_integration_spec.rb",
|
297
299
|
"spec/integration/rels_ext_datastream_spec.rb",
|
298
300
|
"spec/integration/repository_spec.rb",
|
299
301
|
"spec/integration/rf_fedora_object_spec.rb",
|
@@ -343,7 +345,7 @@ Gem::Specification.new do |s|
|
|
343
345
|
s.add_runtime_dependency(%q<mime-types>, [">= 1.16"])
|
344
346
|
s.add_runtime_dependency(%q<multipart-post>, [">= 0"])
|
345
347
|
s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
|
346
|
-
s.add_runtime_dependency(%q<om>, [">= 0.1.
|
348
|
+
s.add_runtime_dependency(%q<om>, [">= 0.1.7"])
|
347
349
|
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
348
350
|
s.add_development_dependency(%q<mocha>, [">= 1.2.9"])
|
349
351
|
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
@@ -353,7 +355,7 @@ Gem::Specification.new do |s|
|
|
353
355
|
s.add_dependency(%q<mime-types>, [">= 1.16"])
|
354
356
|
s.add_dependency(%q<multipart-post>, [">= 0"])
|
355
357
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
356
|
-
s.add_dependency(%q<om>, [">= 0.1.
|
358
|
+
s.add_dependency(%q<om>, [">= 0.1.7"])
|
357
359
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
358
360
|
s.add_dependency(%q<mocha>, [">= 1.2.9"])
|
359
361
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
@@ -364,7 +366,7 @@ Gem::Specification.new do |s|
|
|
364
366
|
s.add_dependency(%q<mime-types>, [">= 1.16"])
|
365
367
|
s.add_dependency(%q<multipart-post>, [">= 0"])
|
366
368
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
367
|
-
s.add_dependency(%q<om>, [">= 0.1.
|
369
|
+
s.add_dependency(%q<om>, [">= 0.1.7"])
|
368
370
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
369
371
|
s.add_dependency(%q<mocha>, [">= 1.2.9"])
|
370
372
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
data/lib/active_fedora/base.rb
CHANGED
@@ -172,7 +172,7 @@ module ActiveFedora
|
|
172
172
|
def metadata_streams
|
173
173
|
results = []
|
174
174
|
datastreams.each_value do |ds|
|
175
|
-
if ds.kind_of?(ActiveFedora::MetadataDatastream)
|
175
|
+
if ds.kind_of?(ActiveFedora::MetadataDatastream) || ds.kind_of?(ActiveFedora::NokogiriDatastream)
|
176
176
|
results<<ds
|
177
177
|
end
|
178
178
|
end
|
@@ -356,8 +356,9 @@ module ActiveFedora
|
|
356
356
|
# Nokogiri Datstreams use a new syntax for .from_xml (tmpl is optional!) and expects the actual xml content rather than the foxml datstream xml
|
357
357
|
# NB: Base.deserialize, or a separately named method, should set any other info from the foxml if necessary though by this point it's all been grabbed elsewhere...
|
358
358
|
if ds.kind_of?(ActiveFedora::NokogiriDatastream)
|
359
|
-
|
360
|
-
|
359
|
+
xml_content = Fedora::Repository.instance.fetch_custom(pid, "datastreams/#{name}/content")
|
360
|
+
# node = node.search('./foxml:datastreamVersion[last()]/foxml:xmlContent/*').first
|
361
|
+
proto.datastreams[name]=ds.class.from_xml(xml_content, ds)
|
361
362
|
else
|
362
363
|
proto.datastreams[name]=ds.class.from_xml(ds, node)
|
363
364
|
end
|
@@ -395,8 +396,9 @@ module ActiveFedora
|
|
395
396
|
# el.text = value
|
396
397
|
# fields_xml << el
|
397
398
|
# end
|
398
|
-
|
399
|
-
|
399
|
+
|
400
|
+
datastreams.each_value do |ds|
|
401
|
+
ds.to_xml(fields_xml) if ds.class.included_modules.include?(ActiveFedora::MetadataDatastreamHelper) || ds.kind_of?(ActiveFedora::RelsExtDatastream)
|
400
402
|
end
|
401
403
|
return xml.to_s
|
402
404
|
end
|
@@ -437,24 +439,20 @@ module ActiveFedora
|
|
437
439
|
# or
|
438
440
|
# m.update_attributes({:fubar=>'baz'}, :datastreams=>["my_ds", "my_other_ds"])
|
439
441
|
def update_attributes(params={}, opts={})
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
ds_array = []
|
446
|
-
opts[:datastreams].each do |dsname|
|
447
|
-
ds_array << datastreams[dsname]
|
448
|
-
end
|
449
|
-
else
|
450
|
-
ds_array = datastreams.values
|
451
|
-
end
|
452
|
-
ds_array.each do |d|
|
453
|
-
if d.fields[k.to_sym]
|
454
|
-
d.send("#{k}_values=", v)
|
455
|
-
end
|
442
|
+
result = {}
|
443
|
+
if opts[:datastreams]
|
444
|
+
ds_array = []
|
445
|
+
opts[:datastreams].each do |dsname|
|
446
|
+
ds_array << datastreams[dsname]
|
456
447
|
end
|
448
|
+
else
|
449
|
+
ds_array = metadata_streams
|
450
|
+
end
|
451
|
+
ds_array.each do |d|
|
452
|
+
ds_result = d.update_attributes(params,opts)
|
453
|
+
result[d.dsid] = ds_result
|
457
454
|
end
|
455
|
+
return result
|
458
456
|
end
|
459
457
|
|
460
458
|
# A convenience method for updating indexed attributes. The passed in hash
|
@@ -481,40 +479,35 @@ module ActiveFedora
|
|
481
479
|
ds_array << datastreams[dsname]
|
482
480
|
end
|
483
481
|
else
|
484
|
-
ds_array =
|
482
|
+
ds_array = metadata_streams
|
483
|
+
end
|
484
|
+
result = {}
|
485
|
+
ds_array.each do |d|
|
486
|
+
result[d.dsid] = d.update_indexed_attributes(params,opts)
|
485
487
|
end
|
488
|
+
return result
|
489
|
+
end
|
490
|
+
|
491
|
+
def update_datastream_attributes(params={}, opts={})
|
486
492
|
result = params.dup
|
487
|
-
params.
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
curval = dstream.send("#{aname}")
|
493
|
-
cpv=value.dup#copy this, we'll need the original for the next ds
|
494
|
-
cpv.delete_if do |y,z|
|
495
|
-
if curval[y.to_i] and y.to_i > -1
|
496
|
-
curval[y.to_i]=z
|
497
|
-
true
|
498
|
-
else
|
499
|
-
false
|
500
|
-
end
|
501
|
-
end
|
502
|
-
cpv.each do |y,z|
|
503
|
-
curval<<z #just append everything left
|
504
|
-
if y == "-1"
|
505
|
-
new_array_index = curval.length - 1
|
506
|
-
result[key][new_array_index.to_s] = params[key]["-1"]
|
507
|
-
end
|
508
|
-
end
|
509
|
-
curval.delete_if {|x| x == :delete || x == "" || x == nil}
|
510
|
-
dstream.send("#{aname}=", curval) #write it back to the ds
|
511
|
-
end
|
493
|
+
params.each_pair do |dsid, ds_params|
|
494
|
+
if datastreams_in_memory.include?(dsid)
|
495
|
+
result[dsid] = datastreams_in_memory[dsid].update_attributes(ds_params)
|
496
|
+
else
|
497
|
+
result.delete(dsid)
|
512
498
|
end
|
513
|
-
result[key].delete("-1")
|
514
499
|
end
|
515
500
|
return result
|
516
501
|
end
|
517
502
|
|
503
|
+
def get_values_from_datastream(dsid,field_key,default=[])
|
504
|
+
if datastreams_in_memory.include?(dsid)
|
505
|
+
return datastreams_in_memory[dsid].get_values(field_key,default)
|
506
|
+
else
|
507
|
+
return nil
|
508
|
+
end
|
509
|
+
end
|
510
|
+
|
518
511
|
def self.pids_from_uris(uris)
|
519
512
|
if uris.class == String
|
520
513
|
return uris.gsub("info:fedora/", "")
|
@@ -557,10 +550,11 @@ module ActiveFedora
|
|
557
550
|
|
558
551
|
# Pushes the object and all of its new or dirty datastreams into Fedora
|
559
552
|
def update
|
560
|
-
result = Fedora::Repository.instance.save(@inner_object)
|
553
|
+
result = Fedora::Repository.instance.save(@inner_object)
|
561
554
|
datastreams_in_memory.each do |k,ds|
|
562
555
|
if ds.dirty? || ds.new_object?
|
563
|
-
if ds.
|
556
|
+
if ds.class.included_modules.include?(ActiveFedora::MetadataDatastreamHelper) || ds.instance_of?(ActiveFedora::RelsExtDatastream)
|
557
|
+
# if ds.kind_of?(ActiveFedora::MetadataDatastream) || ds.kind_of?(ActiveFedora::NokogiriDatastream) || ds.instance_of?(ActiveFedora::RelsExtDatastream)
|
564
558
|
@metadata_is_dirty = true
|
565
559
|
end
|
566
560
|
result = ds.save
|
@@ -4,40 +4,112 @@ module ActiveFedora
|
|
4
4
|
|
5
5
|
include ActiveFedora::MetadataDatastreamHelper
|
6
6
|
|
7
|
-
|
7
|
+
# .to_solr and .to_xml (among other things) are provided by ActiveFedora::MetadataDatastream
|
8
|
+
self.xml_model = ActiveFedora::MetadataDatastream
|
9
|
+
|
10
|
+
def update_attributes(params={},opts={})
|
11
|
+
result = params.dup
|
12
|
+
params.each do |k,v|
|
13
|
+
if v == :delete || v == "" || v == nil
|
14
|
+
v = []
|
15
|
+
end
|
16
|
+
if self.fields.has_key?(k.to_sym)
|
17
|
+
result[k] = set_value(k, v)
|
18
|
+
else
|
19
|
+
result.delete(k)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
return result
|
23
|
+
end
|
24
|
+
|
25
|
+
# An ActiveRecord-ism to udpate metadata values.
|
26
|
+
#
|
27
|
+
# The passed in hash must look like this :
|
28
|
+
# {:name=>{"0"=>"a","1"=>"b"}}
|
29
|
+
#
|
30
|
+
# This will attempt to set the values for any field named fubar in the datastream.
|
31
|
+
# If there is no field by that name, it returns an empty hash and doesn't change the object at all.
|
32
|
+
# If there is a field by that name, it will set the values for field of name :name having the value [a,b]
|
33
|
+
# and it returns a hash with the field name, value index, and the value as it was set.
|
34
|
+
#
|
35
|
+
# An index of -1 will insert a new value. any existing value at the relevant index
|
36
|
+
# will be overwritten.
|
37
|
+
#
|
38
|
+
# As in update_attributes, this overwrites _all_ available fields by default.
|
39
|
+
#
|
40
|
+
# Example Usage:
|
41
|
+
#
|
42
|
+
# ds.update_attributes({:myfield=>{"0"=>"a","1"=>"b"},:myotherfield=>{"-1"=>"c"}})
|
43
|
+
#
|
44
|
+
def update_indexed_attributes(params={}, opts={})
|
45
|
+
# remove any fields from params that this datastream doesn't recognize
|
46
|
+
params.delete_if {|field_name,new_values| !self.fields.include?(field_name.to_sym) }
|
47
|
+
|
48
|
+
result = params.dup
|
49
|
+
params.each do |field_name,new_values|
|
50
|
+
field_accessor_method = "#{field_name}_values"
|
51
|
+
|
52
|
+
if new_values.kind_of?(Hash)
|
53
|
+
result[field_name] = new_values.dup
|
54
|
+
|
55
|
+
current_values = instance_eval(field_accessor_method)
|
56
|
+
|
57
|
+
# current_values = get_values(field_name) # for some reason this leaves current_values unset?
|
58
|
+
|
59
|
+
new_values.delete_if do |y,z|
|
60
|
+
if current_values[y.to_i] and y.to_i > -1
|
61
|
+
current_values[y.to_i]=z
|
62
|
+
true
|
63
|
+
else
|
64
|
+
false
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
new_values.each do |y,z|
|
69
|
+
result[field_name].delete(y)
|
70
|
+
current_values<<z #just append everything left
|
71
|
+
new_array_index = current_values.length - 1
|
72
|
+
result[field_name][new_array_index.to_s] = z
|
73
|
+
end
|
74
|
+
current_values.delete_if {|x| x == :delete || x == "" || x == nil}
|
75
|
+
#set_value(field_name, current_values)
|
76
|
+
instance_eval("#{field_accessor_method}=(current_values)") #write it back to the ds
|
77
|
+
# result[field_name].delete("-1")
|
78
|
+
else
|
79
|
+
values = instance_eval("#{field_name}_values=(new_values)")
|
80
|
+
result[field_name] = {"0"=>values}
|
81
|
+
end
|
82
|
+
end
|
83
|
+
return result
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
def get_values(field_name, default=[])
|
88
|
+
field_accessor_method = "#{field_name}_values"
|
89
|
+
if respond_to? field_accessor_method
|
90
|
+
values = self.send(field_accessor_method)
|
91
|
+
else
|
92
|
+
values = []
|
93
|
+
end
|
94
|
+
if values.empty?
|
95
|
+
if default.nil?
|
96
|
+
return default
|
97
|
+
else
|
98
|
+
return default
|
99
|
+
end
|
100
|
+
else
|
101
|
+
return values
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def set_value(field_name, values)
|
106
|
+
field_accessor_method = "#{field_name}_values="
|
107
|
+
if respond_to? field_accessor_method
|
108
|
+
values = self.send(field_accessor_method, values)
|
109
|
+
return self.send("#{field_name}_values")
|
110
|
+
end
|
111
|
+
end
|
8
112
|
|
9
|
-
# def to_solr(solr_doc = Solr::Document.new) # :nodoc:
|
10
|
-
# fields.each do |field_key, field_info|
|
11
|
-
# if field_info.has_key?(:values) && !field_info[:values].nil?
|
12
|
-
# field_symbol = generate_solr_symbol(field_key, field_info[:type])
|
13
|
-
# field_info[:values].each do |val|
|
14
|
-
# solr_doc << Solr::Field.new(field_symbol => val)
|
15
|
-
# end
|
16
|
-
# end
|
17
|
-
# end
|
18
|
-
#
|
19
|
-
# return solr_doc
|
20
|
-
# end
|
21
|
-
#
|
22
|
-
# def to_xml(xml = REXML::Document.new("<fields />")) #:nodoc:
|
23
|
-
# fields.each_pair do |field,field_info|
|
24
|
-
# el = REXML::Element.new("#{field.to_s}")
|
25
|
-
# if field_info[:element_attrs]
|
26
|
-
# field_info[:element_attrs].each{|k,v| el.add_attribute(k.to_s, v.to_s)}
|
27
|
-
# end
|
28
|
-
# field_info[:values].each do |val|
|
29
|
-
# el = el.clone
|
30
|
-
# el.text = val.to_s
|
31
|
-
# if xml.class == REXML::Document
|
32
|
-
# xml.root.elements.add(el)
|
33
|
-
# else
|
34
|
-
# xml.add(el)
|
35
|
-
# end
|
36
|
-
# end
|
37
|
-
# end
|
38
|
-
# return xml.to_s
|
39
|
-
# end
|
40
|
-
#
|
41
113
|
# @tmpl ActiveFedora::MetadataDatastream
|
42
114
|
# @node Nokogiri::XML::Node
|
43
115
|
def self.from_xml(tmpl, node) # :nodoc:
|
@@ -49,7 +49,9 @@ module ActiveFedora::MetadataDatastreamHelper
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def to_xml(xml = Nokogiri::XML::Document.parse("<fields />")) #:nodoc:
|
52
|
-
if xml.instance_of?(Nokogiri::XML::
|
52
|
+
if xml.instance_of?(Nokogiri::XML::Builder)
|
53
|
+
xml_insertion_point = xml.doc.root
|
54
|
+
elsif xml.instance_of?(Nokogiri::XML::Document)
|
53
55
|
xml_insertion_point = xml.root
|
54
56
|
else
|
55
57
|
xml_insertion_point = xml
|
@@ -5,7 +5,8 @@ class ActiveFedora::NokogiriDatastream < ActiveFedora::Datastream
|
|
5
5
|
|
6
6
|
include ActiveFedora::MetadataDatastreamHelper
|
7
7
|
include OM::XML
|
8
|
-
|
8
|
+
# extend(OM::XML::Container::ClassMethods)
|
9
|
+
|
9
10
|
attr_accessor :ng_xml
|
10
11
|
|
11
12
|
#constructor, calls up to ActiveFedora::Datastream's constructor
|
@@ -14,11 +15,41 @@ class ActiveFedora::NokogiriDatastream < ActiveFedora::Datastream
|
|
14
15
|
@fields={}
|
15
16
|
self.class.from_xml(blob, self)
|
16
17
|
end
|
18
|
+
|
19
|
+
# @xml String, File or Nokogiri::XML::Node
|
20
|
+
# @tmpl ActiveFedora::MetadataDatastream
|
21
|
+
# Careful! If you call this from a constructor, be sure to provide something 'ie. self' as the @tmpl. Otherwise, you will get an infinite loop!
|
22
|
+
def self.from_xml(xml, tmpl=self.new) # :nodoc:
|
23
|
+
if xml.kind_of? Nokogiri::XML::Node
|
24
|
+
tmpl.ng_xml = xml
|
25
|
+
else
|
26
|
+
tmpl.ng_xml = Nokogiri::XML::Document.parse(xml)
|
27
|
+
end
|
28
|
+
tmpl.send(:dirty=, false)
|
29
|
+
return tmpl
|
30
|
+
end
|
31
|
+
|
32
|
+
# class << self
|
33
|
+
# from_xml_original = self.instance_method(:from_xml)
|
34
|
+
#
|
35
|
+
# define_method(:from_xml, xml, tmpl=self.new) do
|
36
|
+
# from_xml_original.bind(self).call(xml, tmpl)
|
37
|
+
# tmpl.send(:dirty=, false)
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
# # def from_xml_custom(xml, tmpl=self.new)
|
41
|
+
# # from_xml_original(xml, tmpl)
|
42
|
+
# # tmpl.send(:dirty=, false)
|
43
|
+
# # end
|
44
|
+
# #
|
45
|
+
# # alias_method :from_xml_original, :from_xml
|
46
|
+
# # alias_method :from_xml, :from_xml_custom
|
47
|
+
# end
|
17
48
|
|
18
49
|
|
19
50
|
def to_xml(xml = self.ng_xml)
|
20
51
|
ng_xml = self.ng_xml
|
21
|
-
if ng_xml.root.nil? && self.class.respond_to?(:root_property_ref) && !self.class.root_property_ref.nil?
|
52
|
+
if ng_xml.respond_to?(:root) && ng_xml.root.nil? && self.class.respond_to?(:root_property_ref) && !self.class.root_property_ref.nil?
|
22
53
|
ng_xml = self.class.generate(self.class.root_property_ref, "")
|
23
54
|
if xml.root.nil?
|
24
55
|
xml = ng_xml
|
@@ -89,5 +120,23 @@ class ActiveFedora::NokogiriDatastream < ActiveFedora::Datastream
|
|
89
120
|
solr_doc << Solr::Field.new(hierarchical_field_name => node.text)
|
90
121
|
end
|
91
122
|
end
|
123
|
+
|
124
|
+
def update_indexed_attributes(params={}, opts={})
|
125
|
+
# remove any fields from params that this datastream doesn't recognize
|
126
|
+
params.delete_if do |field_key,new_values|
|
127
|
+
if field_key.kind_of?(String)
|
128
|
+
true
|
129
|
+
else
|
130
|
+
self.class.accessor_xpath(*OM.destringify(field_key) ).nil?
|
131
|
+
end
|
132
|
+
end
|
133
|
+
result = update_properties( params )
|
134
|
+
self.dirty = true
|
135
|
+
return result
|
136
|
+
end
|
137
|
+
|
138
|
+
def get_values(field_key,default=[])
|
139
|
+
property_values(*field_key)
|
140
|
+
end
|
92
141
|
|
93
142
|
end
|