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 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