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 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.0
1
+ 1.2.1
@@ -129,7 +129,7 @@ module Rubydora
129
129
 
130
130
  @content ||= datastream_content
131
131
 
132
- if @content.kind_of? IO
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.is_a?(IO) || !content.blank?
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
- client[datastream_url(pid, dsid, query_options)].post((file.dup if file), :content_type => content_type.to_s, :multipart => true)
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
- client[datastream_url(pid, dsid, query_options)].put((file.dup if file), rest_client_options)
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
@@ -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 in the new content is different than the old content" do
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 in the new content is the same as the existing content (when eager-loading is enabled)" do
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 in the new content is the same as the existing content (without eager loading, the default)" do
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 in the new content is the same as the existing content (and we have accessed #content previously)" do
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
- it "add_datastream" do
187
- RestClient::Request.should_receive(:execute).with(hash_including(:url => "http://example.org/objects/mypid/datastreams/aaa"))
188
- @mock_repository.add_datastream :pid => 'mypid', :dsid => 'aaa'
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.0
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: 2.0.0.preview2
317
+ rubygems_version: 1.8.24
280
318
  signing_key:
281
- specification_version: 4
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