active-fedora 1.1.4.pre2 → 1.1.4
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/VERSION +1 -1
- data/active-fedora.gemspec +4 -4
- data/lib/active_fedora.rb +2 -0
- data/lib/active_fedora/base.rb +23 -11
- data/lib/active_fedora/metadata_datastream.rb +43 -80
- data/lib/active_fedora/metadata_datastream_helper.rb +104 -0
- data/lib/active_fedora/nokogiri_datastream.rb +60 -0
- data/spec/integration/semantic_node_spec.rb +3 -3
- data/spec/unit/base_spec.rb +13 -2
- data/spec/unit/metadata_datastream_spec.rb +16 -19
- metadata +7 -10
- data/spec/unit/mods_datastream_spec.rb +0 -289
- data/spec/unit/nokogiri_datastream_spec.rb +0 -301
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
1.1.4
|
data/active-fedora.gemspec
CHANGED
@@ -5,9 +5,9 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{active-fedora}
|
8
|
-
s.version = "1.1.4
|
8
|
+
s.version = "1.1.4"
|
9
9
|
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new("
|
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
12
|
s.date = %q{2010-05-15}
|
13
13
|
s.description = %q{ActiveFedora provides for creating and managing objects in the Fedora Repository Architecture.}
|
@@ -191,7 +191,9 @@ Gem::Specification.new do |s|
|
|
191
191
|
"lib/active_fedora/datastream.rb",
|
192
192
|
"lib/active_fedora/fedora_object.rb",
|
193
193
|
"lib/active_fedora/metadata_datastream.rb",
|
194
|
+
"lib/active_fedora/metadata_datastream_helper.rb",
|
194
195
|
"lib/active_fedora/model.rb",
|
196
|
+
"lib/active_fedora/nokogiri_datastream.rb",
|
195
197
|
"lib/active_fedora/property.rb",
|
196
198
|
"lib/active_fedora/qualified_dublin_core_datastream.rb",
|
197
199
|
"lib/active_fedora/relationship.rb",
|
@@ -312,8 +314,6 @@ Gem::Specification.new do |s|
|
|
312
314
|
"spec/unit/inheritance_spec.rb",
|
313
315
|
"spec/unit/metadata_datastream_spec.rb",
|
314
316
|
"spec/unit/model_spec.rb",
|
315
|
-
"spec/unit/mods_datastream_spec.rb",
|
316
|
-
"spec/unit/nokogiri_datastream_spec.rb",
|
317
317
|
"spec/unit/property_spec.rb",
|
318
318
|
"spec/unit/qualified_dublin_core_datastream_spec.rb",
|
319
319
|
"spec/unit/relationship_spec.rb",
|
data/lib/active_fedora.rb
CHANGED
@@ -14,7 +14,9 @@ require 'active_fedora/base.rb'
|
|
14
14
|
require 'active_fedora/content_model.rb'
|
15
15
|
require 'active_fedora/datastream.rb'
|
16
16
|
require 'active_fedora/fedora_object.rb'
|
17
|
+
require 'active_fedora/metadata_datastream_helper.rb'
|
17
18
|
require 'active_fedora/metadata_datastream.rb'
|
19
|
+
require 'active_fedora/nokogiri_datastream'
|
18
20
|
require 'active_fedora/model.rb'
|
19
21
|
require 'active_fedora/property.rb'
|
20
22
|
require 'active_fedora/qualified_dublin_core_datastream.rb'
|
data/lib/active_fedora/base.rb
CHANGED
@@ -371,24 +371,36 @@ module ActiveFedora
|
|
371
371
|
end
|
372
372
|
|
373
373
|
#Returns the xml version of this object as a string.
|
374
|
-
def to_xml(xml=
|
375
|
-
fields_xml = xml.
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
fields_xml
|
374
|
+
def to_xml(xml=Nokogiri::XML::Document.parse("<xml><fields/><content/></xml>"))
|
375
|
+
fields_xml = xml.xpath('//fields').first
|
376
|
+
builder = Nokogiri::XML::Builder.with(fields_xml) do |fields_xml|
|
377
|
+
fields_xml.id_ pid
|
378
|
+
fields_xml.system_create_date self.create_date
|
379
|
+
fields_xml.system_modified_date self.modified_date
|
380
|
+
fields_xml.active_fedora_model self.class.inspect
|
380
381
|
end
|
382
|
+
|
383
|
+
# {:id => pid, :system_create_date => self.create_date, :system_modified_date => self.modified_date, :active_fedora_model => self.class.inspect}.each_pair do |attribute_name, value|
|
384
|
+
# el = REXML::Element.new(attribute_name.to_s)
|
385
|
+
# el.text = value
|
386
|
+
# fields_xml << el
|
387
|
+
# end
|
381
388
|
datastreams.each_value do |ds|
|
382
|
-
ds.to_xml(fields_xml) if ds.
|
389
|
+
ds.to_xml(fields_xml) if ds.included_modules.include?(ActiveFedora::MetadataDatastreamHelper) || ds.kind_of?(ActiveFedora::RelsExtDatastream)
|
383
390
|
end
|
384
391
|
return xml.to_s
|
385
392
|
end
|
386
393
|
|
387
|
-
#Return a Solr::Document version of this object.
|
388
|
-
|
389
|
-
|
394
|
+
# Return a Solr::Document version of this object.
|
395
|
+
# @solr_doc (optional) Solr::Document to insert the fields into
|
396
|
+
# @opts (optional) Hash
|
397
|
+
# If opts[:model_only] == true, the base object metadata and the RELS-EXT datastream will be omitted. This is mainly to support shelver, which calls .to_solr for each model an object subscribes to.
|
398
|
+
def to_solr(solr_doc = Solr::Document.new, opts={})
|
399
|
+
unless opts[:model_only]
|
400
|
+
solr_doc << {SOLR_DOCUMENT_ID.to_sym => pid, solr_name(:system_create, :date) => self.create_date, solr_name(:system_modified, :date) => self.modified_date, solr_name(:active_fedora_model, :symbol) => self.class.inspect}
|
401
|
+
end
|
390
402
|
datastreams.each_value do |ds|
|
391
|
-
solr_doc = ds.to_solr(solr_doc) if ds.kind_of?(ActiveFedora::MetadataDatastream) || ds.kind_of?(ActiveFedora::RelsExtDatastream)
|
403
|
+
solr_doc = ds.to_solr(solr_doc) if ds.kind_of?(ActiveFedora::MetadataDatastream) || ( ds.kind_of?(ActiveFedora::RelsExtDatastream) && !opts[:model_only] )
|
392
404
|
end
|
393
405
|
return solr_doc
|
394
406
|
end
|
@@ -2,67 +2,51 @@ module ActiveFedora
|
|
2
2
|
#this class represents a MetadataDatastream, a special case of ActiveFedora::Datastream
|
3
3
|
class MetadataDatastream < Datastream
|
4
4
|
|
5
|
-
include ActiveFedora::
|
6
|
-
|
7
|
-
attr_accessor :fields
|
5
|
+
include ActiveFedora::MetadataDatastreamHelper
|
8
6
|
|
9
|
-
|
10
|
-
def initialize(attrs=nil)
|
11
|
-
super
|
12
|
-
@fields={}
|
13
|
-
end
|
7
|
+
self.xml_model = ActiveFedora::MetadataDatastream
|
14
8
|
|
15
|
-
#
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
end
|
56
|
-
|
57
|
-
# @tmpl ActiveFedora::MetadataDatastream
|
58
|
-
# @node Nokogiri::XML::Node
|
59
|
-
def self.from_xml(tmpl, node) # :nodoc:
|
60
|
-
node.xpath("./foxml:datastreamVersion[last()]/foxml:xmlContent/fields/node()").each do |f|
|
61
|
-
tmpl.send("#{f.name}_append", f.text) unless f.class == Nokogiri::XML::Text
|
62
|
-
end
|
63
|
-
tmpl.send(:dirty=, false)
|
64
|
-
tmpl
|
65
|
-
end
|
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
|
+
# # @tmpl ActiveFedora::MetadataDatastream
|
42
|
+
# # @node Nokogiri::XML::Node
|
43
|
+
# def self.from_xml(tmpl, node) # :nodoc:
|
44
|
+
# node.xpath("./foxml:datastreamVersion[last()]/foxml:xmlContent/fields/node()").each do |f|
|
45
|
+
# tmpl.send("#{f.name}_append", f.text) unless f.class == Nokogiri::XML::Text
|
46
|
+
# end
|
47
|
+
# tmpl.send(:dirty=, false)
|
48
|
+
# tmpl
|
49
|
+
# end
|
66
50
|
|
67
51
|
# This method generates the various accessor and mutator methods on self for the datastream metadata attributes.
|
68
52
|
# each field will have the 3 magic methods:
|
@@ -108,27 +92,6 @@ module ActiveFedora
|
|
108
92
|
EOS
|
109
93
|
end
|
110
94
|
|
111
|
-
#get the field list
|
112
|
-
def self.fields
|
113
|
-
@@classFields
|
114
|
-
end
|
115
|
-
|
116
|
-
protected
|
117
|
-
|
118
|
-
def generate_solr_symbol(field_name, field_type) # :nodoc:
|
119
|
-
solr_name(field_name, field_type)
|
120
|
-
# #if field_name.to_s[-field_type.to_s.length - 1 .. -1] == "_#{field_type.to_s}"
|
121
|
-
# # return field_name.to_sym
|
122
|
-
# case field_type
|
123
|
-
# when :date
|
124
|
-
# return "#{field_name.to_s}_dt".to_sym
|
125
|
-
# when :string
|
126
|
-
# return "#{field_name.to_s}_t".to_sym
|
127
|
-
# else
|
128
|
-
# return "#{field_name.to_s}_t".to_sym
|
129
|
-
# end
|
130
|
-
end
|
131
|
-
|
132
95
|
end
|
133
96
|
|
134
97
|
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
#this class represents a MetadataDatastream, a special case of ActiveFedora::Datastream
|
2
|
+
module ActiveFedora::MetadataDatastreamHelper
|
3
|
+
|
4
|
+
attr_accessor :fields
|
5
|
+
|
6
|
+
module ClassMethods
|
7
|
+
|
8
|
+
attr_accessor :xml_model
|
9
|
+
|
10
|
+
#get the Class's field list
|
11
|
+
def fields
|
12
|
+
@@classFields
|
13
|
+
end
|
14
|
+
|
15
|
+
# @tmpl ActiveFedora::MetadataDatastream
|
16
|
+
# @node Nokogiri::XML::Node
|
17
|
+
def from_xml(tmpl, node) # :nodoc:
|
18
|
+
node.xpath("./foxml:datastreamVersion[last()]/foxml:xmlContent/fields/node()").each do |f|
|
19
|
+
tmpl.send("#{f.name}_append", f.text) unless f.class == Nokogiri::XML::Text
|
20
|
+
end
|
21
|
+
tmpl.send(:dirty=, false)
|
22
|
+
tmpl
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.included(klass)
|
28
|
+
klass.extend(ClassMethods)
|
29
|
+
klass.send(:include, ActiveFedora::SolrMapper)
|
30
|
+
end
|
31
|
+
|
32
|
+
#constructor, calls up to ActiveFedora::Datastream's constructor
|
33
|
+
def initialize(attrs=nil)
|
34
|
+
super
|
35
|
+
@fields={}
|
36
|
+
end
|
37
|
+
|
38
|
+
# sets the blob, which in this case is the xml version of self, then calls ActiveFedora::Datastream.save
|
39
|
+
def save
|
40
|
+
self.set_blob_for_save
|
41
|
+
super
|
42
|
+
end
|
43
|
+
|
44
|
+
def set_blob_for_save # :nodoc:
|
45
|
+
self.blob = self.to_xml
|
46
|
+
end
|
47
|
+
|
48
|
+
def to_solr(solr_doc = Solr::Document.new) # :nodoc:
|
49
|
+
fields.each do |field_key, field_info|
|
50
|
+
if field_info.has_key?(:values) && !field_info[:values].nil?
|
51
|
+
field_symbol = generate_solr_symbol(field_key, field_info[:type])
|
52
|
+
field_info[:values].each do |val|
|
53
|
+
solr_doc << Solr::Field.new(field_symbol => val)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
return solr_doc
|
59
|
+
end
|
60
|
+
|
61
|
+
def to_xml(xml = Nokogiri::XML::Document.parse("<fields />")) #:nodoc:
|
62
|
+
if xml.instance_of?(Nokogiri::XML::Document)
|
63
|
+
xml_insertion_point = xml.root
|
64
|
+
else
|
65
|
+
xml_insertion_point = xml
|
66
|
+
end
|
67
|
+
|
68
|
+
builder = Nokogiri::XML::Builder.with(xml_insertion_point) do |xml|
|
69
|
+
fields.each_pair do |field,field_info|
|
70
|
+
element_attrs = field_info[:element_attrs].nil? ? {} : field_info[:element_attrs]
|
71
|
+
field_info[:values].each do |val|
|
72
|
+
builder_arg = "xml.#{field}(val, element_attrs)"
|
73
|
+
puts builder_arg.inspect
|
74
|
+
eval(builder_arg)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# fields.each_pair do |field,field_info|
|
80
|
+
# el = REXML::Element.new("#{field.to_s}")
|
81
|
+
# if field_info[:element_attrs]
|
82
|
+
# field_info[:element_attrs].each{|k,v| el.add_attribute(k.to_s, v.to_s)}
|
83
|
+
# end
|
84
|
+
# field_info[:values].each do |val|
|
85
|
+
# el = el.clone
|
86
|
+
# el.text = val.to_s
|
87
|
+
# if xml.class == REXML::Document
|
88
|
+
# xml.root.elements.add(el)
|
89
|
+
# else
|
90
|
+
# xml.add(el)
|
91
|
+
# end
|
92
|
+
# end
|
93
|
+
# end
|
94
|
+
return builder.to_xml
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
protected
|
99
|
+
|
100
|
+
def generate_solr_symbol(field_name, field_type) # :nodoc:
|
101
|
+
solr_name(field_name, field_type)
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require "nokogiri"
|
2
|
+
#this class represents a MetadataDatastream, a special case of ActiveFedora::Datastream
|
3
|
+
class ActiveFedora::NokogiriDatastream < ActiveFedora::Datastream
|
4
|
+
|
5
|
+
include ActiveFedora::MetadataDatastreamHelper
|
6
|
+
|
7
|
+
self.xml_model = Nokogiri::XML::Document
|
8
|
+
|
9
|
+
attr_accessor :ng_xml
|
10
|
+
|
11
|
+
#constructor, calls up to ActiveFedora::Datastream's constructor
|
12
|
+
def initialize(attrs=nil)
|
13
|
+
super
|
14
|
+
@fields={}
|
15
|
+
@ng_xml = self.class.xml_model.new()
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_solr(solr_doc = Solr::Document.new) # :nodoc:
|
19
|
+
fields.each do |field_key, field_info|
|
20
|
+
if field_info.has_key?(:values) && !field_info[:values].nil?
|
21
|
+
field_symbol = generate_solr_symbol(field_key, field_info[:type])
|
22
|
+
field_info[:values].each do |val|
|
23
|
+
solr_doc << Solr::Field.new(field_symbol => val)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
return solr_doc
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_xml(xml = REXML::Document.new("<fields />")) #:nodoc:
|
32
|
+
fields.each_pair do |field,field_info|
|
33
|
+
el = REXML::Element.new("#{field.to_s}")
|
34
|
+
if field_info[:element_attrs]
|
35
|
+
field_info[:element_attrs].each{|k,v| el.add_attribute(k.to_s, v.to_s)}
|
36
|
+
end
|
37
|
+
field_info[:values].each do |val|
|
38
|
+
el = el.clone
|
39
|
+
el.text = val.to_s
|
40
|
+
if xml.class == REXML::Document
|
41
|
+
xml.root.elements.add(el)
|
42
|
+
else
|
43
|
+
xml.add(el)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
return xml.to_s
|
48
|
+
end
|
49
|
+
|
50
|
+
# @tmpl ActiveFedora::MetadataDatastream
|
51
|
+
# @node Nokogiri::XML::Node
|
52
|
+
def self.from_xml(tmpl, node) # :nodoc:
|
53
|
+
node.xpath("./foxml:datastreamVersion[last()]/foxml:xmlContent/fields/node()").each do |f|
|
54
|
+
tmpl.send("#{f.name}_append", f.text) unless f.class == Nokogiri::XML::Text
|
55
|
+
end
|
56
|
+
tmpl.send(:dirty=, false)
|
57
|
+
tmpl
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -10,12 +10,12 @@ describe ActiveFedora::SemanticNode do
|
|
10
10
|
has_relationship "collection_members", :has_collection_member
|
11
11
|
end
|
12
12
|
@node = SpecNode.new
|
13
|
-
class
|
13
|
+
class SNSpecModel < ActiveFedora::Base
|
14
14
|
has_relationship("parts", :is_part_of, :inbound => true)
|
15
15
|
has_relationship("containers", :is_member_of)
|
16
16
|
end
|
17
17
|
|
18
|
-
@test_object =
|
18
|
+
@test_object = SNSpecModel.new
|
19
19
|
@test_object.save
|
20
20
|
|
21
21
|
@part1 = ActiveFedora::Base.new()
|
@@ -43,7 +43,7 @@ describe ActiveFedora::SemanticNode do
|
|
43
43
|
@container2.delete
|
44
44
|
@test_object.delete
|
45
45
|
|
46
|
-
Object.send(:remove_const, :
|
46
|
+
Object.send(:remove_const, :SNSpecModel)
|
47
47
|
|
48
48
|
end
|
49
49
|
|
data/spec/unit/base_spec.rb
CHANGED
@@ -285,8 +285,8 @@ describe ActiveFedora::Base do
|
|
285
285
|
it "should call .to_xml on all MetadataDatastreams and return the resulting document" do
|
286
286
|
mock1 = mock("ds1", :to_xml)
|
287
287
|
mock2 = mock("ds2", :to_xml)
|
288
|
-
mock1.expects(:
|
289
|
-
mock2.expects(:
|
288
|
+
mock1.expects(:included_modules).returns( [ActiveFedora::MetadataDatastreamHelper] )
|
289
|
+
mock2.expects(:included_modules).returns( [ActiveFedora::MetadataDatastreamHelper] )
|
290
290
|
|
291
291
|
@test_object.expects(:datastreams).returns({:ds1 => mock1, :ds2 => mock2})
|
292
292
|
@test_object.to_xml
|
@@ -318,6 +318,16 @@ describe ActiveFedora::Base do
|
|
318
318
|
solr_doc[:id].should eql(@test_object.pid)
|
319
319
|
end
|
320
320
|
|
321
|
+
it "should omit base metadata and RELS-EXT if :model_only==true" do
|
322
|
+
@test_object.add_relationship(:has_part, "foo")
|
323
|
+
# @test_object.expects(:modified_date).returns("mDate")
|
324
|
+
solr_doc = @test_object.to_solr(Solr::Document.new, :model_only => true)
|
325
|
+
solr_doc[:system_create_dt].should be_nil
|
326
|
+
solr_doc[:system_modified_dt].should be_nil
|
327
|
+
solr_doc[:id].should be_nil
|
328
|
+
solr_doc[:has_part_s].should be_nil
|
329
|
+
end
|
330
|
+
|
321
331
|
it "should add self.class as the :active_fedora_model" do
|
322
332
|
solr_doc = @test_object.to_solr
|
323
333
|
solr_doc[:active_fedora_model_s].should eql(@test_object.class.inspect)
|
@@ -361,6 +371,7 @@ describe ActiveFedora::Base do
|
|
361
371
|
rels_ext.expects(:to_solr)
|
362
372
|
@test_object.to_solr
|
363
373
|
end
|
374
|
+
|
364
375
|
end
|
365
376
|
|
366
377
|
describe ".update_index" do
|
@@ -54,33 +54,29 @@ describe ActiveFedora::MetadataDatastream do
|
|
54
54
|
end
|
55
55
|
it 'should output the fields hash as XML' do
|
56
56
|
@test_ds.expects(:fields).returns(@sample_fields)
|
57
|
-
#sample_rexml = REXML::Document.new(sample_xml)
|
58
|
-
#returned_rexml = REXML::Document.new(@test_ds.to_dc_xml)
|
59
|
-
#returned_rexml.to_s.should == sample_rexml.to_s
|
60
57
|
returned_xml = XmlSimple.xml_in(@test_ds.to_xml)
|
61
58
|
returned_xml.should == @sample_xml
|
62
59
|
end
|
63
60
|
|
64
|
-
it 'should accept an optional
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
result = @test_ds.to_xml(rexml)
|
61
|
+
it 'should accept an optional Nokogiri::XML Document as an argument and insert its fields into that (mocked test)' do
|
62
|
+
doc = Nokogiri::XML::Document.parse("<test_rexml/>")
|
63
|
+
Nokogiri::XML::Builder.expects(:with).with(doc.root).returns(doc.root)
|
64
|
+
result = @test_ds.to_xml(doc)
|
69
65
|
end
|
70
|
-
|
66
|
+
|
67
|
+
it 'should accept an optional Nokogiri::XML Document as an argument and insert its fields into that (functional test)' do
|
71
68
|
@test_ds.expects(:fields).returns(@sample_fields)
|
72
|
-
|
73
|
-
result = @test_ds.to_xml(
|
74
|
-
XmlSimple.xml_in(
|
69
|
+
doc = Nokogiri::XML::Document.parse("<test_rexml/>")
|
70
|
+
result = @test_ds.to_xml(doc)
|
71
|
+
XmlSimple.xml_in(doc.to_s).should == @sample_xml
|
75
72
|
XmlSimple.xml_in(result).should == @sample_xml
|
76
73
|
end
|
77
74
|
|
78
|
-
it 'should add to root of
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
el.expects(:add).times(5)
|
75
|
+
it 'should add to root of Nokogiri::XML::Documents, but add directly to the elements if a REXML::Element is passed in' do
|
76
|
+
doc = Nokogiri::XML::Document.parse("<test_document/>")
|
77
|
+
el = Nokogiri::XML::Node.new("test_element", Nokogiri::XML::Document.new)
|
78
|
+
Nokogiri::XML::Builder.expects(:with).with(doc.root).returns(doc.root)
|
79
|
+
Nokogiri::XML::Builder.expects(:with).with(el).returns(el)
|
84
80
|
@test_ds.to_xml(doc)
|
85
81
|
@test_ds.to_xml(el)
|
86
82
|
end
|
@@ -131,7 +127,8 @@ describe ActiveFedora::MetadataDatastream do
|
|
131
127
|
sds = SpecDatastream.new
|
132
128
|
sds.mycomplicated_field_values='foo'
|
133
129
|
sds.fields[:mycomplicated_field][:element_attrs].should == {:foo=>:bar, :baz=>:bat}
|
134
|
-
|
130
|
+
expected_xml = '<fields><mycomplicated_field baz=\'bat\' foo=\'bar\'>foo</mycomplicated_field></fields>'
|
131
|
+
XmlSimple.xml_in(sds.to_xml).should == XmlSimple.xml_in(expected_xml)
|
135
132
|
end
|
136
133
|
|
137
134
|
it "should add getters and setters and appenders with field name" do
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active-fedora
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
4
|
+
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 1
|
8
8
|
- 4
|
9
|
-
|
10
|
-
version: 1.1.4.pre2
|
9
|
+
version: 1.1.4
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Matt Zumwalt
|
@@ -296,7 +295,9 @@ files:
|
|
296
295
|
- lib/active_fedora/datastream.rb
|
297
296
|
- lib/active_fedora/fedora_object.rb
|
298
297
|
- lib/active_fedora/metadata_datastream.rb
|
298
|
+
- lib/active_fedora/metadata_datastream_helper.rb
|
299
299
|
- lib/active_fedora/model.rb
|
300
|
+
- lib/active_fedora/nokogiri_datastream.rb
|
300
301
|
- lib/active_fedora/property.rb
|
301
302
|
- lib/active_fedora/qualified_dublin_core_datastream.rb
|
302
303
|
- lib/active_fedora/relationship.rb
|
@@ -392,13 +393,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
392
393
|
version: "0"
|
393
394
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
394
395
|
requirements:
|
395
|
-
- - "
|
396
|
+
- - ">="
|
396
397
|
- !ruby/object:Gem::Version
|
397
398
|
segments:
|
398
|
-
-
|
399
|
-
|
400
|
-
- 1
|
401
|
-
version: 1.3.1
|
399
|
+
- 0
|
400
|
+
version: "0"
|
402
401
|
requirements: []
|
403
402
|
|
404
403
|
rubyforge_project: rubyfedora
|
@@ -442,8 +441,6 @@ test_files:
|
|
442
441
|
- spec/unit/inheritance_spec.rb
|
443
442
|
- spec/unit/metadata_datastream_spec.rb
|
444
443
|
- spec/unit/model_spec.rb
|
445
|
-
- spec/unit/mods_datastream_spec.rb
|
446
|
-
- spec/unit/nokogiri_datastream_spec.rb
|
447
444
|
- spec/unit/property_spec.rb
|
448
445
|
- spec/unit/qualified_dublin_core_datastream_spec.rb
|
449
446
|
- spec/unit/relationship_spec.rb
|
@@ -1,289 +0,0 @@
|
|
1
|
-
require File.join( File.dirname(__FILE__), "../spec_helper" )
|
2
|
-
|
3
|
-
require 'active_fedora'
|
4
|
-
require 'hydra'
|
5
|
-
|
6
|
-
describe ModsDatastream do
|
7
|
-
|
8
|
-
before(:all) do
|
9
|
-
@sample_fields = {:publisher => {:values => ["publisher1"], :type => :string},
|
10
|
-
:coverage => {:values => ["coverage1", "coverage2"], :type => :text},
|
11
|
-
:creation_date => {:values => "fake-date", :type => :date},
|
12
|
-
:mydate => {:values => "fake-date", :type => :date},
|
13
|
-
:empty_field => {:values => {}}
|
14
|
-
}
|
15
|
-
@sample_xml = XmlSimple.xml_in("<fields><coverage>coverage1</coverage><coverage>coverage2</coverage><creation_date>fake-date</creation_date><mydate>fake-date</mydate><publisher>publisher1</publisher></fields>")
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
before(:each) do
|
20
|
-
@test_ds = ModsDatastream.new
|
21
|
-
end
|
22
|
-
|
23
|
-
after(:each) do
|
24
|
-
end
|
25
|
-
|
26
|
-
describe '#new' do
|
27
|
-
it 'should provide #new' do
|
28
|
-
ModsDatastream.should respond_to(:new)
|
29
|
-
@test_ds.ng_xml.should be_instance_of(OpinionatedModsDocument)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
|
34
|
-
it 'should provide .fields' do
|
35
|
-
@test_ds.should respond_to(:fields)
|
36
|
-
end
|
37
|
-
|
38
|
-
describe '.save' do
|
39
|
-
it "should provide .save" do
|
40
|
-
@test_ds.should respond_to(:save)
|
41
|
-
end
|
42
|
-
it "should persist the product of .to_xml in fedora" do
|
43
|
-
Fedora::Repository.instance.expects(:save)
|
44
|
-
@test_ds.expects(:to_xml).returns("fake xml")
|
45
|
-
@test_ds.expects(:blob=).with("fake xml")
|
46
|
-
@test_ds.save
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
describe '.to_xml' do
|
51
|
-
it "should provide .to_xml" do
|
52
|
-
@test_ds.should respond_to(:to_xml)
|
53
|
-
end
|
54
|
-
it 'should output the fields hash as XML' do
|
55
|
-
@test_ds.expects(:fields).returns(@sample_fields)
|
56
|
-
#sample_rexml = REXML::Document.new(sample_xml)
|
57
|
-
#returned_rexml = REXML::Document.new(@test_ds.to_dc_xml)
|
58
|
-
#returned_rexml.to_s.should == sample_rexml.to_s
|
59
|
-
returned_xml = XmlSimple.xml_in(@test_ds.to_xml)
|
60
|
-
returned_xml.should == @sample_xml
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'should accept an optional REXML Document as an argument and insert its fields into that' do
|
64
|
-
@test_ds.expects(:fields).returns(@sample_fields)
|
65
|
-
rexml = REXML::Document.new("<test_rexml/>")
|
66
|
-
rexml.root.elements.expects(:add).times(5)
|
67
|
-
result = @test_ds.to_xml(rexml)
|
68
|
-
end
|
69
|
-
it 'should accept an optional REXML Document as an argument and insert its fields into that' do
|
70
|
-
@test_ds.expects(:fields).returns(@sample_fields)
|
71
|
-
rexml = REXML::Document.new("<test_rexml/>")
|
72
|
-
result = @test_ds.to_xml(rexml)
|
73
|
-
XmlSimple.xml_in(rexml.to_s).should == @sample_xml
|
74
|
-
XmlSimple.xml_in(result).should == @sample_xml
|
75
|
-
end
|
76
|
-
|
77
|
-
it 'should add to root of REXML::Documents, but add directly to the elements if a REXML::Element is passed in' do
|
78
|
-
@test_ds.expects(:fields).returns(@sample_fields).times(2)
|
79
|
-
doc = REXML::Document.new("<test_document/>")
|
80
|
-
el = REXML::Element.new("<test_element/>")
|
81
|
-
doc.root.elements.expects(:add).times(5)
|
82
|
-
el.expects(:add).times(5)
|
83
|
-
@test_ds.to_xml(doc)
|
84
|
-
@test_ds.to_xml(el)
|
85
|
-
end
|
86
|
-
|
87
|
-
end
|
88
|
-
|
89
|
-
describe '.set_blob_for_save' do
|
90
|
-
it "should provide .set_blob_for_save" do
|
91
|
-
@test_ds.should respond_to(:set_blob_for_save)
|
92
|
-
end
|
93
|
-
|
94
|
-
it "should set the blob to to_xml" do
|
95
|
-
@test_ds.expects(:blob=).with(@test_ds.to_xml)
|
96
|
-
@test_ds.set_blob_for_save
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
describe '#field' do
|
101
|
-
|
102
|
-
before(:each) do
|
103
|
-
class SpecDatastream < ActiveFedora::MetadataDatastream
|
104
|
-
def initialize
|
105
|
-
super
|
106
|
-
field :publisher, :string
|
107
|
-
field :coverage, :text
|
108
|
-
field :creation_date, :date
|
109
|
-
field :mydate, :date
|
110
|
-
field :mycomplicated_field, :string, :multiple=>false, :encoding=>'LCSH', :element_attrs=>{:foo=>:bar, :baz=>:bat}
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
after(:each) do
|
116
|
-
Object.send(:remove_const, :SpecDatastream)
|
117
|
-
end
|
118
|
-
|
119
|
-
it 'should add corresponding field to the @fields hash and set the field :type ' do
|
120
|
-
sds = SpecDatastream.new
|
121
|
-
sds.fields.should_not have_key(:bio)
|
122
|
-
sds.field :bio, :text
|
123
|
-
sds.fields.should have_key(:bio)
|
124
|
-
sds.fields[:bio].should have_key(:type)
|
125
|
-
sds.fields[:bio][:type].should == :text
|
126
|
-
sds.fields[:mycomplicated_field][:element_attrs].should == {:foo=>:bar, :baz=>:bat}
|
127
|
-
end
|
128
|
-
|
129
|
-
# it "should insert custom element attrs into the xml stream" do
|
130
|
-
# sds = SpecDatastream.new
|
131
|
-
# sds.mycomplicated_field_values='foo'
|
132
|
-
# sds.fields[:mycomplicated_field][:element_attrs].should == {:foo=>:bar, :baz=>:bat}
|
133
|
-
# sds.to_xml.should == '<fields><mycomplicated_field baz=\'bat\' foo=\'bar\'>foo</mycomplicated_field></fields>'
|
134
|
-
# end
|
135
|
-
|
136
|
-
it "should add getters and setters and appenders with field name" do
|
137
|
-
local_test_ds = SpecDatastream.new
|
138
|
-
local_test_ds.should respond_to(:publisher_values)
|
139
|
-
local_test_ds.should respond_to(:publisher_append)
|
140
|
-
local_test_ds.should respond_to(:publisher_values=)
|
141
|
-
local_test_ds.publisher_values.class.should == Array
|
142
|
-
local_test_ds.should respond_to(:coverage_values)
|
143
|
-
local_test_ds.should respond_to(:coverage_values=)
|
144
|
-
local_test_ds.should respond_to(:coverage_append)
|
145
|
-
local_test_ds.should respond_to(:creation_date_values)
|
146
|
-
local_test_ds.should respond_to(:creation_date_append)
|
147
|
-
local_test_ds.should respond_to(:creation_date_values=)
|
148
|
-
local_test_ds.should respond_to(:mydate_values)
|
149
|
-
local_test_ds.should respond_to(:mydate_append)
|
150
|
-
local_test_ds.should respond_to(:mydate_values=)
|
151
|
-
end
|
152
|
-
|
153
|
-
it "should track field values at instance level, not at class level" do
|
154
|
-
local_test_ds1 = SpecDatastream.new
|
155
|
-
local_test_ds2 = SpecDatastream.new
|
156
|
-
local_test_ds1.publisher_values = ["publisher1", "publisher2"]
|
157
|
-
local_test_ds2.publisher_values = ["publisherA", "publisherB"]
|
158
|
-
|
159
|
-
local_test_ds2.publisher_values.should == ["publisherA", "publisherB"]
|
160
|
-
local_test_ds1.publisher_values.should == ["publisher1", "publisher2"]
|
161
|
-
end
|
162
|
-
|
163
|
-
it "should allow you to add field values using <<" do
|
164
|
-
local_test_ds1 = SpecDatastream.new
|
165
|
-
local_test_ds1.publisher_values << "publisher1"
|
166
|
-
local_test_ds1.publisher_values.should == ["publisher1"]
|
167
|
-
end
|
168
|
-
|
169
|
-
it "should create setter that always turns non-arrays into arrays" do
|
170
|
-
local_test_ds = SpecDatastream.new
|
171
|
-
local_test_ds.publisher_values = "Foo"
|
172
|
-
local_test_ds.publisher_values.should == ["Foo"]
|
173
|
-
end
|
174
|
-
|
175
|
-
it "should create setter that sets datastream.dirty? to true" do
|
176
|
-
local_test_ds = SpecDatastream.new
|
177
|
-
local_test_ds.should_not be_dirty
|
178
|
-
local_test_ds.publisher_values = "Foo"
|
179
|
-
local_test_ds.should be_dirty
|
180
|
-
|
181
|
-
# Note: If you use << to append values, the datastream will not be marked as dirty!
|
182
|
-
#local_test_ds.dirty = false
|
183
|
-
|
184
|
-
#local_test_ds.should_not be_dirty
|
185
|
-
#local_test_ds.publisher_values << "Foo"
|
186
|
-
#local_test_ds.should be_dirty
|
187
|
-
end
|
188
|
-
|
189
|
-
it "should add any extra opts to the field hash" do
|
190
|
-
local_test_ds = SpecDatastream.new
|
191
|
-
local_test_ds.field "myfield", :string, :foo => "foo", :bar => "bar"
|
192
|
-
local_test_ds.fields[:myfield].should have_key(:foo)
|
193
|
-
local_test_ds.fields[:myfield][:foo].should == "foo"
|
194
|
-
local_test_ds.fields[:myfield].should have_key(:bar)
|
195
|
-
local_test_ds.fields[:myfield][:bar].should == "bar"
|
196
|
-
end
|
197
|
-
|
198
|
-
end
|
199
|
-
|
200
|
-
describe ".to_solr" do
|
201
|
-
|
202
|
-
after(:all) do
|
203
|
-
# Revert to default mappings after running tests
|
204
|
-
ActiveFedora::SolrService.load_mappings
|
205
|
-
end
|
206
|
-
|
207
|
-
it "should provide .to_solr and return a SolrDocument" do
|
208
|
-
@test_ds.should respond_to(:to_solr)
|
209
|
-
@test_ds.to_solr.should be_kind_of(Solr::Document)
|
210
|
-
end
|
211
|
-
|
212
|
-
it "should optionally allow you to provide the Solr::Document to add fields to and return that document when done" do
|
213
|
-
doc = Solr::Document.new
|
214
|
-
@test_ds.to_solr(doc).should equal(doc)
|
215
|
-
end
|
216
|
-
|
217
|
-
it "should iterate through @fields hash" do
|
218
|
-
@test_ds.expects(:fields).returns(@sample_fields)
|
219
|
-
solr_doc = @test_ds.to_solr
|
220
|
-
|
221
|
-
solr_doc[:publisher_t].should == "publisher1"
|
222
|
-
solr_doc[:coverage_t].should == "coverage1"
|
223
|
-
solr_doc[:creation_date_dt].should == "fake-date"
|
224
|
-
solr_doc[:mydate_dt].should == "fake-date"
|
225
|
-
|
226
|
-
solr_doc[:empty_field_t].should be_nil
|
227
|
-
end
|
228
|
-
|
229
|
-
it "should allow multiple values for a single field"
|
230
|
-
|
231
|
-
it 'should append create keys in format field_name + _ + field_type' do
|
232
|
-
@test_ds.stubs(:fields).returns(@sample_fields)
|
233
|
-
|
234
|
-
#should have these
|
235
|
-
|
236
|
-
@test_ds.to_solr[:publisher_t].should_not be_nil
|
237
|
-
@test_ds.to_solr[:coverage_t].should_not be_nil
|
238
|
-
@test_ds.to_solr[:creation_date_dt].should_not be_nil
|
239
|
-
|
240
|
-
#should NOT have these
|
241
|
-
@test_ds.to_solr[:narrator].should be_nil
|
242
|
-
@test_ds.to_solr[:title].should be_nil
|
243
|
-
@test_ds.to_solr[:empty_field].should be_nil
|
244
|
-
|
245
|
-
end
|
246
|
-
|
247
|
-
it "should use Solr mappings to generate field names" do
|
248
|
-
ActiveFedora::SolrService.load_mappings(File.join(File.dirname(__FILE__), "..", "..", "config", "solr_mappings_af_0.1.yml"))
|
249
|
-
@test_ds.stubs(:fields).returns(@sample_fields)
|
250
|
-
solr_doc = @test_ds.to_solr
|
251
|
-
|
252
|
-
#should have these
|
253
|
-
|
254
|
-
solr_doc[:publisher_field].should == "publisher1"
|
255
|
-
solr_doc[:coverage_field].should == "coverage1"
|
256
|
-
solr_doc[:creation_date_date].should == "fake-date"
|
257
|
-
solr_doc[:mydate_date].should == "fake-date"
|
258
|
-
|
259
|
-
solr_doc[:publisher_t].should be_nil
|
260
|
-
solr_doc[:coverage_t].should be_nil
|
261
|
-
solr_doc[:creation_date_dt].should be_nil
|
262
|
-
|
263
|
-
# Reload default mappings
|
264
|
-
ActiveFedora::SolrService.load_mappings
|
265
|
-
end
|
266
|
-
|
267
|
-
it 'should append _dt to dates' do
|
268
|
-
@test_ds.expects(:fields).returns(@sample_fields).at_least_once
|
269
|
-
|
270
|
-
#should have these
|
271
|
-
|
272
|
-
@test_ds.to_solr[:creation_date_dt].should_not be_nil
|
273
|
-
@test_ds.to_solr[:mydate_dt].should_not be_nil
|
274
|
-
|
275
|
-
#should NOT have these
|
276
|
-
|
277
|
-
@test_ds.to_solr[:mydate].should be_nil
|
278
|
-
@test_ds.to_solr[:creation_date_date].should be_nil
|
279
|
-
end
|
280
|
-
|
281
|
-
end
|
282
|
-
|
283
|
-
describe '.fields' do
|
284
|
-
it "should return a Hash" do
|
285
|
-
@test_ds.fields.should be_instance_of(Hash)
|
286
|
-
end
|
287
|
-
end
|
288
|
-
|
289
|
-
end
|
@@ -1,301 +0,0 @@
|
|
1
|
-
require File.join( File.dirname(__FILE__), "../spec_helper" )
|
2
|
-
|
3
|
-
require 'active_fedora'
|
4
|
-
require 'active_fedora/nokogiri_datastream'
|
5
|
-
|
6
|
-
describe ActiveFedora::NokogiriDatastream do
|
7
|
-
|
8
|
-
before(:all) do
|
9
|
-
@sample_fields = {:publisher => {:values => ["publisher1"], :type => :string},
|
10
|
-
:coverage => {:values => ["coverage1", "coverage2"], :type => :text},
|
11
|
-
:creation_date => {:values => "fake-date", :type => :date},
|
12
|
-
:mydate => {:values => "fake-date", :type => :date},
|
13
|
-
:empty_field => {:values => {}}
|
14
|
-
}
|
15
|
-
@sample_xml = XmlSimple.xml_in("<fields><coverage>coverage1</coverage><coverage>coverage2</coverage><creation_date>fake-date</creation_date><mydate>fake-date</mydate><publisher>publisher1</publisher></fields>")
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
before(:each) do
|
20
|
-
@test_ds = ActiveFedora::NokogiriDatastream.new
|
21
|
-
end
|
22
|
-
|
23
|
-
after(:each) do
|
24
|
-
end
|
25
|
-
|
26
|
-
describe '#new' do
|
27
|
-
it 'should provide #new' do
|
28
|
-
ActiveFedora::NokogiriDatastream.should respond_to(:new)
|
29
|
-
@test_ds.ng_xml.should be_instance_of(Nokogiri::XML::Document)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
|
34
|
-
it 'should provide .fields' do
|
35
|
-
@test_ds.should respond_to(:fields)
|
36
|
-
end
|
37
|
-
|
38
|
-
describe '.save' do
|
39
|
-
it "should provide .save" do
|
40
|
-
@test_ds.should respond_to(:save)
|
41
|
-
end
|
42
|
-
it "should persist the product of .to_xml in fedora" do
|
43
|
-
Fedora::Repository.instance.expects(:save)
|
44
|
-
@test_ds.expects(:to_xml).returns("fake xml")
|
45
|
-
@test_ds.expects(:blob=).with("fake xml")
|
46
|
-
@test_ds.save
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
describe '.to_xml' do
|
51
|
-
it "should provide .to_xml" do
|
52
|
-
@test_ds.should respond_to(:to_xml)
|
53
|
-
end
|
54
|
-
it 'should output the fields hash as XML' do
|
55
|
-
@test_ds.expects(:fields).returns(@sample_fields)
|
56
|
-
returned_xml = XmlSimple.xml_in(@test_ds.to_xml)
|
57
|
-
returned_xml.should == @sample_xml
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'should accept an optional REXML Document as an argument and insert its fields into that' do
|
61
|
-
@test_ds.expects(:fields).returns(@sample_fields)
|
62
|
-
rexml = REXML::Document.new("<test_rexml/>")
|
63
|
-
rexml.root.elements.expects(:add).times(5)
|
64
|
-
result = @test_ds.to_xml(rexml)
|
65
|
-
end
|
66
|
-
it 'should accept an optional REXML Document as an argument and insert its fields into that' do
|
67
|
-
@test_ds.expects(:fields).returns(@sample_fields)
|
68
|
-
rexml = REXML::Document.new("<test_rexml/>")
|
69
|
-
result = @test_ds.to_xml(rexml)
|
70
|
-
XmlSimple.xml_in(rexml.to_s).should == @sample_xml
|
71
|
-
XmlSimple.xml_in(result).should == @sample_xml
|
72
|
-
end
|
73
|
-
|
74
|
-
it 'should add to root of REXML::Documents, but add directly to the elements if a REXML::Element is passed in' do
|
75
|
-
@test_ds.expects(:fields).returns(@sample_fields).times(2)
|
76
|
-
doc = REXML::Document.new("<test_document/>")
|
77
|
-
el = REXML::Element.new("<test_element/>")
|
78
|
-
doc.root.elements.expects(:add).times(5)
|
79
|
-
el.expects(:add).times(5)
|
80
|
-
@test_ds.to_xml(doc)
|
81
|
-
@test_ds.to_xml(el)
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|
85
|
-
|
86
|
-
describe '.set_blob_for_save' do
|
87
|
-
it "should provide .set_blob_for_save" do
|
88
|
-
@test_ds.should respond_to(:set_blob_for_save)
|
89
|
-
end
|
90
|
-
|
91
|
-
it "should set the blob to to_xml" do
|
92
|
-
@test_ds.expects(:blob=).with(@test_ds.to_xml)
|
93
|
-
@test_ds.set_blob_for_save
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
describe '#field' do
|
98
|
-
|
99
|
-
before(:each) do
|
100
|
-
class SpecDatastream < ActiveFedora::MetadataDatastream
|
101
|
-
def initialize
|
102
|
-
super
|
103
|
-
field :publisher, :string
|
104
|
-
field :coverage, :text
|
105
|
-
field :creation_date, :date
|
106
|
-
field :mydate, :date
|
107
|
-
field :mycomplicated_field, :string, :multiple=>false, :encoding=>'LCSH', :element_attrs=>{:foo=>:bar, :baz=>:bat}
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
after(:each) do
|
113
|
-
Object.send(:remove_const, :SpecDatastream)
|
114
|
-
end
|
115
|
-
|
116
|
-
|
117
|
-
decribe ".values"
|
118
|
-
it "should call ng_xml.values_for(#{field_name}) OR call corresponding lookup method and build an array of values by calling .value on each node in the set"
|
119
|
-
end
|
120
|
-
|
121
|
-
decribe ".values<<"
|
122
|
-
it "should call corresponding builder method"
|
123
|
-
end
|
124
|
-
|
125
|
-
decribe ".values="
|
126
|
-
it "should wipe out any existing nodes, use the corresponding builder, and insert new node(s) as the replacement"
|
127
|
-
end
|
128
|
-
|
129
|
-
it 'should add corresponding field to the @fields hash and set the field :type ' do
|
130
|
-
sds = SpecDatastream.new
|
131
|
-
sds.fields.should_not have_key(:bio)
|
132
|
-
sds.field :bio, :text
|
133
|
-
sds.fields.should have_key(:bio)
|
134
|
-
sds.fields[:bio].should have_key(:type)
|
135
|
-
sds.fields[:bio][:type].should == :text
|
136
|
-
sds.fields[:mycomplicated_field][:element_attrs].should == {:foo=>:bar, :baz=>:bat}
|
137
|
-
end
|
138
|
-
|
139
|
-
# it "should insert custom element attrs into the xml stream" do
|
140
|
-
# sds = SpecDatastream.new
|
141
|
-
# sds.mycomplicated_field_values='foo'
|
142
|
-
# sds.fields[:mycomplicated_field][:element_attrs].should == {:foo=>:bar, :baz=>:bat}
|
143
|
-
# sds.to_xml.should == '<fields><mycomplicated_field baz=\'bat\' foo=\'bar\'>foo</mycomplicated_field></fields>'
|
144
|
-
# end
|
145
|
-
|
146
|
-
it "should add getters and setters and appenders with field name" do
|
147
|
-
local_test_ds = SpecDatastream.new
|
148
|
-
local_test_ds.should respond_to(:publisher_values)
|
149
|
-
local_test_ds.should respond_to(:publisher_append)
|
150
|
-
local_test_ds.should respond_to(:publisher_values=)
|
151
|
-
local_test_ds.publisher_values.class.should == Array
|
152
|
-
local_test_ds.should respond_to(:coverage_values)
|
153
|
-
local_test_ds.should respond_to(:coverage_values=)
|
154
|
-
local_test_ds.should respond_to(:coverage_append)
|
155
|
-
local_test_ds.should respond_to(:creation_date_values)
|
156
|
-
local_test_ds.should respond_to(:creation_date_append)
|
157
|
-
local_test_ds.should respond_to(:creation_date_values=)
|
158
|
-
local_test_ds.should respond_to(:mydate_values)
|
159
|
-
local_test_ds.should respond_to(:mydate_append)
|
160
|
-
local_test_ds.should respond_to(:mydate_values=)
|
161
|
-
end
|
162
|
-
|
163
|
-
it "should track field values at instance level, not at class level" do
|
164
|
-
local_test_ds1 = SpecDatastream.new
|
165
|
-
local_test_ds2 = SpecDatastream.new
|
166
|
-
local_test_ds1.publisher_values = ["publisher1", "publisher2"]
|
167
|
-
local_test_ds2.publisher_values = ["publisherA", "publisherB"]
|
168
|
-
|
169
|
-
local_test_ds2.publisher_values.should == ["publisherA", "publisherB"]
|
170
|
-
local_test_ds1.publisher_values.should == ["publisher1", "publisher2"]
|
171
|
-
end
|
172
|
-
|
173
|
-
it "should allow you to add field values using <<" do
|
174
|
-
local_test_ds1 = SpecDatastream.new
|
175
|
-
local_test_ds1.publisher_values << "publisher1"
|
176
|
-
local_test_ds1.publisher_values.should == ["publisher1"]
|
177
|
-
end
|
178
|
-
|
179
|
-
it "should create setter that always turns non-arrays into arrays" do
|
180
|
-
local_test_ds = SpecDatastream.new
|
181
|
-
local_test_ds.publisher_values = "Foo"
|
182
|
-
local_test_ds.publisher_values.should == ["Foo"]
|
183
|
-
end
|
184
|
-
|
185
|
-
it "should create setter that sets datastream.dirty? to true" do
|
186
|
-
local_test_ds = SpecDatastream.new
|
187
|
-
local_test_ds.should_not be_dirty
|
188
|
-
local_test_ds.publisher_values = "Foo"
|
189
|
-
local_test_ds.should be_dirty
|
190
|
-
|
191
|
-
# Note: If you use << to append values, the datastream will not be marked as dirty!
|
192
|
-
#local_test_ds.dirty = false
|
193
|
-
|
194
|
-
#local_test_ds.should_not be_dirty
|
195
|
-
#local_test_ds.publisher_values << "Foo"
|
196
|
-
#local_test_ds.should be_dirty
|
197
|
-
end
|
198
|
-
|
199
|
-
it "should add any extra opts to the field hash" do
|
200
|
-
local_test_ds = SpecDatastream.new
|
201
|
-
local_test_ds.field "myfield", :string, :foo => "foo", :bar => "bar"
|
202
|
-
local_test_ds.fields[:myfield].should have_key(:foo)
|
203
|
-
local_test_ds.fields[:myfield][:foo].should == "foo"
|
204
|
-
local_test_ds.fields[:myfield].should have_key(:bar)
|
205
|
-
local_test_ds.fields[:myfield][:bar].should == "bar"
|
206
|
-
end
|
207
|
-
|
208
|
-
end
|
209
|
-
|
210
|
-
describe ".to_solr" do
|
211
|
-
|
212
|
-
after(:all) do
|
213
|
-
# Revert to default mappings after running tests
|
214
|
-
ActiveFedora::SolrService.load_mappings
|
215
|
-
end
|
216
|
-
|
217
|
-
it "should iterate through the class fields, calling .values on each and appending the values to the solr doc"
|
218
|
-
|
219
|
-
it "should provide .to_solr and return a SolrDocument" do
|
220
|
-
@test_ds.should respond_to(:to_solr)
|
221
|
-
@test_ds.to_solr.should be_kind_of(Solr::Document)
|
222
|
-
end
|
223
|
-
|
224
|
-
it "should optionally allow you to provide the Solr::Document to add fields to and return that document when done" do
|
225
|
-
doc = Solr::Document.new
|
226
|
-
@test_ds.to_solr(doc).should equal(doc)
|
227
|
-
end
|
228
|
-
|
229
|
-
it "should iterate through @fields hash" do
|
230
|
-
@test_ds.expects(:fields).returns(@sample_fields)
|
231
|
-
solr_doc = @test_ds.to_solr
|
232
|
-
|
233
|
-
solr_doc[:publisher_t].should == "publisher1"
|
234
|
-
solr_doc[:coverage_t].should == "coverage1"
|
235
|
-
solr_doc[:creation_date_dt].should == "fake-date"
|
236
|
-
solr_doc[:mydate_dt].should == "fake-date"
|
237
|
-
|
238
|
-
solr_doc[:empty_field_t].should be_nil
|
239
|
-
end
|
240
|
-
|
241
|
-
it "should allow multiple values for a single field"
|
242
|
-
|
243
|
-
it 'should append create keys in format field_name + _ + field_type' do
|
244
|
-
@test_ds.stubs(:fields).returns(@sample_fields)
|
245
|
-
|
246
|
-
#should have these
|
247
|
-
|
248
|
-
@test_ds.to_solr[:publisher_t].should_not be_nil
|
249
|
-
@test_ds.to_solr[:coverage_t].should_not be_nil
|
250
|
-
@test_ds.to_solr[:creation_date_dt].should_not be_nil
|
251
|
-
|
252
|
-
#should NOT have these
|
253
|
-
@test_ds.to_solr[:narrator].should be_nil
|
254
|
-
@test_ds.to_solr[:title].should be_nil
|
255
|
-
@test_ds.to_solr[:empty_field].should be_nil
|
256
|
-
|
257
|
-
end
|
258
|
-
|
259
|
-
it "should use Solr mappings to generate field names" do
|
260
|
-
ActiveFedora::SolrService.load_mappings(File.join(File.dirname(__FILE__), "..", "..", "config", "solr_mappings_af_0.1.yml"))
|
261
|
-
@test_ds.stubs(:fields).returns(@sample_fields)
|
262
|
-
solr_doc = @test_ds.to_solr
|
263
|
-
|
264
|
-
#should have these
|
265
|
-
|
266
|
-
solr_doc[:publisher_field].should == "publisher1"
|
267
|
-
solr_doc[:coverage_field].should == "coverage1"
|
268
|
-
solr_doc[:creation_date_date].should == "fake-date"
|
269
|
-
solr_doc[:mydate_date].should == "fake-date"
|
270
|
-
|
271
|
-
solr_doc[:publisher_t].should be_nil
|
272
|
-
solr_doc[:coverage_t].should be_nil
|
273
|
-
solr_doc[:creation_date_dt].should be_nil
|
274
|
-
|
275
|
-
# Reload default mappings
|
276
|
-
ActiveFedora::SolrService.load_mappings
|
277
|
-
end
|
278
|
-
|
279
|
-
it 'should append _dt to dates' do
|
280
|
-
@test_ds.expects(:fields).returns(@sample_fields).at_least_once
|
281
|
-
|
282
|
-
#should have these
|
283
|
-
|
284
|
-
@test_ds.to_solr[:creation_date_dt].should_not be_nil
|
285
|
-
@test_ds.to_solr[:mydate_dt].should_not be_nil
|
286
|
-
|
287
|
-
#should NOT have these
|
288
|
-
|
289
|
-
@test_ds.to_solr[:mydate].should be_nil
|
290
|
-
@test_ds.to_solr[:creation_date_date].should be_nil
|
291
|
-
end
|
292
|
-
|
293
|
-
end
|
294
|
-
|
295
|
-
describe '.fields' do
|
296
|
-
it "should return a Hash" do
|
297
|
-
@test_ds.fields.should be_instance_of(Hash)
|
298
|
-
end
|
299
|
-
end
|
300
|
-
|
301
|
-
end
|