rubydora 1.6.1 → 1.6.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7e7244b839f54ecfee40b9d2c689c54b92aefeae
4
- data.tar.gz: 67ecac240d565b673d7c342a1aa0a1a47b1fb3c1
3
+ metadata.gz: 3a5b245a875f22288d000657c72694c89601fd52
4
+ data.tar.gz: bccc0e54f0a6c6a208cbff50ce97ccec33ce36aa
5
5
  SHA512:
6
- metadata.gz: 129b77a40cb1c0c0da8e6ae445b65647d33e510a90907bd0ef36639f63de880a297e3c52eebaaf37380586adf24b6b6183c8828836426722ff9835e9810c79b6
7
- data.tar.gz: 1e2f11112a46df3239cb08ea27f2b7d35acc1807fd7bd2c31504edf142d2f7979f59d69294b3a8a26893ff49fbf327d33cba8552f003abaa0a31d4ea26b4b542
6
+ metadata.gz: a25f822e7db26590892d49f6b36aa51e4f6241db5ffc9b1d6add176af57619b3740c3b26ecaafcbe9119861f31d433c27e108ff785858fb27051ff8f137f7242
7
+ data.tar.gz: aec54491026595a746447295f391ceb17f1ae012ab92334f57f07170f819f99f93387b399338d50c7d0512a7ee6f7febccf18c0d72084f58419afbf355515ce8
data/History.textile CHANGED
@@ -1,3 +1,8 @@
1
+ h3. 1.6.2 (29 April 2013)
2
+ * Handle 401 (no access) from Fedora in a graceful manner
3
+ * Expose methods relating to control group (e.g. external?, redirect?, managed?, inline?)
4
+ * validate that a pid is passed as one of the arguments to RestApiClient#export
5
+
1
6
  h3. 1.6.1
2
7
  * Removed break which caused Enumerator to never terminate
3
8
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.6.1
1
+ 1.6.2
@@ -359,6 +359,28 @@ module Rubydora
359
359
  attribute_will_change! :profile
360
360
  end
361
361
 
362
+ # @return [boolean] is this an external datastream?
363
+ def external?
364
+ controlGroup == 'E'
365
+ end
366
+
367
+ # @return [boolean] is this a redirect datastream?
368
+ def redirect?
369
+ controlGroup == 'R'
370
+ end
371
+
372
+ # @return [boolean] is this a managed datastream?
373
+ def managed?
374
+ controlGroup == 'M'
375
+ end
376
+
377
+ # @return [boolean] is this an inline datastream?
378
+ def inline?
379
+ controlGroup == 'X'
380
+ end
381
+
382
+
383
+
362
384
  protected
363
385
  # datastream parameters
364
386
  # @return [Hash]
@@ -409,27 +431,6 @@ module Rubydora
409
431
  URI.parse(val) unless val.nil?
410
432
  end
411
433
 
412
- # @return [boolean] is this an external datastream?
413
- def external?
414
- controlGroup == 'E'
415
- end
416
-
417
- # @return [boolean] is this a redirect datastream?
418
- def redirect?
419
- controlGroup == 'R'
420
- end
421
-
422
- # @return [boolean] is this a managed datastream?
423
- def managed?
424
- controlGroup == 'M'
425
- end
426
-
427
- # @return [boolean] is this an inline datastream?
428
- def inline?
429
- controlGroup == 'X'
430
- end
431
-
432
-
433
434
  private
434
435
 
435
436
  # Rack::Test::UploadedFile is often set via content=, however it's not an IO, though it wraps an io object.
@@ -28,7 +28,7 @@ module Rubydora
28
28
  #
29
29
  # @params [String] query
30
30
  # @params [Hash] options
31
- # @yield [DigitalObject] Yield a DigitalObject for each search result
31
+ # @yield [DigitalObject] Yield a DigitalObject for each search result, skipping forbidden objects
32
32
  def search query, options = {}, &block
33
33
  return to_enum(:search, query, options).to_a unless block_given?
34
34
 
@@ -42,7 +42,14 @@ module Rubydora
42
42
  response = self.find_objects(options.merge(:query => query, :resultFormat => 'xml', :pid => true).merge(sessionOptions))
43
43
 
44
44
  doc = Nokogiri::XML(response)
45
- doc.xpath('//xmlns:objectFields/xmlns:pid', doc.namespaces).each { |pid| obj = self.find(pid.text); block.call(obj) }
45
+ doc.xpath('//xmlns:objectFields/xmlns:pid', doc.namespaces).each do |pid|
46
+ begin
47
+ obj = self.find(pid.text);
48
+ rescue RestClient::Unauthorized
49
+ next
50
+ end
51
+ block.call(obj)
52
+ end
46
53
 
47
54
  sessionToken = doc.xpath('//xmlns:listSession/xmlns:token', doc.namespaces).text
48
55
  end until sessionToken.nil? or sessionToken.empty? or doc.xpath('//xmlns:resultList/xmlns:objectFields', doc.namespaces).empty?
@@ -122,6 +122,7 @@ module Rubydora
122
122
  def export options = {}
123
123
  query_options = options.dup
124
124
  pid = query_options.delete(:pid)
125
+ raise ArgumentError, "Must have a pid" unless pid
125
126
  client[export_object_url(pid, query_options)].get
126
127
  rescue Exception => exception
127
128
  rescue_with_handler(exception) || raise
data/rubydora.gemspec CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
9
9
  s.email = ["chris@cbeer.info"]
10
10
  s.summary = %q{Fedora Commons REST API ruby library }
11
11
  s.description = %q{Fedora Commons REST API ruby library}
12
- s.homepage = "http://github.com/cbeer/rubydora"
12
+ s.homepage = "http://github.com/projecthydra/rubydora"
13
13
 
14
14
  s.files = `git ls-files`.split("\n")
15
15
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -32,4 +32,5 @@ Gem::Specification.new do |s|
32
32
  s.add_development_dependency("rspec")
33
33
  s.add_development_dependency("yard")
34
34
  s.add_development_dependency("jettywrapper")
35
+ s.add_development_dependency("webmock")
35
36
  end
@@ -413,6 +413,18 @@ describe "Integration testing against a live Fedora repository", :integration =>
413
413
  pids.should include('test:1', 'test:2')
414
414
  end
415
415
 
416
+ it "should skip forbidden objects" do
417
+ # lets say the object test:2 is forbidden
418
+ stub = stub_http_request(:get, /.*test:2.*/).to_return(:status => 401)
419
+ objects = []
420
+ lambda { objects = @repository.search('pid~test:*') }.should_not raise_error
421
+ pids = objects.map {|obj| obj.pid }
422
+ pids.should include('test:1')
423
+ pids.should_not include('test:2')
424
+ stub.should have_been_requested
425
+ WebMock.reset!
426
+ end
427
+
416
428
  end
417
429
 
418
430
  it "should not destroy content when datastream properties are changed" do
@@ -109,9 +109,14 @@ describe Rubydora::RestApiClient do
109
109
  @mock_repository.ingest :pid => 'mypid'
110
110
  end
111
111
 
112
- it "export" do
113
- RestClient::Request.should_receive(:execute).with(hash_including(:url => "http://example.org/objects/mypid/export"))
114
- @mock_repository.export :pid => 'mypid'
112
+ describe "export" do
113
+ it "should work on the happy path" do
114
+ RestClient::Request.should_receive(:execute).with(hash_including(:url => "http://example.org/objects/mypid/export"))
115
+ @mock_repository.export :pid => 'mypid'
116
+ end
117
+ it "should require a pid" do
118
+ lambda { @mock_repository.export }.should raise_error ArgumentError, "Must have a pid"
119
+ end
115
120
  end
116
121
 
117
122
  it "modify_object" do
data/spec/spec_helper.rb CHANGED
@@ -13,6 +13,9 @@ end
13
13
  require 'rspec/autorun'
14
14
  require 'loggable'
15
15
  require 'rubydora'
16
+ require 'webmock/rspec'
17
+
18
+ WebMock.allow_net_connect!
16
19
 
17
20
  RSpec.configure do |config|
18
21
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubydora
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.1
4
+ version: 1.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Beer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-03-27 00:00:00.000000000 Z
11
+ date: 2013-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fastercsv
@@ -220,6 +220,20 @@ dependencies:
220
220
  - - '>='
221
221
  - !ruby/object:Gem::Version
222
222
  version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: webmock
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - '>='
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - '>='
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
223
237
  description: Fedora Commons REST API ruby library
224
238
  email:
225
239
  - chris@cbeer.info
@@ -260,7 +274,7 @@ files:
260
274
  - spec/lib/rest_api_client_spec.rb
261
275
  - spec/lib/transactions_spec.rb
262
276
  - spec/spec_helper.rb
263
- homepage: http://github.com/cbeer/rubydora
277
+ homepage: http://github.com/projecthydra/rubydora
264
278
  licenses: []
265
279
  metadata: {}
266
280
  post_install_message:
@@ -279,7 +293,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
279
293
  version: '0'
280
294
  requirements: []
281
295
  rubyforge_project:
282
- rubygems_version: 2.0.0
296
+ rubygems_version: 2.0.3
283
297
  signing_key:
284
298
  specification_version: 4
285
299
  summary: Fedora Commons REST API ruby library