Class: Hyrax::Transactions::Steps::SetUploadedDateUnlessPresent
- Inherits:
-
Object
- Object
- Hyrax::Transactions::Steps::SetUploadedDateUnlessPresent
- Defined in:
- lib/hyrax/transactions/steps/set_uploaded_date_unless_present.rb
Overview
A step that sets the uploaded date for an input ‘Valkyrie::Resource` or `ValkyrieChangeSet`.
The uploaded date is derived in the following way:
- if a `date_uploaded` is already present, keep it;
- if there is no current `date_uploaded` but `date_modified` is
present, use the value of `date_modified`.
- if neither `date_uploaded` nor `date_modified` is present, set the
time to now using the given `time_service`. `Hyrax::TimeService`
is used by default.
A useful pattern is to run this step immediately following one to set the ‘date_modified` to now, and just before validation and save. This pattern ensures the times for a newly created object have the same value as close to the actual save time as practicable, and avoids overwriting `date_uploaded` for existing objects.
Instance Method Summary collapse
- #call(obj) ⇒ Dry::Monads::Result
-
#initialize(time_service: Hyrax::TimeService) ⇒ SetUploadedDateUnlessPresent
constructor
A new instance of SetUploadedDateUnlessPresent.
Constructor Details
#initialize(time_service: Hyrax::TimeService) ⇒ SetUploadedDateUnlessPresent
Returns a new instance of SetUploadedDateUnlessPresent.
30 31 32 |
# File 'lib/hyrax/transactions/steps/set_uploaded_date_unless_present.rb', line 30 def initialize(time_service: Hyrax::TimeService) @time_service = time_service end |
Instance Method Details
#call(obj) ⇒ Dry::Monads::Result
Note:
the implementation sets the uploaded date to ‘#date_modified` if it exists, falling back on the current datetime.
41 42 43 44 45 46 47 48 |
# File 'lib/hyrax/transactions/steps/set_uploaded_date_unless_present.rb', line 41 def call(obj) return Failure[:no_date_uploaded_attribute, obj] unless obj.respond_to?(:date_uploaded=) obj.date_uploaded = date_uploaded(obj) if obj.date_uploaded.blank? Success(obj) end |