active-fedora 4.2.0 → 4.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +12 -11
- data/History.txt +6 -0
- data/active-fedora.gemspec +1 -1
- data/lib/active_fedora.rb +1 -0
- data/lib/active_fedora/base.rb +12 -23
- data/lib/active_fedora/datastreams.rb +4 -2
- data/lib/active_fedora/delegating.rb +37 -10
- data/lib/active_fedora/model.rb +1 -1
- data/lib/active_fedora/simple_datastream.rb +92 -0
- data/lib/active_fedora/version.rb +1 -1
- data/spec/integration/base_find_by_fields_spec.rb +1 -1
- data/spec/integration/base_spec.rb +5 -5
- data/spec/integration/bug_spec.rb +9 -9
- data/spec/integration/full_featured_model_spec.rb +7 -4
- data/spec/integration/model_spec.rb +1 -1
- data/spec/integration/nested_attribute_spec.rb +1 -1
- data/spec/integration/nokogiri_datastream_spec.rb +1 -1
- data/spec/integration/solr_service_spec.rb +1 -1
- data/spec/samples/models/hydrangea_article.rb +1 -1
- data/spec/samples/models/oral_history.rb +4 -18
- data/spec/samples/models/seminar_audio_file.rb +1 -3
- data/spec/samples/oral_history_sample_model.rb +3 -3
- data/spec/unit/base_active_model_spec.rb +3 -3
- data/spec/unit/base_delegate_spec.rb +3 -3
- data/spec/unit/base_delegate_to_spec.rb +69 -0
- data/spec/unit/base_extra_spec.rb +24 -18
- data/spec/unit/base_spec.rb +21 -23
- data/spec/unit/callback_spec.rb +1 -1
- data/spec/unit/datastreams_spec.rb +9 -9
- data/spec/unit/inheritance_spec.rb +3 -7
- data/spec/unit/simple_datastream_spec.rb +56 -0
- data/spec/unit/solr_config_options_spec.rb +1 -1
- data/spec/unit/validations_spec.rb +1 -1
- metadata +292 -406
data/Gemfile.lock
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
active-fedora (4.
|
4
|
+
active-fedora (4.3.0)
|
5
5
|
activeresource (>= 3.0.0)
|
6
6
|
activesupport (>= 3.0.0)
|
7
7
|
equivalent-xml
|
8
8
|
mediashelf-loggable
|
9
9
|
mime-types (>= 1.16)
|
10
|
-
multipart-post
|
10
|
+
multipart-post
|
11
11
|
nokogiri
|
12
12
|
om (~> 1.6.0)
|
13
13
|
rdf
|
@@ -31,9 +31,10 @@ GEM
|
|
31
31
|
i18n (~> 0.6)
|
32
32
|
multi_json (~> 1.0)
|
33
33
|
addressable (2.2.8)
|
34
|
-
akami (1.
|
34
|
+
akami (1.1.0)
|
35
35
|
gyoku (>= 0.4.0)
|
36
|
-
|
36
|
+
nokogiri (>= 1.5.2)
|
37
|
+
backports (2.6.1)
|
37
38
|
builder (3.0.0)
|
38
39
|
childprocess (0.3.2)
|
39
40
|
ffi (~> 1.0.6)
|
@@ -46,7 +47,7 @@ GEM
|
|
46
47
|
ffi (1.0.11)
|
47
48
|
gyoku (0.4.5)
|
48
49
|
builder (>= 2.1.2)
|
49
|
-
httpi (0.
|
50
|
+
httpi (1.0.0)
|
50
51
|
rack
|
51
52
|
i18n (0.6.0)
|
52
53
|
jettywrapper (1.2.1)
|
@@ -65,7 +66,7 @@ GEM
|
|
65
66
|
metaclass (~> 0.0.1)
|
66
67
|
multi_json (1.3.5)
|
67
68
|
multipart-post (1.1.2)
|
68
|
-
nokogiri (1.5.
|
69
|
+
nokogiri (1.5.3)
|
69
70
|
nori (1.1.0)
|
70
71
|
om (1.6.0)
|
71
72
|
mediashelf-loggable
|
@@ -108,14 +109,14 @@ GEM
|
|
108
109
|
nokogiri
|
109
110
|
rest-client
|
110
111
|
savon
|
111
|
-
savon (0.9.
|
112
|
-
akami (~> 1.
|
112
|
+
savon (0.9.14)
|
113
|
+
akami (~> 1.1)
|
113
114
|
builder (>= 2.1.2)
|
114
115
|
gyoku (>= 0.4.0)
|
115
|
-
httpi (~> 0
|
116
|
+
httpi (~> 1.0)
|
116
117
|
nokogiri (>= 1.4.0)
|
117
118
|
nori (~> 1.1)
|
118
|
-
wasabi (~> 2.
|
119
|
+
wasabi (~> 2.2)
|
119
120
|
simplecov (0.6.4)
|
120
121
|
multi_json (~> 1.0)
|
121
122
|
simplecov-html (~> 0.5.3)
|
@@ -130,7 +131,7 @@ GEM
|
|
130
131
|
stomp
|
131
132
|
xml-simple
|
132
133
|
stomp (1.2.2)
|
133
|
-
wasabi (2.
|
134
|
+
wasabi (2.3.0)
|
134
135
|
nokogiri (>= 1.4.0)
|
135
136
|
xml-simple (1.1.1)
|
136
137
|
yard (0.8.1)
|
data/History.txt
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
4.3.0
|
2
|
+
Added the #delegate_to method for easier delegation of multiple terms to the same datastream.
|
3
|
+
Deprecated AF::Base#file_streams
|
4
|
+
Deprecated AF::Base#to_xml
|
5
|
+
HYDRA-826 Added SimpleDatastream as a replacement for MetadataDatastream
|
6
|
+
|
1
7
|
4.2.0
|
2
8
|
Added Base.find_each which allows yielding of each result
|
3
9
|
Added Base.find_in_batches which allows yielding of a chunk of solr results
|
data/active-fedora.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.add_dependency('rsolr')
|
19
19
|
s.add_dependency('xml-simple', '>= 1.0.12')
|
20
20
|
s.add_dependency('mime-types', '>= 1.16')
|
21
|
-
s.add_dependency('multipart-post'
|
21
|
+
s.add_dependency('multipart-post')
|
22
22
|
s.add_dependency('nokogiri')
|
23
23
|
s.add_dependency('om', '~> 1.6.0')
|
24
24
|
s.add_dependency('solrizer', '~>1.2.0')
|
data/lib/active_fedora.rb
CHANGED
data/lib/active_fedora/base.rb
CHANGED
@@ -30,21 +30,16 @@ module ActiveFedora
|
|
30
30
|
self.profile_solr_name = ActiveFedora::SolrService.solr_name("object_profile", :string, :displayable)
|
31
31
|
|
32
32
|
def method_missing(name, *args)
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
dsid = corresponding_datastream_name(name)
|
39
|
-
if dsid
|
40
|
-
### Create and invoke a proxy method
|
41
|
-
self.class.send :define_method, name do
|
42
|
-
datastreams[dsid]
|
43
|
-
end
|
44
|
-
self.send(name)
|
45
|
-
else
|
46
|
-
super
|
33
|
+
dsid = corresponding_datastream_name(name)
|
34
|
+
if dsid
|
35
|
+
### Create and invoke a proxy method
|
36
|
+
self.class.send :define_method, name do
|
37
|
+
datastreams[dsid]
|
47
38
|
end
|
39
|
+
self.send(name)
|
40
|
+
else
|
41
|
+
super
|
42
|
+
end
|
48
43
|
end
|
49
44
|
|
50
45
|
|
@@ -54,7 +49,7 @@ module ActiveFedora
|
|
54
49
|
end
|
55
50
|
|
56
51
|
def new_object=(bool)
|
57
|
-
ActiveSupport::Deprecation.warn("ActiveFedora::Base.new_object= has been deprecated and nolonger has any effect")
|
52
|
+
ActiveSupport::Deprecation.warn("ActiveFedora::Base.new_object= has been deprecated and nolonger has any effect. Will be removed in 5.0")
|
58
53
|
end
|
59
54
|
|
60
55
|
## Required by associations
|
@@ -263,13 +258,14 @@ module ActiveFedora
|
|
263
258
|
# TODO this can likely be removed once find_by_fields_by_solr is removed
|
264
259
|
fields = {:id => {:values => [pid]}, :system_create_date => {:values => [self.create_date], :type=>:date}, :system_modified_date => {:values => [self.modified_date], :type=>:date}, :active_fedora_model => {:values => [self.class.inspect], :type=>:symbol}}
|
265
260
|
datastreams.values.each do |ds|
|
266
|
-
fields.merge!(ds.fields) if [ActiveFedora::MetadataDatastream, ActiveFedora::QualifiedDublinCoreDatastream].include?(ds.class)
|
261
|
+
fields.merge!(ds.fields) if [ActiveFedora::MetadataDatastream, ActiveFedora::SimpleDatastream, ActiveFedora::QualifiedDublinCoreDatastream].include?(ds.class)
|
267
262
|
end
|
268
263
|
return fields
|
269
264
|
end
|
270
265
|
|
271
266
|
#Returns the xml version of this object as a string.
|
272
267
|
def to_xml(xml=Nokogiri::XML::Document.parse("<xml><fields/><content/></xml>"))
|
268
|
+
ActiveSupport::Deprecation.warn("ActiveFedora::Base#to_xml has been deprecated and will be removed in version 5.0")
|
273
269
|
fields_xml = xml.xpath('//fields').first
|
274
270
|
builder = Nokogiri::XML::Builder.with(fields_xml) do |fields_xml|
|
275
271
|
fields_xml.id_ pid
|
@@ -278,12 +274,6 @@ module ActiveFedora
|
|
278
274
|
fields_xml.active_fedora_model self.class.inspect
|
279
275
|
end
|
280
276
|
|
281
|
-
# {: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|
|
282
|
-
# el = REXML::Element.new(attribute_name.to_s)
|
283
|
-
# el.text = value
|
284
|
-
# fields_xml << el
|
285
|
-
# end
|
286
|
-
|
287
277
|
datastreams.each_value do |ds|
|
288
278
|
ds.to_xml(fields_xml) if ds.class.included_modules.include?(ActiveFedora::MetadataDatastreamHelper)
|
289
279
|
ds.to_rels_ext if ds.kind_of?(ActiveFedora::RelsExtDatastream)
|
@@ -317,7 +307,6 @@ module ActiveFedora
|
|
317
307
|
end
|
318
308
|
datastreams.each_value do |ds|
|
319
309
|
ds.ensure_xml_loaded if ds.respond_to? :ensure_xml_loaded ### Can't put this in the model because it's often implemented in Solrizer::XML::TerminologyBasedSolrizer
|
320
|
-
#puts "\n\nQDC #{ds.to_solr(solr_doc).inspect}" if ds.kind_of?(ActiveFedora::QualifiedDublinCoreDatastream)
|
321
310
|
solr_doc = ds.to_solr(solr_doc) if ds.kind_of?(ActiveFedora::RDFDatastream) || ds.kind_of?(ActiveFedora::NokogiriDatastream) || ds.kind_of?(ActiveFedora::MetadataDatastream)
|
322
311
|
end
|
323
312
|
solr_doc = solrize_relationships(solr_doc) unless opts[:model_only]
|
@@ -113,7 +113,7 @@ module ActiveFedora
|
|
113
113
|
end
|
114
114
|
|
115
115
|
def add(datastream) # :nodoc:
|
116
|
-
warn "Warning: ActiveFedora::Base.add has been
|
116
|
+
ActiveSupport::Deprecation.warn "Warning: ActiveFedora::Base.add has been deprecatedand will be removed in 5.0. Use add_datastream"
|
117
117
|
add_datastream(datastream)
|
118
118
|
end
|
119
119
|
|
@@ -130,10 +130,12 @@ module ActiveFedora
|
|
130
130
|
|
131
131
|
#return all datastreams not of type ActiveFedora::MetadataDatastream
|
132
132
|
#(that aren't Dublin Core or RELS-EXT streams either)
|
133
|
+
#@deprecated
|
133
134
|
def file_streams
|
135
|
+
ActiveSupport::Deprecation.warn("ActiveFedora::Base#file_streams has been deprecated and will be removed in 5.0")
|
134
136
|
results = []
|
135
137
|
datastreams.each_value do |ds|
|
136
|
-
if !ds.kind_of?(ActiveFedora::MetadataDatastream)
|
138
|
+
if !ds.kind_of?(ActiveFedora::MetadataDatastream) && !ds.kind_of?(ActiveFedora::NokogiriDatastream)
|
137
139
|
dsid = ds.dsid
|
138
140
|
if dsid != "DC" && dsid != "RELS-EXT"
|
139
141
|
results << ds
|
@@ -1,18 +1,18 @@
|
|
1
1
|
module ActiveFedora
|
2
2
|
module Delegating
|
3
3
|
extend ActiveSupport::Concern
|
4
|
-
|
4
|
+
|
5
5
|
module ClassMethods
|
6
6
|
# Provides a delegate class method to expose methods in metadata streams
|
7
|
-
# as member of the base object. Pass the target datastream via the
|
8
|
-
# <tt>:to</tt> argument. If you want to return a unique result, (e.g. string
|
7
|
+
# as member of the base object. Pass the target datastream via the
|
8
|
+
# <tt>:to</tt> argument. If you want to return a unique result, (e.g. string
|
9
9
|
# instead of an array) set the <tt>:unique</tt> argument to true.
|
10
10
|
#
|
11
11
|
# The optional <tt>:at</tt> argument provides a terminology that the delegate will point to.
|
12
|
-
#
|
12
|
+
#
|
13
13
|
# class Foo < ActiveFedora::Base
|
14
|
-
# has_metadata :name => "descMetadata", :type => MyDatastream
|
15
|
-
#
|
14
|
+
# has_metadata :name => "descMetadata", :type => MyDatastream
|
15
|
+
#
|
16
16
|
# delegate :field1, :to=>"descMetadata", :unique=>true
|
17
17
|
# delegate :field2, :to=>"descMetadata", :at=>[:term1, :term2]
|
18
18
|
# end
|
@@ -26,27 +26,54 @@ module ActiveFedora
|
|
26
26
|
create_delegate_accessor(field, args)
|
27
27
|
create_delegate_setter(field, args)
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
|
+
|
31
|
+
# Allows you to delegate multiple terminologies to the same datastream, instead
|
32
|
+
# having to call the method each time for each term. The target datastream is the
|
33
|
+
# first argument, followed by an array of the terms that will point to that
|
34
|
+
# datastream. Terms must be a single value, ie. :field and not [:term1, :term2].
|
35
|
+
# This is best accomplished by refining your OM terminology using :ref or :proxy
|
36
|
+
# methods to reduce nested terms down to one.
|
37
|
+
#
|
38
|
+
# class Foo < ActiveFedora::Base
|
39
|
+
# has_metadata :name => "descMetadata", :type => MyDatastream
|
40
|
+
#
|
41
|
+
# delegate_to :descMetadata, [:field1, :field2]
|
42
|
+
# end
|
43
|
+
#
|
44
|
+
# foo = Foo.new
|
45
|
+
# foo.field1 = "My Value"
|
46
|
+
# foo.field1 # => "My Value"
|
47
|
+
# foo.field2 # => NoMethodError: undefined method `field2' for #<Foo:0x1af30c>
|
48
|
+
|
49
|
+
def delegate_to(datastream,fields,args={})
|
50
|
+
fields.each do |f|
|
51
|
+
args.merge!({:to=>datastream})
|
52
|
+
create_delegate_accessor(f, args)
|
53
|
+
create_delegate_setter(f, args)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
30
57
|
private
|
31
58
|
def create_delegate_accessor(field, args)
|
32
59
|
define_method field do
|
33
60
|
ds = self.send(args[:to])
|
34
61
|
val = if ds.kind_of?(ActiveFedora::MetadataDatastream) || ds.kind_of?(ActiveFedora::RDFDatastream)
|
35
62
|
ds.send(:get_values, field)
|
36
|
-
else
|
63
|
+
else
|
37
64
|
terminology = args[:at] || [field]
|
38
65
|
ds.send(:term_values, *terminology)
|
39
66
|
end
|
40
67
|
args[:unique] ? val.first : val
|
41
68
|
end
|
42
69
|
end
|
43
|
-
|
70
|
+
|
44
71
|
def create_delegate_setter(field, args)
|
45
72
|
define_method "#{field}=".to_sym do |v|
|
46
73
|
ds = self.send(args[:to])
|
47
74
|
if ds.kind_of?(ActiveFedora::MetadataDatastream) || ds.kind_of?(ActiveFedora::RDFDatastream)
|
48
75
|
ds.send(:set_value, field, v)
|
49
|
-
else
|
76
|
+
else
|
50
77
|
terminology = args[:at] || [field]
|
51
78
|
ds.send(:update_indexed_attributes, {terminology => v})
|
52
79
|
end
|
data/lib/active_fedora/model.rb
CHANGED
@@ -97,7 +97,7 @@ module ActiveFedora
|
|
97
97
|
# Returns an Array of objects of the Class that +find+ is being
|
98
98
|
# called on
|
99
99
|
#
|
100
|
-
# @param[String,Symbol,
|
100
|
+
# @param[String,Symbol,Hash] args either a pid or :all or a hash of conditions
|
101
101
|
# @param [Hash] opts the options to create a message with.
|
102
102
|
# @option opts [Integer] :rows when :all is passed, the maximum number of rows to load from solr
|
103
103
|
# @option opts [Boolean] :cast when true, examine the model and cast it to the first known cModel
|
@@ -0,0 +1,92 @@
|
|
1
|
+
module ActiveFedora
|
2
|
+
#This class represents a simple xml datastream.
|
3
|
+
class SimpleDatastream < NokogiriDatastream
|
4
|
+
|
5
|
+
class_attribute :class_fields
|
6
|
+
self.class_fields = []
|
7
|
+
attr_accessor :fields # TODO this can be removed when Model.find_by_fields_by_solr has been removed.
|
8
|
+
|
9
|
+
|
10
|
+
set_terminology do |t|
|
11
|
+
t.root(:path=>"fields", :xmlns=>nil)
|
12
|
+
end
|
13
|
+
|
14
|
+
define_template :creator do |xml,name|
|
15
|
+
xml.creator() do
|
16
|
+
xml.text(name)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
# This method generates the various accessor and mutator methods on self for the datastream metadata attributes.
|
22
|
+
# each field will have the 2 magic methods:
|
23
|
+
# name=(arg)
|
24
|
+
# name
|
25
|
+
#
|
26
|
+
#
|
27
|
+
# 'datatype' is a datatype, currently :string, :text and :date are supported.
|
28
|
+
#
|
29
|
+
# opts is an options hash, which will affect the generation of the xml representation of this datastream.
|
30
|
+
#
|
31
|
+
# Currently supported modifiers:
|
32
|
+
# For +QualifiedDublinCorDatastreams+:
|
33
|
+
# :element_attrs =>{:foo=>:bar} - hash of xml element attributes
|
34
|
+
# :xml_node => :nodename - The xml node to be used to represent this object (in dcterms namespace)
|
35
|
+
# :encoding=>foo, or encodings_scheme - causes an xsi:type attribute to be set to 'foo'
|
36
|
+
# :multiple=>true - mark this field as a multivalue field (on by default)
|
37
|
+
#
|
38
|
+
#At some point, these modifiers will be ported up to work for any +ActiveFedora::MetadataDatastream+.
|
39
|
+
#
|
40
|
+
#There is quite a good example of this class in use in spec/examples/oral_history.rb
|
41
|
+
#
|
42
|
+
#!! Careful: If you declare two fields that correspond to the same xml node without any qualifiers to differentiate them,
|
43
|
+
#you will end up replicating the values in the underlying datastream, resulting in mysterious dubling, quadrupling, etc.
|
44
|
+
#whenever you edit the field's values.
|
45
|
+
def field(name, datatype=nil, opts={})
|
46
|
+
fields ||= {}
|
47
|
+
@fields[name.to_s.to_sym]={:type=>datatype, :values=>[]}.merge(opts)
|
48
|
+
# add term to template
|
49
|
+
self.class.class_fields << name.to_s
|
50
|
+
# add term to terminology
|
51
|
+
unless self.class.terminology.has_term?(name.to_sym)
|
52
|
+
term = OM::XML::Term.new(name.to_sym, {}, self.class.terminology)
|
53
|
+
self.class.terminology.add_term(term)
|
54
|
+
term.generate_xpath_queries!
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
def update_indexed_attributes(params={}, opts={})
|
60
|
+
# if the params are just keys, not an array, make then into an array.
|
61
|
+
new_params = {}
|
62
|
+
params.each do |key, val|
|
63
|
+
if key.is_a? Array
|
64
|
+
new_params[key] = val
|
65
|
+
else
|
66
|
+
new_params[[key.to_sym]] = val
|
67
|
+
end
|
68
|
+
end
|
69
|
+
super(new_params, opts)
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
def self.xml_template
|
74
|
+
Nokogiri::XML::Document.parse("<fields/>")
|
75
|
+
end
|
76
|
+
|
77
|
+
def to_solr(solr_doc = Hash.new) # :nodoc:
|
78
|
+
@fields.each do |field_key, field_info|
|
79
|
+
next if field_key == :location ## FIXME HYDRA-825
|
80
|
+
things = send(field_key)
|
81
|
+
if things
|
82
|
+
field_symbol = ActiveFedora::SolrService.solr_name(field_key, field_info[:type])
|
83
|
+
things.val.each do |val|
|
84
|
+
::Solrizer::Extractor.insert_solr_field_value(solr_doc, field_symbol, val )
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
return solr_doc
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
class MockAFBaseQuerySolr < ActiveFedora::Base
|
4
|
-
has_metadata :name => "properties", :type => ActiveFedora::
|
4
|
+
has_metadata :name => "properties", :type => ActiveFedora::SimpleDatastream do |m|
|
5
5
|
m.field "holding_id", :string
|
6
6
|
end
|
7
7
|
|
@@ -136,7 +136,7 @@ describe ActiveFedora::Base do
|
|
136
136
|
has_relationship "testing_inbound", :has_part, :type=>MockAFBaseFromSolr, :inbound=>true
|
137
137
|
has_relationship "testing_inbound2", :has_member, :type=>MockAFBaseFromSolr, :inbound=>true
|
138
138
|
|
139
|
-
has_metadata :name => "properties", :type => ActiveFedora::
|
139
|
+
has_metadata :name => "properties", :type => ActiveFedora::SimpleDatastream do |m|
|
140
140
|
m.field "holding_id", :string
|
141
141
|
end
|
142
142
|
|
@@ -266,8 +266,8 @@ describe ActiveFedora::Base do
|
|
266
266
|
end
|
267
267
|
|
268
268
|
describe ".metadata_streams" do
|
269
|
-
it "should return all of the datastreams from the object that are kinds of
|
270
|
-
mds1 = ActiveFedora::
|
269
|
+
it "should return all of the datastreams from the object that are kinds of NokogiriDatastream " do
|
270
|
+
mds1 = ActiveFedora::SimpleDatastream.new(@test_object.inner_object, "md1")
|
271
271
|
mds2 = ActiveFedora::QualifiedDublinCoreDatastream.new(@test_object.inner_object, "qdc")
|
272
272
|
fds = ActiveFedora::Datastream.new(@test_object.inner_object, "fds")
|
273
273
|
@test_object.add_datastream(mds1)
|
@@ -282,10 +282,10 @@ describe ActiveFedora::Base do
|
|
282
282
|
end
|
283
283
|
|
284
284
|
describe ".file_streams" do
|
285
|
-
it "should return all of the datastreams from the object that are kinds of
|
285
|
+
it "should return all of the datastreams from the object that are kinds of NokogiriDatastream" do
|
286
286
|
fds1 = ActiveFedora::Datastream.new(@test_object.inner_object, "fds1")
|
287
287
|
fds2 = ActiveFedora::Datastream.new(@test_object.inner_object, "fds2")
|
288
|
-
mds = ActiveFedora::
|
288
|
+
mds = ActiveFedora::SimpleDatastream.new(@test_object.inner_object, "mds")
|
289
289
|
@test_object.add_datastream(fds1)
|
290
290
|
@test_object.add_datastream(fds2)
|
291
291
|
@test_object.add_datastream(mds)
|
@@ -11,11 +11,11 @@ include Mocha::API
|
|
11
11
|
describe 'bugs' do
|
12
12
|
before :all do
|
13
13
|
class FooHistory < ActiveFedora::Base
|
14
|
-
has_metadata :type=>ActiveFedora::
|
14
|
+
has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"someData" do |m|
|
15
15
|
m.field "fubar", :string
|
16
16
|
m.field "swank", :text
|
17
17
|
end
|
18
|
-
has_metadata :type=>ActiveFedora::
|
18
|
+
has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"withText" do |m|
|
19
19
|
m.field "fubar", :text
|
20
20
|
end
|
21
21
|
end
|
@@ -33,22 +33,22 @@ describe 'bugs' do
|
|
33
33
|
end
|
34
34
|
it "should not clobber everything when setting a value" do
|
35
35
|
ds = @test_object.datastreams["someData"]
|
36
|
-
ds.
|
36
|
+
ds.fubar.should == []
|
37
37
|
ds.should_not be_nil
|
38
|
-
ds.
|
39
|
-
ds.
|
38
|
+
ds.fubar=['bar']
|
39
|
+
ds.fubar.should == ['bar']
|
40
40
|
@test_object.save
|
41
41
|
|
42
42
|
@test_object.pid.should_not be_nil
|
43
43
|
|
44
44
|
x = FooHistory.find(@test_object.pid)
|
45
45
|
ds2 = x.datastreams["someData"]
|
46
|
-
ds2.
|
47
|
-
ds2.
|
48
|
-
ds2.
|
46
|
+
ds2.fubar.should == ['bar']
|
47
|
+
ds2.fubar = ["meh"]
|
48
|
+
ds2.fubar.should == ["meh"]
|
49
49
|
x.save
|
50
50
|
x = FooHistory.find(@test_object.pid)
|
51
|
-
x.datastreams['someData'].
|
51
|
+
x.datastreams['someData'].fubar.should == ["meh"]
|
52
52
|
x.save
|
53
53
|
end
|
54
54
|
end
|