rubydora 0.5.11 → 0.5.12

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.11
1
+ 0.5.12
@@ -1,7 +1,6 @@
1
1
  require 'active_support/core_ext/hash/indifferent_access'
2
2
  require 'active_support/core_ext/class'
3
3
  require 'active_support/core_ext/module'
4
- require 'hooks'
5
4
 
6
5
  module Rubydora
7
6
 
@@ -64,8 +63,9 @@ module Rubydora
64
63
  # @param [Hash] options
65
64
  # @return [String]
66
65
  def next_pid options = {}
67
- options[:format] ||= 'xml'
68
- client[next_pid_url(options)].post nil
66
+ query_options = options.dup
67
+ query_options[:format] ||= 'xml'
68
+ client[next_pid_url(query_options)].post nil
69
69
  rescue Exception => exception
70
70
  rescue_with_handler(exception) || raise
71
71
  end
@@ -74,12 +74,13 @@ module Rubydora
74
74
  # @param [Hash] options
75
75
  # @return [String]
76
76
  def find_objects options = {}, &block_response
77
- raise ArgumentError,"Cannot have both :terms and :query parameters" if options[:terms] and options[:query]
78
- options[:resultFormat] ||= 'xml'
77
+ query_options = options.dup
78
+ raise ArgumentError,"Cannot have both :terms and :query parameters" if query_options[:terms] and query_options[:query]
79
+ query_options[:resultFormat] ||= 'xml'
79
80
 
80
- resource = client[find_objects_url(options)]
81
+ resource = client[find_objects_url(query_options)]
81
82
  if block_given?
82
- resource.options[:block_response] = block_response
83
+ resource.query_options[:block_response] = block_response
83
84
  end
84
85
  return resource.get
85
86
  rescue Exception => exception
@@ -91,9 +92,10 @@ module Rubydora
91
92
  # @option options [String] :pid
92
93
  # @return [String]
93
94
  def object options = {}
94
- pid = options.delete(:pid)
95
- options[:format] ||= 'xml'
96
- client[object_url(pid, options)].get
95
+ query_options = options.dup
96
+ pid = query_options.delete(:pid)
97
+ query_options[:format] ||= 'xml'
98
+ client[object_url(pid, query_options)].get
97
99
  rescue Exception => exception
98
100
  rescue_with_handler(exception) || raise
99
101
  end
@@ -103,9 +105,10 @@ module Rubydora
103
105
  # @option options [String] :pid
104
106
  # @return [String]
105
107
  def ingest options = {}
106
- pid = options.delete(:pid) || 'new'
107
- file = options.delete(:file)
108
- assigned_pid = client[object_url(pid, options)].post file, :content_type => 'text/xml'
108
+ query_options = options.dup
109
+ pid = query_options.delete(:pid) || 'new'
110
+ file = query_options.delete(:file)
111
+ assigned_pid = client[object_url(pid, query_options)].post file, :content_type => 'text/xml'
109
112
  run_hook :after_ingest, :pid => assigned_pid, :file => file, :options => options
110
113
  assigned_pid
111
114
  rescue Exception => exception
@@ -117,8 +120,9 @@ module Rubydora
117
120
  # @option options [String] :pid
118
121
  # @return [String]
119
122
  def export options = {}
120
- pid = options.delete(:pid)
121
- client[export_object_url(pid, options)].get
123
+ query_options = options.dup
124
+ pid = query_options.delete(:pid)
125
+ client[export_object_url(pid, query_options)].get
122
126
  rescue Exception => exception
123
127
  rescue_with_handler(exception) || raise
124
128
  end
@@ -128,9 +132,10 @@ module Rubydora
128
132
  # @option options [String] :pid
129
133
  # @return [String]
130
134
  def modify_object options = {}
131
- pid = options.delete(:pid)
135
+ query_options = options.dup
136
+ pid = query_options.delete(:pid)
132
137
  run_hook :before_modify_object, :pid => pid, :options => options
133
- client[object_url(pid, options)].put nil
138
+ client[object_url(pid, query_options)].put nil
134
139
  rescue Exception => exception
135
140
  rescue_with_handler(exception) || raise
136
141
  end
@@ -140,9 +145,10 @@ module Rubydora
140
145
  # @option options [String] :pid
141
146
  # @return [String]
142
147
  def purge_object options = {}
143
- pid = options.delete(:pid)
148
+ query_options = options.dup
149
+ pid = query_options.delete(:pid)
144
150
  run_hook :before_purge_object, :pid => pid, :options => options
145
- client[object_url(pid, options)].delete
151
+ client[object_url(pid, query_options)].delete
146
152
  rescue Exception => exception
147
153
  rescue_with_handler(exception) || raise
148
154
  end
@@ -152,10 +158,11 @@ module Rubydora
152
158
  # @option options [String] :pid
153
159
  # @return [String]
154
160
  def object_versions options = {}
155
- pid = options.delete(:pid)
156
- options[:format] ||= 'xml'
161
+ query_options = options.dup
162
+ pid = query_options.delete(:pid)
163
+ query_options[:format] ||= 'xml'
157
164
  raise ArgumentError, "Must have a pid" unless pid
158
- client[object_versions_url(pid, options)].get
165
+ client[object_versions_url(pid, query_options)].get
159
166
  rescue Exception => exception
160
167
  rescue_with_handler(exception) || raise
161
168
  end
@@ -165,10 +172,11 @@ module Rubydora
165
172
  # @option options [String] :pid
166
173
  # @return [String]
167
174
  def object_xml options = {}
168
- pid = options.delete(:pid)
175
+ query_options = options.dup
176
+ pid = query_options.delete(:pid)
169
177
  raise ArgumentError, "Missing required parameter :pid" unless pid
170
- options[:format] ||= 'xml'
171
- client[object_xml_url(pid, options)].get
178
+ query_options[:format] ||= 'xml'
179
+ client[object_xml_url(pid, query_options)].get
172
180
  rescue Exception => exception
173
181
  rescue_with_handler(exception) || raise
174
182
  end
@@ -181,18 +189,19 @@ module Rubydora
181
189
  # @option options [String] :validateChecksum
182
190
  # @return [String]
183
191
  def datastream options = {}
184
- pid = options.delete(:pid)
185
- dsid = options.delete(:dsid)
186
- options[:format] ||= 'xml'
192
+ query_options = options.dup
193
+ pid = query_options.delete(:pid)
194
+ dsid = query_options.delete(:dsid)
195
+ query_options[:format] ||= 'xml'
187
196
  val = nil
188
197
  message = dsid.nil? ? "Loaded datastream list for #{pid}" : "Loaded datastream #{pid}/#{dsid}"
189
198
  benchmark message, :level=>:debug do
190
- val = client[datastream_url(pid, dsid, options)].get
199
+ val = client[datastream_url(pid, dsid, query_options)].get
191
200
  end
192
201
 
193
202
  val
194
203
  rescue RestClient::Unauthorized => e
195
- logger.error "Unauthorized at #{client.url}/#{datastream_url(pid, dsid, options)}"
204
+ logger.error "Unauthorized at #{client.url}/#{datastream_url(pid, dsid, query_options)}"
196
205
  raise e
197
206
  rescue Exception => exception
198
207
  rescue_with_handler(exception) || raise
@@ -206,10 +215,11 @@ module Rubydora
206
215
  # @option options [String] :dsid
207
216
  # @return [String]
208
217
  def set_datastream_options options = {}
209
- pid = options.delete(:pid)
210
- dsid = options.delete(:dsid)
218
+ query_options = options.dup
219
+ pid = query_options.delete(:pid)
220
+ dsid = query_options.delete(:dsid)
211
221
  run_hook :before_set_datastream_options, :pid => pid, :dsid => dsid, :options => options
212
- client[datastream_url(pid, dsid, options)].put nil
222
+ client[datastream_url(pid, dsid, query_options)].put nil
213
223
  rescue Exception => exception
214
224
  rescue_with_handler(exception) || raise
215
225
  end
@@ -220,11 +230,12 @@ module Rubydora
220
230
  # @option options [String] :dsid
221
231
  # @return [String]
222
232
  def datastream_versions options = {}
223
- pid = options.delete(:pid)
224
- dsid = options.delete(:dsid)
233
+ query_options = options.dup
234
+ pid = query_options.delete(:pid)
235
+ dsid = query_options.delete(:dsid)
225
236
  raise ArgumentError, "Must supply dsid" unless dsid
226
- options[:format] ||= 'xml'
227
- client[datastream_history_url(pid, dsid, options)].get
237
+ query_options[:format] ||= 'xml'
238
+ client[datastream_history_url(pid, dsid, query_options)].get
228
239
  rescue RestClient::ResourceNotFound => e
229
240
  #404 Resource Not Found: No datastream history could be found. There is no datastream history for the digital object "changeme:1" with datastream ID of "descMetadata
230
241
  return nil
@@ -240,15 +251,16 @@ module Rubydora
240
251
  # @option options [String] :dsid
241
252
  # @return [String]
242
253
  def datastream_dissemination options = {}, &block_response
243
- pid = options.delete(:pid)
244
- dsid = options.delete(:dsid)
245
- method = options.delete(:method)
254
+ query_options = options.dup
255
+ pid = query_options.delete(:pid)
256
+ dsid = query_options.delete(:dsid)
257
+ method = query_options.delete(:method)
246
258
  method ||= :get
247
259
  raise self.class.name + "#datastream_dissemination requires a DSID" unless dsid
248
260
  if block_given?
249
- resource = safe_subresource(datastream_content_url(pid, dsid, options), :block_response => block_response)
261
+ resource = safe_subresource(datastream_content_url(pid, dsid, query_options), :block_response => block_response)
250
262
  else
251
- resource = client[datastream_content_url(pid, dsid, options)]
263
+ resource = client[datastream_content_url(pid, dsid, query_options)]
252
264
  end
253
265
  resource.send(method)
254
266
  rescue Exception => exception
@@ -261,12 +273,13 @@ module Rubydora
261
273
  # @option options [String] :dsid
262
274
  # @return [String]
263
275
  def add_datastream options = {}
264
- pid = options.delete(:pid)
265
- dsid = options.delete(:dsid)
266
- file = options.delete(:content)
267
- content_type = options.delete(:content_type) || options[:mimeType] || (MIME::Types.type_for(file.path).first if file.respond_to? :path) || 'application/octet-stream'
276
+ query_options = options.dup
277
+ pid = query_options.delete(:pid)
278
+ dsid = query_options.delete(:dsid)
279
+ file = query_options.delete(:content)
280
+ content_type = query_options.delete(:content_type) || query_options[:mimeType] || (MIME::Types.type_for(file.path).first if file.respond_to? :path) || 'application/octet-stream'
268
281
  run_hook :before_add_datastream, :pid => pid, :dsid => dsid, :file => file, :options => options
269
- client[datastream_url(pid, dsid, options)].post file, :content_type => content_type.to_s, :multipart => true
282
+ client[datastream_url(pid, dsid, query_options)].post file, :content_type => content_type.to_s, :multipart => true
270
283
  rescue Exception => exception
271
284
  rescue_with_handler(exception) || raise
272
285
  end
@@ -277,10 +290,11 @@ module Rubydora
277
290
  # @option options [String] :dsid
278
291
  # @return [String]
279
292
  def modify_datastream options = {}
280
- pid = options.delete(:pid)
281
- dsid = options.delete(:dsid)
282
- file = options.delete(:content)
283
- content_type = options.delete(:content_type) || options[:mimeType] || (MIME::Types.type_for(file.path).first if file.respond_to? :path) || 'application/octet-stream'
293
+ query_options = options.dup
294
+ pid = query_options.delete(:pid)
295
+ dsid = query_options.delete(:dsid)
296
+ file = query_options.delete(:content)
297
+ content_type = query_options.delete(:content_type) || query_options[:mimeType] || (MIME::Types.type_for(file.path).first if file.respond_to? :path) || 'application/octet-stream'
284
298
 
285
299
  rest_client_options = {}
286
300
  if file
@@ -289,7 +303,7 @@ module Rubydora
289
303
  end
290
304
 
291
305
  run_hook :before_modify_datastream, :pid => pid, :dsid => dsid, :file => file, :content_type => content_type, :options => options
292
- client[datastream_url(pid, dsid, options)].put(file, rest_client_options)
306
+ client[datastream_url(pid, dsid, query_options)].put(file, rest_client_options)
293
307
 
294
308
  rescue Exception => exception
295
309
  rescue_with_handler(exception) || raise
@@ -301,10 +315,11 @@ module Rubydora
301
315
  # @option options [String] :dsid
302
316
  # @return [String]
303
317
  def purge_datastream options = {}
304
- pid = options.delete(:pid)
305
- dsid = options.delete(:dsid)
318
+ query_options = options.dup
319
+ pid = query_options.delete(:pid)
320
+ dsid = query_options.delete(:dsid)
306
321
  run_hook :before_purge_datastream, :pid => pid, :dsid => dsid
307
- client[datastream_url(pid, dsid, options)].delete
322
+ client[datastream_url(pid, dsid, query_options)].delete
308
323
  rescue Exception => exception
309
324
  rescue_with_handler(exception) || raise
310
325
  end
@@ -314,10 +329,11 @@ module Rubydora
314
329
  # @option options [String] :pid
315
330
  # @return [String]
316
331
  def relationships options = {}
317
- pid = options.delete(:pid) || options[:subject]
332
+ query_options = options.dup
333
+ pid = query_options.delete(:pid) || query_options[:subject]
318
334
  raise ArgumentError, "Missing required parameter :pid" unless pid
319
- options[:format] ||= 'xml'
320
- client[object_relationship_url(pid, options)].get
335
+ query_options[:format] ||= 'xml'
336
+ client[object_relationship_url(pid, query_options)].get
321
337
  rescue Exception => exception
322
338
  rescue_with_handler(exception) || raise
323
339
  end
@@ -327,9 +343,10 @@ module Rubydora
327
343
  # @option options [String] :pid
328
344
  # @return [String]
329
345
  def add_relationship options = {}
330
- pid = options.delete(:pid) || options[:subject]
346
+ query_options = options.dup
347
+ pid = query_options.delete(:pid) || query_options[:subject]
331
348
  run_hook :before_add_relationship, :pid => pid, :options => options
332
- client[new_object_relationship_url(pid, options)].post nil
349
+ client[new_object_relationship_url(pid, query_options)].post nil
333
350
  rescue Exception => exception
334
351
  rescue_with_handler(exception) || raise
335
352
  end
@@ -339,9 +356,10 @@ module Rubydora
339
356
  # @option options [String] :pid
340
357
  # @return [String]
341
358
  def purge_relationship options = {}
342
- pid = options.delete(:pid) || options[:subject]
359
+ query_options = options.dup
360
+ pid = query_options.delete(:pid) || query_options[:subject]
343
361
  run_hook :before_purge_relationship, :pid => pid, :options => options
344
- client[object_relationship_url(pid, options)].delete
362
+ client[object_relationship_url(pid, query_options)].delete
345
363
  rescue Exception => exception
346
364
  rescue_with_handler(exception) || raise
347
365
  end
@@ -353,14 +371,15 @@ module Rubydora
353
371
  # @option options [String] :method
354
372
  # @return [String]
355
373
  def dissemination options = {}, &block_response
356
- pid = options.delete(:pid)
357
- sdef = options.delete(:sdef)
358
- method = options.delete(:method)
359
- options[:format] ||= 'xml' unless pid and sdef and method
374
+ query_options = options.dup
375
+ pid = query_options.delete(:pid)
376
+ sdef = query_options.delete(:sdef)
377
+ method = query_options.delete(:method)
378
+ query_options[:format] ||= 'xml' unless pid and sdef and method
360
379
  if block_given?
361
- resource = safe_subresource(dissemination_url(pid,sdef,method,options), :block_response => block_response)
380
+ resource = safe_subresource(dissemination_url(pid,sdef,method,query_options), :block_response => block_response)
362
381
  else
363
- resource = client[dissemination_url(pid,sdef,method,options)]
382
+ resource = client[dissemination_url(pid,sdef,method,query_options)]
364
383
  end
365
384
  resource.get
366
385
 
@@ -85,6 +85,9 @@ module Rubydora
85
85
 
86
86
  class Transaction
87
87
  attr_reader :repository
88
+ include Hooks
89
+ define_hook "after_rollback"
90
+
88
91
  def initialize repository, &block
89
92
  @repository = repository
90
93
  with_transactions(&block)
@@ -150,6 +153,8 @@ module Rubydora
150
153
  # no-op
151
154
  end
152
155
 
156
+ run_hook :after_rollback, :pid => options[:pid], :method => method, :options => options
157
+
153
158
  end
154
159
  end
155
160
  true
data/lib/rubydora.rb CHANGED
@@ -21,6 +21,7 @@ module Rubydora
21
21
 
22
22
  require 'csv'
23
23
  require 'time'
24
+ require 'hooks'
24
25
 
25
26
  if CSV.const_defined? :Reader
26
27
  require 'fastercsv'
@@ -8,8 +8,27 @@ describe Rubydora::Transactions do
8
8
  repository = Rubydora::Repository.new :url => 'http://example.org'
9
9
  }
10
10
 
11
-
12
11
  describe "#rollback" do
12
+
13
+ it "should fire a after_rollback hook" do
14
+ i = 0
15
+ Rubydora::Transaction.after_rollback do
16
+ i+=1
17
+ end
18
+
19
+ subject.transaction do |t|
20
+ subject.append_to_transactions_log :asdf, :pid => 'asdf'
21
+ subject.append_to_transactions_log :asdf, :pid => 'asdf'
22
+ subject.append_to_transactions_log :asdf, :pid => 'asdf'
23
+ subject.append_to_transactions_log :asdf, :pid => 'asdf'
24
+ subject.append_to_transactions_log :asdf, :pid => 'asdf'
25
+ subject.append_to_transactions_log :asdf, :pid => 'asdf'
26
+ t.rollback
27
+ end
28
+
29
+ i.should == 6
30
+ end
31
+
13
32
  it "ingest" do
14
33
  subject.client.stub_chain(:[], :post).and_return 'asdf'
15
34
  subject.should_receive(:purge_object).with(hash_including(:pid => 'asdf'))
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubydora
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.11
4
+ version: 0.5.12
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -310,12 +310,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
310
310
  - - ! '>='
311
311
  - !ruby/object:Gem::Version
312
312
  version: '0'
313
+ segments:
314
+ - 0
315
+ hash: -1776488300066485637
313
316
  required_rubygems_version: !ruby/object:Gem::Requirement
314
317
  none: false
315
318
  requirements:
316
319
  - - ! '>='
317
320
  - !ruby/object:Gem::Version
318
321
  version: '0'
322
+ segments:
323
+ - 0
324
+ hash: -1776488300066485637
319
325
  requirements: []
320
326
  rubyforge_project:
321
327
  rubygems_version: 1.8.24