rubydora 1.2.1 → 1.3.0
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/VERSION +1 -1
- data/lib/rubydora/datastream.rb +18 -15
- data/lib/rubydora/rest_api_client.rb +6 -2
- data/spec/lib/datastream_spec.rb +39 -26
- metadata +39 -39
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.3.0
|
data/lib/rubydora/datastream.rb
CHANGED
@@ -122,12 +122,18 @@ module Rubydora
|
|
122
122
|
digital_object.nil? || digital_object.new? || profile_xml.blank?
|
123
123
|
end
|
124
124
|
|
125
|
+
# This method is overridden in ActiveFedora, so we didn't
|
126
|
+
def content
|
127
|
+
local_or_remote_content(true)
|
128
|
+
end
|
129
|
+
|
125
130
|
# Retrieve the content of the datastream (and cache it)
|
131
|
+
# @param [Boolean] ensure_fetch <true> if true, it will grab the content from the repository if is not already loaded
|
126
132
|
# @return [String]
|
127
|
-
def
|
128
|
-
return @content if new?
|
133
|
+
def local_or_remote_content(ensure_fetch = true)
|
134
|
+
return @content if new?
|
129
135
|
|
130
|
-
@content ||= datastream_content
|
136
|
+
@content ||= ensure_fetch ? datastream_content : @datastream_content
|
131
137
|
|
132
138
|
if behaves_like_io?(@content)
|
133
139
|
begin
|
@@ -166,27 +172,23 @@ module Rubydora
|
|
166
172
|
# @param [String or IO]
|
167
173
|
# @return [String or IO]
|
168
174
|
def content= new_content
|
169
|
-
content_will_change! if (self.eager_load_datastream_content and content != new_content) or (@content.nil? or @content != new_content)
|
170
|
-
@content = new_content
|
171
|
-
end
|
172
|
-
|
173
|
-
# Content_will_change! would be dynamically created by ActiveModel::Dirty, but it would eagerly load the content.
|
174
|
-
# We don't want to do that.
|
175
|
-
def content_will_change!
|
176
175
|
raise "Can't change values on older versions" if @asOfDateTime
|
177
|
-
|
176
|
+
@content = new_content
|
178
177
|
end
|
179
178
|
|
180
179
|
def content_changed?
|
181
180
|
return false if ['E','R'].include? controlGroup
|
182
|
-
return true if new? and !
|
181
|
+
return true if new? and !local_or_remote_content(false).blank? # new datastreams must have content
|
183
182
|
|
184
183
|
if controlGroup == "X"
|
185
|
-
return
|
184
|
+
return !EquivalentXml.equivalent?(Nokogiri::XML(content), Nokogiri::XML(datastream_content))
|
186
185
|
else
|
187
|
-
|
186
|
+
if self.eager_load_datastream_content
|
187
|
+
return local_or_remote_content(false) != datastream_content
|
188
|
+
else
|
189
|
+
return local_or_remote_content(false) != @datastream_content
|
190
|
+
end
|
188
191
|
end
|
189
|
-
|
190
192
|
super
|
191
193
|
end
|
192
194
|
|
@@ -345,6 +347,7 @@ module Rubydora
|
|
345
347
|
@profile = nil
|
346
348
|
@profile_xml = nil
|
347
349
|
@datastream_content = nil
|
350
|
+
@content = nil
|
348
351
|
@changed_attributes = {}
|
349
352
|
end
|
350
353
|
|
@@ -194,7 +194,7 @@ module Rubydora
|
|
194
194
|
dsid = query_options.delete(:dsid)
|
195
195
|
query_options[:format] ||= 'xml'
|
196
196
|
val = nil
|
197
|
-
message = dsid.nil? ? "Loaded datastream list for #{pid}" : "Loaded datastream #{pid}/#{dsid}"
|
197
|
+
message = dsid.nil? ? "Loaded datastream list for #{pid}" : "Loaded datastream profile #{pid}/#{dsid}"
|
198
198
|
benchmark message, :level=>:debug do
|
199
199
|
val = client[datastream_url(pid, dsid, query_options)].get
|
200
200
|
end
|
@@ -262,7 +262,11 @@ module Rubydora
|
|
262
262
|
else
|
263
263
|
resource = client[datastream_content_url(pid, dsid, query_options)]
|
264
264
|
end
|
265
|
-
|
265
|
+
val = nil
|
266
|
+
benchmark "Loaded datastream content #{pid}/#{dsid}", :level=>:debug do
|
267
|
+
val = resource.send(method)
|
268
|
+
end
|
269
|
+
val
|
266
270
|
rescue Exception => exception
|
267
271
|
rescue_with_handler(exception) || raise
|
268
272
|
end
|
data/spec/lib/datastream_spec.rb
CHANGED
@@ -158,6 +158,11 @@ describe Rubydora::Datastream do
|
|
158
158
|
@datastream.content.should == "asdf"
|
159
159
|
end
|
160
160
|
|
161
|
+
it "should not load contents if they say not to" do
|
162
|
+
@mock_repository.should_not_receive(:datastream_dissemination).with(hash_including(:pid => 'pid', :dsid => 'dsid'))
|
163
|
+
@datastream.local_or_remote_content(false).should be_nil
|
164
|
+
end
|
165
|
+
|
161
166
|
it "should rewind IO-type contents" do
|
162
167
|
@mock_io = File.open('rubydora.gemspec')
|
163
168
|
@mock_io.readline # start with a dirty file
|
@@ -188,6 +193,10 @@ describe Rubydora::Datastream do
|
|
188
193
|
@datastream.content
|
189
194
|
@datastream.content_changed?.should == false
|
190
195
|
end
|
196
|
+
it "should not load content just to check and see if it was changed." do
|
197
|
+
@mock_repository.should_not_receive(:datastream_dissemination).with(hash_including(:pid => 'pid', :dsid => 'dsid'))
|
198
|
+
@datastream.content_changed?.should == false
|
199
|
+
end
|
191
200
|
it "should be changed when the new content is different than the old content" do
|
192
201
|
@mock_repository.stub(:datastream_dissemination).with(hash_including(:pid => 'pid', :dsid => 'dsid')).and_return('asdf')
|
193
202
|
@datastream.content = "test"
|
@@ -245,10 +254,8 @@ describe Rubydora::Datastream do
|
|
245
254
|
end
|
246
255
|
|
247
256
|
describe "update" do
|
248
|
-
|
249
257
|
before(:each) do
|
250
258
|
@datastream = Rubydora::Datastream.new @mock_object, 'dsid'
|
251
|
-
@datastream.stub :content_changed? => false
|
252
259
|
@mock_repository.should_receive(:datastream).any_number_of_times.and_return <<-XML
|
253
260
|
<datastreamProfile>
|
254
261
|
<dsLocation>some:uri</dsLocation>
|
@@ -257,35 +264,41 @@ describe Rubydora::Datastream do
|
|
257
264
|
XML
|
258
265
|
end
|
259
266
|
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
267
|
+
describe "when content is unchanged" do
|
268
|
+
before do
|
269
|
+
@datastream.stub :content_changed? => false
|
270
|
+
end
|
271
|
+
it "should not say changed if the value is set the same" do
|
272
|
+
@datastream.dsLabel = "label"
|
273
|
+
@datastream.should_not be_changed
|
274
|
+
end
|
265
275
|
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
276
|
+
it "should allow profile attributes to be replaced" do
|
277
|
+
@datastream.dsLabel = "New Label"
|
278
|
+
@datastream.dsLabel.should == "New Label"
|
279
|
+
end
|
270
280
|
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
281
|
+
it "should call the appropriate api with any dirty attributes" do
|
282
|
+
@mock_repository.should_receive(:modify_datastream).with(hash_including(:dsLabel => "New Label"))
|
283
|
+
@datastream.dsLabel = "New Label"
|
284
|
+
@datastream.save
|
285
|
+
end
|
275
286
|
end
|
276
287
|
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
288
|
+
describe "update when content is changed" do
|
289
|
+
it "should update the datastream when the content is changed" do
|
290
|
+
@mock_repository.should_receive(:modify_datastream).with(hash_including(:content => 'test'))
|
291
|
+
@datastream.content = "test"
|
292
|
+
@datastream.save
|
293
|
+
end
|
282
294
|
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
295
|
+
it "should be marked as changed when the content is updated" do
|
296
|
+
@datastream.changed?.should be_false
|
297
|
+
@datastream.content = "test"
|
298
|
+
@datastream.changed?.should be_true
|
299
|
+
end
|
288
300
|
|
301
|
+
end
|
289
302
|
end
|
290
303
|
|
291
304
|
describe "should check if an object is read-only" do
|
@@ -635,7 +648,7 @@ describe Rubydora::Datastream do
|
|
635
648
|
before(:each) do
|
636
649
|
@datastream = Rubydora::Datastream.new @mock_object, 'dsid'
|
637
650
|
@datastream.stub(:new? => true )
|
638
|
-
@datastream.stub(:
|
651
|
+
@datastream.stub(:local_or_remote_content => '123')
|
639
652
|
@datastream.stub(:profile) { {} }
|
640
653
|
end
|
641
654
|
it "should compile parameters to hash" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubydora
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,14 +9,14 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-02-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fastercsv
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
@@ -24,7 +24,7 @@ dependencies:
|
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
30
|
- !ruby/object:Gem::Dependency
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ">="
|
36
36
|
- !ruby/object:Gem::Version
|
37
37
|
version: '0'
|
38
38
|
type: :runtime
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ">="
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
46
|
- !ruby/object:Gem::Dependency
|
@@ -48,7 +48,7 @@ dependencies:
|
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
51
|
-
- -
|
51
|
+
- - ">="
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: '0'
|
54
54
|
type: :runtime
|
@@ -56,7 +56,7 @@ dependencies:
|
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
none: false
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
- !ruby/object:Gem::Dependency
|
@@ -64,7 +64,7 @@ dependencies:
|
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
67
|
-
- -
|
67
|
+
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
70
|
type: :runtime
|
@@ -72,7 +72,7 @@ dependencies:
|
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
|
-
- -
|
75
|
+
- - ">="
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
78
|
- !ruby/object:Gem::Dependency
|
@@ -80,7 +80,7 @@ dependencies:
|
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|
81
81
|
none: false
|
82
82
|
requirements:
|
83
|
-
- -
|
83
|
+
- - ">="
|
84
84
|
- !ruby/object:Gem::Version
|
85
85
|
version: '0'
|
86
86
|
type: :runtime
|
@@ -88,7 +88,7 @@ dependencies:
|
|
88
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
89
|
none: false
|
90
90
|
requirements:
|
91
|
-
- -
|
91
|
+
- - ">="
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
version: '0'
|
94
94
|
- !ruby/object:Gem::Dependency
|
@@ -96,7 +96,7 @@ dependencies:
|
|
96
96
|
requirement: !ruby/object:Gem::Requirement
|
97
97
|
none: false
|
98
98
|
requirements:
|
99
|
-
- -
|
99
|
+
- - ">="
|
100
100
|
- !ruby/object:Gem::Version
|
101
101
|
version: '0'
|
102
102
|
type: :runtime
|
@@ -104,7 +104,7 @@ dependencies:
|
|
104
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
|
-
- -
|
107
|
+
- - ">="
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '0'
|
110
110
|
- !ruby/object:Gem::Dependency
|
@@ -112,7 +112,7 @@ dependencies:
|
|
112
112
|
requirement: !ruby/object:Gem::Requirement
|
113
113
|
none: false
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
118
|
type: :runtime
|
@@ -120,7 +120,7 @@ dependencies:
|
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
none: false
|
122
122
|
requirements:
|
123
|
-
- -
|
123
|
+
- - ">="
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
126
|
- !ruby/object:Gem::Dependency
|
@@ -128,7 +128,7 @@ dependencies:
|
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
129
129
|
none: false
|
130
130
|
requirements:
|
131
|
-
- -
|
131
|
+
- - ">="
|
132
132
|
- !ruby/object:Gem::Version
|
133
133
|
version: '0'
|
134
134
|
type: :runtime
|
@@ -136,7 +136,7 @@ dependencies:
|
|
136
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
137
|
none: false
|
138
138
|
requirements:
|
139
|
-
- -
|
139
|
+
- - ">="
|
140
140
|
- !ruby/object:Gem::Version
|
141
141
|
version: '0'
|
142
142
|
- !ruby/object:Gem::Dependency
|
@@ -144,7 +144,7 @@ dependencies:
|
|
144
144
|
requirement: !ruby/object:Gem::Requirement
|
145
145
|
none: false
|
146
146
|
requirements:
|
147
|
-
- -
|
147
|
+
- - ">="
|
148
148
|
- !ruby/object:Gem::Version
|
149
149
|
version: '0'
|
150
150
|
type: :runtime
|
@@ -152,7 +152,7 @@ dependencies:
|
|
152
152
|
version_requirements: !ruby/object:Gem::Requirement
|
153
153
|
none: false
|
154
154
|
requirements:
|
155
|
-
- -
|
155
|
+
- - ">="
|
156
156
|
- !ruby/object:Gem::Version
|
157
157
|
version: '0'
|
158
158
|
- !ruby/object:Gem::Dependency
|
@@ -160,7 +160,7 @@ dependencies:
|
|
160
160
|
requirement: !ruby/object:Gem::Requirement
|
161
161
|
none: false
|
162
162
|
requirements:
|
163
|
-
- -
|
163
|
+
- - ">="
|
164
164
|
- !ruby/object:Gem::Version
|
165
165
|
version: '0'
|
166
166
|
type: :development
|
@@ -168,7 +168,7 @@ dependencies:
|
|
168
168
|
version_requirements: !ruby/object:Gem::Requirement
|
169
169
|
none: false
|
170
170
|
requirements:
|
171
|
-
- -
|
171
|
+
- - ">="
|
172
172
|
- !ruby/object:Gem::Version
|
173
173
|
version: '0'
|
174
174
|
- !ruby/object:Gem::Dependency
|
@@ -176,7 +176,7 @@ dependencies:
|
|
176
176
|
requirement: !ruby/object:Gem::Requirement
|
177
177
|
none: false
|
178
178
|
requirements:
|
179
|
-
- -
|
179
|
+
- - ">="
|
180
180
|
- !ruby/object:Gem::Version
|
181
181
|
version: '0'
|
182
182
|
type: :development
|
@@ -184,7 +184,7 @@ dependencies:
|
|
184
184
|
version_requirements: !ruby/object:Gem::Requirement
|
185
185
|
none: false
|
186
186
|
requirements:
|
187
|
-
- -
|
187
|
+
- - ">="
|
188
188
|
- !ruby/object:Gem::Version
|
189
189
|
version: '0'
|
190
190
|
- !ruby/object:Gem::Dependency
|
@@ -192,7 +192,7 @@ dependencies:
|
|
192
192
|
requirement: !ruby/object:Gem::Requirement
|
193
193
|
none: false
|
194
194
|
requirements:
|
195
|
-
- -
|
195
|
+
- - ">="
|
196
196
|
- !ruby/object:Gem::Version
|
197
197
|
version: 1.0.14
|
198
198
|
type: :development
|
@@ -200,7 +200,7 @@ dependencies:
|
|
200
200
|
version_requirements: !ruby/object:Gem::Requirement
|
201
201
|
none: false
|
202
202
|
requirements:
|
203
|
-
- -
|
203
|
+
- - ">="
|
204
204
|
- !ruby/object:Gem::Version
|
205
205
|
version: 1.0.14
|
206
206
|
- !ruby/object:Gem::Dependency
|
@@ -208,7 +208,7 @@ dependencies:
|
|
208
208
|
requirement: !ruby/object:Gem::Requirement
|
209
209
|
none: false
|
210
210
|
requirements:
|
211
|
-
- -
|
211
|
+
- - ">="
|
212
212
|
- !ruby/object:Gem::Version
|
213
213
|
version: '0'
|
214
214
|
type: :development
|
@@ -216,7 +216,7 @@ dependencies:
|
|
216
216
|
version_requirements: !ruby/object:Gem::Requirement
|
217
217
|
none: false
|
218
218
|
requirements:
|
219
|
-
- -
|
219
|
+
- - ">="
|
220
220
|
- !ruby/object:Gem::Version
|
221
221
|
version: '0'
|
222
222
|
- !ruby/object:Gem::Dependency
|
@@ -224,7 +224,7 @@ dependencies:
|
|
224
224
|
requirement: !ruby/object:Gem::Requirement
|
225
225
|
none: false
|
226
226
|
requirements:
|
227
|
-
- -
|
227
|
+
- - ">="
|
228
228
|
- !ruby/object:Gem::Version
|
229
229
|
version: '0'
|
230
230
|
type: :development
|
@@ -232,7 +232,7 @@ dependencies:
|
|
232
232
|
version_requirements: !ruby/object:Gem::Requirement
|
233
233
|
none: false
|
234
234
|
requirements:
|
235
|
-
- -
|
235
|
+
- - ">="
|
236
236
|
- !ruby/object:Gem::Version
|
237
237
|
version: '0'
|
238
238
|
- !ruby/object:Gem::Dependency
|
@@ -240,7 +240,7 @@ dependencies:
|
|
240
240
|
requirement: !ruby/object:Gem::Requirement
|
241
241
|
none: false
|
242
242
|
requirements:
|
243
|
-
- -
|
243
|
+
- - ">="
|
244
244
|
- !ruby/object:Gem::Version
|
245
245
|
version: '0'
|
246
246
|
type: :development
|
@@ -248,7 +248,7 @@ dependencies:
|
|
248
248
|
version_requirements: !ruby/object:Gem::Requirement
|
249
249
|
none: false
|
250
250
|
requirements:
|
251
|
-
- -
|
251
|
+
- - ">="
|
252
252
|
- !ruby/object:Gem::Version
|
253
253
|
version: '0'
|
254
254
|
description: Fedora Commons REST API ruby library
|
@@ -258,8 +258,8 @@ executables: []
|
|
258
258
|
extensions: []
|
259
259
|
extra_rdoc_files: []
|
260
260
|
files:
|
261
|
-
- .gitignore
|
262
|
-
- .gitmodules
|
261
|
+
- ".gitignore"
|
262
|
+
- ".gitmodules"
|
263
263
|
- Gemfile
|
264
264
|
- History.textile
|
265
265
|
- LICENSE.txt
|
@@ -297,24 +297,24 @@ require_paths:
|
|
297
297
|
required_ruby_version: !ruby/object:Gem::Requirement
|
298
298
|
none: false
|
299
299
|
requirements:
|
300
|
-
- -
|
300
|
+
- - ">="
|
301
301
|
- !ruby/object:Gem::Version
|
302
302
|
version: '0'
|
303
303
|
segments:
|
304
304
|
- 0
|
305
|
-
hash:
|
305
|
+
hash: -1210235886615853572
|
306
306
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
307
307
|
none: false
|
308
308
|
requirements:
|
309
|
-
- -
|
309
|
+
- - ">="
|
310
310
|
- !ruby/object:Gem::Version
|
311
311
|
version: '0'
|
312
312
|
segments:
|
313
313
|
- 0
|
314
|
-
hash:
|
314
|
+
hash: -1210235886615853572
|
315
315
|
requirements: []
|
316
316
|
rubyforge_project:
|
317
|
-
rubygems_version: 1.8.
|
317
|
+
rubygems_version: 1.8.25
|
318
318
|
signing_key:
|
319
319
|
specification_version: 3
|
320
320
|
summary: Fedora Commons REST API ruby library
|