rubydora 1.2.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.textile +4 -0
- data/VERSION +1 -1
- data/lib/rubydora/datastream.rb +8 -2
- data/lib/rubydora/rest_api_client.rb +6 -2
- data/spec/lib/datastream_spec.rb +5 -4
- data/spec/lib/rest_api_client_spec.rb +22 -3
- metadata +42 -4
- checksums.yaml +0 -7
data/History.textile
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
h3. 1.2.1
|
2
|
+
* Support for Rack::Test::UploadedFile
|
3
|
+
* Allow reading content that is a kind of IO after save
|
4
|
+
|
1
5
|
h3. 0.5.11
|
2
6
|
* Ensure that the base rest resource is insulated from blocks passed to dissemination and datastream_dissemination.
|
3
7
|
* Deprecated a behavior for DigitalObject.find that allowed one to call DigitalObject.find for a non-existent object. This will raise an exception in a future rubydora release. Instead, you should use the new DigitalObject.find_or_initialize for that behavior.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.2.
|
1
|
+
1.2.1
|
data/lib/rubydora/datastream.rb
CHANGED
@@ -129,7 +129,7 @@ module Rubydora
|
|
129
129
|
|
130
130
|
@content ||= datastream_content
|
131
131
|
|
132
|
-
if @content
|
132
|
+
if behaves_like_io?(@content)
|
133
133
|
begin
|
134
134
|
@content.rewind
|
135
135
|
@content.read
|
@@ -205,7 +205,7 @@ module Rubydora
|
|
205
205
|
|
206
206
|
# return true if instance_variable_defined? :@content
|
207
207
|
|
208
|
-
@content
|
208
|
+
behaves_like_io?(@content) || !content.blank?
|
209
209
|
end
|
210
210
|
|
211
211
|
# Retrieve the datastream profile as a hash (and cache it)
|
@@ -367,6 +367,12 @@ module Rubydora
|
|
367
367
|
end
|
368
368
|
|
369
369
|
private
|
370
|
+
|
371
|
+
# Rack::Test::UploadedFile is often set via content=, however it's not an IO, though it wraps an io object.
|
372
|
+
def behaves_like_io?(obj)
|
373
|
+
obj.is_a?(IO) || (defined?(Rack) && obj.is_a?(Rack::Test::UploadedFile))
|
374
|
+
end
|
375
|
+
|
370
376
|
def attribute_will_change! *args
|
371
377
|
check_if_read_only
|
372
378
|
super
|
@@ -279,7 +279,9 @@ module Rubydora
|
|
279
279
|
file = query_options.delete(:content)
|
280
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'
|
281
281
|
run_hook :before_add_datastream, :pid => pid, :dsid => dsid, :file => file, :options => options
|
282
|
-
|
282
|
+
str = file.respond_to?(:read) ? file.read : file
|
283
|
+
file.rewind if file.respond_to?(:rewind)
|
284
|
+
client[datastream_url(pid, dsid, query_options)].post(str, :content_type => content_type.to_s, :multipart => true)
|
283
285
|
rescue Exception => exception
|
284
286
|
rescue_with_handler(exception) || raise
|
285
287
|
end
|
@@ -303,7 +305,9 @@ module Rubydora
|
|
303
305
|
end
|
304
306
|
|
305
307
|
run_hook :before_modify_datastream, :pid => pid, :dsid => dsid, :file => file, :content_type => content_type, :options => options
|
306
|
-
|
308
|
+
str = file.respond_to?(:read) ? file.read : file
|
309
|
+
file.rewind if file.respond_to?(:rewind)
|
310
|
+
client[datastream_url(pid, dsid, query_options)].put(str, rest_client_options)
|
307
311
|
|
308
312
|
rescue Exception => exception
|
309
313
|
rescue_with_handler(exception) || raise
|
data/spec/lib/datastream_spec.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'stringio'
|
2
3
|
|
3
4
|
describe Rubydora::Datastream do
|
4
5
|
before do
|
@@ -187,26 +188,26 @@ describe Rubydora::Datastream do
|
|
187
188
|
@datastream.content
|
188
189
|
@datastream.content_changed?.should == false
|
189
190
|
end
|
190
|
-
it "should be changed
|
191
|
+
it "should be changed when the new content is different than the old content" do
|
191
192
|
@mock_repository.stub(:datastream_dissemination).with(hash_including(:pid => 'pid', :dsid => 'dsid')).and_return('asdf')
|
192
193
|
@datastream.content = "test"
|
193
194
|
@datastream.content_changed?.should == true
|
194
195
|
end
|
195
196
|
|
196
|
-
it "should not be changed
|
197
|
+
it "should not be changed when the new content is the same as the existing content (when eager-loading is enabled)" do
|
197
198
|
@mock_repository.stub(:datastream_dissemination).with(hash_including(:pid => 'pid', :dsid => 'dsid')).and_return('test')
|
198
199
|
@datastream.eager_load_datastream_content = true
|
199
200
|
@datastream.content = "test"
|
200
201
|
@datastream.content_changed?.should == false
|
201
202
|
end
|
202
203
|
|
203
|
-
it "should be changed
|
204
|
+
it "should be changed when the new content is the same as the existing content (without eager loading, the default)" do
|
204
205
|
@mock_repository.stub(:datastream_dissemination).with(hash_including(:pid => 'pid', :dsid => 'dsid')).and_return('test')
|
205
206
|
@datastream.content = "test"
|
206
207
|
@datastream.content_changed?.should == true
|
207
208
|
end
|
208
209
|
|
209
|
-
it "should not be changed
|
210
|
+
it "should not be changed when the new content is the same as the existing content (and we have accessed #content previously)" do
|
210
211
|
@mock_repository.stub(:datastream_dissemination).with(hash_including(:pid => 'pid', :dsid => 'dsid')).and_return('test')
|
211
212
|
@datastream.content
|
212
213
|
@datastream.content = "test"
|
@@ -183,9 +183,20 @@ describe Rubydora::RestApiClient do
|
|
183
183
|
lambda {@mock_repository.datastream_dissemination :pid => 'mypid', :dsid => 'aaa'}.should raise_error RestClient::ResourceNotFound
|
184
184
|
end
|
185
185
|
|
186
|
-
|
187
|
-
|
188
|
-
|
186
|
+
describe "add_datastream" do
|
187
|
+
it "should post to the correct url" do
|
188
|
+
RestClient::Request.should_receive(:execute).with(hash_including(:url => "http://example.org/objects/mypid/datastreams/aaa"))
|
189
|
+
@mock_repository.add_datastream :pid => 'mypid', :dsid => 'aaa'
|
190
|
+
end
|
191
|
+
|
192
|
+
describe "when a file is passed" do
|
193
|
+
it "should rewind the file" do
|
194
|
+
RestClient::Request.any_instance.should_receive(:transmit) #stub transmit so that Request.execute can close the file we pass
|
195
|
+
file = StringIO.new('test', 'r') # StringIO is a good stand it for a real File (it has read, rewind and close)
|
196
|
+
@mock_repository.add_datastream :pid => 'mypid', :dsid => 'aaa', :content=>file
|
197
|
+
lambda {file.read}.should_not raise_error IOError
|
198
|
+
end
|
199
|
+
end
|
189
200
|
end
|
190
201
|
|
191
202
|
describe "modify datastream" do
|
@@ -197,6 +208,14 @@ describe Rubydora::RestApiClient do
|
|
197
208
|
RestClient::Request.should_receive(:execute).with(:url => "http://example.org/objects/mypid/datastreams/aaa?mimeType=application%2Fjson",:open_timeout=>nil, :payload=>nil, :user=>@fedora_user, :password=>@fedora_password, :method=>:put, :headers=>{})
|
198
209
|
@mock_repository.modify_datastream :pid => 'mypid', :dsid => 'aaa', :mimeType=>'application/json'
|
199
210
|
end
|
211
|
+
describe "when a file is passed" do
|
212
|
+
it "should rewind the file" do
|
213
|
+
RestClient::Request.any_instance.should_receive(:transmit) #stub transmit so that Request.execute can close the file we pass
|
214
|
+
file = StringIO.new('test', 'r') # StringIO is a good stand it for a real File (it has read, rewind and close)
|
215
|
+
@mock_repository.modify_datastream :pid => 'mypid', :dsid => 'aaa', :content=>file
|
216
|
+
lambda {file.read}.should_not raise_error IOError
|
217
|
+
end
|
218
|
+
end
|
200
219
|
end
|
201
220
|
|
202
221
|
it "purge_datastream" do
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubydora
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.1
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Chris Beer
|
@@ -13,6 +14,7 @@ dependencies:
|
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: fastercsv
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -20,6 +22,7 @@ dependencies:
|
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ! '>='
|
25
28
|
- !ruby/object:Gem::Version
|
@@ -27,6 +30,7 @@ dependencies:
|
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: rest-client
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
35
|
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
@@ -34,6 +38,7 @@ dependencies:
|
|
34
38
|
type: :runtime
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
43
|
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
@@ -41,6 +46,7 @@ dependencies:
|
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: nokogiri
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
51
|
- - ! '>='
|
46
52
|
- !ruby/object:Gem::Version
|
@@ -48,6 +54,7 @@ dependencies:
|
|
48
54
|
type: :runtime
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
59
|
- - ! '>='
|
53
60
|
- !ruby/object:Gem::Version
|
@@ -55,6 +62,7 @@ dependencies:
|
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: equivalent-xml
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
67
|
- - ! '>='
|
60
68
|
- !ruby/object:Gem::Version
|
@@ -62,6 +70,7 @@ dependencies:
|
|
62
70
|
type: :runtime
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
75
|
- - ! '>='
|
67
76
|
- !ruby/object:Gem::Version
|
@@ -69,6 +78,7 @@ dependencies:
|
|
69
78
|
- !ruby/object:Gem::Dependency
|
70
79
|
name: mime-types
|
71
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
72
82
|
requirements:
|
73
83
|
- - ! '>='
|
74
84
|
- !ruby/object:Gem::Version
|
@@ -76,6 +86,7 @@ dependencies:
|
|
76
86
|
type: :runtime
|
77
87
|
prerelease: false
|
78
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
79
90
|
requirements:
|
80
91
|
- - ! '>='
|
81
92
|
- !ruby/object:Gem::Version
|
@@ -83,6 +94,7 @@ dependencies:
|
|
83
94
|
- !ruby/object:Gem::Dependency
|
84
95
|
name: activesupport
|
85
96
|
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
86
98
|
requirements:
|
87
99
|
- - ! '>='
|
88
100
|
- !ruby/object:Gem::Version
|
@@ -90,6 +102,7 @@ dependencies:
|
|
90
102
|
type: :runtime
|
91
103
|
prerelease: false
|
92
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
93
106
|
requirements:
|
94
107
|
- - ! '>='
|
95
108
|
- !ruby/object:Gem::Version
|
@@ -97,6 +110,7 @@ dependencies:
|
|
97
110
|
- !ruby/object:Gem::Dependency
|
98
111
|
name: activemodel
|
99
112
|
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
100
114
|
requirements:
|
101
115
|
- - ! '>='
|
102
116
|
- !ruby/object:Gem::Version
|
@@ -104,6 +118,7 @@ dependencies:
|
|
104
118
|
type: :runtime
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
107
122
|
requirements:
|
108
123
|
- - ! '>='
|
109
124
|
- !ruby/object:Gem::Version
|
@@ -111,6 +126,7 @@ dependencies:
|
|
111
126
|
- !ruby/object:Gem::Dependency
|
112
127
|
name: hooks
|
113
128
|
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
114
130
|
requirements:
|
115
131
|
- - ! '>='
|
116
132
|
- !ruby/object:Gem::Version
|
@@ -118,6 +134,7 @@ dependencies:
|
|
118
134
|
type: :runtime
|
119
135
|
prerelease: false
|
120
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
121
138
|
requirements:
|
122
139
|
- - ! '>='
|
123
140
|
- !ruby/object:Gem::Version
|
@@ -125,6 +142,7 @@ dependencies:
|
|
125
142
|
- !ruby/object:Gem::Dependency
|
126
143
|
name: deprecation
|
127
144
|
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
128
146
|
requirements:
|
129
147
|
- - ! '>='
|
130
148
|
- !ruby/object:Gem::Version
|
@@ -132,6 +150,7 @@ dependencies:
|
|
132
150
|
type: :runtime
|
133
151
|
prerelease: false
|
134
152
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
135
154
|
requirements:
|
136
155
|
- - ! '>='
|
137
156
|
- !ruby/object:Gem::Version
|
@@ -139,6 +158,7 @@ dependencies:
|
|
139
158
|
- !ruby/object:Gem::Dependency
|
140
159
|
name: rake
|
141
160
|
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
142
162
|
requirements:
|
143
163
|
- - ! '>='
|
144
164
|
- !ruby/object:Gem::Version
|
@@ -146,6 +166,7 @@ dependencies:
|
|
146
166
|
type: :development
|
147
167
|
prerelease: false
|
148
168
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
149
170
|
requirements:
|
150
171
|
- - ! '>='
|
151
172
|
- !ruby/object:Gem::Version
|
@@ -153,6 +174,7 @@ dependencies:
|
|
153
174
|
- !ruby/object:Gem::Dependency
|
154
175
|
name: shoulda
|
155
176
|
requirement: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
156
178
|
requirements:
|
157
179
|
- - ! '>='
|
158
180
|
- !ruby/object:Gem::Version
|
@@ -160,6 +182,7 @@ dependencies:
|
|
160
182
|
type: :development
|
161
183
|
prerelease: false
|
162
184
|
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
163
186
|
requirements:
|
164
187
|
- - ! '>='
|
165
188
|
- !ruby/object:Gem::Version
|
@@ -167,6 +190,7 @@ dependencies:
|
|
167
190
|
- !ruby/object:Gem::Dependency
|
168
191
|
name: bundler
|
169
192
|
requirement: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
170
194
|
requirements:
|
171
195
|
- - ! '>='
|
172
196
|
- !ruby/object:Gem::Version
|
@@ -174,6 +198,7 @@ dependencies:
|
|
174
198
|
type: :development
|
175
199
|
prerelease: false
|
176
200
|
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
177
202
|
requirements:
|
178
203
|
- - ! '>='
|
179
204
|
- !ruby/object:Gem::Version
|
@@ -181,6 +206,7 @@ dependencies:
|
|
181
206
|
- !ruby/object:Gem::Dependency
|
182
207
|
name: rspec
|
183
208
|
requirement: !ruby/object:Gem::Requirement
|
209
|
+
none: false
|
184
210
|
requirements:
|
185
211
|
- - ! '>='
|
186
212
|
- !ruby/object:Gem::Version
|
@@ -188,6 +214,7 @@ dependencies:
|
|
188
214
|
type: :development
|
189
215
|
prerelease: false
|
190
216
|
version_requirements: !ruby/object:Gem::Requirement
|
217
|
+
none: false
|
191
218
|
requirements:
|
192
219
|
- - ! '>='
|
193
220
|
- !ruby/object:Gem::Version
|
@@ -195,6 +222,7 @@ dependencies:
|
|
195
222
|
- !ruby/object:Gem::Dependency
|
196
223
|
name: yard
|
197
224
|
requirement: !ruby/object:Gem::Requirement
|
225
|
+
none: false
|
198
226
|
requirements:
|
199
227
|
- - ! '>='
|
200
228
|
- !ruby/object:Gem::Version
|
@@ -202,6 +230,7 @@ dependencies:
|
|
202
230
|
type: :development
|
203
231
|
prerelease: false
|
204
232
|
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
none: false
|
205
234
|
requirements:
|
206
235
|
- - ! '>='
|
207
236
|
- !ruby/object:Gem::Version
|
@@ -209,6 +238,7 @@ dependencies:
|
|
209
238
|
- !ruby/object:Gem::Dependency
|
210
239
|
name: jettywrapper
|
211
240
|
requirement: !ruby/object:Gem::Requirement
|
241
|
+
none: false
|
212
242
|
requirements:
|
213
243
|
- - ! '>='
|
214
244
|
- !ruby/object:Gem::Version
|
@@ -216,6 +246,7 @@ dependencies:
|
|
216
246
|
type: :development
|
217
247
|
prerelease: false
|
218
248
|
version_requirements: !ruby/object:Gem::Requirement
|
249
|
+
none: false
|
219
250
|
requirements:
|
220
251
|
- - ! '>='
|
221
252
|
- !ruby/object:Gem::Version
|
@@ -259,26 +290,33 @@ files:
|
|
259
290
|
- spec/spec_helper.rb
|
260
291
|
homepage: http://github.com/cbeer/rubydora
|
261
292
|
licenses: []
|
262
|
-
metadata: {}
|
263
293
|
post_install_message:
|
264
294
|
rdoc_options: []
|
265
295
|
require_paths:
|
266
296
|
- lib
|
267
297
|
required_ruby_version: !ruby/object:Gem::Requirement
|
298
|
+
none: false
|
268
299
|
requirements:
|
269
300
|
- - ! '>='
|
270
301
|
- !ruby/object:Gem::Version
|
271
302
|
version: '0'
|
303
|
+
segments:
|
304
|
+
- 0
|
305
|
+
hash: 3546053973135231573
|
272
306
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
307
|
+
none: false
|
273
308
|
requirements:
|
274
309
|
- - ! '>='
|
275
310
|
- !ruby/object:Gem::Version
|
276
311
|
version: '0'
|
312
|
+
segments:
|
313
|
+
- 0
|
314
|
+
hash: 3546053973135231573
|
277
315
|
requirements: []
|
278
316
|
rubyforge_project:
|
279
|
-
rubygems_version:
|
317
|
+
rubygems_version: 1.8.24
|
280
318
|
signing_key:
|
281
|
-
specification_version:
|
319
|
+
specification_version: 3
|
282
320
|
summary: Fedora Commons REST API ruby library
|
283
321
|
test_files:
|
284
322
|
- spec/lib/datastream_spec.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: b471f631fe74aa333385b88af3fb621679fea835
|
4
|
-
data.tar.gz: 4e9c15f0e4a3959de2934bea864a4c1550223637
|
5
|
-
!binary "U0hBNTEy":
|
6
|
-
metadata.gz: fc01978351b753e111973460f21bb896a4fdbac75f836ae9af037f83918c24446eab644d39483d2159b81619f5045113d3ae8d8658ccc366f964de028b485b9a
|
7
|
-
data.tar.gz: 226bbe9530df3e60345f46dccc5159fe89836f3fbb0e79e3ce927d378e553d670d14a0aba3c11f82498e53a7dfe342d7ee8a35b9add5e5b263a6819f17225760
|