rubydora 1.8.0 → 1.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/VERSION +1 -1
- data/lib/rubydora/datastream.rb +21 -7
- data/spec/lib/datastream_spec.rb +105 -30
- data/spec/lib/rest_api_client_spec.rb +0 -1
- data/spec/spec_helper.rb +0 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d68bb2a59b1fdc8fde14dca5e6a8c3f570d1beb5
|
4
|
+
data.tar.gz: e7d55248a5428826c53434e045f9b916584ea37e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0306cd415381d6925ccb5e4b2175b9404269a991d8d808df4b1d8ce235c17d54e9c82e0c22a86bd30b5a682e5ec67025b5b0ed7e04368da5a6e4fcc8d6cf33ba
|
7
|
+
data.tar.gz: 5062367721f76db12c88c62e2981665e40720a49c3fa233becf914e3d406a93a2b63dd313e4af543a688994f30b8954c07df16588a3b39cfaf7ca3f1b4a6fea4
|
data/.travis.yml
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.8.
|
1
|
+
1.8.1
|
data/lib/rubydora/datastream.rb
CHANGED
@@ -226,11 +226,14 @@ module Rubydora
|
|
226
226
|
# @param [Integer] from (bytes) the starting point you want to return.
|
227
227
|
#
|
228
228
|
def stream (from = 0, length = nil)
|
229
|
-
raise "Can't determine dsSize" unless dsSize
|
230
|
-
length = dsSize - from unless length
|
231
229
|
counter = 0
|
232
230
|
Enumerator.new do |blk|
|
233
231
|
repository.datastream_dissemination(:pid => pid, :dsid => dsid) do |response|
|
232
|
+
unless length
|
233
|
+
size = external? ? entity_size(response) : dsSize
|
234
|
+
raise "Can't determine content length" unless size
|
235
|
+
length = size - from
|
236
|
+
end
|
234
237
|
response.read_body do |chunk|
|
235
238
|
last_counter = counter
|
236
239
|
counter += chunk.size
|
@@ -303,11 +306,14 @@ module Rubydora
|
|
303
306
|
check_if_read_only
|
304
307
|
run_callbacks :save do
|
305
308
|
raise RubydoraError.new("Unable to save #{self.inspect} without content") unless has_content?
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
309
|
+
if new?
|
310
|
+
create
|
311
|
+
else
|
312
|
+
p = repository.modify_datastream(to_api_params.merge({ :pid => pid, :dsid => dsid })) || {}
|
313
|
+
reset_profile_attributes
|
314
|
+
self.profile= p unless p.empty?
|
315
|
+
self.class.new(digital_object, dsid, @options)
|
316
|
+
end
|
311
317
|
end
|
312
318
|
end
|
313
319
|
|
@@ -409,5 +415,13 @@ module Rubydora
|
|
409
415
|
check_if_read_only
|
410
416
|
super
|
411
417
|
end
|
418
|
+
|
419
|
+
def entity_size(response)
|
420
|
+
if content_length = response.headers[:content_length]
|
421
|
+
return content_length.to_i
|
422
|
+
end
|
423
|
+
response.body.length
|
424
|
+
end
|
425
|
+
|
412
426
|
end
|
413
427
|
end
|
data/spec/lib/datastream_spec.rb
CHANGED
@@ -27,45 +27,65 @@ describe Rubydora::Datastream do
|
|
27
27
|
before do
|
28
28
|
stub_response = double
|
29
29
|
stub_response.stub(:read_body).and_yield("one1").and_yield('two2').and_yield('thre').and_yield('four')
|
30
|
+
allow(stub_response).to receive(:headers) { {content_length: "16"} }
|
30
31
|
@mock_api.should_receive(:datastream_dissemination).with(hash_including(:pid => 'pid', :dsid => 'dsid')).and_yield(stub_response)
|
31
|
-
prof = <<-XML
|
32
|
-
<datastreamProfile>
|
33
|
-
<dsSize>16</dsSize>
|
34
|
-
</datastreamProfile>
|
35
|
-
XML
|
36
32
|
subject.profile = Rubydora::ProfileParser.parse_datastream_profile(prof)
|
37
33
|
end
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
34
|
+
shared_examples "a streamable datastream" do
|
35
|
+
it "should send the whole thing" do
|
36
|
+
e = subject.stream()
|
37
|
+
result = ''
|
38
|
+
e.each do |blk|
|
39
|
+
result << blk
|
40
|
+
end
|
41
|
+
result.should == 'one1two2threfour'
|
43
42
|
end
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
result
|
43
|
+
it "should send the whole thing when the range is open ended" do
|
44
|
+
e = subject.stream(0)
|
45
|
+
result = ''
|
46
|
+
e.each do |blk|
|
47
|
+
result << blk
|
48
|
+
end
|
49
|
+
result.should == 'one1two2threfour'
|
50
|
+
end
|
51
|
+
it "should get a range not starting at the beginning" do
|
52
|
+
e = subject.stream(3, 13)
|
53
|
+
result = ''
|
54
|
+
e.each do |blk|
|
55
|
+
result << blk
|
56
|
+
end
|
57
|
+
result.should == '1two2threfour'
|
58
|
+
end
|
59
|
+
it "should get a range not ending at the end" do
|
60
|
+
e = subject.stream(4, 8)
|
61
|
+
result = ''
|
62
|
+
e.each do |blk|
|
63
|
+
result << blk
|
64
|
+
end
|
65
|
+
result.should == 'two2thre'
|
51
66
|
end
|
52
|
-
result.should == 'one1two2threfour'
|
53
67
|
end
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
68
|
+
describe "default" do
|
69
|
+
let(:prof) do
|
70
|
+
<<-XML
|
71
|
+
<datastreamProfile>
|
72
|
+
<dsSize>16</dsSize>
|
73
|
+
</datastreamProfile>
|
74
|
+
XML
|
59
75
|
end
|
60
|
-
|
76
|
+
it_behaves_like "a streamable datastream"
|
61
77
|
end
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
78
|
+
describe "controlGroup 'E'" do
|
79
|
+
let(:prof) do
|
80
|
+
<<-XML
|
81
|
+
<datastreamProfile>
|
82
|
+
<dsSize>0</dsSize>
|
83
|
+
<dsLocation>file:/path/to/some/file</dsLocation>
|
84
|
+
<dsControlGroup>E</dsControlGroup>
|
85
|
+
</datastreamProfile>
|
86
|
+
XML
|
67
87
|
end
|
68
|
-
|
88
|
+
it_behaves_like "a streamable datastream"
|
69
89
|
end
|
70
90
|
end
|
71
91
|
|
@@ -837,5 +857,60 @@ describe Rubydora::Datastream do
|
|
837
857
|
@datastream.url.should == "http://example.org/foo/content"
|
838
858
|
end
|
839
859
|
end
|
860
|
+
|
861
|
+
describe "callbacks" do
|
862
|
+
before(:all) do
|
863
|
+
class MyDatastream < Rubydora::Datastream
|
864
|
+
before_save :before_save_callback
|
865
|
+
def before_save_callback; end
|
866
|
+
|
867
|
+
after_save :after_save_callback
|
868
|
+
def after_save_callback; end
|
869
|
+
|
870
|
+
before_create :before_create_callback
|
871
|
+
def before_create_callback; end
|
872
|
+
|
873
|
+
after_create :after_create_callback
|
874
|
+
def after_create_callback; end
|
875
|
+
end
|
876
|
+
end
|
877
|
+
|
878
|
+
before(:each) { @datastream = MyDatastream.new @mock_object, 'dsid' }
|
879
|
+
|
880
|
+
after(:all) do
|
881
|
+
Object.send(:remove_const, :MyDatastream)
|
882
|
+
end
|
883
|
+
|
884
|
+
describe "saving new datastream" do
|
885
|
+
before do
|
886
|
+
allow(@mock_api).to receive(:add_datastream).with(hash_including(:content => 'content', :pid => 'pid', :dsid => 'dsid', :controlGroup => 'M', :dsState => 'A')) { {} }
|
887
|
+
end
|
888
|
+
it "should fire save and create callbacks" do
|
889
|
+
@datastream = MyDatastream.new @mock_object, 'dsid'
|
890
|
+
expect(@datastream).to receive(:before_save_callback)
|
891
|
+
expect(@datastream).to receive(:after_save_callback)
|
892
|
+
expect(@datastream).to receive(:before_create_callback)
|
893
|
+
expect(@datastream).to receive(:after_create_callback)
|
894
|
+
@datastream.content = 'content'
|
895
|
+
@datastream.stub(:profile => {})
|
896
|
+
@datastream.save
|
897
|
+
end
|
898
|
+
end
|
899
|
+
describe "saving persisted datastream" do
|
900
|
+
before do
|
901
|
+
allow(@mock_api).to receive(:modify_datastream).with(hash_including(:content => 'content', :pid => 'pid', :dsid => 'dsid')) { {} }
|
902
|
+
end
|
903
|
+
it "should fire only save callbacks" do
|
904
|
+
expect(@datastream).to receive(:before_save_callback)
|
905
|
+
expect(@datastream).to receive(:after_save_callback)
|
906
|
+
expect(@datastream).not_to receive(:before_create_callback)
|
907
|
+
expect(@datastream).not_to receive(:after_create_callback)
|
908
|
+
@datastream.content = 'content'
|
909
|
+
@datastream.stub(:profile => {dsLabel: "label"})
|
910
|
+
@datastream.save
|
911
|
+
end
|
912
|
+
end
|
913
|
+
end
|
914
|
+
|
840
915
|
end
|
841
916
|
|
data/spec/spec_helper.rb
CHANGED
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.8.
|
4
|
+
version: 1.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Beer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fastercsv
|