rubydora 1.2.0 → 1.2.1
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/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
|