rubydora 0.1.9 → 0.2.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 +19 -11
- data/lib/rubydora/digital_object.rb +17 -9
- data/spec/digital_object_spec.rb +50 -15
- data/spec/integration_test_spec.rb +10 -0
- metadata +111 -163
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/lib/rubydora/datastream.rb
CHANGED
@@ -4,8 +4,10 @@ module Rubydora
|
|
4
4
|
# them.
|
5
5
|
class Datastream
|
6
6
|
extend ActiveModel::Callbacks
|
7
|
+
define_model_callbacks :save, :create, :destroy
|
7
8
|
define_model_callbacks :initialize, :only => :after
|
8
9
|
|
10
|
+
|
9
11
|
include ActiveModel::Dirty
|
10
12
|
|
11
13
|
include Rubydora::ExtensionParameters
|
@@ -119,27 +121,33 @@ module Rubydora
|
|
119
121
|
# Add datastream to Fedora
|
120
122
|
# @return [Rubydora::Datastream]
|
121
123
|
def create
|
122
|
-
|
123
|
-
|
124
|
-
|
124
|
+
run_callbacks :create do
|
125
|
+
repository.add_datastream to_api_params.merge({ :pid => pid, :dsid => dsid })
|
126
|
+
reset_profile_attributes
|
127
|
+
Datastream.new(digital_object, dsid)
|
128
|
+
end
|
125
129
|
end
|
126
130
|
|
127
131
|
# Modify or save the datastream
|
128
132
|
# @return [Rubydora::Datastream]
|
129
133
|
def save
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
+
run_callbacks :save do
|
135
|
+
return create if new?
|
136
|
+
repository.modify_datastream to_api_params.merge({ :pid => pid, :dsid => dsid })
|
137
|
+
reset_profile_attributes
|
138
|
+
Datastream.new(digital_object, dsid)
|
139
|
+
end
|
134
140
|
end
|
135
141
|
|
136
142
|
# Purge the datastream from Fedora
|
137
143
|
# @return [Rubydora::Datastream] `self`
|
138
144
|
def delete
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
145
|
+
run_callbacks :destroy do
|
146
|
+
repository.purge_datastream(:pid => pid, :dsid => dsid) unless self.new?
|
147
|
+
digital_object.datastreams.delete(dsid)
|
148
|
+
reset_profile_attributes
|
149
|
+
self
|
150
|
+
end
|
143
151
|
end
|
144
152
|
|
145
153
|
protected
|
@@ -9,6 +9,7 @@ module Rubydora
|
|
9
9
|
# implementation.
|
10
10
|
class DigitalObject
|
11
11
|
extend ActiveModel::Callbacks
|
12
|
+
define_model_callbacks :save, :create, :destroy
|
12
13
|
define_model_callbacks :initialize, :only => :after
|
13
14
|
include ActiveModel::Dirty
|
14
15
|
include Rubydora::ExtensionParameters
|
@@ -51,6 +52,7 @@ module Rubydora
|
|
51
52
|
def self.create pid, options = {}, repository = nil
|
52
53
|
repository ||= Rubydora.repository
|
53
54
|
assigned_pid = repository.ingest(options.merge(:pid => pid))
|
55
|
+
|
54
56
|
self.new assigned_pid, repository
|
55
57
|
end
|
56
58
|
|
@@ -154,14 +156,18 @@ module Rubydora
|
|
154
156
|
#
|
155
157
|
# @return [Rubydora::DigitalObject] a new copy of this object
|
156
158
|
def save
|
157
|
-
|
158
|
-
self.
|
159
|
-
|
160
|
-
|
161
|
-
|
159
|
+
run_callbacks :save do
|
160
|
+
if self.new?
|
161
|
+
run_callbacks :create do
|
162
|
+
self.pid = repository.ingest to_api_params.merge(:pid => pid)
|
163
|
+
end
|
164
|
+
else
|
165
|
+
p = to_api_params
|
166
|
+
repository.modify_object p.merge(:pid => pid) unless p.empty?
|
167
|
+
end
|
162
168
|
end
|
163
169
|
|
164
|
-
self.datastreams.select { |dsid, ds| ds.changed? }.
|
170
|
+
self.datastreams.select { |dsid, ds| ds.changed? }.each { |dsid, ds| ds.save }
|
165
171
|
reset
|
166
172
|
self
|
167
173
|
end
|
@@ -169,9 +175,11 @@ module Rubydora
|
|
169
175
|
# Purge the object from Fedora
|
170
176
|
# @return [Rubydora::DigitalObject] `self`
|
171
177
|
def delete
|
172
|
-
|
173
|
-
|
174
|
-
|
178
|
+
run_callbacks :destroy do
|
179
|
+
repository.purge_object(:pid => pid)
|
180
|
+
reset
|
181
|
+
self
|
182
|
+
end
|
175
183
|
end
|
176
184
|
|
177
185
|
# repository reference from the digital object
|
data/spec/digital_object_spec.rb
CHANGED
@@ -135,22 +135,57 @@ describe Rubydora::DigitalObject do
|
|
135
135
|
@object = Rubydora::DigitalObject.new 'pid', @mock_repository
|
136
136
|
end
|
137
137
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
138
|
+
describe "saving an object's datastreams" do
|
139
|
+
before do
|
140
|
+
@new_ds = mock(Rubydora::Datastream)
|
141
|
+
@new_ds.stub(:new? => true, :changed? => true, :content_changed? => true, :content => 'XXX')
|
142
|
+
@new_empty_ds = mock(Rubydora::Datastream)
|
143
|
+
@new_empty_ds.stub(:new? => true, :changed? => false, :content_changed? => false, :content => nil)
|
144
|
+
@existing_ds = mock(Rubydora::Datastream)
|
145
|
+
@existing_ds.stub(:new? => false, :changed? => false, :content_changed? => false, :content => 'YYY')
|
146
|
+
@changed_attr_ds = mock(Rubydora::Datastream)
|
147
|
+
@changed_attr_ds.stub(:new? => false, :changed? => true, :content_changed? => false, :content => 'YYY')
|
148
|
+
@changed_ds = mock(Rubydora::Datastream)
|
149
|
+
@changed_ds.stub(:new? => false, :changed? => true, :content_changed? => true, :content => 'ZZZ')
|
150
|
+
@changed_empty_ds = mock(Rubydora::Datastream)
|
151
|
+
@changed_empty_ds.stub(:new? => false, :changed? => true, :content_changed? => true, :content => nil)
|
152
152
|
|
153
|
-
|
153
|
+
end
|
154
|
+
it "should save a new datastream with content" do
|
155
|
+
@object.stub(:datastreams) { { :new_ds => @new_ds } }
|
156
|
+
@new_ds.should_receive(:save)
|
157
|
+
@object.save
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should save a datastream whose content has changed" do
|
161
|
+
@object.stub(:datastreams) { { :changed_ds => @changed_ds } }
|
162
|
+
@changed_ds.should_receive(:save)
|
163
|
+
@object.save
|
164
|
+
end
|
165
|
+
|
166
|
+
it "should save a datastream whose attributes have changed" do
|
167
|
+
@object.stub(:datastreams) { { :changed_attr_ds => @changed_attr_ds } }
|
168
|
+
@changed_attr_ds.should_receive(:save)
|
169
|
+
@object.save
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should save an existing datastream whose content is nil" do
|
173
|
+
@object.stub(:datastreams) { { :changed_empty_ds => @changed_empty_ds } }
|
174
|
+
@changed_empty_ds.should_receive(:save)
|
175
|
+
@object.save
|
176
|
+
end
|
177
|
+
|
178
|
+
it "should not save a datastream that is unchanged" do
|
179
|
+
@object.stub(:datastreams) { { :existing_ds => @existing_ds } }
|
180
|
+
@existing_ds.should_not_receive(:save)
|
181
|
+
@object.save
|
182
|
+
end
|
183
|
+
|
184
|
+
it "should not save a new datastream that never received content" do
|
185
|
+
@object.stub(:datastreams) { { :new_empty_ds => @new_empty_ds } }
|
186
|
+
@new_empty_ds.should_not_receive(:save)
|
187
|
+
@object.save
|
188
|
+
end
|
154
189
|
end
|
155
190
|
|
156
191
|
it "should save all changed attributes" do
|
@@ -92,6 +92,16 @@ describe "Integration testing against a live Fedora repository" do
|
|
92
92
|
obj.datastreams.keys.should_not include("Test")
|
93
93
|
end
|
94
94
|
|
95
|
+
it "should save changed datastreams when the object is saved" do
|
96
|
+
obj = @repository.find('test:1')
|
97
|
+
obj.datastreams["new_ds"].content = "XXX"
|
98
|
+
obj.datastreams["empty_ds"].new?
|
99
|
+
obj.save
|
100
|
+
|
101
|
+
obj.datastreams["new_ds"].new?.should == false
|
102
|
+
obj.datastreams["empty_ds"].new?.should == true
|
103
|
+
end
|
104
|
+
|
95
105
|
|
96
106
|
after(:all) do
|
97
107
|
@repository.find('test:1').delete rescue nil
|
metadata
CHANGED
@@ -1,201 +1,155 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubydora
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 1
|
8
|
-
- 9
|
9
|
-
segments_generated: true
|
10
|
-
version: 0.1.9
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
prerelease:
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Chris Beer
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-10-28 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: fastercsv
|
23
|
-
requirement: &
|
16
|
+
requirement: &2185502160 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
- 0
|
30
|
-
segments_generated: true
|
31
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
32
22
|
type: :runtime
|
33
23
|
prerelease: false
|
34
|
-
version_requirements: *
|
35
|
-
- !ruby/object:Gem::Dependency
|
24
|
+
version_requirements: *2185502160
|
25
|
+
- !ruby/object:Gem::Dependency
|
36
26
|
name: rest-client
|
37
|
-
requirement: &
|
27
|
+
requirement: &2185501640 !ruby/object:Gem::Requirement
|
38
28
|
none: false
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
- 0
|
44
|
-
segments_generated: true
|
45
|
-
version: "0"
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
46
33
|
type: :runtime
|
47
34
|
prerelease: false
|
48
|
-
version_requirements: *
|
49
|
-
- !ruby/object:Gem::Dependency
|
35
|
+
version_requirements: *2185501640
|
36
|
+
- !ruby/object:Gem::Dependency
|
50
37
|
name: nokogiri
|
51
|
-
requirement: &
|
38
|
+
requirement: &2185501120 !ruby/object:Gem::Requirement
|
52
39
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
|
57
|
-
- 0
|
58
|
-
segments_generated: true
|
59
|
-
version: "0"
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
60
44
|
type: :runtime
|
61
45
|
prerelease: false
|
62
|
-
version_requirements: *
|
63
|
-
- !ruby/object:Gem::Dependency
|
46
|
+
version_requirements: *2185501120
|
47
|
+
- !ruby/object:Gem::Dependency
|
64
48
|
name: mime-types
|
65
|
-
requirement: &
|
49
|
+
requirement: &2185500140 !ruby/object:Gem::Requirement
|
66
50
|
none: false
|
67
|
-
requirements:
|
68
|
-
- -
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
|
71
|
-
- 0
|
72
|
-
segments_generated: true
|
73
|
-
version: "0"
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
74
55
|
type: :runtime
|
75
56
|
prerelease: false
|
76
|
-
version_requirements: *
|
77
|
-
- !ruby/object:Gem::Dependency
|
57
|
+
version_requirements: *2185500140
|
58
|
+
- !ruby/object:Gem::Dependency
|
78
59
|
name: activesupport
|
79
|
-
requirement: &
|
60
|
+
requirement: &2185499680 !ruby/object:Gem::Requirement
|
80
61
|
none: false
|
81
|
-
requirements:
|
82
|
-
- -
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
|
85
|
-
- 0
|
86
|
-
segments_generated: true
|
87
|
-
version: "0"
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
88
66
|
type: :runtime
|
89
67
|
prerelease: false
|
90
|
-
version_requirements: *
|
91
|
-
- !ruby/object:Gem::Dependency
|
68
|
+
version_requirements: *2185499680
|
69
|
+
- !ruby/object:Gem::Dependency
|
92
70
|
name: activemodel
|
93
|
-
requirement: &
|
71
|
+
requirement: &2185499200 !ruby/object:Gem::Requirement
|
94
72
|
none: false
|
95
|
-
requirements:
|
96
|
-
- -
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
|
99
|
-
- 0
|
100
|
-
segments_generated: true
|
101
|
-
version: "0"
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
102
77
|
type: :runtime
|
103
78
|
prerelease: false
|
104
|
-
version_requirements: *
|
105
|
-
- !ruby/object:Gem::Dependency
|
79
|
+
version_requirements: *2185499200
|
80
|
+
- !ruby/object:Gem::Dependency
|
106
81
|
name: savon
|
107
|
-
requirement: &
|
82
|
+
requirement: &2185498720 !ruby/object:Gem::Requirement
|
108
83
|
none: false
|
109
|
-
requirements:
|
110
|
-
- -
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
|
113
|
-
- 0
|
114
|
-
segments_generated: true
|
115
|
-
version: "0"
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
116
88
|
type: :runtime
|
117
89
|
prerelease: false
|
118
|
-
version_requirements: *
|
119
|
-
- !ruby/object:Gem::Dependency
|
90
|
+
version_requirements: *2185498720
|
91
|
+
- !ruby/object:Gem::Dependency
|
120
92
|
name: rake
|
121
|
-
requirement: &
|
93
|
+
requirement: &2185498020 !ruby/object:Gem::Requirement
|
122
94
|
none: false
|
123
|
-
requirements:
|
124
|
-
- -
|
125
|
-
- !ruby/object:Gem::Version
|
126
|
-
|
127
|
-
- 0
|
128
|
-
segments_generated: true
|
129
|
-
version: "0"
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
130
99
|
type: :development
|
131
100
|
prerelease: false
|
132
|
-
version_requirements: *
|
133
|
-
- !ruby/object:Gem::Dependency
|
101
|
+
version_requirements: *2185498020
|
102
|
+
- !ruby/object:Gem::Dependency
|
134
103
|
name: shoulda
|
135
|
-
requirement: &
|
104
|
+
requirement: &2185497540 !ruby/object:Gem::Requirement
|
136
105
|
none: false
|
137
|
-
requirements:
|
138
|
-
- -
|
139
|
-
- !ruby/object:Gem::Version
|
140
|
-
|
141
|
-
- 0
|
142
|
-
segments_generated: true
|
143
|
-
version: "0"
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
144
110
|
type: :development
|
145
111
|
prerelease: false
|
146
|
-
version_requirements: *
|
147
|
-
- !ruby/object:Gem::Dependency
|
112
|
+
version_requirements: *2185497540
|
113
|
+
- !ruby/object:Gem::Dependency
|
148
114
|
name: bundler
|
149
|
-
requirement: &
|
115
|
+
requirement: &2185497080 !ruby/object:Gem::Requirement
|
150
116
|
none: false
|
151
|
-
requirements:
|
152
|
-
- -
|
153
|
-
- !ruby/object:Gem::Version
|
154
|
-
|
155
|
-
- 0
|
156
|
-
segments_generated: true
|
157
|
-
version: "0"
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
158
121
|
type: :development
|
159
122
|
prerelease: false
|
160
|
-
version_requirements: *
|
161
|
-
- !ruby/object:Gem::Dependency
|
123
|
+
version_requirements: *2185497080
|
124
|
+
- !ruby/object:Gem::Dependency
|
162
125
|
name: rspec
|
163
|
-
requirement: &
|
126
|
+
requirement: &2185496620 !ruby/object:Gem::Requirement
|
164
127
|
none: false
|
165
|
-
requirements:
|
166
|
-
- -
|
167
|
-
- !ruby/object:Gem::Version
|
168
|
-
|
169
|
-
- 0
|
170
|
-
segments_generated: true
|
171
|
-
version: "0"
|
128
|
+
requirements:
|
129
|
+
- - ! '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
172
132
|
type: :development
|
173
133
|
prerelease: false
|
174
|
-
version_requirements: *
|
175
|
-
- !ruby/object:Gem::Dependency
|
134
|
+
version_requirements: *2185496620
|
135
|
+
- !ruby/object:Gem::Dependency
|
176
136
|
name: yard
|
177
|
-
requirement: &
|
137
|
+
requirement: &2185496160 !ruby/object:Gem::Requirement
|
178
138
|
none: false
|
179
|
-
requirements:
|
180
|
-
- -
|
181
|
-
- !ruby/object:Gem::Version
|
182
|
-
|
183
|
-
- 0
|
184
|
-
segments_generated: true
|
185
|
-
version: "0"
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
186
143
|
type: :development
|
187
144
|
prerelease: false
|
188
|
-
version_requirements: *
|
189
|
-
description:
|
190
|
-
email:
|
145
|
+
version_requirements: *2185496160
|
146
|
+
description: ! 'Fedora Commons REST API ruby library : REQUIRES FCREPO 3.4+'
|
147
|
+
email:
|
191
148
|
- chris@cbeer.info
|
192
149
|
executables: []
|
193
|
-
|
194
150
|
extensions: []
|
195
|
-
|
196
151
|
extra_rdoc_files: []
|
197
|
-
|
198
|
-
files:
|
152
|
+
files:
|
199
153
|
- .gitignore
|
200
154
|
- Gemfile
|
201
155
|
- LICENSE.txt
|
@@ -231,43 +185,37 @@ files:
|
|
231
185
|
- spec/rest_api_client_spec.rb
|
232
186
|
- spec/soap_spec.rb
|
233
187
|
- spec/spec_helper.rb
|
234
|
-
has_rdoc: true
|
235
188
|
homepage: http://github.com/cbeer/rubydora
|
236
189
|
licenses: []
|
237
|
-
|
238
190
|
post_install_message:
|
239
191
|
rdoc_options: []
|
240
|
-
|
241
|
-
require_paths:
|
192
|
+
require_paths:
|
242
193
|
- lib
|
243
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
194
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
244
195
|
none: false
|
245
|
-
requirements:
|
246
|
-
- -
|
247
|
-
- !ruby/object:Gem::Version
|
248
|
-
|
249
|
-
segments:
|
196
|
+
requirements:
|
197
|
+
- - ! '>='
|
198
|
+
- !ruby/object:Gem::Version
|
199
|
+
version: '0'
|
200
|
+
segments:
|
250
201
|
- 0
|
251
|
-
|
252
|
-
|
253
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
202
|
+
hash: -448019725647379174
|
203
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
254
204
|
none: false
|
255
|
-
requirements:
|
256
|
-
- -
|
257
|
-
- !ruby/object:Gem::Version
|
258
|
-
|
259
|
-
segments:
|
205
|
+
requirements:
|
206
|
+
- - ! '>='
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
209
|
+
segments:
|
260
210
|
- 0
|
261
|
-
|
262
|
-
version: "0"
|
211
|
+
hash: -448019725647379174
|
263
212
|
requirements: []
|
264
|
-
|
265
213
|
rubyforge_project:
|
266
|
-
rubygems_version: 1.
|
214
|
+
rubygems_version: 1.8.10
|
267
215
|
signing_key:
|
268
216
|
specification_version: 3
|
269
217
|
summary: Fedora Commons REST API ruby library
|
270
|
-
test_files:
|
218
|
+
test_files:
|
271
219
|
- spec/datastream_spec.rb
|
272
220
|
- spec/digital_object_spec.rb
|
273
221
|
- spec/ext_model_loader_spec.rb
|