Skip to content

Commit

Permalink
Refactoring VisibilityCopyJob and documenting
Browse files Browse the repository at this point in the history
Reducing duplication of behavior to a consistent process. Improving
documentation.

The duplication was identified via `flay`
  • Loading branch information
jeremyf committed Mar 24, 2017
1 parent 95892ba commit 222700f
Showing 1 changed file with 20 additions and 10 deletions.
30 changes: 20 additions & 10 deletions app/jobs/visibility_copy_job.rb
Original file line number Diff line number Diff line change
@@ -1,18 +1,28 @@
# Responsible for copying the following attributes from the work to each file in the file_sets
#
# * visibility
# * lease
# * embargo
class VisibilityCopyJob < ActiveJob::Base
# @api public
# @param [#file_sets, #visibility, #lease, #embargo] work - a Work model
def perform(work)
work.file_sets.each do |file|
file.visibility = work.visibility # visibility must come first, because it can clear an embargo/lease
if work.lease
file.build_lease unless file.lease
file.lease.attributes = work.lease.attributes.except('id')
file.lease.save
end
if work.embargo
file.build_embargo unless file.embargo
file.embargo.attributes = work.embargo.attributes.except('id')
file.embargo.save
end
copy_visibility_modifier(work: work, file: file, modifier: :lease)
copy_visibility_modifier(work: work, file: file, modifier: :embargo)
file.save!
end
end

private

def copy_visibility_modifier(work:, file:, modifier:)
work_modifier = work.public_send(modifier)
return unless work_modifier
file_modifier = file.public_send(modifier)
file.public_send("build_#{modifier}") unless file_modifier
file_modifier.attributes = work_modifier.attributes.except('id')
file_modifier.save
end
end

0 comments on commit 222700f

Please sign in to comment.