active-fedora 6.5.1 → 6.6.0.pre1
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.
- checksums.yaml +4 -4
- data/CONTRIBUTORS.md +1 -0
- data/README.textile +0 -6
- data/lib/active_fedora/associations/association_collection.rb +7 -2
- data/lib/active_fedora/base.rb +27 -4
- data/lib/active_fedora/delegating.rb +37 -7
- data/lib/active_fedora/querying.rb +9 -1
- data/lib/active_fedora/relation.rb +9 -2
- data/lib/active_fedora/solr_service.rb +22 -5
- data/lib/active_fedora/version.rb +1 -1
- data/spec/integration/associations_spec.rb +133 -0
- data/spec/integration/fedora_solr_sync_spec.rb +28 -0
- data/spec/integration/model_spec.rb +3 -0
- data/spec/integration/nested_attribute_spec.rb +2 -2
- data/spec/integration/ntriples_datastream_spec.rb +3 -3
- data/spec/integration/persistence_spec.rb +2 -2
- data/spec/integration/relation_delegation_spec.rb +1 -1
- data/spec/integration/scoped_query_spec.rb +1 -1
- data/spec/unit/base_active_model_spec.rb +2 -2
- data/spec/unit/base_delegate_spec.rb +14 -4
- data/spec/unit/base_delegate_to_spec.rb +1 -1
- data/spec/unit/base_spec.rb +63 -43
- data/spec/unit/callback_spec.rb +2 -2
- data/spec/unit/ntriples_datastream_spec.rb +6 -6
- data/spec/unit/query_spec.rb +9 -0
- data/spec/unit/validations_spec.rb +2 -2
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c819c53e6318b54de501b004a3a907dc223ca7f2
|
4
|
+
data.tar.gz: 9ee7ef31d8c30472b8aa37eacabb5f697bee0778
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c280347c12e3a7a13ef3b394b2c7df63bc83c49f8f5eee24a4e71565b6da615cb179a437efca408d9b3bef51987215332c5d29704394810f55ba93e2eb9a628a
|
7
|
+
data.tar.gz: 19dad27ff49953e76f6f19d7f599afe81d1df2b9badf7c849373474a44bacf903dd06352e438803652466a3c99914b65463f01753dd6952d21882a9531141b14
|
data/CONTRIBUTORS.md
CHANGED
data/README.textile
CHANGED
@@ -61,12 +61,6 @@ You need to have a copy of hydra-jetty running. To do this, download a working
|
|
61
61
|
java -jar start.jar
|
62
62
|
</pre>
|
63
63
|
|
64
|
-
Then open a new terminal, go to your ActiveFedora source directory, and import fedora's demo objects.
|
65
|
-
|
66
|
-
<pre>
|
67
|
-
rake active_fedora:fixtures environment=test
|
68
|
-
</pre>
|
69
|
-
|
70
64
|
Now you're ready to run the tests. In the directory where active_fedora is installed, run
|
71
65
|
|
72
66
|
<pre>
|
@@ -138,7 +138,7 @@ module ActiveFedora
|
|
138
138
|
end
|
139
139
|
end
|
140
140
|
rescue ObjectNotFoundError => e
|
141
|
-
logger.error "Solr and Fedora may be out of sync:\n" + e.message
|
141
|
+
ActiveFedora::Base.logger.error "Solr and Fedora may be out of sync:\n" + e.message
|
142
142
|
reset
|
143
143
|
end
|
144
144
|
end
|
@@ -150,8 +150,13 @@ module ActiveFedora
|
|
150
150
|
def find_target
|
151
151
|
return [] if @finder_query.empty?
|
152
152
|
solr_result = SolrService.query(@finder_query, :rows=>1000)
|
153
|
+
|
154
|
+
# Set the default classname to base inheritance on.
|
155
|
+
opts = {}
|
156
|
+
opts[:class] = @reflection.class_name.constantize.to_class_uri unless @reflection.class_name.nil?
|
157
|
+
|
153
158
|
#TODO, don't reify, just store the solr results and lazily reify.
|
154
|
-
return ActiveFedora::SolrService.reify_solr_results(solr_result)
|
159
|
+
return ActiveFedora::SolrService.reify_solr_results(solr_result, opts)
|
155
160
|
end
|
156
161
|
|
157
162
|
def load_from_solr
|
data/lib/active_fedora/base.rb
CHANGED
@@ -118,7 +118,7 @@ module ActiveFedora
|
|
118
118
|
## Replace existing unchanged datastreams with the definitions found in this class if they have a different type.
|
119
119
|
## Any datastream that is deleted here will cause a reload from fedora, so avoid it whenever possible
|
120
120
|
ds_specs.keys.each do |key|
|
121
|
-
if !@inner_object.datastreams[key].content_changed? && @inner_object.datastreams[key].class != self.class.ds_specs[key][:type]
|
121
|
+
if @inner_object.datastreams[key] != nil && !@inner_object.datastreams[key].content_changed? && @inner_object.datastreams[key].class != self.class.ds_specs[key][:type]
|
122
122
|
@inner_object.datastreams.delete(key)
|
123
123
|
end
|
124
124
|
end
|
@@ -286,10 +286,33 @@ module ActiveFedora
|
|
286
286
|
klass.allocate.init_with(inner_object)
|
287
287
|
end
|
288
288
|
|
289
|
-
#
|
289
|
+
# Examines the :has_model assertions in the RELS-EXT.
|
290
|
+
#
|
291
|
+
# If the object is of type ActiveFedora::Base, then use the first :has_model
|
292
|
+
# in the RELS-EXT for this object. Due to how the RDF writer works, this is
|
293
|
+
# currently just the first alphabetical model.
|
294
|
+
#
|
295
|
+
# If the object was instantiated with any other class, then use that class
|
296
|
+
# as the base of the type the user wants rather than casting to the first
|
297
|
+
# :has_model found on the object.
|
298
|
+
#
|
299
|
+
# In either case, if an extended model of that initial base model of the two
|
300
|
+
# cases above exists in the :has_model, then instantiate as that extended
|
301
|
+
# model type instead.
|
290
302
|
def adapt_to_cmodel
|
291
|
-
|
292
|
-
|
303
|
+
best_model_match = self.class unless self.instance_of? ActiveFedora::Base
|
304
|
+
|
305
|
+
ActiveFedora::ContentModel.known_models_for( self ).each do |model_value|
|
306
|
+
# If this is of type ActiveFedora::Base, then set to the first found :has_model.
|
307
|
+
best_model_match ||= model_value
|
308
|
+
|
309
|
+
# If there is an inheritance structure, use the most specific case.
|
310
|
+
if best_model_match > model_value
|
311
|
+
best_model_match = model_value
|
312
|
+
end
|
313
|
+
end
|
314
|
+
|
315
|
+
self.instance_of?(best_model_match) ? self : self.adapt_to(best_model_match)
|
293
316
|
end
|
294
317
|
|
295
318
|
# ** EXPERIMENTAL **
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module ActiveFedora
|
2
2
|
module Delegating
|
3
3
|
extend ActiveSupport::Concern
|
4
|
+
extend Deprecation
|
4
5
|
|
5
6
|
included do
|
6
7
|
after_save :clear_changed_attributes
|
@@ -53,16 +54,16 @@ module ActiveFedora
|
|
53
54
|
end
|
54
55
|
# Provides a delegate class method to expose methods in metadata streams
|
55
56
|
# as member of the base object. Pass the target datastream via the
|
56
|
-
# <tt>:to</tt> argument. If you want to return a
|
57
|
-
# instead of
|
57
|
+
# <tt>:to</tt> argument. If you want to return a multivalue result, (e.g. array
|
58
|
+
# instead of a string) set the <tt>:multiple</tt> argument to true.
|
58
59
|
#
|
59
60
|
# The optional <tt>:at</tt> argument provides a terminology that the delegate will point to.
|
60
61
|
#
|
61
62
|
# class Foo < ActiveFedora::Base
|
62
63
|
# has_metadata :name => "descMetadata", :type => MyDatastream
|
63
64
|
#
|
64
|
-
# delegate :field1, :to=>"descMetadata", :
|
65
|
-
# delegate :field2, :to=>"descMetadata", :at=>[:term1, :term2]
|
65
|
+
# delegate :field1, :to=>"descMetadata", multiple: false
|
66
|
+
# delegate :field2, :to=>"descMetadata", :at=>[:term1, :term2], multiple: true
|
66
67
|
# end
|
67
68
|
#
|
68
69
|
# foo = Foo.new
|
@@ -118,7 +119,14 @@ module ActiveFedora
|
|
118
119
|
# @param [Symbol] field the field to query
|
119
120
|
# @return [Boolean]
|
120
121
|
def unique?(field)
|
121
|
-
|
122
|
+
!multiple?(field)
|
123
|
+
end
|
124
|
+
|
125
|
+
# Reveal if the delegated field is multivalued or not
|
126
|
+
# @param [Symbol] field the field to query
|
127
|
+
# @return [Boolean]
|
128
|
+
def multiple?(field)
|
129
|
+
delegates[field][:multiple]
|
122
130
|
end
|
123
131
|
|
124
132
|
private
|
@@ -138,11 +146,33 @@ module ActiveFedora
|
|
138
146
|
end
|
139
147
|
end
|
140
148
|
|
141
|
-
|
149
|
+
if !args[:multiple].nil?
|
150
|
+
self.delegates[field][:multiple] = args[:multiple]
|
151
|
+
elsif !args[:unique].nil?
|
152
|
+
i = 0
|
153
|
+
begin
|
154
|
+
match = /in `(delegate.*)'/.match(caller[i])
|
155
|
+
i+=1
|
156
|
+
end while match.nil?
|
157
|
+
|
158
|
+
prev_method = match.captures.first
|
159
|
+
Deprecation.warn Delegating, "The :unique option for `#{prev_method}' is deprecated. Use :multiple instead. :unique will be removed in ActiveFedora 7", caller(i+1)
|
160
|
+
self.delegates[field][:multiple] = !args[:unique]
|
161
|
+
else
|
162
|
+
i = 0
|
163
|
+
begin
|
164
|
+
match = /in `(delegate.*)'/.match(caller[i])
|
165
|
+
i+=1
|
166
|
+
end while match.nil?
|
167
|
+
|
168
|
+
prev_method = match.captures.first
|
169
|
+
Deprecation.warn Delegating, "You have not explicitly set the :multiple option on `#{prev_method}'. The default value will switch from true to false in ActiveFedora 7, so if you want to future-proof this application set `multiple: true'", caller(i+ 1)
|
170
|
+
self.delegates[field][:multiple] = true # this should be false for ActiveFedora 7
|
171
|
+
end
|
142
172
|
|
143
173
|
define_method field do |*opts|
|
144
174
|
val = array_reader(field, *opts)
|
145
|
-
self.class.
|
175
|
+
self.class.multiple?(field) ? val : val.first
|
146
176
|
end
|
147
177
|
end
|
148
178
|
|
@@ -98,6 +98,10 @@ module ActiveFedora
|
|
98
98
|
'"' + value.gsub(/(:)/, '\\:').gsub(/(\/)/, '\\/').gsub(/"/, '\\"') + '"'
|
99
99
|
end
|
100
100
|
|
101
|
+
|
102
|
+
extend Deprecation
|
103
|
+
self.deprecation_horizon = 'active-fedora 7.0.0'
|
104
|
+
|
101
105
|
# Retrieve the Fedora object with the given pid, explore the returned object, determine its model
|
102
106
|
# using #{ActiveFedora::ContentModel.known_models_for} and cast to that class.
|
103
107
|
# Raises a ObjectNotFoundError if the object is not found.
|
@@ -106,7 +110,11 @@ module ActiveFedora
|
|
106
110
|
#
|
107
111
|
# @example because the object hydra:dataset1 asserts it is a Dataset (hasModel info:fedora/afmodel:Dataset), return a Dataset object (not a Book).
|
108
112
|
# Book.find_one("hydra:dataset1")
|
109
|
-
def find_one(pid, cast=
|
113
|
+
def find_one(pid, cast=nil)
|
114
|
+
if cast.nil?
|
115
|
+
cast = false
|
116
|
+
Deprecation.warn(Querying, "find_one's cast parameter will default to true", caller)
|
117
|
+
end
|
110
118
|
inner = DigitalObject.find(self, pid)
|
111
119
|
af_base = self.allocate.init_with(inner)
|
112
120
|
cast ? af_base.adapt_to_cmodel : af_base
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module ActiveFedora
|
2
2
|
class Relation
|
3
|
-
|
3
|
+
extend Deprecation
|
4
4
|
delegate :map, :each, :collect, :all?, :include?, :to => :to_a
|
5
5
|
|
6
6
|
attr_reader :loaded
|
@@ -90,7 +90,10 @@ module ActiveFedora
|
|
90
90
|
relation.order_values += args.flatten
|
91
91
|
relation
|
92
92
|
end
|
93
|
-
|
93
|
+
|
94
|
+
extend Deprecation
|
95
|
+
self.deprecation_horizon = 'active-fedora 7.0.0'
|
96
|
+
|
94
97
|
# Returns an Array of objects of the Class that +find+ is being
|
95
98
|
# called on
|
96
99
|
#
|
@@ -102,6 +105,9 @@ module ActiveFedora
|
|
102
105
|
options = args.extract_options!
|
103
106
|
|
104
107
|
# TODO is there any reason not to cast?
|
108
|
+
if !options.has_key?(:cast)
|
109
|
+
Deprecation.warn(Relation, "find's cast option will default to true", caller)
|
110
|
+
end
|
105
111
|
cast = options.delete(:cast)
|
106
112
|
if options[:sort]
|
107
113
|
# Deprecate sort sometime?
|
@@ -116,6 +122,7 @@ module ActiveFedora
|
|
116
122
|
else
|
117
123
|
case args.first
|
118
124
|
when :first, :last, :all
|
125
|
+
Deprecation.warn Relation, "ActiveFedora::Base.find(#{args.first.inspect}) is deprecated. Use ActiveFedora::Base.#{args.first} instead. This option will be removed in ActiveFedora 7", caller
|
119
126
|
send(args.first)
|
120
127
|
else
|
121
128
|
find_with_ids(args, cast)
|
@@ -51,11 +51,28 @@ module ActiveFedora
|
|
51
51
|
classname.send(method, hit[SOLR_DOCUMENT_ID])
|
52
52
|
end
|
53
53
|
|
54
|
-
def self.class_from_solr_document(hit)
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
54
|
+
def self.class_from_solr_document(hit, opts = {})
|
55
|
+
#Set the default starting point to the class specified, if available.
|
56
|
+
best_model_match = Model.from_class_uri(opts[:class]) unless opts[:class].nil?
|
57
|
+
|
58
|
+
hit[solr_name("has_model", :symbol)].each do |value|
|
59
|
+
|
60
|
+
model_value = Model.from_class_uri(value)
|
61
|
+
|
62
|
+
if model_value
|
63
|
+
|
64
|
+
# Set as the first model in case opts[:class] was nil
|
65
|
+
best_model_match ||= model_value
|
66
|
+
|
67
|
+
# If there is an inheritance structure, use the most specific case.
|
68
|
+
if best_model_match > model_value
|
69
|
+
best_model_match = model_value
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
logger.warn "Could not find a model for #{hit["id"]}, defaulting to ActiveFedora::Base" unless best_model_match
|
75
|
+
best_model_match || ActiveFedora::Base
|
59
76
|
end
|
60
77
|
|
61
78
|
# Construct a solr query for a list of pids
|
@@ -15,6 +15,9 @@ describe ActiveFedora::Base do
|
|
15
15
|
has_and_belongs_to_many :collections, :property=>:is_member_of_collection
|
16
16
|
end
|
17
17
|
|
18
|
+
class SpecialInheritedBook < Book
|
19
|
+
end
|
20
|
+
|
18
21
|
class Person < ActiveFedora::Base
|
19
22
|
end
|
20
23
|
|
@@ -35,6 +38,7 @@ describe ActiveFedora::Base do
|
|
35
38
|
Object.send(:remove_const, :Person)
|
36
39
|
Object.send(:remove_const, :Collection)
|
37
40
|
Object.send(:remove_const, :Topic)
|
41
|
+
Object.send(:remove_const, :SpecialInheritedBook)
|
38
42
|
end
|
39
43
|
|
40
44
|
describe "an unsaved instance" do
|
@@ -178,6 +182,7 @@ describe ActiveFedora::Base do
|
|
178
182
|
@topic1 = Topic.create
|
179
183
|
@topic2 = Topic.create
|
180
184
|
@book = Book.create
|
185
|
+
@special_book = SpecialInheritedBook.create
|
181
186
|
end
|
182
187
|
it "habtm should set and remove relationships bidirectionally" do
|
183
188
|
@book.topics << @topic1
|
@@ -201,9 +206,23 @@ describe ActiveFedora::Base do
|
|
201
206
|
book2.topics.count.should == 12
|
202
207
|
end
|
203
208
|
|
209
|
+
it "Should find inherited objects along with base objects" do
|
210
|
+
@book.topics << @topic1
|
211
|
+
@special_book.topics << @topic1
|
212
|
+
@topic1.books.should == [@book, @special_book]
|
213
|
+
@topic1.reload.books.should == [@book, @special_book]
|
214
|
+
end
|
215
|
+
|
216
|
+
it "Should cast found books to the correct cmodel" do
|
217
|
+
@topic1.books[0].class == Book
|
218
|
+
@topic1.books[1].class == SpecialInheritedBook
|
219
|
+
end
|
220
|
+
|
204
221
|
after do
|
205
222
|
@topic1.delete
|
206
223
|
@topic2.delete
|
224
|
+
@book.delete
|
225
|
+
@special_book.delete
|
207
226
|
end
|
208
227
|
end
|
209
228
|
end
|
@@ -282,6 +301,28 @@ describe ActiveFedora::Base do
|
|
282
301
|
end
|
283
302
|
end
|
284
303
|
|
304
|
+
describe "when dealing with inherited objects" do
|
305
|
+
before do
|
306
|
+
@library2 = Library.create
|
307
|
+
@special_book = SpecialInheritedBook.create
|
308
|
+
|
309
|
+
@book.library = @library2
|
310
|
+
@book.save
|
311
|
+
@special_book.library = @library2
|
312
|
+
@special_book.save
|
313
|
+
end
|
314
|
+
|
315
|
+
it "should cast to the most specific class for the association" do
|
316
|
+
@library2.books[0].class == Book
|
317
|
+
@library2.books[1].class == SpecialInheritedBook
|
318
|
+
end
|
319
|
+
|
320
|
+
after do
|
321
|
+
@library2.delete
|
322
|
+
@special_book.delete
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
285
326
|
after do
|
286
327
|
@library.delete
|
287
328
|
@book.delete
|
@@ -727,4 +768,96 @@ describe ActiveFedora::Base do
|
|
727
768
|
end
|
728
769
|
end
|
729
770
|
end
|
771
|
+
|
772
|
+
describe "casting inheritance additional test cases" do
|
773
|
+
describe "for habtm" do
|
774
|
+
before :all do
|
775
|
+
class SimpleObject < ActiveFedora::Base
|
776
|
+
belongs_to :simple_collection, property: :is_part_of, class_name: 'SimpleCollection'
|
777
|
+
belongs_to :complex_collection, property: :is_part_of, class_name: 'ComplexCollection'
|
778
|
+
end
|
779
|
+
|
780
|
+
class ComplexObject < SimpleObject
|
781
|
+
end
|
782
|
+
|
783
|
+
class SimpleCollection < ActiveFedora::Base
|
784
|
+
has_many :objects, property: :is_part_of, class_name: 'SimpleObject'
|
785
|
+
has_many :complex_objects, property: :is_part_of, class_name: 'ComplexObject'
|
786
|
+
end
|
787
|
+
|
788
|
+
class ComplexCollection < SimpleCollection
|
789
|
+
end
|
790
|
+
|
791
|
+
end
|
792
|
+
after :all do
|
793
|
+
Object.send(:remove_const, :SimpleObject)
|
794
|
+
Object.send(:remove_const, :ComplexObject)
|
795
|
+
Object.send(:remove_const, :SimpleCollection)
|
796
|
+
Object.send(:remove_const, :ComplexCollection)
|
797
|
+
end
|
798
|
+
|
799
|
+
describe "saving between the before and after hooks" do
|
800
|
+
before do
|
801
|
+
@simple_collection = SimpleCollection.create
|
802
|
+
@complex_collection = ComplexCollection.create
|
803
|
+
|
804
|
+
#Need to add the simpler cmodel here as currently inheritance support is read-only.
|
805
|
+
#See ActiveFedora pull request 207 on how to do this programmatically.
|
806
|
+
@complex_collection.add_relationship(:has_model, @complex_object.class.superclass.to_class_uri)
|
807
|
+
|
808
|
+
@simple_object = SimpleObject.create
|
809
|
+
@simple_object_second = SimpleObject.create
|
810
|
+
@complex_object = ComplexObject.create
|
811
|
+
|
812
|
+
#Need to add the simpler cmodel here as currently inheritance support is read-only.
|
813
|
+
#See ActiveFedora pull request 207 on how to do this programmatically.
|
814
|
+
@complex_object.add_relationship(:has_model, @complex_object.class.superclass.to_class_uri)
|
815
|
+
|
816
|
+
@simple_collection.objects = [@simple_object, @simple_object_second, @complex_object]
|
817
|
+
@simple_collection.save!
|
818
|
+
@complex_collection.objects = [@simple_object, @complex_object]
|
819
|
+
@complex_collection.save!
|
820
|
+
@complex_object.save!
|
821
|
+
@simple_object.save!
|
822
|
+
@simple_object_second.save!
|
823
|
+
end
|
824
|
+
|
825
|
+
|
826
|
+
it "casted association methods should work and return the most complex class" do
|
827
|
+
@complex_object.simple_collection.should be_instance_of SimpleCollection
|
828
|
+
@complex_object.complex_collection.should be_instance_of ComplexCollection
|
829
|
+
|
830
|
+
@simple_object.simple_collection.should be_instance_of SimpleCollection
|
831
|
+
@simple_object.complex_collection.should be_instance_of ComplexCollection
|
832
|
+
@simple_object_second.simple_collection.should be_instance_of SimpleCollection
|
833
|
+
@simple_object_second.complex_collection.should be_nil
|
834
|
+
|
835
|
+
@complex_collection.objects[0].should be_instance_of SimpleObject
|
836
|
+
@complex_collection.objects[1].should be_instance_of ComplexObject
|
837
|
+
|
838
|
+
@simple_collection.objects[0].should be_instance_of SimpleObject
|
839
|
+
@simple_collection.objects[1].should be_instance_of SimpleObject
|
840
|
+
@simple_collection.objects[2].should be_instance_of ComplexObject
|
841
|
+
|
842
|
+
end
|
843
|
+
|
844
|
+
it "specified ending relationships should ignore classes not specified" do
|
845
|
+
@complex_collection.complex_objects.length.should == 1
|
846
|
+
@complex_collection.complex_objects[0].should be_instance_of ComplexObject
|
847
|
+
@complex_collection.complex_objects[1].should be_nil
|
848
|
+
|
849
|
+
@simple_collection.complex_objects.length.should == 1
|
850
|
+
@simple_collection.complex_objects[0].should be_instance_of ComplexObject
|
851
|
+
@simple_collection.complex_objects[1].should be_nil
|
852
|
+
|
853
|
+
end
|
854
|
+
|
855
|
+
after do
|
856
|
+
@simple_object.delete
|
857
|
+
@simple_object_second.delete
|
858
|
+
@complex_object.delete
|
859
|
+
end
|
860
|
+
end
|
861
|
+
end
|
862
|
+
end
|
730
863
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'timeout'
|
3
|
+
|
4
|
+
describe "fedora_solr_sync_issues" do
|
5
|
+
before :all do
|
6
|
+
class ParentThing < ActiveFedora::Base
|
7
|
+
has_many :things, :class_name=>'ChildThing', :property=>:is_part_of
|
8
|
+
end
|
9
|
+
|
10
|
+
class ChildThing < ActiveFedora::Base
|
11
|
+
belongs_to :parent, :class_name=>'ParentThing', :property=>:is_part_of
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
after :all do
|
16
|
+
Object.send(:remove_const, :ChildThing)
|
17
|
+
Object.send(:remove_const, :ParentThing)
|
18
|
+
end
|
19
|
+
|
20
|
+
let(:parent) { ParentThing.create }
|
21
|
+
subject { ChildThing.create :parent => parent }
|
22
|
+
|
23
|
+
it "should not go into an infinite loop" do
|
24
|
+
subject.inner_object.delete
|
25
|
+
parent.reload
|
26
|
+
parent.things.should == []
|
27
|
+
end
|
28
|
+
end
|
@@ -44,6 +44,9 @@ describe ActiveFedora::Model do
|
|
44
44
|
end
|
45
45
|
describe "#find with a valid pid without cast" do
|
46
46
|
subject { ActiveFedora::Base.find(@test_instance.pid) }
|
47
|
+
before(:each) do
|
48
|
+
Deprecation.should_receive(:warn).at_least(1).times
|
49
|
+
end
|
47
50
|
it { should be_instance_of ActiveFedora::Base}
|
48
51
|
end
|
49
52
|
end
|
@@ -8,8 +8,8 @@ describe "NestedAttribute behavior" do
|
|
8
8
|
m.field "uno", :string
|
9
9
|
m.field "dos", :string
|
10
10
|
end
|
11
|
-
delegate :uno, :
|
12
|
-
delegate :dos, :
|
11
|
+
delegate :uno, to: 'someData', multiple: false
|
12
|
+
delegate :dos, to: 'someData', multiple: false
|
13
13
|
end
|
14
14
|
|
15
15
|
# base Car class, used in test for association updates and :allow_destroy flag
|
@@ -18,8 +18,8 @@ describe ActiveFedora::NtriplesRDFDatastream do
|
|
18
18
|
end
|
19
19
|
class RdfTest < ActiveFedora::Base
|
20
20
|
has_metadata :name=>'rdf', :type=>MyDatastream
|
21
|
-
delegate_to 'rdf', [:based_near, :related_url, :part, :date_uploaded]
|
22
|
-
delegate :title, :
|
21
|
+
delegate_to 'rdf', [:based_near, :related_url, :part, :date_uploaded], multiple: true
|
22
|
+
delegate :title, to: 'rdf', multiple: false
|
23
23
|
end
|
24
24
|
@subject = RdfTest.new
|
25
25
|
end
|
@@ -198,7 +198,7 @@ describe ActiveFedora::NtriplesRDFDatastream do
|
|
198
198
|
end
|
199
199
|
class Foobar < ActiveFedora::Base
|
200
200
|
has_metadata :name=>'rdf', :type=>TitleDatastream
|
201
|
-
delegate :title, :to=>'rdf'
|
201
|
+
delegate :title, :to=>'rdf', multiple: true
|
202
202
|
end
|
203
203
|
@subject = Foobar.new
|
204
204
|
@subject.title = ["title1", "title2", "title3"]
|
@@ -6,8 +6,8 @@ describe "persisting objects" do
|
|
6
6
|
has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"foo" do |m|
|
7
7
|
m.field "name", :string
|
8
8
|
end
|
9
|
-
delegate :name, :
|
10
|
-
validates :name, :
|
9
|
+
delegate :name, to: 'foo', multiple: false
|
10
|
+
validates :name, presence: true
|
11
11
|
end
|
12
12
|
end
|
13
13
|
after :all do
|
@@ -28,8 +28,8 @@ describe ActiveFedora::Base do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
has_metadata :type=>BarStream, :name=>"xmlish"
|
31
|
-
delegate :fubar, :
|
32
|
-
delegate :duck, :
|
31
|
+
delegate :fubar, to: 'withText', multiple: false
|
32
|
+
delegate :duck, to: 'xmlish', multiple: false
|
33
33
|
end
|
34
34
|
before :each do
|
35
35
|
@n = BarHistory.new()
|
@@ -12,6 +12,8 @@ describe ActiveFedora::Base do
|
|
12
12
|
end
|
13
13
|
t.donkey()
|
14
14
|
t.cow()
|
15
|
+
t.pig()
|
16
|
+
t.horse()
|
15
17
|
end
|
16
18
|
|
17
19
|
def self.xml_template
|
@@ -49,8 +51,10 @@ describe ActiveFedora::Base do
|
|
49
51
|
has_metadata :type=>BarStream2, :name=>"xmlish"
|
50
52
|
delegate :fubar, :to=>'withText', :unique=>true
|
51
53
|
delegate :donkey, :to=>'xmlish', :unique=>true
|
52
|
-
delegate :cow, :to=>'xmlish'
|
53
|
-
delegate :
|
54
|
+
delegate :cow, :to=>'xmlish' # for testing the default value of multiple
|
55
|
+
delegate :pig, :to=>'xmlish', multiple: false
|
56
|
+
delegate :horse, :to=>'xmlish', multiple: true
|
57
|
+
delegate :duck, :to=>'xmlish', :at=>[:waterfowl, :ducks], multiple: true
|
54
58
|
end
|
55
59
|
end
|
56
60
|
|
@@ -72,6 +76,9 @@ describe ActiveFedora::Base do
|
|
72
76
|
subject.donkey="Bray"
|
73
77
|
subject.donkey.should == "Bray"
|
74
78
|
subject.xmlish.term_values(:donkey).first.should == 'Bray'
|
79
|
+
|
80
|
+
subject.pig="Oink"
|
81
|
+
subject.pig.should == "Oink"
|
75
82
|
end
|
76
83
|
|
77
84
|
it "should allow passing parameters to the delegate accessor" do
|
@@ -84,6 +91,9 @@ describe ActiveFedora::Base do
|
|
84
91
|
### Metadata datastream does not appear to support multiple value setting
|
85
92
|
subject.cow=["one", "two"]
|
86
93
|
subject.cow.should == ["one", "two"]
|
94
|
+
|
95
|
+
subject.horse=["neigh", "whinny"]
|
96
|
+
subject.horse.should == ["neigh", "whinny"]
|
87
97
|
end
|
88
98
|
|
89
99
|
it "should be able to delegate deeply into the terminology" do
|
@@ -123,7 +133,7 @@ describe ActiveFedora::Base do
|
|
123
133
|
before :all do
|
124
134
|
class BarHistory2 < ActiveFedora::Base
|
125
135
|
has_metadata 'xmlish', :type=>BarStream2
|
126
|
-
delegate_to 'xmlish', [:donkey, :cow]
|
136
|
+
delegate_to 'xmlish', [:donkey, :cow], multiple: true
|
127
137
|
end
|
128
138
|
class BarHistory3 < BarHistory2
|
129
139
|
end
|
@@ -158,7 +168,7 @@ describe ActiveFedora::Base do
|
|
158
168
|
end
|
159
169
|
class BarHistory4 < ActiveFedora::Base
|
160
170
|
has_metadata 'rdfish', :type=>BarRdfDatastream
|
161
|
-
delegate_to 'rdfish', [:title, :description]
|
171
|
+
delegate_to 'rdfish', [:title, :description], multiple: true
|
162
172
|
end
|
163
173
|
end
|
164
174
|
|
@@ -37,7 +37,7 @@ describe ActiveFedora::Base do
|
|
37
37
|
|
38
38
|
class Barnyard < ActiveFedora::Base
|
39
39
|
has_metadata :type=>BarnyardDocument, :name=>"xmlish"
|
40
|
-
delegate_to :xmlish, [:cow, :chicken, :pig, :duck]
|
40
|
+
delegate_to :xmlish, [:cow, :chicken, :pig, :duck], multiple: true
|
41
41
|
delegate_to :xmlish, [:donkey, :horse], :unique=>true
|
42
42
|
#delegate :donkey, :to=>'xmlish', :unique=>true
|
43
43
|
end
|
data/spec/unit/base_spec.rb
CHANGED
@@ -28,7 +28,7 @@ describe ActiveFedora::Base do
|
|
28
28
|
end
|
29
29
|
describe "assign_pid" do
|
30
30
|
it "should use fedora to generate pids" do
|
31
|
-
# TODO: This juggling of Fedora credentials & establishing connections should be handled by an establish_fedora_connection method,
|
31
|
+
# TODO: This juggling of Fedora credentials & establishing connections should be handled by an establish_fedora_connection method,
|
32
32
|
# possibly wrap it all into a fedora_connection method - MZ 06-05-2012
|
33
33
|
stubfedora = double("Fedora")
|
34
34
|
stubfedora.should_receive(:connection).and_return(double("Connection", :mint =>"sample:newpid"))
|
@@ -125,21 +125,26 @@ describe ActiveFedora::Base do
|
|
125
125
|
has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"withText2", :label=>"withLabel", :autocreate => true do |m|
|
126
126
|
m.field "fubar", :text
|
127
127
|
end
|
128
|
-
delegate :fubar, :to=>'withText'
|
129
|
-
delegate :swank, :to=>'someData'
|
128
|
+
delegate :fubar, :to=>'withText', multiple: true
|
129
|
+
delegate :swank, :to=>'someData', multiple: true
|
130
130
|
end
|
131
131
|
class FooAdaptation < ActiveFedora::Base
|
132
132
|
has_metadata :type=>ActiveFedora::OmDatastream, :name=>'someData'
|
133
133
|
end
|
134
|
+
|
135
|
+
class FooInherited < FooHistory
|
136
|
+
|
137
|
+
end
|
134
138
|
end
|
135
139
|
|
136
140
|
after :all do
|
137
141
|
Object.send(:remove_const, :FooHistory)
|
138
142
|
Object.send(:remove_const, :FooAdaptation)
|
143
|
+
Object.send(:remove_const, :FooInherited)
|
139
144
|
end
|
140
|
-
|
145
|
+
|
141
146
|
def increment_pid
|
142
|
-
@@last_pid += 1
|
147
|
+
@@last_pid += 1
|
143
148
|
end
|
144
149
|
|
145
150
|
before(:each) do
|
@@ -161,11 +166,11 @@ describe ActiveFedora::Base do
|
|
161
166
|
|
162
167
|
|
163
168
|
describe '#new' do
|
164
|
-
it "should create an inner object" do
|
169
|
+
it "should create an inner object" do
|
165
170
|
# for doing AFObject.new(params[:foo]) when nothing is in params[:foo]
|
166
171
|
Rubydora::DigitalObject.any_instance.should_receive(:save).never
|
167
|
-
result = ActiveFedora::Base.new(nil)
|
168
|
-
result.inner_object.should be_kind_of(ActiveFedora::UnsavedDigitalObject)
|
172
|
+
result = ActiveFedora::Base.new(nil)
|
173
|
+
result.inner_object.should be_kind_of(ActiveFedora::UnsavedDigitalObject)
|
169
174
|
end
|
170
175
|
|
171
176
|
it "should not save or get an pid on init" do
|
@@ -203,7 +208,7 @@ describe ActiveFedora::Base do
|
|
203
208
|
@test_object.to_param.should == @test_object.pid
|
204
209
|
end
|
205
210
|
|
206
|
-
it "should have to_key once it's saved" do
|
211
|
+
it "should have to_key once it's saved" do
|
207
212
|
@test_object.to_key.should be_nil
|
208
213
|
@test_object.inner_object.stub(:new? => false)
|
209
214
|
@test_object.to_key.should == [@test_object.pid]
|
@@ -219,8 +224,8 @@ describe ActiveFedora::Base do
|
|
219
224
|
FooHistory.model_name.should == 'FooHistory'
|
220
225
|
FooHistory.model_name.human.should == 'Foo history'
|
221
226
|
end
|
222
|
-
### End ActiveModel::Naming
|
223
|
-
|
227
|
+
### End ActiveModel::Naming
|
228
|
+
|
224
229
|
|
225
230
|
describe ".datastreams" do
|
226
231
|
before do
|
@@ -272,7 +277,7 @@ describe ActiveFedora::Base do
|
|
272
277
|
describe '#add_relationship' do
|
273
278
|
it 'should call #add_relationship on the rels_ext datastream' do
|
274
279
|
@test_object.add_relationship("predicate", "info:fedora/object")
|
275
|
-
pred = ActiveFedora::Predicates.vocabularies["info:fedora/fedora-system:def/relations-external#"]["predicate"]
|
280
|
+
pred = ActiveFedora::Predicates.vocabularies["info:fedora/fedora-system:def/relations-external#"]["predicate"]
|
276
281
|
@test_object.relationships.should have_statement(RDF::Statement.new(RDF::URI.new(@test_object.internal_uri), pred, RDF::URI.new("info:fedora/object")))
|
277
282
|
end
|
278
283
|
|
@@ -283,7 +288,7 @@ describe ActiveFedora::Base do
|
|
283
288
|
@test_object.add_relationship(:is_member_of, "info:fedora/demo:5")
|
284
289
|
@test_object.add_relationship(:is_member_of, "info:fedora/demo:10")
|
285
290
|
end
|
286
|
-
|
291
|
+
|
287
292
|
it 'should add a relationship to an object only if it does not exist already' do
|
288
293
|
next_pid = increment_pid.to_s
|
289
294
|
ActiveFedora::Base.stub(:assign_pid).and_return(next_pid)
|
@@ -302,11 +307,11 @@ describe ActiveFedora::Base do
|
|
302
307
|
@test_object.ids_for_outbound(:conforms_to).should == ["AnInterface"]
|
303
308
|
end
|
304
309
|
end
|
305
|
-
|
310
|
+
|
306
311
|
it 'should provide #remove_relationship' do
|
307
312
|
@test_object.should respond_to(:remove_relationship)
|
308
313
|
end
|
309
|
-
|
314
|
+
|
310
315
|
describe '#remove_relationship' do
|
311
316
|
it 'should remove a relationship from the relationships hash' do
|
312
317
|
@test_object3 = ActiveFedora::Base.new()
|
@@ -333,7 +338,7 @@ describe ActiveFedora::Base do
|
|
333
338
|
describe '#relationships' do
|
334
339
|
it 'should return a graph' do
|
335
340
|
@test_object.relationships.kind_of?(RDF::Graph).should be_true
|
336
|
-
@test_object.relationships.size.should == 0
|
341
|
+
@test_object.relationships.size.should == 0
|
337
342
|
end
|
338
343
|
end
|
339
344
|
|
@@ -343,7 +348,7 @@ describe ActiveFedora::Base do
|
|
343
348
|
stub_add_ds(@this_pid, ['RELS-EXT'])
|
344
349
|
@test_object.assert_content_model
|
345
350
|
@test_object.relationships(:has_model).should == ["info:fedora/afmodel:ActiveFedora_Base"]
|
346
|
-
|
351
|
+
|
347
352
|
end
|
348
353
|
end
|
349
354
|
|
@@ -352,14 +357,14 @@ describe ActiveFedora::Base do
|
|
352
357
|
@test_object.stub(:new_record? => true)
|
353
358
|
@test_object.should_receive(:create)
|
354
359
|
@test_object.should_receive(:update_index)
|
355
|
-
@test_object.save
|
360
|
+
@test_object.save
|
356
361
|
end
|
357
362
|
|
358
363
|
it "should update an existing record" do
|
359
364
|
@test_object.stub(:new_record? => false)
|
360
365
|
@test_object.should_receive(:update_record)
|
361
366
|
@test_object.should_receive(:update_index)
|
362
|
-
@test_object.save
|
367
|
+
@test_object.save
|
363
368
|
end
|
364
369
|
end
|
365
370
|
|
@@ -370,7 +375,7 @@ describe ActiveFedora::Base do
|
|
370
375
|
FooHistory.should_receive(:new).and_return(obj)
|
371
376
|
@hist = FooHistory.create(:fubar=>'ta', :swank=>'da')
|
372
377
|
end
|
373
|
-
|
378
|
+
|
374
379
|
end
|
375
380
|
|
376
381
|
describe ".adapt_to" do
|
@@ -408,18 +413,33 @@ describe ActiveFedora::Base do
|
|
408
413
|
end
|
409
414
|
end
|
410
415
|
|
411
|
-
describe ".adapt_to_cmodel" do
|
412
|
-
subject { FooHistory.new }
|
413
|
-
|
414
|
-
|
415
|
-
subject.
|
416
|
+
describe ".adapt_to_cmodel with implemented (non-ActiveFedora::Base) cmodel" do
|
417
|
+
subject { FooHistory.new }
|
418
|
+
|
419
|
+
it "should not cast to a random first cmodel if it has a specific cmodel already" do
|
420
|
+
ActiveFedora::ContentModel.should_receive(:known_models_for).with(subject).and_return([FooAdaptation])
|
421
|
+
subject.adapt_to_cmodel.should be_kind_of FooHistory
|
422
|
+
end
|
423
|
+
it "should cast to an inherited model over a random one" do
|
424
|
+
ActiveFedora::ContentModel.should_receive(:known_models_for).with(subject).and_return([FooAdaptation, FooInherited])
|
425
|
+
subject.adapt_to_cmodel.should be_kind_of FooInherited
|
416
426
|
end
|
417
427
|
it "should not cast when a cmodel is same as the class" do
|
418
|
-
ActiveFedora::ContentModel.should_receive(:known_models_for).with(
|
428
|
+
ActiveFedora::ContentModel.should_receive(:known_models_for).with(subject).and_return([FooHistory])
|
419
429
|
subject.adapt_to_cmodel.should === subject
|
420
430
|
end
|
421
431
|
end
|
422
432
|
|
433
|
+
describe ".adapt_to_cmodel with ActiveFedora::Base" do
|
434
|
+
subject { ActiveFedora::Base.new }
|
435
|
+
|
436
|
+
it "should cast to the first cmodel if ActiveFedora::Base (or no specified cmodel)" do
|
437
|
+
ActiveFedora::ContentModel.should_receive(:known_models_for).with(subject).and_return([FooAdaptation, FooHistory])
|
438
|
+
subject.adapt_to_cmodel.should be_kind_of FooAdaptation
|
439
|
+
end
|
440
|
+
end
|
441
|
+
|
442
|
+
|
423
443
|
describe ".to_solr" do
|
424
444
|
it "should provide .to_solr" do
|
425
445
|
@test_object.should respond_to(:to_solr)
|
@@ -444,7 +464,7 @@ describe ActiveFedora::Base do
|
|
444
464
|
solr_doc["id"].should be_nil
|
445
465
|
solr_doc[ActiveFedora::SolrService.solr_name("has_part", :symbol)].should be_nil
|
446
466
|
end
|
447
|
-
|
467
|
+
|
448
468
|
it "should add self.class as the :active_fedora_model" do
|
449
469
|
stub_get(@this_pid)
|
450
470
|
stub_get_content(@this_pid, ['RELS-EXT', 'someData', 'withText2', 'withText'])
|
@@ -460,7 +480,7 @@ describe ActiveFedora::Base do
|
|
460
480
|
ngds.should_receive(:solrize_profile)
|
461
481
|
mock1.should_receive(:solrize_profile)
|
462
482
|
mock2.should_receive(:solrize_profile)
|
463
|
-
|
483
|
+
|
464
484
|
@test_object.should_receive(:datastreams).twice.and_return({:ds1 => mock1, :ds2 => mock2, :ngds => ngds})
|
465
485
|
@test_object.should_receive(:solrize_relationships)
|
466
486
|
@test_object.to_solr
|
@@ -468,7 +488,7 @@ describe ActiveFedora::Base do
|
|
468
488
|
it "should call .to_solr on all RDFDatastreams, passing the resulting document to solr" do
|
469
489
|
mock = double("ds1", :to_solr => {})
|
470
490
|
mock.should_receive(:solrize_profile)
|
471
|
-
|
491
|
+
|
472
492
|
@test_object.should_receive(:datastreams).twice.and_return({:ds1 => mock})
|
473
493
|
@test_object.should_receive(:solrize_relationships)
|
474
494
|
@test_object.to_solr
|
@@ -481,16 +501,16 @@ describe ActiveFedora::Base do
|
|
481
501
|
@test_object.should_receive(:solrize_relationships)
|
482
502
|
@test_object.to_solr
|
483
503
|
end
|
484
|
-
|
504
|
+
|
485
505
|
end
|
486
506
|
|
487
507
|
describe ".label" do
|
488
|
-
it "should return the label of the inner object" do
|
508
|
+
it "should return the label of the inner object" do
|
489
509
|
@test_object.inner_object.should_receive(:label).and_return("foo label")
|
490
510
|
@test_object.label.should == "foo label"
|
491
511
|
end
|
492
512
|
end
|
493
|
-
|
513
|
+
|
494
514
|
describe ".label=" do
|
495
515
|
it "should set the label of the inner object" do
|
496
516
|
@test_object.label.should_not == "foo label"
|
@@ -498,8 +518,8 @@ describe ActiveFedora::Base do
|
|
498
518
|
@test_object.label.should == "foo label"
|
499
519
|
end
|
500
520
|
end
|
501
|
-
|
502
|
-
|
521
|
+
|
522
|
+
|
503
523
|
describe "get_values_from_datastream" do
|
504
524
|
it "should look up the named datastream and call get_values with the given pointer/field_name" do
|
505
525
|
mock_ds = double("Datastream", :get_values=>["value1", "value2"])
|
@@ -507,13 +527,13 @@ describe ActiveFedora::Base do
|
|
507
527
|
@test_object.get_values_from_datastream("ds1", "--my xpath--").should == ["value1", "value2"]
|
508
528
|
end
|
509
529
|
end
|
510
|
-
|
530
|
+
|
511
531
|
describe "update_datastream_attributes" do
|
512
532
|
it "should look up any datastreams specified as keys in the given hash and call update_attributes on the datastream" do
|
513
533
|
mock_desc_metadata = double("descMetadata")
|
514
534
|
mock_properties = double("properties")
|
515
535
|
mock_ds_hash = {'descMetadata'=>mock_desc_metadata, 'properties'=>mock_properties}
|
516
|
-
|
536
|
+
|
517
537
|
ds_values_hash = {
|
518
538
|
"descMetadata"=>{ [{:person=>0}, :role]=>{"0"=>"role1", "1"=>"role2", "2"=>"role3"} },
|
519
539
|
"properties"=>{ "notes"=>"foo" }
|
@@ -535,12 +555,12 @@ pending "This is broken, and deprecated. I don't want to fix it - jcoyne"
|
|
535
555
|
m.to_xml.should == untouched_xml
|
536
556
|
end
|
537
557
|
end
|
538
|
-
|
558
|
+
|
539
559
|
describe "update_attributes" do
|
540
560
|
it "should set the attributes and save" do
|
541
561
|
m = FooHistory.new
|
542
562
|
att= {"fubar"=> '1234', "baz" =>'stuff'}
|
543
|
-
|
563
|
+
|
544
564
|
m.should_receive(:fubar=).with('1234')
|
545
565
|
m.should_receive(:baz=).with('stuff')
|
546
566
|
m.should_receive(:save)
|
@@ -552,14 +572,14 @@ pending "This is broken, and deprecated. I don't want to fix it - jcoyne"
|
|
552
572
|
it "should set the attributes and save" do
|
553
573
|
m = FooHistory.new
|
554
574
|
att= {"fubar"=> '1234', "baz" =>'stuff'}
|
555
|
-
|
575
|
+
|
556
576
|
m.should_receive(:fubar=).with('1234')
|
557
577
|
m.should_receive(:baz=).with('stuff')
|
558
578
|
m.should_receive(:save)
|
559
579
|
m.update(att)
|
560
580
|
end
|
561
581
|
end
|
562
|
-
|
582
|
+
|
563
583
|
describe "update_indexed_attributes" do
|
564
584
|
before do
|
565
585
|
Deprecation.should_receive(:warn).at_least(1).times
|
@@ -567,13 +587,13 @@ pending "This is broken, and deprecated. I don't want to fix it - jcoyne"
|
|
567
587
|
it "should call .update_indexed_attributes on all metadata datastreams & nokogiri datastreams" do
|
568
588
|
m = FooHistory.new
|
569
589
|
att= {"fubar"=>{"-1"=>"mork", "0"=>"york", "1"=>"mangle"}}
|
570
|
-
|
590
|
+
|
571
591
|
m.datastreams['someData'].should_receive(:update_indexed_attributes)
|
572
592
|
m.datastreams["withText"].should_receive(:update_indexed_attributes)
|
573
593
|
m.datastreams['withText2'].should_receive(:update_indexed_attributes)
|
574
594
|
m.update_indexed_attributes(att)
|
575
595
|
end
|
576
|
-
it "should take a :datastreams argument" do
|
596
|
+
it "should take a :datastreams argument" do
|
577
597
|
att= {"fubar"=>{"-1"=>"mork", "0"=>"york", "1"=>"mangle"}}
|
578
598
|
stub_get(@this_pid)
|
579
599
|
stub_get_content(@this_pid, ['RELS-EXT', 'someData', 'withText2', 'withText'])
|
@@ -583,7 +603,7 @@ pending "This is broken, and deprecated. I don't want to fix it - jcoyne"
|
|
583
603
|
m.datastreams['someData'].fubar.should == []
|
584
604
|
m.datastreams["withText"].fubar.should == ['mork', 'york', 'mangle']
|
585
605
|
m.datastreams['withText2'].fubar.should == []
|
586
|
-
|
606
|
+
|
587
607
|
att= {"fubar"=>{"-1"=>"tork", "0"=>"work", "1"=>"bork"}}
|
588
608
|
m.update_indexed_attributes(att, :datastreams=>["someData", "withText2"])
|
589
609
|
m.should_not be_nil
|
data/spec/unit/callback_spec.rb
CHANGED
@@ -7,8 +7,8 @@ describe ActiveFedora::Base do
|
|
7
7
|
m.field "fubar", :string
|
8
8
|
m.field "swank", :text
|
9
9
|
end
|
10
|
-
delegate :fubar, :to=>'someData'
|
11
|
-
delegate :swank, :to=>'someData'
|
10
|
+
delegate :fubar, :to=>'someData', multiple: true
|
11
|
+
delegate :swank, :to=>'someData', multiple: true
|
12
12
|
|
13
13
|
after_initialize :a_init
|
14
14
|
before_save :b_save
|
@@ -200,12 +200,12 @@ describe ActiveFedora::NtriplesRDFDatastream do
|
|
200
200
|
before(:each) do
|
201
201
|
class Foo < ActiveFedora::Base
|
202
202
|
has_metadata :name => "descMetadata", :type => MyDatastream
|
203
|
-
delegate :created, :to => :descMetadata
|
204
|
-
delegate :title, :to => :descMetadata
|
205
|
-
delegate :publisher, :to => :descMetadata
|
206
|
-
delegate :based_near, :to => :descMetadata
|
207
|
-
delegate :related_url, :to => :descMetadata
|
208
|
-
delegate :rights, :to => :descMetadata
|
203
|
+
delegate :created, :to => :descMetadata, multiple: true
|
204
|
+
delegate :title, :to => :descMetadata, multiple: true
|
205
|
+
delegate :publisher, :to => :descMetadata, multiple: true
|
206
|
+
delegate :based_near, :to => :descMetadata, multiple: true
|
207
|
+
delegate :related_url, :to => :descMetadata, multiple: true
|
208
|
+
delegate :rights, :to => :descMetadata, multiple: true
|
209
209
|
end
|
210
210
|
@obj = MyDatastream.new(@inner_object, 'solr_rdf')
|
211
211
|
repository = double()
|
data/spec/unit/query_spec.rb
CHANGED
@@ -15,6 +15,15 @@ describe ActiveFedora::Base do
|
|
15
15
|
Object.send(:remove_const, :SpecModel)
|
16
16
|
end
|
17
17
|
|
18
|
+
describe '#find_one' do
|
19
|
+
it 'should notify of deprecation if no cast parameter is passed' do
|
20
|
+
Deprecation.should_receive(:warn).at_least(1).times
|
21
|
+
expect {
|
22
|
+
ActiveFedora::Base.find_one('_PID_')
|
23
|
+
}.to raise_error(ActiveFedora::ObjectNotFoundError)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
18
27
|
describe '#find' do
|
19
28
|
describe "without :cast" do
|
20
29
|
describe ":all" do
|
@@ -7,8 +7,8 @@ describe ActiveFedora::Base do
|
|
7
7
|
m.field "fubar", :string
|
8
8
|
m.field "swank", :text
|
9
9
|
end
|
10
|
-
delegate :fubar, :to=>'someData'
|
11
|
-
delegate :swank, :to=>'someData',
|
10
|
+
delegate :fubar, :to=>'someData', multiple: true
|
11
|
+
delegate :swank, :to=>'someData', multiple: false
|
12
12
|
|
13
13
|
validates_presence_of :fubar
|
14
14
|
validates_length_of :swank, :minimum=>5
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active-fedora
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.6.0.pre1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Zumwalt
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-09-
|
13
|
+
date: 2013-09-27 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rsolr
|
@@ -422,6 +422,7 @@ files:
|
|
422
422
|
- spec/integration/datastreams_spec.rb
|
423
423
|
- spec/integration/delegating_spec.rb
|
424
424
|
- spec/integration/delete_all_spec.rb
|
425
|
+
- spec/integration/fedora_solr_sync_spec.rb
|
425
426
|
- spec/integration/full_featured_model_spec.rb
|
426
427
|
- spec/integration/has_many_associations_spec.rb
|
427
428
|
- spec/integration/model_spec.rb
|
@@ -549,12 +550,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
549
550
|
version: 1.9.3
|
550
551
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
551
552
|
requirements:
|
552
|
-
- - '
|
553
|
+
- - '>'
|
553
554
|
- !ruby/object:Gem::Version
|
554
|
-
version:
|
555
|
+
version: 1.3.1
|
555
556
|
requirements: []
|
556
557
|
rubyforge_project:
|
557
|
-
rubygems_version: 2.0.
|
558
|
+
rubygems_version: 2.0.5
|
558
559
|
signing_key:
|
559
560
|
specification_version: 4
|
560
561
|
summary: A convenience libary for manipulating documents in the Fedora Repository.
|
@@ -586,6 +587,7 @@ test_files:
|
|
586
587
|
- spec/integration/datastreams_spec.rb
|
587
588
|
- spec/integration/delegating_spec.rb
|
588
589
|
- spec/integration/delete_all_spec.rb
|
590
|
+
- spec/integration/fedora_solr_sync_spec.rb
|
589
591
|
- spec/integration/full_featured_model_spec.rb
|
590
592
|
- spec/integration/has_many_associations_spec.rb
|
591
593
|
- spec/integration/model_spec.rb
|