rubydora 0.1.9 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.9
1
+ 0.2.0
@@ -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
- repository.add_datastream to_api_params.merge({ :pid => pid, :dsid => dsid })
123
- reset_profile_attributes
124
- Datastream.new(digital_object, dsid)
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
- return create if new?
131
- repository.modify_datastream to_api_params.merge({ :pid => pid, :dsid => dsid })
132
- reset_profile_attributes
133
- Datastream.new(digital_object, dsid)
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
- repository.purge_datastream(:pid => pid, :dsid => dsid) unless self.new?
140
- digital_object.datastreams.delete(dsid)
141
- reset_profile_attributes
142
- self
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
- if self.new?
158
- self.pid = repository.ingest to_api_params.merge(:pid => pid)
159
- else
160
- p = to_api_params
161
- repository.modify_object p.merge(:pid => pid) unless p.empty?
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? }.reject {|dsid, ds| ds.new? }.each { |dsid, ds| ds.save }
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
- repository.purge_object(:pid => pid)
173
- reset
174
- self
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
@@ -135,22 +135,57 @@ describe Rubydora::DigitalObject do
135
135
  @object = Rubydora::DigitalObject.new 'pid', @mock_repository
136
136
  end
137
137
 
138
- it "should save all changed datastreams" do
139
- @ds1 = mock()
140
- @ds1.should_receive(:changed?).and_return(false)
141
- @ds1.should_not_receive(:save)
142
- @ds2 = mock()
143
- @ds2.should_receive(:changed?).and_return(true)
144
- @ds2.should_receive(:new?).and_return(true)
145
- @ds2.should_not_receive(:save)
146
- @ds3 = mock()
147
- @ds3.should_receive(:changed?).and_return(true)
148
- @ds3.should_receive(:new?).and_return(false)
149
- @ds3.should_receive(:save)
150
-
151
- @object.should_receive(:datastreams).and_return({:ds1 => @ds1, :ds2 => @ds2, :ds3 => @ds3 })
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
- @object.save
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
- prerelease: false
5
- segments:
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
- date: 2011-10-17 00:00:00 -05:00
19
- default_executable:
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: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &2185502160 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- segments:
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: *id001
35
- - !ruby/object:Gem::Dependency
24
+ version_requirements: *2185502160
25
+ - !ruby/object:Gem::Dependency
36
26
  name: rest-client
37
- requirement: &id002 !ruby/object:Gem::Requirement
27
+ requirement: &2185501640 !ruby/object:Gem::Requirement
38
28
  none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- segments:
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: *id002
49
- - !ruby/object:Gem::Dependency
35
+ version_requirements: *2185501640
36
+ - !ruby/object:Gem::Dependency
50
37
  name: nokogiri
51
- requirement: &id003 !ruby/object:Gem::Requirement
38
+ requirement: &2185501120 !ruby/object:Gem::Requirement
52
39
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- segments:
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: *id003
63
- - !ruby/object:Gem::Dependency
46
+ version_requirements: *2185501120
47
+ - !ruby/object:Gem::Dependency
64
48
  name: mime-types
65
- requirement: &id004 !ruby/object:Gem::Requirement
49
+ requirement: &2185500140 !ruby/object:Gem::Requirement
66
50
  none: false
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- segments:
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: *id004
77
- - !ruby/object:Gem::Dependency
57
+ version_requirements: *2185500140
58
+ - !ruby/object:Gem::Dependency
78
59
  name: activesupport
79
- requirement: &id005 !ruby/object:Gem::Requirement
60
+ requirement: &2185499680 !ruby/object:Gem::Requirement
80
61
  none: false
81
- requirements:
82
- - - ">="
83
- - !ruby/object:Gem::Version
84
- segments:
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: *id005
91
- - !ruby/object:Gem::Dependency
68
+ version_requirements: *2185499680
69
+ - !ruby/object:Gem::Dependency
92
70
  name: activemodel
93
- requirement: &id006 !ruby/object:Gem::Requirement
71
+ requirement: &2185499200 !ruby/object:Gem::Requirement
94
72
  none: false
95
- requirements:
96
- - - ">="
97
- - !ruby/object:Gem::Version
98
- segments:
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: *id006
105
- - !ruby/object:Gem::Dependency
79
+ version_requirements: *2185499200
80
+ - !ruby/object:Gem::Dependency
106
81
  name: savon
107
- requirement: &id007 !ruby/object:Gem::Requirement
82
+ requirement: &2185498720 !ruby/object:Gem::Requirement
108
83
  none: false
109
- requirements:
110
- - - ">="
111
- - !ruby/object:Gem::Version
112
- segments:
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: *id007
119
- - !ruby/object:Gem::Dependency
90
+ version_requirements: *2185498720
91
+ - !ruby/object:Gem::Dependency
120
92
  name: rake
121
- requirement: &id008 !ruby/object:Gem::Requirement
93
+ requirement: &2185498020 !ruby/object:Gem::Requirement
122
94
  none: false
123
- requirements:
124
- - - ">="
125
- - !ruby/object:Gem::Version
126
- segments:
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: *id008
133
- - !ruby/object:Gem::Dependency
101
+ version_requirements: *2185498020
102
+ - !ruby/object:Gem::Dependency
134
103
  name: shoulda
135
- requirement: &id009 !ruby/object:Gem::Requirement
104
+ requirement: &2185497540 !ruby/object:Gem::Requirement
136
105
  none: false
137
- requirements:
138
- - - ">="
139
- - !ruby/object:Gem::Version
140
- segments:
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: *id009
147
- - !ruby/object:Gem::Dependency
112
+ version_requirements: *2185497540
113
+ - !ruby/object:Gem::Dependency
148
114
  name: bundler
149
- requirement: &id010 !ruby/object:Gem::Requirement
115
+ requirement: &2185497080 !ruby/object:Gem::Requirement
150
116
  none: false
151
- requirements:
152
- - - ">="
153
- - !ruby/object:Gem::Version
154
- segments:
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: *id010
161
- - !ruby/object:Gem::Dependency
123
+ version_requirements: *2185497080
124
+ - !ruby/object:Gem::Dependency
162
125
  name: rspec
163
- requirement: &id011 !ruby/object:Gem::Requirement
126
+ requirement: &2185496620 !ruby/object:Gem::Requirement
164
127
  none: false
165
- requirements:
166
- - - ">="
167
- - !ruby/object:Gem::Version
168
- segments:
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: *id011
175
- - !ruby/object:Gem::Dependency
134
+ version_requirements: *2185496620
135
+ - !ruby/object:Gem::Dependency
176
136
  name: yard
177
- requirement: &id012 !ruby/object:Gem::Requirement
137
+ requirement: &2185496160 !ruby/object:Gem::Requirement
178
138
  none: false
179
- requirements:
180
- - - ">="
181
- - !ruby/object:Gem::Version
182
- segments:
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: *id012
189
- description: "Fedora Commons REST API ruby library : REQUIRES FCREPO 3.4+"
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
- hash: -2479278186315579295
249
- segments:
196
+ requirements:
197
+ - - ! '>='
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
200
+ segments:
250
201
  - 0
251
- segments_generated: true
252
- version: "0"
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
- hash: -2479278186315579295
259
- segments:
205
+ requirements:
206
+ - - ! '>='
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ segments:
260
210
  - 0
261
- segments_generated: true
262
- version: "0"
211
+ hash: -448019725647379174
263
212
  requirements: []
264
-
265
213
  rubyforge_project:
266
- rubygems_version: 1.3.7
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