Sha256: 78eadfcf35042c10c41f7d4a07c57e7e5fdf6c732db7cbeb9a714f583a53ba91

Contents?: true

Size: 982 Bytes

Versions: 7

Compression:

Stored size: 982 Bytes

Contents

module CurationConcerns
  # Validates that the submitted version is the most recent version in the datastore.
  # Caveat: we are not detecting if the version is changed by a different process between
  # the time this validator is run and when the object is saved
  class OptimisticLockValidator < Actors::AbstractActor
    class_attribute :version_field
    self.version_field = 'version'

    def update(attributes)
      validate_lock(version_attribute(attributes)) && next_actor.update(attributes)
    end

    private

      # @return [Boolean] returns true if the lock is missing or
      #                   if it matches the current object version.
      def validate_lock(version)
        return true if version.blank? || version == curation_concern.etag
        curation_concern.errors.add(:base, :conflict)
        false
      end

      # Removes the version attribute
      def version_attribute(attributes)
        attributes.delete(version_field)
      end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
curation_concerns-1.7.8 app/actors/curation_concerns/optimistic_lock_validator.rb
curation_concerns-1.7.7 app/actors/curation_concerns/optimistic_lock_validator.rb
curation_concerns-2.0.0 app/actors/curation_concerns/optimistic_lock_validator.rb
curation_concerns-2.0.0.rc2 app/actors/curation_concerns/optimistic_lock_validator.rb
curation_concerns-1.7.6 app/actors/curation_concerns/optimistic_lock_validator.rb
curation_concerns-1.7.5 app/actors/curation_concerns/optimistic_lock_validator.rb
curation_concerns-1.7.4 app/actors/curation_concerns/optimistic_lock_validator.rb