ddr-models 2.5.3 → 2.6.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/users/sessions_controller.rb +0 -5
- data/config/initializers/devise.rb +3 -2
- data/config/initializers/rsolr_monkey_patches.rb +7 -0
- data/config/initializers/subscriptions.rb +0 -2
- data/ddr-models.gemspec +2 -1
- data/lib/ddr/actions/virus_check.rb +0 -1
- data/lib/ddr/auth.rb +0 -4
- data/lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb +9 -16
- data/lib/ddr/derivatives/generator.rb +0 -2
- data/lib/ddr/derivatives/png_generator.rb +2 -4
- data/lib/ddr/derivatives/ptif_generator.rb +6 -7
- data/lib/ddr/index/fields.rb +18 -2
- data/lib/ddr/jobs.rb +0 -4
- data/lib/ddr/managers.rb +0 -1
- data/lib/ddr/managers/derivatives_manager.rb +3 -4
- data/lib/ddr/managers/workflow_manager.rb +3 -0
- data/lib/ddr/models.rb +6 -3
- data/lib/ddr/models/base.rb +13 -0
- data/lib/ddr/models/has_admin_metadata.rb +4 -20
- data/lib/ddr/models/indexing.rb +16 -0
- data/lib/ddr/models/solr_document.rb +8 -0
- data/lib/ddr/models/version.rb +1 -1
- data/lib/ddr/models/year_facet.rb +60 -118
- data/spec/auth/ability_spec.rb +1 -1
- data/spec/auth/roles/role_spec.rb +9 -9
- data/spec/index/fields_spec.rb +96 -0
- data/spec/models/active_fedora_datastream_spec.rb +6 -5
- data/spec/models/has_admin_metadata_spec.rb +49 -125
- data/spec/models/indexing_spec.rb +50 -18
- data/spec/models/solr_document_spec.rb +28 -0
- data/spec/models/year_facet_spec.rb +49 -22
- data/spec/support/shared_examples_for_ddr_models.rb +54 -2
- metadata +21 -8
- data/lib/ddr/jobs/permanent_id.rb +0 -35
- data/lib/ddr/managers/permanent_id_manager.rb +0 -93
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: edadac3d26e329ebd8cd6ce67e3d92c10e2233da
|
4
|
+
data.tar.gz: 70aefbe23b138eedb961dd6cc24886a3ad4691ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73f1a830f3a2763d9a867505260286d5c50836d530551d758b92351339af451c67eb4572f5924501017d271bedbef692a1ff9981469f589c4fe796e187e05bbe
|
7
|
+
data.tar.gz: 1a2541c01cdf459f64ec0b9ee291479f77446b845da398c13038d721c48c69d9a3641a25f83a56ea7f673d555e096f99ff2c1a670705d298dc773b444389c51e
|
@@ -218,14 +218,15 @@ Devise.setup do |config|
|
|
218
218
|
# Explicit require is needed here for devise to find strategy
|
219
219
|
require "omniauth-shibboleth"
|
220
220
|
config.omniauth :shibboleth, {
|
221
|
-
uid_field: "eppn",
|
221
|
+
uid_field: lambda { |rpm| rpm.call("eppn") || rpm.call("duDukeID") },
|
222
222
|
name_field: "displayName",
|
223
223
|
info_fields: {
|
224
224
|
email: "mail",
|
225
225
|
first_name: "givenName",
|
226
226
|
last_name: "sn",
|
227
227
|
nickname: "eduPersonNickname"
|
228
|
-
}
|
228
|
+
},
|
229
|
+
extra_fields: ["duDukeID"],
|
229
230
|
}
|
230
231
|
|
231
232
|
# ==> Warden configuration
|
@@ -17,8 +17,6 @@ ActiveSupport::Notifications.subscribe(Ddr::Notifications::UPDATE, Ddr::Events::
|
|
17
17
|
# Deletion
|
18
18
|
ActiveSupport::Notifications.subscribe(Ddr::Notifications::DELETION, Ddr::Events::DeletionEvent)
|
19
19
|
ActiveSupport::Notifications.subscribe(/destroy\.\w+/, Ddr::Events::DeletionEvent)
|
20
|
-
ActiveSupport::Notifications.subscribe(/destroy\.\w+/, Ddr::Jobs::PermanentId::MakeUnavailable)
|
21
20
|
|
22
21
|
# Deaccession
|
23
22
|
ActiveSupport::Notifications.subscribe(/deaccession\.\w+/, Ddr::Events::DeaccessionEvent)
|
24
|
-
ActiveSupport::Notifications.subscribe(/deaccession\.\w+/, Ddr::Jobs::PermanentId::MakeUnavailable)
|
data/ddr-models.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
|
19
19
|
s.require_paths = ["lib", "app/models"]
|
20
20
|
|
21
|
-
s.add_dependency "rails", "~> 4.1
|
21
|
+
s.add_dependency "rails", "~> 4.1"
|
22
22
|
s.add_dependency "activeresource"
|
23
23
|
s.add_dependency "active-fedora", "~> 7.0"
|
24
24
|
s.add_dependency "hydra-core", "~> 7.2"
|
@@ -34,6 +34,7 @@ Gem::Specification.new do |s|
|
|
34
34
|
s.add_dependency "ddr-antivirus", "~> 2.1.1"
|
35
35
|
s.add_dependency "virtus", "~> 1.0.5"
|
36
36
|
s.add_dependency "hashie", "~> 3.4", "< 3.4.4"
|
37
|
+
s.add_dependency "edtf", "~> 3.0"
|
37
38
|
|
38
39
|
s.add_development_dependency "bundler", "~> 1.11"
|
39
40
|
s.add_development_dependency "rake"
|
data/lib/ddr/auth.rb
CHANGED
@@ -12,19 +12,20 @@ module Ddr
|
|
12
12
|
|
13
13
|
private
|
14
14
|
|
15
|
-
def has_permission?(permission,
|
16
|
-
permissions(
|
15
|
+
def has_permission?(permission, object_or_id)
|
16
|
+
permissions(object_or_id).include? permission
|
17
17
|
end
|
18
18
|
|
19
|
-
def permissions(
|
20
|
-
case
|
19
|
+
def permissions(object_or_id)
|
20
|
+
case object_or_id
|
21
21
|
when Ddr::Models::Base, SolrDocument
|
22
|
-
cached_permissions
|
23
|
-
|
22
|
+
cached_permissions(object_or_id.id) do
|
23
|
+
object_or_id.effective_permissions(agents)
|
24
24
|
end
|
25
25
|
when String
|
26
|
-
cached_permissions
|
27
|
-
|
26
|
+
cached_permissions(object_or_id) do
|
27
|
+
doc = SolrDocument.find(object_or_id) # raises SolrDocument::NotFound
|
28
|
+
doc.effective_permissions(agents)
|
28
29
|
end
|
29
30
|
end
|
30
31
|
end
|
@@ -33,14 +34,6 @@ module Ddr
|
|
33
34
|
cache[pid] ||= block.call
|
34
35
|
end
|
35
36
|
|
36
|
-
def permissions_doc(pid)
|
37
|
-
roles_query_result = ActiveFedora::SolrService.query("id:\"#{pid}\"", rows: 1).first
|
38
|
-
if roles_query_result.nil?
|
39
|
-
raise "Solr document not found for PID \"#{pid}\"."
|
40
|
-
end
|
41
|
-
SolrDocument.new roles_query_result
|
42
|
-
end
|
43
|
-
|
44
37
|
end
|
45
38
|
end
|
46
39
|
end
|
@@ -5,8 +5,6 @@ module Ddr
|
|
5
5
|
|
6
6
|
attr_reader :source, :output, :options
|
7
7
|
|
8
|
-
GeneratorResult = Struct.new(:stdout, :stderr, :status)
|
9
|
-
|
10
8
|
def initialize source, output, options=nil
|
11
9
|
raise ArgumentError, "Source must be a File or path to a file" unless Ddr::Utils.file_or_path?(source)
|
12
10
|
raise ArgumentError, "Output must be a File or path to a file" unless Ddr::Utils.file_or_path?(output)
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'open3'
|
2
|
-
|
3
1
|
module Ddr
|
4
2
|
module Derivatives
|
5
3
|
class PngGenerator < Generator
|
@@ -10,8 +8,8 @@ module Ddr
|
|
10
8
|
|
11
9
|
def generate
|
12
10
|
command = "convert #{Ddr::Utils.file_path(source)}[0] #{options} png:#{Ddr::Utils.file_path(output)}"
|
13
|
-
|
14
|
-
|
11
|
+
`#{command}`
|
12
|
+
$?.exitstatus
|
15
13
|
end
|
16
14
|
|
17
15
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'open3'
|
2
|
-
|
3
1
|
module Ddr
|
4
2
|
module Derivatives
|
5
3
|
class PtifGenerator < Generator
|
@@ -27,19 +25,20 @@ module Ddr
|
|
27
25
|
|
28
26
|
def run_generator(source_to_use)
|
29
27
|
command = "vips im_vips2tiff #{Ddr::Utils.file_path(source_to_use)} #{Ddr::Utils.file_path(output)}:#{options}"
|
30
|
-
|
31
|
-
|
28
|
+
`#{command}`
|
29
|
+
$?.exitstatus
|
32
30
|
end
|
33
31
|
|
34
32
|
def make_8_bit(tempdir)
|
35
33
|
temp_8_bit = File.new(File.join(tempdir, "temp_8_bit.v"), 'wb')
|
36
34
|
command = "vips im_msb #{Ddr::Utils.file_path(source)} #{Ddr::Utils::file_path(temp_8_bit)}"
|
37
|
-
|
38
|
-
|
35
|
+
`#{command}`
|
36
|
+
exitstatus = $?.exitstatus
|
37
|
+
if exitstatus == 0
|
39
38
|
return temp_8_bit
|
40
39
|
else
|
41
40
|
raise Ddr::Models::DerivativeGenerationFailure,
|
42
|
-
"Error converting #{Ddr::Utils.file_path(source)} to 8-bit
|
41
|
+
"Error converting #{Ddr::Utils.file_path(source)} to 8-bit"
|
43
42
|
end
|
44
43
|
end
|
45
44
|
|
data/lib/ddr/index/fields.rb
CHANGED
@@ -10,6 +10,7 @@ module Ddr::Index
|
|
10
10
|
ADMIN_SET_FACET = Field.new :admin_set_facet, :facetable
|
11
11
|
ADMIN_SET_TITLE = Field.new :admin_set_title, :stored_sortable
|
12
12
|
ALL_TEXT = Field.new :all_text, solr_name: "all_text_timv"
|
13
|
+
ARRANGER_FACET = Field.new :arranger_facet, :facetable
|
13
14
|
ASPACE_ID = Field.new :aspace_id, :stored_sortable
|
14
15
|
ATTACHED_FILES_HAVING_CONTENT =
|
15
16
|
Field.new :attached_files_having_content, :symbol
|
@@ -19,6 +20,7 @@ module Ddr::Index
|
|
19
20
|
COLLECTION_TITLE = Field.new :collection_title, :stored_sortable
|
20
21
|
COLLECTION_URI = Field.new :collection_uri, :symbol
|
21
22
|
COMPANY_FACET = Field.new :company_facet, :facetable
|
23
|
+
COMPOSER_FACET = Field.new :composer_facet, :facetable
|
22
24
|
CONTENT_CONTROL_GROUP = Field.new :content_control_group, :searchable, type: :string
|
23
25
|
CONTENT_CREATE_DATE = Field.new :content_create_date, :stored_sortable, type: :date
|
24
26
|
CONTENT_SIZE = Field.new :content_size, solr_name: "content_size_lsi"
|
@@ -31,12 +33,18 @@ module Ddr::Index
|
|
31
33
|
DISPLAY_FORMAT = Field.new :display_format, :stored_sortable
|
32
34
|
DOI = Field.new :doi, :symbol
|
33
35
|
EAD_ID = Field.new :ead_id, :stored_sortable
|
36
|
+
ENGRAVER_FACET = Field.new :engraver_facet, :facetable
|
34
37
|
EXTRACTED_TEXT = Field.new :extracted_text, solr_name: "extracted_text_tsm"
|
35
38
|
FOLDER_FACET = Field.new :folder_facet, :facetable
|
36
39
|
FORMAT_FACET = Field.new :format_facet, :facetable
|
40
|
+
GENRE_FACET = Field.new :genre_facet, :facetable
|
37
41
|
HAS_MODEL = Field.new :has_model, :symbol
|
38
42
|
IDENTIFIER_ALL = Field.new :identifier_all, :symbol
|
43
|
+
ILLUSTRATED_FACET = Field.new :illustrated_facet, :facetable
|
44
|
+
ILLUSTRATOR_FACET = Field.new :illustrator_facet, :facetable
|
45
|
+
INSTRUMENTATION_FACET = Field.new :instrumentation_facet, :facetable
|
39
46
|
INTERNAL_URI = Field.new :internal_uri, :stored_sortable
|
47
|
+
INTERVIEWER_NAME_FACET = Field.new :interviewer_name_facet, :facetable
|
40
48
|
IS_ATTACHED_TO = Field.new :is_attached_to, :symbol
|
41
49
|
IS_EXTERNAL_TARGET_FOR = Field.new :is_external_target_for, :symbol
|
42
50
|
IS_GOVERNED_BY = Field.new :is_governed_by, :symbol
|
@@ -49,7 +57,9 @@ module Ddr::Index
|
|
49
57
|
LAST_VIRUS_CHECK_ON = Field.new :last_virus_check_on, :stored_sortable, type: :date
|
50
58
|
LAST_VIRUS_CHECK_OUTCOME = Field.new :last_virus_check_outcome, :symbol
|
51
59
|
LICENSE = Field.new :license, :stored_sortable
|
60
|
+
LITHOGRAPHER_FACET = Field.new :lithographer_facet, :facetable
|
52
61
|
LOCAL_ID = Field.new :local_id, :stored_sortable
|
62
|
+
LYRICIST_FACET = Field.new :lyricist_facet, :facetable
|
53
63
|
MEDIA_SUB_TYPE = Field.new :content_media_sub_type, :facetable
|
54
64
|
MEDIA_MAJOR_TYPE = Field.new :content_media_major_type, :facetable
|
55
65
|
MEDIA_TYPE = Field.new :content_media_type, :symbol
|
@@ -59,20 +69,24 @@ module Ddr::Index
|
|
59
69
|
OBJECT_STATE = Field.new :object_state, :stored_sortable
|
60
70
|
OBJECT_CREATE_DATE = Field.new :system_create, :stored_sortable, type: :date
|
61
71
|
OBJECT_MODIFIED_DATE = Field.new :system_modified, :stored_sortable, type: :date
|
72
|
+
PERFORMER_FACET = Field.new :performer_facet, :facetable
|
62
73
|
PERMANENT_ID = Field.new :permanent_id, :stored_sortable, type: :string
|
63
74
|
PERMANENT_URL = Field.new :permanent_url, :stored_sortable, type: :string
|
64
75
|
PLACEMENT_COMPANY_FACET = Field.new :placement_company_facet, :facetable
|
65
76
|
POLICY_ROLE = Field.new :policy_role, :symbol
|
77
|
+
PRODUCER_FACET = Field.new :producer_facet, :facetable
|
66
78
|
PRODUCT_FACET = Field.new :product_facet, :facetable
|
67
79
|
PUBLICATION_FACET = Field.new :publication_facet, :facetable
|
68
80
|
PUBLISHER_FACET = Field.new :publisher_facet, :facetable
|
69
81
|
RESEARCH_HELP_CONTACT = Field.new :research_help_contact, :stored_sortable
|
70
82
|
RESOURCE_ROLE = Field.new :resource_role, :symbol
|
83
|
+
ROLL_NUMBER_FACET = Field.new :roll_number_facet, :facetable
|
71
84
|
SERIES_FACET = Field.new :series_facet, :facetable
|
72
85
|
SETTING_FACET = Field.new :setting_facet, :facetable
|
73
86
|
SPATIAL_FACET = Field.new :spatial_facet, :facetable
|
74
87
|
STRUCT_MAPS = Field.new :struct_maps, :stored_sortable
|
75
88
|
SUBJECT_FACET = Field.new :subject_facet, :facetable
|
89
|
+
SUBSERIES_FACET = Field.new :subseries_facet, :facetable
|
76
90
|
TECHMD_COLOR_SPACE = Field.new :techmd_color_space, :symbol
|
77
91
|
TECHMD_CREATING_APPLICATION = Field.new :techmd_creating_application, :symbol
|
78
92
|
TECHMD_CREATION_TIME = Field.new :techmd_creation_time, :stored_searchable, type: :date
|
@@ -90,9 +104,11 @@ module Ddr::Index
|
|
90
104
|
TECHMD_PRONOM_IDENTIFIER = Field.new :techmd_pronom_identifier, :symbol
|
91
105
|
TECHMD_VALID = Field.new :techmd_valid, :symbol
|
92
106
|
TECHMD_WELL_FORMED = Field.new :techmd_well_formed, :symbol
|
107
|
+
TEMPORAL_FACET = Field.new :temporal_facet, :facetable
|
93
108
|
TITLE = Field.new :title, :stored_sortable
|
94
109
|
TONE_FACET = Field.new :tone_facet, :facetable
|
95
110
|
TYPE_FACET = Field.new :type_facet, :facetable
|
111
|
+
VOLUME_FACET = Field.new :volume_facet, :facetable
|
96
112
|
WORKFLOW_STATE = Field.new :workflow_state, :stored_sortable
|
97
113
|
YEAR_FACET = Field.new :year_facet, solr_name: "year_facet_iim"
|
98
114
|
|
@@ -101,13 +117,13 @@ module Ddr::Index
|
|
101
117
|
end
|
102
118
|
|
103
119
|
def self.techmd
|
104
|
-
@techmd ||= constants(false).select { |c| c =~ /\ATECHMD_/ }.map { |c| const_get(c) }
|
120
|
+
@techmd ||= constants(false).select { |c| c =~ /\ATECHMD_/ }.map { |c| const_get(c) }.freeze
|
105
121
|
end
|
106
122
|
|
107
123
|
def self.descmd
|
108
124
|
@descmd ||= Ddr::Datastreams::DescriptiveMetadataDatastream.properties.map do |base, config|
|
109
125
|
Field.new base, *(config.behaviors)
|
110
|
-
end
|
126
|
+
end.freeze
|
111
127
|
end
|
112
128
|
|
113
129
|
def self.const_missing(name)
|
data/lib/ddr/jobs.rb
CHANGED
data/lib/ddr/managers.rb
CHANGED
@@ -56,17 +56,16 @@ module Ddr
|
|
56
56
|
tempdir = FileUtils.mkdir(tempdir_path).first
|
57
57
|
generator_source = create_source_file(tempdir)
|
58
58
|
generator_output = File.new(File.join(tempdir, "output.out"), 'wb')
|
59
|
-
|
59
|
+
exitstatus = derivative.generator.new(generator_source.path, generator_output.path, derivative.options).generate
|
60
60
|
generator_source.close unless generator_source.closed?
|
61
|
-
if
|
61
|
+
if exitstatus == 0
|
62
62
|
generator_output = File.open(generator_output, 'rb')
|
63
63
|
object.reload if object.persisted?
|
64
64
|
object.add_file generator_output, derivative.datastream, mime_type: derivative.generator.output_mime_type
|
65
65
|
object.save!
|
66
66
|
else
|
67
|
-
Rails.logger.error results.stderr
|
68
67
|
raise Ddr::Models::DerivativeGenerationFailure,
|
69
|
-
"Failure generating #{derivative.name} for #{object.pid}
|
68
|
+
"Failure generating #{derivative.name} for #{object.pid}"
|
70
69
|
end
|
71
70
|
generator_output.close unless generator_output.closed?
|
72
71
|
ensure
|
data/lib/ddr/models.rb
CHANGED
@@ -89,9 +89,6 @@ module Ddr
|
|
89
89
|
# Image server URL
|
90
90
|
mattr_accessor :image_server_url
|
91
91
|
|
92
|
-
# Whether permanent IDs should be automatically assigned on create
|
93
|
-
mattr_accessor :auto_assign_permanent_ids
|
94
|
-
|
95
92
|
mattr_accessor :permanent_id_target_url_base do
|
96
93
|
"https://repository.duke.edu/id/"
|
97
94
|
end
|
@@ -116,6 +113,12 @@ module Ddr
|
|
116
113
|
Dir.tmpdir
|
117
114
|
end
|
118
115
|
|
116
|
+
# Is repository locked? Default is false.
|
117
|
+
# A locked repository behaves as though each object in the repository is locked.
|
118
|
+
mattr_accessor :repository_locked do
|
119
|
+
false
|
120
|
+
end
|
121
|
+
|
119
122
|
# Yields an object with module configuration accessors
|
120
123
|
def self.configure
|
121
124
|
yield self
|
data/lib/ddr/models/base.rb
CHANGED
@@ -23,6 +23,8 @@ module Ddr
|
|
23
23
|
deprecation_deprecate *(Hydra::AccessControls::Permissions.public_instance_methods)
|
24
24
|
|
25
25
|
around_save :notify_save
|
26
|
+
around_save :notify_workflow_change, if: [:workflow_state_changed?, :persisted?]
|
27
|
+
after_create :notify_create
|
26
28
|
around_deaccession :notify_deaccession
|
27
29
|
around_destroy :notify_destroy
|
28
30
|
|
@@ -128,6 +130,17 @@ module Ddr
|
|
128
130
|
end
|
129
131
|
end
|
130
132
|
|
133
|
+
def notify_workflow_change
|
134
|
+
ActiveSupport::Notifications.instrument("#{workflow_state}.workflow.#{self.class.to_s.underscore}", pid: pid) do |payload|
|
135
|
+
yield
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def notify_create
|
140
|
+
ActiveSupport::Notifications.instrument("create.#{self.class.to_s.underscore}",
|
141
|
+
pid: pid)
|
142
|
+
end
|
143
|
+
|
131
144
|
def notify_deaccession
|
132
145
|
ActiveSupport::Notifications.instrument("deaccession.#{self.class.to_s.underscore}",
|
133
146
|
pid: pid,
|
@@ -22,16 +22,12 @@ module Ddr::Models
|
|
22
22
|
:ead_id,
|
23
23
|
:aspace_id,
|
24
24
|
:is_locked,
|
25
|
+
:doi,
|
25
26
|
datastream: "adminMetadata",
|
26
27
|
multiple: false
|
27
28
|
|
28
|
-
delegate :publish!, :unpublish!, :published?,
|
29
|
-
|
30
|
-
after_create :assign_permanent_id!, if: "Ddr::Models.auto_assign_permanent_ids"
|
31
|
-
end
|
32
|
-
|
33
|
-
def permanent_id_manager
|
34
|
-
@permanent_id_manager ||= Ddr::Managers::PermanentIdManager.new(self)
|
29
|
+
delegate :publish!, :unpublish!, :published?, :unpublished?,
|
30
|
+
to: :workflow
|
35
31
|
end
|
36
32
|
|
37
33
|
def roles
|
@@ -46,10 +42,6 @@ module Ddr::Models
|
|
46
42
|
@workflow ||= Ddr::Managers::WorkflowManager.new(self)
|
47
43
|
end
|
48
44
|
|
49
|
-
def assign_permanent_id!
|
50
|
-
permanent_id_manager.assign_later
|
51
|
-
end
|
52
|
-
|
53
45
|
def grant_roles_to_creator(creator)
|
54
46
|
roles.grant type: Ddr::Auth::Roles::EDITOR,
|
55
47
|
agent: creator,
|
@@ -83,7 +75,7 @@ module Ddr::Models
|
|
83
75
|
end
|
84
76
|
|
85
77
|
def locked?
|
86
|
-
!!is_locked
|
78
|
+
!!is_locked || Ddr::Models.repository_locked
|
87
79
|
end
|
88
80
|
|
89
81
|
def lock
|
@@ -104,13 +96,5 @@ module Ddr::Models
|
|
104
96
|
save
|
105
97
|
end
|
106
98
|
|
107
|
-
private
|
108
|
-
|
109
|
-
def update_permanent_id_on_destroy
|
110
|
-
@permanent_id = permanent_id
|
111
|
-
yield
|
112
|
-
Resque.enqueue(Ddr::Jobs::PermanentId::MakeUnavailable, @permanent_id, "deleted")
|
113
|
-
end
|
114
|
-
|
115
99
|
end
|
116
100
|
end
|