active-fedora 4.3.0 → 4.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +30 -34
- data/History.txt +8 -0
- data/active-fedora.gemspec +1 -5
- data/lib/active_fedora/base.rb +6 -6
- data/lib/active_fedora/datastream.rb +17 -4
- data/lib/active_fedora/model.rb +43 -24
- data/lib/active_fedora/nokogiri_datastream.rb +12 -3
- data/lib/active_fedora/rels_ext_datastream.rb +4 -0
- data/lib/active_fedora/version.rb +1 -1
- data/spec/integration/base_spec.rb +2 -2
- data/spec/integration/full_featured_model_spec.rb +3 -3
- data/spec/integration/nokogiri_datastream_spec.rb +15 -1
- data/spec/integration/rels_ext_datastream_spec.rb +4 -4
- data/spec/unit/datastream_spec.rb +2 -2
- data/spec/unit/model_spec.rb +12 -2
- data/spec/unit/nokogiri_datastream_spec.rb +2 -1
- data/spec/unit/solr_config_options_spec.rb +7 -7
- metadata +6 -70
data/Gemfile.lock
CHANGED
@@ -1,42 +1,38 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
active-fedora (4.
|
4
|
+
active-fedora (4.4.0)
|
5
5
|
activeresource (>= 3.0.0)
|
6
6
|
activesupport (>= 3.0.0)
|
7
7
|
equivalent-xml
|
8
8
|
mediashelf-loggable
|
9
|
-
mime-types (>= 1.16)
|
10
|
-
multipart-post
|
11
|
-
nokogiri
|
12
9
|
om (~> 1.6.0)
|
13
10
|
rdf
|
14
11
|
rdf-rdfxml (~> 0.3.8)
|
15
12
|
rsolr
|
16
|
-
rubydora (~> 0.5.
|
13
|
+
rubydora (~> 0.5.10)
|
17
14
|
solrizer (~> 1.2.0)
|
18
|
-
xml-simple (>= 1.0.12)
|
19
15
|
|
20
16
|
GEM
|
21
17
|
remote: http://rubygems.org/
|
22
18
|
specs:
|
23
19
|
RedCloth (4.2.9)
|
24
|
-
activemodel (3.2.
|
25
|
-
activesupport (= 3.2.
|
20
|
+
activemodel (3.2.6)
|
21
|
+
activesupport (= 3.2.6)
|
26
22
|
builder (~> 3.0.0)
|
27
|
-
activeresource (3.2.
|
28
|
-
activemodel (= 3.2.
|
29
|
-
activesupport (= 3.2.
|
30
|
-
activesupport (3.2.
|
23
|
+
activeresource (3.2.6)
|
24
|
+
activemodel (= 3.2.6)
|
25
|
+
activesupport (= 3.2.6)
|
26
|
+
activesupport (3.2.6)
|
31
27
|
i18n (~> 0.6)
|
32
28
|
multi_json (~> 1.0)
|
33
29
|
addressable (2.2.8)
|
34
|
-
akami (1.
|
30
|
+
akami (1.2.0)
|
35
31
|
gyoku (>= 0.4.0)
|
36
|
-
nokogiri (>= 1.
|
32
|
+
nokogiri (>= 1.4.0)
|
37
33
|
backports (2.6.1)
|
38
34
|
builder (3.0.0)
|
39
|
-
childprocess (0.3.
|
35
|
+
childprocess (0.3.3)
|
40
36
|
ffi (~> 1.0.6)
|
41
37
|
columnize (0.3.6)
|
42
38
|
daemons (1.1.8)
|
@@ -45,12 +41,12 @@ GEM
|
|
45
41
|
nokogiri (>= 1.4.3)
|
46
42
|
fastercsv (1.5.5)
|
47
43
|
ffi (1.0.11)
|
48
|
-
gyoku (0.4.
|
44
|
+
gyoku (0.4.6)
|
49
45
|
builder (>= 2.1.2)
|
50
|
-
httpi (1.
|
46
|
+
httpi (1.1.0)
|
51
47
|
rack
|
52
48
|
i18n (0.6.0)
|
53
|
-
jettywrapper (1.
|
49
|
+
jettywrapper (1.3.0)
|
54
50
|
activesupport (>= 3.0.0)
|
55
51
|
childprocess
|
56
52
|
i18n
|
@@ -61,21 +57,20 @@ GEM
|
|
61
57
|
logger (1.2.8)
|
62
58
|
mediashelf-loggable (0.4.9)
|
63
59
|
metaclass (0.0.1)
|
64
|
-
mime-types (1.
|
60
|
+
mime-types (1.19)
|
65
61
|
mocha (0.10.5)
|
66
62
|
metaclass (~> 0.0.1)
|
67
|
-
multi_json (1.3.
|
68
|
-
|
69
|
-
nokogiri (1.5.3)
|
63
|
+
multi_json (1.3.6)
|
64
|
+
nokogiri (1.5.5)
|
70
65
|
nori (1.1.0)
|
71
|
-
om (1.6.
|
66
|
+
om (1.6.1)
|
72
67
|
mediashelf-loggable
|
73
68
|
nokogiri (>= 1.4.2)
|
74
69
|
rack (1.4.1)
|
75
70
|
rake (0.9.2.2)
|
76
71
|
rbx-require-relative (0.0.9)
|
77
72
|
rcov (1.0.0)
|
78
|
-
rdf (0.3.
|
73
|
+
rdf (0.3.7)
|
79
74
|
addressable (>= 2.2.6)
|
80
75
|
rdf-rdfxml (0.3.8)
|
81
76
|
rdf (>= 0.3.4)
|
@@ -101,7 +96,7 @@ GEM
|
|
101
96
|
ruby-debug-base (~> 0.10.4.0)
|
102
97
|
ruby-debug-base (0.10.4)
|
103
98
|
linecache (>= 0.3)
|
104
|
-
rubydora (0.5.
|
99
|
+
rubydora (0.5.10)
|
105
100
|
activemodel
|
106
101
|
activesupport
|
107
102
|
fastercsv
|
@@ -109,14 +104,14 @@ GEM
|
|
109
104
|
nokogiri
|
110
105
|
rest-client
|
111
106
|
savon
|
112
|
-
savon (
|
113
|
-
akami (~> 1.
|
107
|
+
savon (1.1.0)
|
108
|
+
akami (~> 1.2.0)
|
114
109
|
builder (>= 2.1.2)
|
115
|
-
gyoku (
|
116
|
-
httpi (~> 1.0)
|
110
|
+
gyoku (~> 0.4.5)
|
111
|
+
httpi (~> 1.1.0)
|
117
112
|
nokogiri (>= 1.4.0)
|
118
|
-
nori (~> 1.1)
|
119
|
-
wasabi (~> 2.
|
113
|
+
nori (~> 1.1.0)
|
114
|
+
wasabi (~> 2.5.0)
|
120
115
|
simplecov (0.6.4)
|
121
116
|
multi_json (~> 1.0)
|
122
117
|
simplecov-html (~> 0.5.3)
|
@@ -130,11 +125,12 @@ GEM
|
|
130
125
|
om (>= 1.5.0)
|
131
126
|
stomp
|
132
127
|
xml-simple
|
133
|
-
stomp (1.2.
|
134
|
-
wasabi (2.
|
128
|
+
stomp (1.2.4)
|
129
|
+
wasabi (2.5.0)
|
130
|
+
httpi (~> 1.0)
|
135
131
|
nokogiri (>= 1.4.0)
|
136
132
|
xml-simple (1.1.1)
|
137
|
-
yard (0.8.1)
|
133
|
+
yard (0.8.2.1)
|
138
134
|
|
139
135
|
PLATFORMS
|
140
136
|
ruby
|
data/History.txt
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
4.4.0
|
2
|
+
Updated gem dependencies
|
3
|
+
Deprecated #find_by_solr()
|
4
|
+
Added compatibility with Rubydora 0.5.10
|
5
|
+
HYDRA-833 find_by_conditions should accept conditions as a string or a hash
|
6
|
+
HYDRA-696 ActiveModel::Dirty to track @ng_xml
|
7
|
+
HYDRA-830: Parsing has_model_s for model name
|
8
|
+
|
1
9
|
4.3.0
|
2
10
|
Added the #delegate_to method for easier delegation of multiple terms to the same datastream.
|
3
11
|
Deprecated AF::Base#file_streams
|
data/active-fedora.gemspec
CHANGED
@@ -16,17 +16,13 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.rubygems_version = %q{1.3.7}
|
17
17
|
|
18
18
|
s.add_dependency('rsolr')
|
19
|
-
s.add_dependency('xml-simple', '>= 1.0.12')
|
20
|
-
s.add_dependency('mime-types', '>= 1.16')
|
21
|
-
s.add_dependency('multipart-post')
|
22
|
-
s.add_dependency('nokogiri')
|
23
19
|
s.add_dependency('om', '~> 1.6.0')
|
24
20
|
s.add_dependency('solrizer', '~>1.2.0')
|
25
21
|
s.add_dependency("activeresource", '>= 3.0.0')
|
26
22
|
s.add_dependency("activesupport", '>= 3.0.0')
|
27
23
|
s.add_dependency("mediashelf-loggable")
|
28
24
|
s.add_dependency("equivalent-xml")
|
29
|
-
s.add_dependency("rubydora", '~>0.5.
|
25
|
+
s.add_dependency("rubydora", '~>0.5.10')
|
30
26
|
s.add_dependency("rdf")
|
31
27
|
s.add_dependency("rdf-rdfxml", '~>0.3.8')
|
32
28
|
s.add_development_dependency("yard")
|
data/lib/active_fedora/base.rb
CHANGED
@@ -102,7 +102,7 @@ module ActiveFedora
|
|
102
102
|
## Replace existing unchanged datastreams with the definitions found in this class if they have a different type.
|
103
103
|
## Any datastream that is deleted here will cause a reload from fedora, so avoid it whenever possible
|
104
104
|
ds_specs.keys.each do |key|
|
105
|
-
if !@inner_object.datastreams[key].changed.include?(
|
105
|
+
if !@inner_object.datastreams[key].changed.include?('content') && @inner_object.datastreams[key].class != self.class.ds_specs[key][:type]
|
106
106
|
@inner_object.datastreams.delete(key)
|
107
107
|
end
|
108
108
|
end
|
@@ -165,7 +165,6 @@ module ActiveFedora
|
|
165
165
|
rels = Nokogiri::XML( rels_ext.content)
|
166
166
|
rels.xpath("//rdf:Description/@rdf:about").first.value = new_object.internal_uri
|
167
167
|
new_object.rels_ext.content = rels.to_xml
|
168
|
-
new_object.rels_ext.dirty = false
|
169
168
|
|
170
169
|
datastreams.each do |k, v|
|
171
170
|
next if k == 'RELS-EXT'
|
@@ -389,16 +388,17 @@ module ActiveFedora
|
|
389
388
|
# be loaded and if needed you should use find instead.
|
390
389
|
def self.load_instance_from_solr(pid,solr_doc=nil)
|
391
390
|
if solr_doc.nil?
|
392
|
-
result =
|
393
|
-
raise ActiveFedora::ObjectNotFoundError, "Object #{pid} not found in solr" if result.
|
391
|
+
result = find_with_conditions(:id=>pid)
|
392
|
+
raise ActiveFedora::ObjectNotFoundError, "Object #{pid} not found in solr" if result.empty?
|
394
393
|
solr_doc = result.first
|
395
394
|
#double check pid and id in record match
|
396
395
|
raise ActiveFedora::ObjectNotFoundError, "Object #{pid} not found in Solr" unless !result.nil? && !solr_doc.nil? && pid == solr_doc[SOLR_DOCUMENT_ID]
|
397
396
|
else
|
398
397
|
raise "Solr document record id and pid do not match" unless pid == solr_doc[SOLR_DOCUMENT_ID]
|
399
398
|
end
|
400
|
-
klass = if class_str = solr_doc['
|
401
|
-
|
399
|
+
klass = if class_str = solr_doc['has_model_s']
|
400
|
+
# Parse RDF string "info:fedora/afmodel:ActiveFedora_Base"
|
401
|
+
class_str.first.split(/:/).last.gsub(/_/,"::").constantize
|
402
402
|
else
|
403
403
|
ActiveFedora::Base
|
404
404
|
end
|
@@ -4,13 +4,12 @@ module ActiveFedora
|
|
4
4
|
class Datastream < Rubydora::Datastream
|
5
5
|
|
6
6
|
attr_writer :digital_object
|
7
|
-
attr_accessor :
|
7
|
+
attr_accessor :last_modified, :fields
|
8
8
|
before_create :add_mime_type, :add_ds_location, :validate_content_present
|
9
9
|
|
10
10
|
def initialize(digital_object, dsid, options={})
|
11
11
|
## When you use the versions feature of rubydora (0.5.x), you need to have a 3 argument constructor
|
12
12
|
self.fields={}
|
13
|
-
self.dirty = false
|
14
13
|
super
|
15
14
|
end
|
16
15
|
|
@@ -39,8 +38,23 @@ module ActiveFedora
|
|
39
38
|
end
|
40
39
|
|
41
40
|
# Test whether this datastream been modified since it was last saved
|
41
|
+
# Deprecated
|
42
42
|
def dirty?
|
43
|
-
|
43
|
+
changed?
|
44
|
+
end
|
45
|
+
|
46
|
+
# Deprecated
|
47
|
+
def dirty
|
48
|
+
changed?
|
49
|
+
end
|
50
|
+
|
51
|
+
# Deprecated
|
52
|
+
def dirty=(value)
|
53
|
+
if value
|
54
|
+
lastModifiedDate_will_change! # an innocent hack to pretend something has changed
|
55
|
+
else
|
56
|
+
changed_attributes.clear
|
57
|
+
end
|
44
58
|
end
|
45
59
|
|
46
60
|
def new_object?
|
@@ -84,7 +98,6 @@ module ActiveFedora
|
|
84
98
|
# @param [ActiveFedora::Datastream] tmpl the Datastream object that you are building
|
85
99
|
# @param [Nokogiri::XML::Node] node the "foxml:datastream" node from a FOXML file
|
86
100
|
def self.from_xml(tmpl, node)
|
87
|
-
tmpl.instance_variable_set(:@dirty, false)
|
88
101
|
tmpl.controlGroup= node['CONTROL_GROUP']
|
89
102
|
tmpl
|
90
103
|
end
|
data/lib/active_fedora/model.rb
CHANGED
@@ -178,10 +178,9 @@ module ActiveFedora
|
|
178
178
|
# Get a count of the number of objects from solr
|
179
179
|
# Takes :conditions as an argument
|
180
180
|
def count(args = {})
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
SolrService.query(q, :raw=>true, :rows=>0)['response']['numFound']
|
181
|
+
q = search_model_clause
|
182
|
+
q << " AND #{args[:conditions]}" if args[:conditions]
|
183
|
+
SolrService.query(q, :raw=>true, :rows=>0)['response']['numFound']
|
185
184
|
end
|
186
185
|
|
187
186
|
#@deprecated
|
@@ -191,7 +190,7 @@ module ActiveFedora
|
|
191
190
|
SolrService.instance.conn.query(query, args)
|
192
191
|
end
|
193
192
|
|
194
|
-
|
193
|
+
# @deprecated
|
195
194
|
# If query is :all, this method will query Solr for all instances
|
196
195
|
# of self.type (based on active_fedora_model_s as indexed
|
197
196
|
# by Solr). If the query is any other string, this method simply does
|
@@ -203,6 +202,7 @@ module ActiveFedora
|
|
203
202
|
# Args is an options hash, which is passed into the SolrService
|
204
203
|
# connection instance.
|
205
204
|
def find_by_solr(query, args={})
|
205
|
+
ActiveSupport::Deprecation.warn("find_by_fields_by_solr is deprecated and will be removed in 5.0. Use find_with_conditions instead.")
|
206
206
|
if query == :all
|
207
207
|
escaped_class_name = self.name.gsub(/(:)/, '\\:')
|
208
208
|
SolrService.query("#{ActiveFedora::SolrService.solr_name(:active_fedora_model, :symbol)}:#{escaped_class_name}", args)
|
@@ -229,7 +229,7 @@ module ActiveFedora
|
|
229
229
|
# :field_list => array, defaults to ["*", "score"]
|
230
230
|
#
|
231
231
|
def find_by_fields_by_solr(query_fields,opts={})
|
232
|
-
ActiveSupport::Deprecation.warn("find_by_fields_by_solr is deprecated and will be removed in
|
232
|
+
ActiveSupport::Deprecation.warn("find_by_fields_by_solr is deprecated and will be removed in 5.0")
|
233
233
|
#create solr_args from fields passed in, needs to be comma separated list of form field1=value1,field2=value2,...
|
234
234
|
escaped_class_name = self.name.gsub(/(:)/, '\\:')
|
235
235
|
query = "#{ActiveFedora::SolrService.solr_name(:active_fedora_model, :symbol)}:#{escaped_class_name}"
|
@@ -300,25 +300,46 @@ module ActiveFedora
|
|
300
300
|
end
|
301
301
|
|
302
302
|
# Returns a solr result matching the supplied conditions
|
303
|
-
# @param[Hash] conditions
|
303
|
+
# @param[Hash,String] conditions can either be specified as a string, or
|
304
|
+
# hash representing the query part of an solr statement. If a hash is
|
305
|
+
# provided, this method will generate conditions based simple equality
|
306
|
+
# combined using the boolean AND operator.
|
304
307
|
# @param[Hash] options
|
305
308
|
# @option opts [Array] :sort a list of fields to sort by
|
306
309
|
# @option opts [Array] :rows number of rows to return
|
307
310
|
def find_with_conditions(conditions, opts={})
|
308
|
-
query = create_query(conditions)
|
309
311
|
#set default sort to created date ascending
|
310
312
|
unless opts.include?(:sort)
|
311
313
|
opts[:sort]=[ActiveFedora::SolrService.solr_name(:system_create,:date)+' asc']
|
312
314
|
end
|
313
|
-
SolrService.query(
|
315
|
+
SolrService.query(create_query(conditions), opts)
|
314
316
|
end
|
315
317
|
|
316
|
-
|
318
|
+
def quote_for_solr(value)
|
319
|
+
'"' + value.gsub(/(:)/, '\\:').gsub(/"/, '\\"') + '"'
|
320
|
+
end
|
321
|
+
|
322
|
+
# @deprecated
|
323
|
+
def class_fields
|
324
|
+
#create dummy object that is empty by passing in fake pid
|
325
|
+
object = self.new()#{:pid=>'FAKE'})
|
326
|
+
fields = object.fields
|
327
|
+
#reset id to nothing
|
328
|
+
fields[:id][:values] = []
|
329
|
+
return fields
|
330
|
+
end
|
331
|
+
|
332
|
+
private
|
333
|
+
|
317
334
|
# Returns a solr query for the supplied conditions
|
318
335
|
# @param[Hash] conditions solr conditions to match
|
319
336
|
def create_query(conditions)
|
320
|
-
|
321
|
-
|
337
|
+
return '' unless conditions
|
338
|
+
conditions.kind_of?(Hash) ? create_query_from_hash(conditions) : create_query_from_string(conditions)
|
339
|
+
end
|
340
|
+
|
341
|
+
def create_query_from_hash(conditions)
|
342
|
+
clauses = [search_model_clause]
|
322
343
|
conditions.each_pair do |key,value|
|
323
344
|
unless value.nil?
|
324
345
|
if value.is_a? Array
|
@@ -333,24 +354,22 @@ module ActiveFedora
|
|
333
354
|
end
|
334
355
|
end
|
335
356
|
|
336
|
-
clauses.join(" AND ")
|
357
|
+
clauses.compact.join(" AND ")
|
337
358
|
end
|
338
359
|
|
339
|
-
def
|
340
|
-
|
360
|
+
def create_query_from_string(conditions)
|
361
|
+
model_clause = search_model_clause
|
362
|
+
model_clause ? "#{model_clause} AND (#{conditions})" : conditions
|
341
363
|
end
|
342
364
|
|
343
|
-
|
344
|
-
def
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
fields[:id][:values] = []
|
350
|
-
return fields
|
365
|
+
# Return the solr clause that queries for this type of class
|
366
|
+
def search_model_clause
|
367
|
+
unless self == ActiveFedora::Base
|
368
|
+
escaped_class_uri = SolrService.escape_uri_for_query(self.to_class_uri)
|
369
|
+
return "#{ActiveFedora::SolrService.solr_name(:has_model, :symbol)}:#{escaped_class_uri}"
|
370
|
+
end
|
351
371
|
end
|
352
372
|
|
353
|
-
private
|
354
373
|
# Retrieve the Fedora object with the given pid, explore the returned object, determine its model
|
355
374
|
# using #{ActiveFedora::ContentModel.known_models_for} and cast to that class.
|
356
375
|
# Raises a ObjectNotFoundError if the object is not found.
|
@@ -41,7 +41,6 @@ module ActiveFedora
|
|
41
41
|
|
42
42
|
def ng_xml
|
43
43
|
@ng_xml ||= begin
|
44
|
-
self.dirty = false
|
45
44
|
self.xml_loaded = true
|
46
45
|
|
47
46
|
if new?
|
@@ -54,8 +53,8 @@ module ActiveFedora
|
|
54
53
|
end
|
55
54
|
|
56
55
|
def ng_xml=(new_xml)
|
56
|
+
ng_xml_will_change!
|
57
57
|
self.xml_loaded=true
|
58
|
-
self.dirty = true
|
59
58
|
case new_xml
|
60
59
|
when Nokogiri::XML::Document
|
61
60
|
@ng_xml = new_xml
|
@@ -68,6 +67,16 @@ module ActiveFedora
|
|
68
67
|
end
|
69
68
|
end
|
70
69
|
|
70
|
+
# don't want content eagerly loaded by proxy, so implementing methods that would be implemented by define_attribute_methods
|
71
|
+
def ng_xml_will_change!
|
72
|
+
changed_attributes['ng_xml'] = nil
|
73
|
+
end
|
74
|
+
|
75
|
+
# don't want content eagerly loaded by proxy, so implementing methods that would be implemented by define_attribute_methods
|
76
|
+
def ng_xml_changed?
|
77
|
+
changed_attributes.has_key? 'ng_xml'
|
78
|
+
end
|
79
|
+
|
71
80
|
def content=(content)
|
72
81
|
super
|
73
82
|
self.xml_loaded=true
|
@@ -343,8 +352,8 @@ module ActiveFedora
|
|
343
352
|
if @internal_solr_doc
|
344
353
|
raise "No update performed, this object was initialized via Solr instead of Fedora and is therefore read-only. Please utilize ActiveFedora::Base.find to first load object via Fedora instead."
|
345
354
|
else
|
355
|
+
ng_xml_will_change!
|
346
356
|
result = om_update_values(params)
|
347
|
-
self.dirty= true
|
348
357
|
return result
|
349
358
|
end
|
350
359
|
end
|
@@ -420,10 +420,10 @@ describe ActiveFedora::Base do
|
|
420
420
|
|
421
421
|
it "should delete the object from Fedora and Solr" do
|
422
422
|
@test_object.save
|
423
|
-
ActiveFedora::Base.
|
423
|
+
ActiveFedora::Base.find_with_conditions(:id=>@test_object.pid).first["id"].should == @test_object.pid
|
424
424
|
pid = @test_object.pid # store so we can access it after deletion
|
425
425
|
@test_object.delete
|
426
|
-
ActiveFedora::Base.
|
426
|
+
ActiveFedora::Base.find_with_conditions(:id=>pid).should be_empty
|
427
427
|
end
|
428
428
|
|
429
429
|
describe '#delete' do
|
@@ -148,7 +148,7 @@ describe ActiveFedora::Base do
|
|
148
148
|
|
149
149
|
@test_history.save
|
150
150
|
|
151
|
-
@solr_result = OralHistory.
|
151
|
+
@solr_result = OralHistory.find_with_conditions(:id=>@test_history.pid)[0]
|
152
152
|
@properties_sample_values.each_pair do |field, value|
|
153
153
|
next if field == :hard_copy_availability #FIXME HYDRA-824
|
154
154
|
next if field == :location #FIXME HYDRA-825
|
@@ -172,8 +172,8 @@ describe ActiveFedora::Base do
|
|
172
172
|
|
173
173
|
end
|
174
174
|
|
175
|
-
it "should support #
|
176
|
-
solr_result = OralHistory.
|
175
|
+
it "should support #find_with_conditions" do
|
176
|
+
solr_result = OralHistory.find_with_conditions({})
|
177
177
|
solr_result.should_not be_nil
|
178
178
|
end
|
179
179
|
|
@@ -19,7 +19,7 @@ describe ActiveFedora::NokogiriDatastream do
|
|
19
19
|
describe '.term_values' do
|
20
20
|
before do
|
21
21
|
@pid = "hydrangea:fixture_mods_article1"
|
22
|
-
@test_solr_object =
|
22
|
+
@test_solr_object = ActiveFedora::Base.load_instance_from_solr(@pid)
|
23
23
|
@test_object = HydrangeaArticle2.find(@pid)
|
24
24
|
end
|
25
25
|
|
@@ -52,4 +52,18 @@ describe ActiveFedora::NokogiriDatastream do
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
+
describe '.update_values' do
|
56
|
+
before do
|
57
|
+
@pid = "hydrangea:fixture_mods_article1"
|
58
|
+
@test_object = HydrangeaArticle2.find(@pid)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should not be dirty after .update_values is saved" do
|
62
|
+
@test_object.datastreams["descMetadata"].update_values([{:name=>0},{:role=>0},:text] =>"Funder")
|
63
|
+
@test_object.datastreams["descMetadata"].dirty?.should be_true
|
64
|
+
@test_object.save
|
65
|
+
@test_object.datastreams["descMetadata"].dirty?.should be_false
|
66
|
+
@test_object.datastreams["descMetadata"].term_values({:name=>0},{:role=>0},:text).should == ["Funder"]
|
67
|
+
end
|
68
|
+
end
|
55
69
|
end
|
@@ -114,16 +114,16 @@ describe ActiveFedora::RelsExtDatastream do
|
|
114
114
|
model_rel = MockAFRelsSolr.to_class_uri
|
115
115
|
#check inbound correct, testing goes to :has_part and testing2 goes to :has_member
|
116
116
|
#get solr doc for @test_object2
|
117
|
-
solr_doc = MockAFRelsSolr.
|
117
|
+
solr_doc = MockAFRelsSolr.find_with_conditions(:id=>@test_object2.pid).first
|
118
118
|
test_from_solr_object2 = MockAFRelsSolr.new
|
119
119
|
test_from_solr_object2.rels_ext.from_solr(solr_doc)
|
120
|
-
solr_doc = MockAFRelsSolr.
|
120
|
+
solr_doc = MockAFRelsSolr.find_with_conditions(:id=>@test_object3.pid).first
|
121
121
|
test_from_solr_object3 = MockAFRelsSolr.new
|
122
122
|
test_from_solr_object3.rels_ext.from_solr(solr_doc)
|
123
|
-
solr_doc = MockAFRelsSolr.
|
123
|
+
solr_doc = MockAFRelsSolr.find_with_conditions(:id=>@test_object4.pid).first
|
124
124
|
test_from_solr_object4 = MockAFRelsSolr.new
|
125
125
|
test_from_solr_object4.rels_ext.from_solr(solr_doc)
|
126
|
-
solr_doc = MockAFRelsSolr.
|
126
|
+
solr_doc = MockAFRelsSolr.find_with_conditions(:id=>@test_object5.pid).first
|
127
127
|
test_from_solr_object5 = MockAFRelsSolr.new
|
128
128
|
test_from_solr_object5.rels_ext.from_solr(solr_doc)
|
129
129
|
|
@@ -18,7 +18,7 @@ describe ActiveFedora::Datastream do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should be inspectable" do
|
21
|
-
@test_datastream.inspect.should match /#<ActiveFedora::Datastream:-?\d+ @pid=\"__DO_NOT_USE__\" @dsid=\"abcd\" @controlGroup=\"M\" @dirty=\"
|
21
|
+
@test_datastream.inspect.should match /#<ActiveFedora::Datastream:-?\d+ @pid=\"__DO_NOT_USE__\" @dsid=\"abcd\" @controlGroup=\"M\" @dirty=\"true\" @mimeType=\"\" >/
|
22
22
|
end
|
23
23
|
|
24
24
|
describe '#validate_content_present' do
|
@@ -86,7 +86,7 @@ describe ActiveFedora::Datastream do
|
|
86
86
|
|
87
87
|
describe ".dirty?" do
|
88
88
|
it "should return the value of the @dirty attribute or changed?" do
|
89
|
-
@test_datastream.
|
89
|
+
@test_datastream.instance_variable_get(:@changed_attributes).clear
|
90
90
|
@test_datastream.dirty?.should be_false
|
91
91
|
@test_datastream.dirty = "boo"
|
92
92
|
@test_datastream.dirty?.should be_true
|
data/spec/unit/model_spec.rb
CHANGED
@@ -177,8 +177,8 @@ describe ActiveFedora::Model do
|
|
177
177
|
q.split(" AND ").include?("baz:\"quack\"")
|
178
178
|
}.returns(mock_result)
|
179
179
|
SpecModel::Basic.find_with_conditions(:foo=>'bar', :baz=>['quix','quack']).should == mock_result
|
180
|
-
|
181
180
|
end
|
181
|
+
|
182
182
|
it "should escape quotes" do
|
183
183
|
mock_result = stub('Result')
|
184
184
|
ActiveFedora::SolrService.expects(:query).with() { |args|
|
@@ -191,7 +191,17 @@ describe ActiveFedora::Model do
|
|
191
191
|
q.split(" AND ").include?('baz:"quack"')
|
192
192
|
}.returns(mock_result)
|
193
193
|
SpecModel::Basic.find_with_conditions(:foo=>'9" Nails', :baz=>['7" version','quack']).should == mock_result
|
194
|
-
|
194
|
+
end
|
195
|
+
|
196
|
+
it "shouldn't use the class if it's called on AF:Base " do
|
197
|
+
mock_result = stub('Result')
|
198
|
+
ActiveFedora::SolrService.expects(:query).with('baz:"quack"', {:sort => ['system_create_dt asc']}).returns(mock_result)
|
199
|
+
ActiveFedora::Base.find_with_conditions(:baz=>'quack').should == mock_result
|
200
|
+
end
|
201
|
+
it "should use the query string if it's provided" do
|
202
|
+
mock_result = stub('Result')
|
203
|
+
ActiveFedora::SolrService.expects(:query).with('chunky:monkey', {:sort => ['system_create_dt asc']}).returns(mock_result)
|
204
|
+
ActiveFedora::Base.find_with_conditions('chunky:monkey').should == mock_result
|
195
205
|
end
|
196
206
|
end
|
197
207
|
|
@@ -215,8 +215,9 @@ describe ActiveFedora::NokogiriDatastream do
|
|
215
215
|
it "should mark the datastream as dirty" do
|
216
216
|
@test_ds2.dirty.should be_false
|
217
217
|
@test_ds2.ng_xml = @sample_raw_xml
|
218
|
-
@test_ds2.
|
218
|
+
@test_ds2.ng_xml_changed?.should be_true
|
219
219
|
@test_ds2.should be_dirty
|
220
|
+
@test_ds2.instance_variable_get(:@content).should be_nil
|
220
221
|
end
|
221
222
|
end
|
222
223
|
|
@@ -19,12 +19,12 @@ describe ActiveFedora do
|
|
19
19
|
@test_object = ActiveFedora::Base.new
|
20
20
|
end
|
21
21
|
|
22
|
-
after(:all) do
|
23
|
-
# Revert to default mappings after running tests
|
24
|
-
ActiveFedora::SolrService.load_mappings
|
25
|
-
end
|
26
22
|
|
27
23
|
describe "field name mappings" do
|
24
|
+
after(:all) do
|
25
|
+
# Revert to default mappings after running tests
|
26
|
+
ActiveFedora::SolrService.load_mappings
|
27
|
+
end
|
28
28
|
it "should default to using the mappings for the current schema" do
|
29
29
|
from_default_yml = YAML::load(File.open(File.join(File.dirname(__FILE__), "..", "..", "config", "solr_mappings.yml")))
|
30
30
|
ActiveFedora::SolrService.mappings[:searchable].data_types[:date].opts[:suffix].should == from_default_yml["searchable"]["date"]
|
@@ -49,11 +49,11 @@ describe ActiveFedora do
|
|
49
49
|
@test_object.to_solr[:id].should be_nil
|
50
50
|
end
|
51
51
|
|
52
|
-
it "should be used by ActiveFedora::Base#
|
52
|
+
it "should be used by ActiveFedora::Base#find_with_conditions" do
|
53
53
|
mock_response = mock("SolrResponse")
|
54
|
-
ActiveFedora::SolrService.expects(:query).with(SOLR_DOCUMENT_ID + ':changeme
|
54
|
+
ActiveFedora::SolrService.expects(:query).with("has_model_s:info\\:fedora/afmodel\\:SolrSpecModel_Basic AND " + SOLR_DOCUMENT_ID + ':"changeme\\:30"', {:sort => ['system_create_dt asc']}).returns(mock_response)
|
55
55
|
|
56
|
-
SolrSpecModel::Basic.
|
56
|
+
SolrSpecModel::Basic.find_with_conditions(:id=>"changeme:30").should equal(mock_response)
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
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: 4.
|
4
|
+
version: 4.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-06-
|
14
|
+
date: 2012-06-29 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rsolr
|
@@ -29,70 +29,6 @@ dependencies:
|
|
29
29
|
- - ! '>='
|
30
30
|
- !ruby/object:Gem::Version
|
31
31
|
version: '0'
|
32
|
-
- !ruby/object:Gem::Dependency
|
33
|
-
name: xml-simple
|
34
|
-
requirement: !ruby/object:Gem::Requirement
|
35
|
-
none: false
|
36
|
-
requirements:
|
37
|
-
- - ! '>='
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: 1.0.12
|
40
|
-
type: :runtime
|
41
|
-
prerelease: false
|
42
|
-
version_requirements: !ruby/object:Gem::Requirement
|
43
|
-
none: false
|
44
|
-
requirements:
|
45
|
-
- - ! '>='
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 1.0.12
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: mime-types
|
50
|
-
requirement: !ruby/object:Gem::Requirement
|
51
|
-
none: false
|
52
|
-
requirements:
|
53
|
-
- - ! '>='
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: '1.16'
|
56
|
-
type: :runtime
|
57
|
-
prerelease: false
|
58
|
-
version_requirements: !ruby/object:Gem::Requirement
|
59
|
-
none: false
|
60
|
-
requirements:
|
61
|
-
- - ! '>='
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: '1.16'
|
64
|
-
- !ruby/object:Gem::Dependency
|
65
|
-
name: multipart-post
|
66
|
-
requirement: !ruby/object:Gem::Requirement
|
67
|
-
none: false
|
68
|
-
requirements:
|
69
|
-
- - ! '>='
|
70
|
-
- !ruby/object:Gem::Version
|
71
|
-
version: '0'
|
72
|
-
type: :runtime
|
73
|
-
prerelease: false
|
74
|
-
version_requirements: !ruby/object:Gem::Requirement
|
75
|
-
none: false
|
76
|
-
requirements:
|
77
|
-
- - ! '>='
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
version: '0'
|
80
|
-
- !ruby/object:Gem::Dependency
|
81
|
-
name: nokogiri
|
82
|
-
requirement: !ruby/object:Gem::Requirement
|
83
|
-
none: false
|
84
|
-
requirements:
|
85
|
-
- - ! '>='
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
version: '0'
|
88
|
-
type: :runtime
|
89
|
-
prerelease: false
|
90
|
-
version_requirements: !ruby/object:Gem::Requirement
|
91
|
-
none: false
|
92
|
-
requirements:
|
93
|
-
- - ! '>='
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
version: '0'
|
96
32
|
- !ruby/object:Gem::Dependency
|
97
33
|
name: om
|
98
34
|
requirement: !ruby/object:Gem::Requirement
|
@@ -196,7 +132,7 @@ dependencies:
|
|
196
132
|
requirements:
|
197
133
|
- - ~>
|
198
134
|
- !ruby/object:Gem::Version
|
199
|
-
version: 0.5.
|
135
|
+
version: 0.5.10
|
200
136
|
type: :runtime
|
201
137
|
prerelease: false
|
202
138
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -204,7 +140,7 @@ dependencies:
|
|
204
140
|
requirements:
|
205
141
|
- - ~>
|
206
142
|
- !ruby/object:Gem::Version
|
207
|
-
version: 0.5.
|
143
|
+
version: 0.5.10
|
208
144
|
- !ruby/object:Gem::Dependency
|
209
145
|
name: rdf
|
210
146
|
requirement: !ruby/object:Gem::Requirement
|
@@ -571,7 +507,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
571
507
|
version: '0'
|
572
508
|
segments:
|
573
509
|
- 0
|
574
|
-
hash:
|
510
|
+
hash: -160565939
|
575
511
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
576
512
|
none: false
|
577
513
|
requirements:
|
@@ -580,7 +516,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
580
516
|
version: '0'
|
581
517
|
segments:
|
582
518
|
- 0
|
583
|
-
hash:
|
519
|
+
hash: -160565939
|
584
520
|
requirements: []
|
585
521
|
rubyforge_project: rubyfedora
|
586
522
|
rubygems_version: 1.8.24
|