dor-services 4.19.2 → 4.20.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ec35b3147fae9de88509f612f9e083cf3a7ec509
4
- data.tar.gz: c46df0678532e827ff2a0c83df25719145d1ad36
3
+ metadata.gz: 4729eacae4302a64db9ac7e92b4f8adbc6e8311e
4
+ data.tar.gz: c87321714b6cde55d3a2b62c9125827c5b8bd8aa
5
5
  SHA512:
6
- metadata.gz: a607e0bc8b61ee9fef7dfbce095c603169c13c86ac6a2a995d34c7a63e10ddb39da62da8aa13be2efe823876fb30b66239dc09d9294c2c4ffb4d1a6cc3325427
7
- data.tar.gz: 5f2ebb71536096f21715366037226254f07a7691ad386187326bab5609d1ec25abe04130ecc70418349e89b135c640c5b4b94526555d871ddde57508f9d9a7b1
6
+ metadata.gz: 2065d971335d18534df20609c96fa684c56a0e31d895255279c301195cf04b86fbc63f7deeb8649705dd75f3080618ca91d07fca2e637b33207f2836d45ca4f3
7
+ data.tar.gz: a3ea926e1f85ed29e5dbb1bbc623fb9ce8082df73b71fb3122b0a59e20b6489beb598edd11de09a3a49629175e58fa9ab264a1f548d77929a8dabb2713165d68
@@ -107,7 +107,7 @@ module Dor
107
107
  end
108
108
  end
109
109
 
110
- # @return [Fixnum] value of the most current versionId
110
+ # @return [String] value of the most current versionId
111
111
  def current_version_id
112
112
  current_version=current_version_node
113
113
  if current_version.nil?
@@ -151,11 +151,6 @@ module Dor
151
151
  self.content = ng_xml.to_s
152
152
  end
153
153
 
154
- # @return [String] The value of the greatest versionId
155
- def current_version_id
156
- current_version_node[:versionId].to_s
157
- end
158
-
159
154
  # @return [Boolean] returns true if the current version has a tag and a description, false otherwise
160
155
  def current_version_closeable?
161
156
  current = current_version_node
@@ -168,9 +163,9 @@ module Dor
168
163
 
169
164
  # @return [String] The tag for the newest version
170
165
  def current_tag
171
- current_version_node[:tag].to_s
166
+ current_version_node[:tag].to_s
172
167
  end
173
-
168
+
174
169
  def tag_for_version(versionId)
175
170
  nodes=self.ng_xml.search('//version[@versionId=\''+versionId+'\']')
176
171
  if nodes.length == 1
@@ -179,6 +174,7 @@ module Dor
179
174
  ''
180
175
  end
181
176
  end
177
+
182
178
  # @return [String] The description for the specified version, or empty string if there is no description
183
179
  def description_for_version(versionId)
184
180
  nodes=self.ng_xml.search('//version[@versionId=\''+versionId+'\']')
@@ -188,7 +184,7 @@ module Dor
188
184
  ''
189
185
  end
190
186
  end
191
-
187
+
192
188
  # @return [String] The description for the current version
193
189
  def current_description
194
190
  desc_node=current_version_node.at_xpath('description')
@@ -197,7 +193,29 @@ module Dor
197
193
  end
198
194
  ''
199
195
  end
200
-
196
+
197
+ # Compares the current_version with the passed in known_version (usually SDRs version)
198
+ # If the known_version is greater than the current version, then all version nodes greater than the known_version are removed,
199
+ # then the current_version is incremented. This repairs the case where a previous call to open a new verison
200
+ # updates the versionMetadata datastream, but versioningWF is not initiated. Prevents the versions from getting
201
+ # out of synch with SDR
202
+ #
203
+ # @param [Integer] known_version object version you wish to synch to, usually SDR's version
204
+ # @param [Hash] opts optional parameters
205
+ # @option opts [String] :description describes the version change
206
+ # @option opts [Symbol] :significance which part of the version tag to increment
207
+ def sync_then_increment_version known_version, opts = {}
208
+ cv = current_version_id.to_i
209
+ raise Dor::Exception.new("Cannot sync to a version greater than current: #{cv}, requested #{known_version}") if cv < known_version
210
+
211
+ while cv != known_version &&
212
+ current_version_node.remove
213
+ cv = current_version_id.to_i
214
+ end
215
+
216
+ increment_version(opts[:description], opts[:significance])
217
+ end
218
+
201
219
  private
202
220
 
203
221
  # @return [Nokogiri::XML::Node] Node representing the current version
@@ -210,5 +228,6 @@ module Dor
210
228
  tags = find_by_terms(:version, :tag)
211
229
  tags.map{|t| VersionTag.parse(t.value)}.max
212
230
  end
231
+
213
232
  end
214
233
  end
@@ -1,3 +1,5 @@
1
+ require 'dor/utils/sdr_client'
2
+
1
3
  module Dor
2
4
  module Versionable
3
5
  extend ActiveSupport::Concern
@@ -24,9 +26,10 @@ module Dor
24
26
  raise Dor::Exception, 'Object already opened for versioning' if(new_version_open?)
25
27
  raise Dor::Exception, 'Object currently being accessioned' if(Dor::WorkflowService.get_active_lifecycle('dor', pid, 'submitted'))
26
28
 
29
+ sdr_version = Sdr::Client.current_version pid
27
30
 
28
31
  vmd_ds = datastreams['versionMetadata']
29
- vmd_ds.increment_version
32
+ vmd_ds.sync_then_increment_version sdr_version
30
33
  vmd_ds.content = vmd_ds.ng_xml.to_s
31
34
  vmd_ds.save unless self.new_object?
32
35
 
@@ -0,0 +1,23 @@
1
+ module Sdr
2
+
3
+ module Client
4
+ class << self
5
+
6
+ # @param [String] druid id of the object you want the version of
7
+ # @returns [Integer] the current version from SDR
8
+ def current_version druid
9
+ sdr_client = Dor::Config.sdr.rest_client
10
+ xml = sdr_client["objects/#{druid}/current_version"].get
11
+
12
+ begin
13
+ doc = Nokogiri::XML xml
14
+ raise if doc.root.name != 'currentVersion'
15
+ return Integer(doc.text)
16
+ rescue => e
17
+ raise "Unable to parse XML from SDR current_version API call: #{xml}"
18
+ end
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -1,3 +1,3 @@
1
1
  module Dor
2
- VERSION = '4.19.2'
2
+ VERSION = '4.20.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dor-services
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.19.2
4
+ version: 4.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Klein
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2015-04-20 00:00:00.000000000 Z
15
+ date: 2015-04-27 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: active-fedora
@@ -611,6 +611,7 @@ files:
611
611
  - lib/dor/services/tei2dc.xslt
612
612
  - lib/dor/utils/ng_tidy.rb
613
613
  - lib/dor/utils/predicate_patch.rb
614
+ - lib/dor/utils/sdr_client.rb
614
615
  - lib/dor/utils/solr_doc_helper.rb
615
616
  - lib/dor/utils/utc_date_field_mapper.rb
616
617
  - lib/dor/version.rb