diff --git a/lib/valkyrie/sequel/persister.rb b/lib/valkyrie/sequel/persister.rb index 5149f96..3df6dad 100644 --- a/lib/valkyrie/sequel/persister.rb +++ b/lib/valkyrie/sequel/persister.rb @@ -8,9 +8,9 @@ def initialize(adapter:) @adapter = adapter end - def save(resource:) + def save(resource:, external_resource: false) object_attributes = resource_factory.from_resource(resource: resource) - output = create_or_update(resource: resource, attributes: object_attributes) + output = create_or_update(resource: resource, attributes: object_attributes, external_resource: external_resource) resource_factory.to_resource(object: output) end @@ -121,11 +121,18 @@ def wipe! private - def create_or_update(resource:, attributes:) + def create_or_update(resource:, attributes:, external_resource:) attributes[:updated_at] = Time.now.utc attributes[:created_at] ||= Time.now.utc - return create(resource: resource, attributes: attributes) unless resource.persisted? && !exists?(id: attributes[:id]) - update(resource: resource, attributes: attributes) + if exists?(id: attributes[:id]) + update(resource: resource, attributes: attributes) + else + if !external_resource && resource.persisted? + # This resource has been deleted in the meantime, error. + raise Valkyrie::Persistence::ObjectNotFoundError, "The object #{resource.id} is previously persisted but not found at save time." unless exists?(id: attributes[:id]) + end + create(resource: resource, attributes: attributes) + end end def create(resource:, attributes:) @@ -146,7 +153,7 @@ def update(resource:, attributes:) end def exists?(id:) - resources.select(1).first(id: id).nil? + !resources.select(1).first(id: id).nil? end end end diff --git a/lib/valkyrie/sequel/version.rb b/lib/valkyrie/sequel/version.rb index c02dffb..3cb4166 100644 --- a/lib/valkyrie/sequel/version.rb +++ b/lib/valkyrie/sequel/version.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true module Valkyrie module Sequel - VERSION = "2.2.1" + VERSION = "3.0.0.beta1" end end diff --git a/valkyrie-sequel.gemspec b/valkyrie-sequel.gemspec index 1f81a87..03d9919 100644 --- a/valkyrie-sequel.gemspec +++ b/valkyrie-sequel.gemspec @@ -22,7 +22,7 @@ Gem::Specification.new do |spec| spec.add_dependency "sequel", "~> 5.0" spec.add_dependency "sequel_pg", "~> 1.0" - spec.add_dependency "valkyrie", ">= 2.1", "< 2.3" + spec.add_dependency "valkyrie", ">= 3.0.0.beta1" spec.add_dependency "oj", "~> 3.0" spec.add_development_dependency "bundler", "~> 2.0" spec.add_development_dependency "rake"