Class: Sufia::GenericFile::Actor
- Inherits:
-
Object
- Object
- Sufia::GenericFile::Actor
- Defined in:
- app/actors/sufia/generic_file/actor.rb
Overview
Actions are decoupled from controller logic so that they may be called from a controller or a background job.
Instance Attribute Summary collapse
-
#generic_file ⇒ Object
readonly
Returns the value of attribute generic_file.
-
#user ⇒ Object
readonly
Returns the value of attribute user.
Class Method Summary collapse
Instance Method Summary collapse
- #create_content(file, file_name, dsid) ⇒ Object
-
#create_metadata(batch_id) {|generic_file| ... } ⇒ Object
in order to avoid two saves in a row, create_metadata does not save the file by default.
- #destroy ⇒ Object
-
#initialize(generic_file, user) ⇒ Actor
constructor
A new instance of Actor.
- #push_characterize_job ⇒ Object
- #revert_content(revision_id, datastream_id) ⇒ Object
-
#save_and_record_committer ⇒ Object
Takes an optional block and executes the block if the save was successful.
-
#save_characterize_and_record_committer ⇒ Object
Takes an optional block and executes the block if the save was successful.
- #update_content(file, datastream_id) ⇒ Object
- #update_metadata(attributes, visibility) ⇒ Object
Constructor Details
#initialize(generic_file, user) ⇒ Actor
Returns a new instance of Actor.
7 8 9 10 |
# File 'app/actors/sufia/generic_file/actor.rb', line 7 def initialize(generic_file, user) @generic_file = generic_file @user = user end |
Instance Attribute Details
#generic_file ⇒ Object (readonly)
Returns the value of attribute generic_file.
5 6 7 |
# File 'app/actors/sufia/generic_file/actor.rb', line 5 def generic_file @generic_file end |
#user ⇒ Object (readonly)
Returns the value of attribute user.
5 6 7 |
# File 'app/actors/sufia/generic_file/actor.rb', line 5 def user @user end |
Class Method Details
.virus_check(file) ⇒ Object
110 111 112 113 114 115 116 117 118 |
# File 'app/actors/sufia/generic_file/actor.rb', line 110 def virus_check(file) path = file.is_a?(String) ? file : file.path unless defined?(ClamAV) ActiveFedora::Base.logger.warn "Virus checking disabled, #{path} not checked" return end scan_result = ClamAV.instance.scanfile(path) raise Sufia::VirusFoundError.new("A virus was found in #{path}: #{scan_result}") unless scan_result == 0 end |
Instance Method Details
#create_content(file, file_name, dsid) ⇒ Object
30 31 32 33 34 35 36 37 38 |
# File 'app/actors/sufia/generic_file/actor.rb', line 30 def create_content(file, file_name, dsid) fname = generic_file.label.blank? ? file_name.truncate(255) : generic_file.label generic_file.add_file(file, dsid, fname) save_characterize_and_record_committer do if Sufia.config.respond_to?(:after_create_content) Sufia.config.after_create_content.call(generic_file, user) end end end |
#create_metadata(batch_id) {|generic_file| ... } ⇒ Object
in order to avoid two saves in a row, create_metadata does not save the file by default. it is typically used in conjunction with create_content, which does do a save. If you want to save when using create_metadata, you can do this:
(batch_id) { |gf| gf.save }
16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'app/actors/sufia/generic_file/actor.rb', line 16 def (batch_id) generic_file.(user) generic_file.date_uploaded = Date.today generic_file.date_modified = Date.today generic_file.creator = [user.name] if batch_id generic_file.batch_id = Sufia::Noid.namespaceize(batch_id) else ActiveFedora::Base.logger.warn "unable to find batch to attach to" end yield(generic_file) if block_given? end |
#destroy ⇒ Object
71 72 73 74 75 76 77 78 |
# File 'app/actors/sufia/generic_file/actor.rb', line 71 def destroy pid = generic_file.pid #Work around for https://github.com/projecthydra/active_fedora/issues/422 generic_file.destroy FeaturedWork.where(generic_file_id: pid).destroy_all if Sufia.config.respond_to?(:after_destroy) Sufia.config.after_destroy.call(pid, user) end end |
#push_characterize_job ⇒ Object
105 106 107 |
# File 'app/actors/sufia/generic_file/actor.rb', line 105 def push_characterize_job Sufia.queue.push(CharacterizeJob.new(@generic_file.pid)) end |
#revert_content(revision_id, datastream_id) ⇒ Object
40 41 42 43 44 45 46 47 48 |
# File 'app/actors/sufia/generic_file/actor.rb', line 40 def revert_content(revision_id, datastream_id) revision = generic_file.content.get_version(revision_id) generic_file.add_file(revision.content, datastream_id, revision.label) save_characterize_and_record_committer do if Sufia.config.respond_to?(:after_revert_content) Sufia.config.after_revert_content.call(generic_file, user, revision_id) end end end |
#save_and_record_committer ⇒ Object
Takes an optional block and executes the block if the save was successful.
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'app/actors/sufia/generic_file/actor.rb', line 88 def save_and_record_committer save_tries = 0 begin return false unless generic_file.save rescue RSolr::Error::Http => error ActiveFedora::Base.logger.warn "Sufia::GenericFile::Actor::save_and_record_committer Caught RSOLR error #{error.inspect}" save_tries+=1 # fail for good if the tries is greater than 3 raise error if save_tries >=3 sleep 0.01 retry end yield if block_given? generic_file.record_version_committer(user) true end |
#save_characterize_and_record_committer ⇒ Object
Takes an optional block and executes the block if the save was successful.
81 82 83 84 85 |
# File 'app/actors/sufia/generic_file/actor.rb', line 81 def save_characterize_and_record_committer save_and_record_committer { push_characterize_job }.tap do |val| yield if block_given? && val end end |
#update_content(file, datastream_id) ⇒ Object
50 51 52 53 54 55 56 57 |
# File 'app/actors/sufia/generic_file/actor.rb', line 50 def update_content(file, datastream_id) generic_file.add_file(file, datastream_id, file.original_filename) save_characterize_and_record_committer do if Sufia.config.respond_to?(:after_update_content) Sufia.config.after_update_content.call(generic_file, user) end end end |
#update_metadata(attributes, visibility) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 |
# File 'app/actors/sufia/generic_file/actor.rb', line 59 def (attributes, visibility) generic_file.attributes = generic_file.sanitize_attributes(attributes) generic_file.visibility = visibility generic_file.date_modified = DateTime.now remove_from_feature_works if generic_file.visibility_changed? && !generic_file.public? save_and_record_committer do if Sufia.config.respond_to?(:after_update_metadata) Sufia.config..call(generic_file, user) end end end |