rubydora 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitmodules +3 -0
- data/Rakefile +22 -2
- data/VERSION +1 -1
- data/lib/rubydora/digital_object.rb +8 -26
- data/lib/rubydora/rest_api_client.rb +123 -19
- data/rubydora.gemspec +1 -0
- data/spec/{datastream_spec.rb → lib/datastream_spec.rb} +0 -0
- data/spec/{digital_object_spec.rb → lib/digital_object_spec.rb} +12 -23
- data/spec/{ext_model_loader_spec.rb → lib/ext_model_loader_spec.rb} +0 -0
- data/spec/{ext_solr_spec.rb → lib/ext_solr_spec.rb} +0 -0
- data/spec/{extension_parameters_spec.rb → lib/extension_parameters_spec.rb} +0 -0
- data/spec/{integration_test_spec.rb → lib/integration_test_spec.rb} +14 -0
- data/spec/{repository_spec.rb → lib/repository_spec.rb} +0 -0
- data/spec/{resource_index_spec.rb → lib/resource_index_spec.rb} +0 -0
- data/spec/{rest_api_client_spec.rb → lib/rest_api_client_spec.rb} +23 -0
- data/spec/{soap_spec.rb → lib/soap_spec.rb} +0 -0
- metadata +101 -88
data/.gitmodules
ADDED
data/Rakefile
CHANGED
@@ -19,11 +19,9 @@ task :default => :spec
|
|
19
19
|
|
20
20
|
desc "Run specs"
|
21
21
|
RSpec::Core::RakeTask.new do |t|
|
22
|
-
t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
|
23
22
|
# Put spec opts in a file named .rspec in root
|
24
23
|
end
|
25
24
|
|
26
|
-
|
27
25
|
require 'rake/rdoctask'
|
28
26
|
Rake::RDocTask.new do |rdoc|
|
29
27
|
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
@@ -38,3 +36,25 @@ desc "Open an irb session preloaded with this library"
|
|
38
36
|
task :console do
|
39
37
|
sh "irb -rubygems -I lib -r rubydora.rb"
|
40
38
|
end
|
39
|
+
|
40
|
+
desc "Execute Continuous Integration build"
|
41
|
+
task :ci do
|
42
|
+
unless ENV['environment'] == 'test'
|
43
|
+
exec("rake ci environment=test")
|
44
|
+
end
|
45
|
+
|
46
|
+
require 'jettywrapper'
|
47
|
+
jetty_params = {
|
48
|
+
:jetty_home => File.expand_path(File.dirname(__FILE__) + '/jetty'),
|
49
|
+
:quiet => false,
|
50
|
+
:jetty_port => 8983,
|
51
|
+
:solr_home => File.expand_path(File.dirname(__FILE__) + '/jetty/solr'),
|
52
|
+
:fedora_home => File.expand_path(File.dirname(__FILE__) + '/jetty/fedora/default'),
|
53
|
+
:startup_wait => 30
|
54
|
+
}
|
55
|
+
|
56
|
+
error = Jettywrapper.wrap(jetty_params) do
|
57
|
+
Rake::Task['spec'].invoke
|
58
|
+
end
|
59
|
+
raise "test failures: #{error}" if error
|
60
|
+
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.3
|
@@ -160,9 +160,8 @@ module Rubydora
|
|
160
160
|
def save
|
161
161
|
run_callbacks :save do
|
162
162
|
if self.new?
|
163
|
-
|
164
|
-
|
165
|
-
end
|
163
|
+
self.pid = repository.ingest to_api_params.merge(:pid => pid)
|
164
|
+
@profile = nil #will cause a reload with updated data
|
166
165
|
else
|
167
166
|
p = to_api_params
|
168
167
|
repository.modify_object p.merge(:pid => pid) unless p.empty?
|
@@ -170,18 +169,20 @@ module Rubydora
|
|
170
169
|
end
|
171
170
|
|
172
171
|
self.datastreams.select { |dsid, ds| ds.changed? }.each { |dsid, ds| ds.save }
|
173
|
-
reset
|
174
172
|
self
|
175
173
|
end
|
176
174
|
|
177
175
|
# Purge the object from Fedora
|
178
176
|
# @return [Rubydora::DigitalObject] `self`
|
179
177
|
def delete
|
178
|
+
my_pid = pid
|
180
179
|
run_callbacks :destroy do
|
181
|
-
|
182
|
-
|
183
|
-
|
180
|
+
@datastreams = nil
|
181
|
+
@profile = nil
|
182
|
+
@pid = nil
|
183
|
+
nil
|
184
184
|
end
|
185
|
+
repository.purge_object(:pid => my_pid) ##This can have a meaningful exception, don't put it in the callback
|
185
186
|
end
|
186
187
|
|
187
188
|
# repository reference from the digital object
|
@@ -215,25 +216,6 @@ module Rubydora
|
|
215
216
|
OBJ_DEFAULT_ATTRIBUTES.dup
|
216
217
|
end
|
217
218
|
|
218
|
-
# reset all profile attributes
|
219
|
-
# @return [Hash]
|
220
|
-
def reset_profile_attributes
|
221
|
-
@profile = nil
|
222
|
-
@changed_attributes = {}
|
223
|
-
end
|
224
|
-
|
225
|
-
# reset the datastreams cache
|
226
|
-
def reset_datastreams
|
227
|
-
@datastreams = nil
|
228
|
-
end
|
229
|
-
|
230
|
-
# reset local data so that it is requested from Fedora
|
231
|
-
def reset
|
232
|
-
reset_profile_attributes
|
233
|
-
reset_datastreams
|
234
|
-
self
|
235
|
-
end
|
236
|
-
|
237
219
|
# instantiate a datastream object for a dsid
|
238
220
|
# @param [String] dsid
|
239
221
|
# @return [Datastream]
|
@@ -20,7 +20,12 @@ module Rubydora
|
|
20
20
|
# @return [String]
|
21
21
|
def next_pid options = {}
|
22
22
|
options[:format] ||= 'xml'
|
23
|
-
|
23
|
+
begin
|
24
|
+
return client[url_for(object_url() + "/nextPID", options)].post nil
|
25
|
+
rescue => e
|
26
|
+
logger.error e.response
|
27
|
+
raise "Error getting nextPID. See logger for details"
|
28
|
+
end
|
24
29
|
end
|
25
30
|
|
26
31
|
# {include:RestApiClient::API_DOCUMENTATION}
|
@@ -30,7 +35,12 @@ module Rubydora
|
|
30
35
|
raise "" if options[:terms] and options[:query]
|
31
36
|
options[:resultFormat] ||= 'xml'
|
32
37
|
|
33
|
-
|
38
|
+
begin
|
39
|
+
return client[object_url(nil, options)].get
|
40
|
+
rescue => e
|
41
|
+
logger.error e.response
|
42
|
+
raise "Error finding objects. See logger for details"
|
43
|
+
end
|
34
44
|
end
|
35
45
|
|
36
46
|
# {include:RestApiClient::API_DOCUMENTATION}
|
@@ -40,7 +50,14 @@ module Rubydora
|
|
40
50
|
def object options = {}
|
41
51
|
pid = options.delete(:pid)
|
42
52
|
options[:format] ||= 'xml'
|
43
|
-
|
53
|
+
begin
|
54
|
+
return client[object_url(pid, options)].get
|
55
|
+
rescue RestClient::ResourceNotFound => e
|
56
|
+
raise e
|
57
|
+
rescue => e
|
58
|
+
logger.error e.response
|
59
|
+
raise "Error getting object #{pid}. See logger for details"
|
60
|
+
end
|
44
61
|
end
|
45
62
|
|
46
63
|
# {include:RestApiClient::API_DOCUMENTATION}
|
@@ -50,7 +67,12 @@ module Rubydora
|
|
50
67
|
def ingest options = {}
|
51
68
|
pid = options.delete(:pid) || 'new'
|
52
69
|
file = options.delete(:file)
|
53
|
-
|
70
|
+
begin
|
71
|
+
return client[object_url(pid, options)].post file, :content_type => 'text/xml'
|
72
|
+
rescue => e
|
73
|
+
logger.error e.response
|
74
|
+
raise "Error ingesting object #{pid}. See logger for details"
|
75
|
+
end
|
54
76
|
end
|
55
77
|
|
56
78
|
# {include:RestApiClient::API_DOCUMENTATION}
|
@@ -59,7 +81,12 @@ module Rubydora
|
|
59
81
|
# @return [String]
|
60
82
|
def modify_object options = {}
|
61
83
|
pid = options.delete(:pid)
|
62
|
-
|
84
|
+
begin
|
85
|
+
return client[object_url(pid, options)].put nil
|
86
|
+
rescue => e
|
87
|
+
logger.error e.response
|
88
|
+
raise "Error modifying object #{pid}. See logger for details"
|
89
|
+
end
|
63
90
|
end
|
64
91
|
|
65
92
|
# {include:RestApiClient::API_DOCUMENTATION}
|
@@ -68,7 +95,14 @@ module Rubydora
|
|
68
95
|
# @return [String]
|
69
96
|
def purge_object options = {}
|
70
97
|
pid = options.delete(:pid)
|
71
|
-
|
98
|
+
begin
|
99
|
+
return client[object_url(pid, options)].delete
|
100
|
+
rescue RestClient::ResourceNotFound => e
|
101
|
+
raise e
|
102
|
+
rescue => e
|
103
|
+
logger.error e.response
|
104
|
+
raise "Error purging object #{pid}. See logger for details"
|
105
|
+
end
|
72
106
|
end
|
73
107
|
|
74
108
|
# {include:RestApiClient::API_DOCUMENTATION}
|
@@ -79,7 +113,12 @@ module Rubydora
|
|
79
113
|
pid = options.delete(:pid)
|
80
114
|
options[:format] ||= 'xml'
|
81
115
|
raise "" unless pid
|
82
|
-
|
116
|
+
begin
|
117
|
+
return client[url_for(object_url(pid) + "/versions", options)].get
|
118
|
+
rescue => e
|
119
|
+
logger.error e.response
|
120
|
+
raise "Error getting versions for object #{pid}. See logger for details"
|
121
|
+
end
|
83
122
|
end
|
84
123
|
|
85
124
|
# {include:RestApiClient::API_DOCUMENTATION}
|
@@ -90,7 +129,12 @@ module Rubydora
|
|
90
129
|
pid = options.delete(:pid)
|
91
130
|
raise "" unless pid
|
92
131
|
options[:format] ||= 'xml'
|
93
|
-
|
132
|
+
begin
|
133
|
+
return client[url_for(object_url(pid) + "/objectXML", options)].get
|
134
|
+
rescue => e
|
135
|
+
logger.error e.response
|
136
|
+
raise "Error getting objectXML for object #{pid}. See logger for details"
|
137
|
+
end
|
94
138
|
end
|
95
139
|
|
96
140
|
# {include:RestApiClient::API_DOCUMENTATION}
|
@@ -102,7 +146,14 @@ module Rubydora
|
|
102
146
|
pid = options.delete(:pid)
|
103
147
|
dsid = options.delete(:dsid)
|
104
148
|
options[:format] ||= 'xml'
|
105
|
-
|
149
|
+
begin
|
150
|
+
return client[datastream_url(pid, dsid, options)].get
|
151
|
+
rescue RestClient::ResourceNotFound => e
|
152
|
+
raise e
|
153
|
+
rescue => e
|
154
|
+
logger.error e.response
|
155
|
+
raise "Error getting datastream '#{dsid}' for object #{pid}. See logger for details"
|
156
|
+
end
|
106
157
|
end
|
107
158
|
|
108
159
|
alias_method :datastreams, :datastream
|
@@ -115,7 +166,12 @@ module Rubydora
|
|
115
166
|
def set_datastream_options options = {}
|
116
167
|
pid = options.delete(:pid)
|
117
168
|
dsid = options.delete(:dsid)
|
118
|
-
|
169
|
+
begin
|
170
|
+
return client[datastream_url(pid, dsid, options)].put nil
|
171
|
+
rescue => e
|
172
|
+
logger.error e.response
|
173
|
+
raise "Error setting datastream options on #{dsid} for object #{pid}. See logger for details"
|
174
|
+
end
|
119
175
|
end
|
120
176
|
|
121
177
|
# {include:RestApiClient::API_DOCUMENTATION}
|
@@ -128,7 +184,12 @@ module Rubydora
|
|
128
184
|
dsid = options.delete(:dsid)
|
129
185
|
raise ArgumentError, "Must supply dsid" unless dsid
|
130
186
|
options[:format] ||= 'xml'
|
131
|
-
|
187
|
+
begin
|
188
|
+
return client[url_for(datastream_url(pid, dsid) + "/versions", options)].get
|
189
|
+
rescue => e
|
190
|
+
logger.error e.response
|
191
|
+
raise "Error getting versions for datastream #{dsid} for object #{pid}. See logger for details"
|
192
|
+
end
|
132
193
|
end
|
133
194
|
|
134
195
|
# {include:RestApiClient::API_DOCUMENTATION}
|
@@ -140,7 +201,14 @@ module Rubydora
|
|
140
201
|
pid = options.delete(:pid)
|
141
202
|
dsid = options.delete(:dsid)
|
142
203
|
raise "" unless dsid
|
143
|
-
|
204
|
+
begin
|
205
|
+
return client[url_for(datastream_url(pid, dsid) + "/content", options)].get
|
206
|
+
rescue RestClient::ResourceNotFound => e
|
207
|
+
raise e
|
208
|
+
rescue => e
|
209
|
+
logger.error e.response
|
210
|
+
raise "Error getting dissemination for datastream #{dsid} for object #{pid}. See logger for details"
|
211
|
+
end
|
144
212
|
end
|
145
213
|
|
146
214
|
# {include:RestApiClient::API_DOCUMENTATION}
|
@@ -153,7 +221,12 @@ module Rubydora
|
|
153
221
|
dsid = options.delete(:dsid)
|
154
222
|
file = options.delete(:content)
|
155
223
|
content_type = options.delete(:content_type) || options[:mimeType] || (MIME::Types.type_for(file.path).first if file.respond_to? :path) || 'text/plain'
|
156
|
-
|
224
|
+
begin
|
225
|
+
return client[datastream_url(pid, dsid, options)].post file, :content_type => content_type.to_s, :multipart => true
|
226
|
+
rescue => e
|
227
|
+
logger.error e.response
|
228
|
+
raise "Error adding datastream #{dsid} for object #{pid}. See logger for details"
|
229
|
+
end
|
157
230
|
end
|
158
231
|
|
159
232
|
# {include:RestApiClient::API_DOCUMENTATION}
|
@@ -166,7 +239,13 @@ module Rubydora
|
|
166
239
|
dsid = options.delete(:dsid)
|
167
240
|
file = options.delete(:content)
|
168
241
|
content_type = options.delete(:content_type) || options[:mimeType] || (MIME::Types.type_for(file.path).first if file.respond_to? :path) || 'text/plain'
|
169
|
-
|
242
|
+
|
243
|
+
begin
|
244
|
+
return client[datastream_url(pid, dsid, options)].put(file, {:content_type => content_type.to_s, :multipart => true})
|
245
|
+
rescue => e
|
246
|
+
logger.error e.response
|
247
|
+
raise "Error modifying datastream #{dsid} for #{pid}. See logger for details"
|
248
|
+
end
|
170
249
|
end
|
171
250
|
|
172
251
|
# {include:RestApiClient::API_DOCUMENTATION}
|
@@ -177,7 +256,12 @@ module Rubydora
|
|
177
256
|
def purge_datastream options = {}
|
178
257
|
pid = options.delete(:pid)
|
179
258
|
dsid = options.delete(:dsid)
|
180
|
-
|
259
|
+
begin
|
260
|
+
client[datastream_url(pid, dsid, options)].delete
|
261
|
+
rescue => e
|
262
|
+
logger.error e.response
|
263
|
+
raise "Error purging datastream #{dsid} for #{pid}. See logger for details"
|
264
|
+
end
|
181
265
|
end
|
182
266
|
|
183
267
|
# {include:RestApiClient::API_DOCUMENTATION}
|
@@ -188,7 +272,12 @@ module Rubydora
|
|
188
272
|
pid = options.delete(:pid) || options[:subject]
|
189
273
|
raise "" unless pid
|
190
274
|
options[:format] ||= 'xml'
|
191
|
-
|
275
|
+
begin
|
276
|
+
return client[url_for(object_url(pid) + "/relationships", options)].get
|
277
|
+
rescue => e
|
278
|
+
logger.error e.response
|
279
|
+
raise "Error getting relationships for #{pid}. See logger for details"
|
280
|
+
end
|
192
281
|
end
|
193
282
|
|
194
283
|
# {include:RestApiClient::API_DOCUMENTATION}
|
@@ -197,7 +286,12 @@ module Rubydora
|
|
197
286
|
# @return [String]
|
198
287
|
def add_relationship options = {}
|
199
288
|
pid = options.delete(:pid) || options[:subject]
|
200
|
-
|
289
|
+
begin
|
290
|
+
return client[url_for(object_url(pid) + "/relationships/new", options)].post nil
|
291
|
+
rescue => e
|
292
|
+
logger.error e.response
|
293
|
+
raise "Error adding relationship for #{pid}. See logger for details"
|
294
|
+
end
|
201
295
|
end
|
202
296
|
|
203
297
|
# {include:RestApiClient::API_DOCUMENTATION}
|
@@ -206,7 +300,12 @@ module Rubydora
|
|
206
300
|
# @return [String]
|
207
301
|
def purge_relationship options = {}
|
208
302
|
pid = options.delete(:pid) || options[:subject]
|
209
|
-
|
303
|
+
begin
|
304
|
+
return client[url_for(object_url(pid) + "/relationships", options)].delete
|
305
|
+
rescue => e
|
306
|
+
logger.error e.response
|
307
|
+
raise "Error purging relationships for #{pid}. See logger for details"
|
308
|
+
end
|
210
309
|
end
|
211
310
|
|
212
311
|
# {include:RestApiClient::API_DOCUMENTATION}
|
@@ -220,7 +319,12 @@ module Rubydora
|
|
220
319
|
sdef = options.delete(:sdef)
|
221
320
|
method = options.delete(:method)
|
222
321
|
options[:format] ||= 'xml' unless pid and sdef and method
|
223
|
-
|
322
|
+
begin
|
323
|
+
return client[dissemination_url(pid,sdef,method,options)].get
|
324
|
+
rescue => e
|
325
|
+
logger.error e.response
|
326
|
+
raise "Error getting dissemination for #{pid}. See logger for details"
|
327
|
+
end
|
224
328
|
end
|
225
329
|
|
226
330
|
# Generate a REST API compatible URI
|
data/rubydora.gemspec
CHANGED
File without changes
|
@@ -1,6 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Rubydora::DigitalObject do
|
4
|
+
before do
|
5
|
+
@mock_repository = mock(Rubydora::Repository)
|
6
|
+
|
7
|
+
end
|
4
8
|
describe "new" do
|
5
9
|
it "should load a DigitalObject instance" do
|
6
10
|
Rubydora::DigitalObject.new("pid").should be_a_kind_of(Rubydora::DigitalObject)
|
@@ -9,7 +13,6 @@ describe Rubydora::DigitalObject do
|
|
9
13
|
|
10
14
|
describe "profile" do
|
11
15
|
before(:each) do
|
12
|
-
@mock_repository = mock(Rubydora::Repository)
|
13
16
|
@object = Rubydora::DigitalObject.new 'pid', @mock_repository
|
14
17
|
end
|
15
18
|
|
@@ -29,8 +32,7 @@ describe Rubydora::DigitalObject do
|
|
29
32
|
|
30
33
|
describe "new" do
|
31
34
|
before(:each) do
|
32
|
-
@mock_repository
|
33
|
-
@mock_repository.should_receive(:object).any_number_of_times.and_raise ""
|
35
|
+
@mock_repository.stub(:object) { raise "" }
|
34
36
|
@object = Rubydora::DigitalObject.new 'pid', @mock_repository
|
35
37
|
end
|
36
38
|
|
@@ -39,7 +41,7 @@ describe Rubydora::DigitalObject do
|
|
39
41
|
end
|
40
42
|
|
41
43
|
it "should call ingest on save" do
|
42
|
-
@object.
|
44
|
+
@object.stub(:datastreams) { {} }
|
43
45
|
@mock_repository.should_receive(:ingest).with(hash_including(:pid => 'pid')).and_return('pid')
|
44
46
|
@object.save
|
45
47
|
end
|
@@ -55,14 +57,12 @@ describe Rubydora::DigitalObject do
|
|
55
57
|
|
56
58
|
describe "create" do
|
57
59
|
it "should call the Fedora REST API to create a new object" do
|
58
|
-
@mock_repository = mock(Rubydora::Repository)
|
59
60
|
@mock_repository.should_receive(:ingest).with(instance_of(Hash)).and_return("pid")
|
60
61
|
obj = Rubydora::DigitalObject.create "pid", { :a => 1, :b => 2}, @mock_repository
|
61
62
|
obj.should be_a_kind_of(Rubydora::DigitalObject)
|
62
63
|
end
|
63
64
|
|
64
65
|
it "should return a new object with the Fedora response pid when no pid is provided" do
|
65
|
-
@mock_repository = mock(Rubydora::Repository)
|
66
66
|
@mock_repository.should_receive(:ingest).with(instance_of(Hash)).and_return("pid")
|
67
67
|
obj = Rubydora::DigitalObject.create "new", { :a => 1, :b => 2}, @mock_repository
|
68
68
|
obj.should be_a_kind_of(Rubydora::DigitalObject)
|
@@ -72,7 +72,6 @@ describe Rubydora::DigitalObject do
|
|
72
72
|
|
73
73
|
describe "retreive" do
|
74
74
|
before(:each) do
|
75
|
-
@mock_repository = mock(Rubydora::Repository)
|
76
75
|
@mock_repository.stub :datastreams do |hash|
|
77
76
|
"<objectDatastreams><datastream dsid='a'></datastream>><datastream dsid='b'></datastream>><datastream dsid='c'></datastream></objectDatastreams>"
|
78
77
|
end
|
@@ -125,12 +124,12 @@ describe Rubydora::DigitalObject do
|
|
125
124
|
|
126
125
|
describe "save" do
|
127
126
|
before(:each) do
|
128
|
-
@mock_repository
|
129
|
-
@mock_repository.should_receive(:object).any_number_of_times.with({:pid => 'pid'}).and_return <<-XML
|
127
|
+
@mock_repository.stub(:object) { <<-XML
|
130
128
|
<objectProfile>
|
131
129
|
<not>empty</not>
|
132
130
|
</objectProfile>
|
133
131
|
XML
|
132
|
+
}
|
134
133
|
|
135
134
|
@object = Rubydora::DigitalObject.new 'pid', @mock_repository
|
136
135
|
end
|
@@ -194,19 +193,10 @@ describe Rubydora::DigitalObject do
|
|
194
193
|
@mock_repository.should_receive(:modify_object).with(hash_including(:pid => 'pid'))
|
195
194
|
@object.save
|
196
195
|
end
|
197
|
-
|
198
|
-
it "should reset the object state on save" do
|
199
|
-
@object.label = "asdf"
|
200
|
-
@object.should_receive(:datastreams).and_return({})
|
201
|
-
@mock_repository.should_receive(:modify_object).with(hash_including(:pid => 'pid'))
|
202
|
-
@object.profile.should_not be_nil
|
203
|
-
expect { @object.save }.to change { @object.instance_variable_get('@profile') }.to nil
|
204
|
-
end
|
205
196
|
end
|
206
197
|
|
207
198
|
describe "delete" do
|
208
199
|
before(:each) do
|
209
|
-
@mock_repository = mock()
|
210
200
|
@object = Rubydora::DigitalObject.new 'pid', @mock_repository
|
211
201
|
end
|
212
202
|
|
@@ -218,11 +208,11 @@ describe Rubydora::DigitalObject do
|
|
218
208
|
|
219
209
|
describe "models" do
|
220
210
|
before(:each) do
|
221
|
-
@mock_repository
|
222
|
-
@mock_repository.should_receive(:object).any_number_of_times.with({:pid => 'pid'}).and_return <<-XML
|
211
|
+
@mock_repository.stub(:object) { <<-XML
|
223
212
|
<objectProfile>
|
224
213
|
</objectProfile>
|
225
214
|
XML
|
215
|
+
}
|
226
216
|
@object = Rubydora::DigitalObject.new 'pid', @mock_repository
|
227
217
|
end
|
228
218
|
|
@@ -256,11 +246,11 @@ describe Rubydora::DigitalObject do
|
|
256
246
|
|
257
247
|
describe "relations" do
|
258
248
|
before(:each) do
|
259
|
-
@mock_repository
|
260
|
-
@mock_repository.should_receive(:object).any_number_of_times.with({:pid => 'pid'}).and_return <<-XML
|
249
|
+
@mock_repository.stub(:object) { <<-XML
|
261
250
|
<objectProfile>
|
262
251
|
</objectProfile>
|
263
252
|
XML
|
253
|
+
}
|
264
254
|
@object = Rubydora::DigitalObject.new 'pid', @mock_repository
|
265
255
|
end
|
266
256
|
|
@@ -296,7 +286,6 @@ describe Rubydora::DigitalObject do
|
|
296
286
|
|
297
287
|
describe "to_api_params" do
|
298
288
|
before(:each) do
|
299
|
-
@mock_repository = mock(Rubydora::Repository)
|
300
289
|
@object = Rubydora::DigitalObject.new 'pid', @mock_repository
|
301
290
|
end
|
302
291
|
it "should compile parameters to hash" do
|
File without changes
|
File without changes
|
File without changes
|
@@ -102,6 +102,20 @@ describe "Integration testing against a live Fedora repository" do
|
|
102
102
|
obj.datastreams["empty_ds"].new?.should == true
|
103
103
|
end
|
104
104
|
|
105
|
+
it "should update datastream attributes without changing the content" do
|
106
|
+
obj = @repository.find('test:1')
|
107
|
+
obj.datastreams["my_ds"].content = "XXX"
|
108
|
+
obj.save
|
109
|
+
|
110
|
+
obj = @repository.find('test:1')
|
111
|
+
obj.datastreams["my_ds"].dsLabel = "New Label"
|
112
|
+
obj.save
|
113
|
+
|
114
|
+
obj = @repository.find('test:1')
|
115
|
+
obj.datastreams["my_ds"].content.should == "XXX"
|
116
|
+
obj.datastreams["my_ds"].dsLabel.should == "New Label"
|
117
|
+
end
|
118
|
+
|
105
119
|
|
106
120
|
after(:all) do
|
107
121
|
@repository.find('test:1').delete rescue nil
|
File without changes
|
File without changes
|
@@ -1,8 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'loggable'
|
2
3
|
|
3
4
|
describe Rubydora::RestApiClient do
|
4
5
|
class MockRepository
|
5
6
|
include Rubydora::RestApiClient
|
7
|
+
include Loggable
|
8
|
+
|
6
9
|
|
7
10
|
attr_accessor :config
|
8
11
|
end
|
@@ -25,10 +28,16 @@ describe Rubydora::RestApiClient do
|
|
25
28
|
@mock_repository.find_objects :query => 'a'
|
26
29
|
end
|
27
30
|
|
31
|
+
|
28
32
|
it "should show object properties" do
|
29
33
|
RestClient::Request.should_receive(:execute).with(hash_including(:url => "http://example.org/objects/z?format=xml"))
|
30
34
|
@mock_repository.object :pid => 'z'
|
31
35
|
end
|
36
|
+
|
37
|
+
it "should raise not found exception when retrieving object" do
|
38
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => "http://example.org/objects/z?format=xml")).and_raise( RestClient::ResourceNotFound)
|
39
|
+
lambda {@mock_repository.object(:pid => 'z')}.should raise_error RestClient::ResourceNotFound
|
40
|
+
end
|
32
41
|
|
33
42
|
it "ingest" do
|
34
43
|
RestClient::Request.should_receive(:execute).with(hash_including(:url => "http://example.org/objects/new"))
|
@@ -53,6 +62,11 @@ describe Rubydora::RestApiClient do
|
|
53
62
|
@mock_repository.purge_object :pid => 'mypid'
|
54
63
|
end
|
55
64
|
|
65
|
+
it "should raise not found exception when purging" do
|
66
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => "http://example.org/objects/mypid")).and_raise( RestClient::ResourceNotFound)
|
67
|
+
lambda {@mock_repository.purge_object(:pid => 'mypid')}.should raise_error RestClient::ResourceNotFound
|
68
|
+
end
|
69
|
+
|
56
70
|
it "object_versions" do
|
57
71
|
RestClient::Request.should_receive(:execute).with(hash_including(:url => "http://example.org/objects/mypid/versions?format=xml"))
|
58
72
|
@mock_repository.object_versions :pid => 'mypid'
|
@@ -73,10 +87,19 @@ describe Rubydora::RestApiClient do
|
|
73
87
|
@mock_repository.datastream :pid => 'mypid', :dsid => 'aaa'
|
74
88
|
end
|
75
89
|
|
90
|
+
it "should raise not found exception when getting a datastream" do
|
91
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => "http://example.org/objects/mypid/datastreams/aaa?format=xml")).and_raise( RestClient::ResourceNotFound)
|
92
|
+
lambda {@mock_repository.datastream :pid => 'mypid', :dsid => 'aaa'}.should raise_error RestClient::ResourceNotFound
|
93
|
+
end
|
94
|
+
|
76
95
|
it "datastream_dissemination" do
|
77
96
|
RestClient::Request.should_receive(:execute).with(hash_including(:url => "http://example.org/objects/mypid/datastreams/aaa/content"))
|
78
97
|
@mock_repository.datastream_dissemination :pid => 'mypid', :dsid => 'aaa'
|
79
98
|
end
|
99
|
+
it "should raise not found exception when retrieving datastream_dissemination" do
|
100
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => "http://example.org/objects/mypid/datastreams/aaa/content")).and_raise( RestClient::ResourceNotFound)
|
101
|
+
lambda {@mock_repository.datastream_dissemination :pid => 'mypid', :dsid => 'aaa'}.should raise_error RestClient::ResourceNotFound
|
102
|
+
end
|
80
103
|
|
81
104
|
it "add_datastream" do
|
82
105
|
RestClient::Request.should_receive(:execute).with(hash_including(:url => "http://example.org/objects/mypid/datastreams/aaa"))
|
File without changes
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubydora
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 17
|
5
|
+
prerelease:
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 2
|
8
|
-
-
|
9
|
-
|
10
|
-
version: 0.2.2
|
9
|
+
- 3
|
10
|
+
version: 0.2.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Chris Beer
|
@@ -15,177 +15,191 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-11-02 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: fastercsv
|
23
|
-
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
24
26
|
none: false
|
25
27
|
requirements:
|
26
28
|
- - ">="
|
27
29
|
- !ruby/object:Gem::Version
|
30
|
+
hash: 3
|
28
31
|
segments:
|
29
32
|
- 0
|
30
|
-
segments_generated: true
|
31
33
|
version: "0"
|
32
|
-
|
33
|
-
prerelease: false
|
34
|
-
version_requirements: *id001
|
34
|
+
requirement: *id001
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: rest-client
|
37
|
-
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
38
40
|
none: false
|
39
41
|
requirements:
|
40
42
|
- - ">="
|
41
43
|
- !ruby/object:Gem::Version
|
44
|
+
hash: 3
|
42
45
|
segments:
|
43
46
|
- 0
|
44
|
-
segments_generated: true
|
45
47
|
version: "0"
|
46
|
-
|
47
|
-
prerelease: false
|
48
|
-
version_requirements: *id002
|
48
|
+
requirement: *id002
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: nokogiri
|
51
|
-
|
51
|
+
type: :runtime
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
52
54
|
none: false
|
53
55
|
requirements:
|
54
56
|
- - ">="
|
55
57
|
- !ruby/object:Gem::Version
|
58
|
+
hash: 3
|
56
59
|
segments:
|
57
60
|
- 0
|
58
|
-
segments_generated: true
|
59
61
|
version: "0"
|
60
|
-
|
61
|
-
prerelease: false
|
62
|
-
version_requirements: *id003
|
62
|
+
requirement: *id003
|
63
63
|
- !ruby/object:Gem::Dependency
|
64
64
|
name: mime-types
|
65
|
-
|
65
|
+
type: :runtime
|
66
|
+
prerelease: false
|
67
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
66
68
|
none: false
|
67
69
|
requirements:
|
68
70
|
- - ">="
|
69
71
|
- !ruby/object:Gem::Version
|
72
|
+
hash: 3
|
70
73
|
segments:
|
71
74
|
- 0
|
72
|
-
segments_generated: true
|
73
75
|
version: "0"
|
74
|
-
|
75
|
-
prerelease: false
|
76
|
-
version_requirements: *id004
|
76
|
+
requirement: *id004
|
77
77
|
- !ruby/object:Gem::Dependency
|
78
78
|
name: activesupport
|
79
|
-
|
79
|
+
type: :runtime
|
80
|
+
prerelease: false
|
81
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
80
82
|
none: false
|
81
83
|
requirements:
|
82
84
|
- - ">="
|
83
85
|
- !ruby/object:Gem::Version
|
86
|
+
hash: 3
|
84
87
|
segments:
|
85
88
|
- 0
|
86
|
-
segments_generated: true
|
87
89
|
version: "0"
|
88
|
-
|
89
|
-
prerelease: false
|
90
|
-
version_requirements: *id005
|
90
|
+
requirement: *id005
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: activemodel
|
93
|
-
|
93
|
+
type: :runtime
|
94
|
+
prerelease: false
|
95
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
94
96
|
none: false
|
95
97
|
requirements:
|
96
98
|
- - ">="
|
97
99
|
- !ruby/object:Gem::Version
|
100
|
+
hash: 3
|
98
101
|
segments:
|
99
102
|
- 0
|
100
|
-
segments_generated: true
|
101
103
|
version: "0"
|
102
|
-
|
103
|
-
prerelease: false
|
104
|
-
version_requirements: *id006
|
104
|
+
requirement: *id006
|
105
105
|
- !ruby/object:Gem::Dependency
|
106
106
|
name: savon
|
107
|
-
|
107
|
+
type: :runtime
|
108
|
+
prerelease: false
|
109
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
108
110
|
none: false
|
109
111
|
requirements:
|
110
112
|
- - ">="
|
111
113
|
- !ruby/object:Gem::Version
|
114
|
+
hash: 3
|
112
115
|
segments:
|
113
116
|
- 0
|
114
|
-
segments_generated: true
|
115
117
|
version: "0"
|
116
|
-
|
117
|
-
prerelease: false
|
118
|
-
version_requirements: *id007
|
118
|
+
requirement: *id007
|
119
119
|
- !ruby/object:Gem::Dependency
|
120
120
|
name: rake
|
121
|
-
|
121
|
+
type: :development
|
122
|
+
prerelease: false
|
123
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
122
124
|
none: false
|
123
125
|
requirements:
|
124
126
|
- - ">="
|
125
127
|
- !ruby/object:Gem::Version
|
128
|
+
hash: 3
|
126
129
|
segments:
|
127
130
|
- 0
|
128
|
-
segments_generated: true
|
129
131
|
version: "0"
|
130
|
-
|
131
|
-
prerelease: false
|
132
|
-
version_requirements: *id008
|
132
|
+
requirement: *id008
|
133
133
|
- !ruby/object:Gem::Dependency
|
134
134
|
name: shoulda
|
135
|
-
|
135
|
+
type: :development
|
136
|
+
prerelease: false
|
137
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
136
138
|
none: false
|
137
139
|
requirements:
|
138
140
|
- - ">="
|
139
141
|
- !ruby/object:Gem::Version
|
142
|
+
hash: 3
|
140
143
|
segments:
|
141
144
|
- 0
|
142
|
-
segments_generated: true
|
143
145
|
version: "0"
|
144
|
-
|
145
|
-
prerelease: false
|
146
|
-
version_requirements: *id009
|
146
|
+
requirement: *id009
|
147
147
|
- !ruby/object:Gem::Dependency
|
148
148
|
name: bundler
|
149
|
-
|
149
|
+
type: :development
|
150
|
+
prerelease: false
|
151
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
150
152
|
none: false
|
151
153
|
requirements:
|
152
154
|
- - ">="
|
153
155
|
- !ruby/object:Gem::Version
|
156
|
+
hash: 3
|
154
157
|
segments:
|
155
158
|
- 0
|
156
|
-
segments_generated: true
|
157
159
|
version: "0"
|
158
|
-
|
159
|
-
prerelease: false
|
160
|
-
version_requirements: *id010
|
160
|
+
requirement: *id010
|
161
161
|
- !ruby/object:Gem::Dependency
|
162
162
|
name: rspec
|
163
|
-
|
163
|
+
type: :development
|
164
|
+
prerelease: false
|
165
|
+
version_requirements: &id011 !ruby/object:Gem::Requirement
|
164
166
|
none: false
|
165
167
|
requirements:
|
166
168
|
- - ">="
|
167
169
|
- !ruby/object:Gem::Version
|
170
|
+
hash: 3
|
168
171
|
segments:
|
169
172
|
- 0
|
170
|
-
segments_generated: true
|
171
173
|
version: "0"
|
172
|
-
|
173
|
-
prerelease: false
|
174
|
-
version_requirements: *id011
|
174
|
+
requirement: *id011
|
175
175
|
- !ruby/object:Gem::Dependency
|
176
176
|
name: yard
|
177
|
-
|
177
|
+
type: :development
|
178
|
+
prerelease: false
|
179
|
+
version_requirements: &id012 !ruby/object:Gem::Requirement
|
178
180
|
none: false
|
179
181
|
requirements:
|
180
182
|
- - ">="
|
181
183
|
- !ruby/object:Gem::Version
|
184
|
+
hash: 3
|
182
185
|
segments:
|
183
186
|
- 0
|
184
|
-
segments_generated: true
|
185
187
|
version: "0"
|
188
|
+
requirement: *id012
|
189
|
+
- !ruby/object:Gem::Dependency
|
190
|
+
name: jettywrapper
|
186
191
|
type: :development
|
187
192
|
prerelease: false
|
188
|
-
version_requirements:
|
193
|
+
version_requirements: &id013 !ruby/object:Gem::Requirement
|
194
|
+
none: false
|
195
|
+
requirements:
|
196
|
+
- - ">="
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
hash: 3
|
199
|
+
segments:
|
200
|
+
- 0
|
201
|
+
version: "0"
|
202
|
+
requirement: *id013
|
189
203
|
description: "Fedora Commons REST API ruby library : REQUIRES FCREPO 3.4+"
|
190
204
|
email:
|
191
205
|
- chris@cbeer.info
|
@@ -197,6 +211,7 @@ extra_rdoc_files: []
|
|
197
211
|
|
198
212
|
files:
|
199
213
|
- .gitignore
|
214
|
+
- .gitmodules
|
200
215
|
- Gemfile
|
201
216
|
- LICENSE.txt
|
202
217
|
- README.rdoc
|
@@ -220,16 +235,16 @@ files:
|
|
220
235
|
- lib/rubydora/soap.rb
|
221
236
|
- lib/rubydora/version.rb
|
222
237
|
- rubydora.gemspec
|
223
|
-
- spec/datastream_spec.rb
|
224
|
-
- spec/digital_object_spec.rb
|
225
|
-
- spec/ext_model_loader_spec.rb
|
226
|
-
- spec/ext_solr_spec.rb
|
227
|
-
- spec/extension_parameters_spec.rb
|
228
|
-
- spec/integration_test_spec.rb
|
229
|
-
- spec/repository_spec.rb
|
230
|
-
- spec/resource_index_spec.rb
|
231
|
-
- spec/rest_api_client_spec.rb
|
232
|
-
- spec/soap_spec.rb
|
238
|
+
- spec/lib/datastream_spec.rb
|
239
|
+
- spec/lib/digital_object_spec.rb
|
240
|
+
- spec/lib/ext_model_loader_spec.rb
|
241
|
+
- spec/lib/ext_solr_spec.rb
|
242
|
+
- spec/lib/extension_parameters_spec.rb
|
243
|
+
- spec/lib/integration_test_spec.rb
|
244
|
+
- spec/lib/repository_spec.rb
|
245
|
+
- spec/lib/resource_index_spec.rb
|
246
|
+
- spec/lib/rest_api_client_spec.rb
|
247
|
+
- spec/lib/soap_spec.rb
|
233
248
|
- spec/spec_helper.rb
|
234
249
|
has_rdoc: true
|
235
250
|
homepage: http://github.com/cbeer/rubydora
|
@@ -245,37 +260,35 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
245
260
|
requirements:
|
246
261
|
- - ">="
|
247
262
|
- !ruby/object:Gem::Version
|
248
|
-
hash:
|
263
|
+
hash: 3
|
249
264
|
segments:
|
250
265
|
- 0
|
251
|
-
segments_generated: true
|
252
266
|
version: "0"
|
253
267
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
254
268
|
none: false
|
255
269
|
requirements:
|
256
270
|
- - ">="
|
257
271
|
- !ruby/object:Gem::Version
|
258
|
-
hash:
|
272
|
+
hash: 3
|
259
273
|
segments:
|
260
274
|
- 0
|
261
|
-
segments_generated: true
|
262
275
|
version: "0"
|
263
276
|
requirements: []
|
264
277
|
|
265
278
|
rubyforge_project:
|
266
|
-
rubygems_version: 1.
|
279
|
+
rubygems_version: 1.6.2
|
267
280
|
signing_key:
|
268
281
|
specification_version: 3
|
269
282
|
summary: Fedora Commons REST API ruby library
|
270
283
|
test_files:
|
271
|
-
- spec/datastream_spec.rb
|
272
|
-
- spec/digital_object_spec.rb
|
273
|
-
- spec/ext_model_loader_spec.rb
|
274
|
-
- spec/ext_solr_spec.rb
|
275
|
-
- spec/extension_parameters_spec.rb
|
276
|
-
- spec/integration_test_spec.rb
|
277
|
-
- spec/repository_spec.rb
|
278
|
-
- spec/resource_index_spec.rb
|
279
|
-
- spec/rest_api_client_spec.rb
|
280
|
-
- spec/soap_spec.rb
|
284
|
+
- spec/lib/datastream_spec.rb
|
285
|
+
- spec/lib/digital_object_spec.rb
|
286
|
+
- spec/lib/ext_model_loader_spec.rb
|
287
|
+
- spec/lib/ext_solr_spec.rb
|
288
|
+
- spec/lib/extension_parameters_spec.rb
|
289
|
+
- spec/lib/integration_test_spec.rb
|
290
|
+
- spec/lib/repository_spec.rb
|
291
|
+
- spec/lib/resource_index_spec.rb
|
292
|
+
- spec/lib/rest_api_client_spec.rb
|
293
|
+
- spec/lib/soap_spec.rb
|
281
294
|
- spec/spec_helper.rb
|