Skip to content

Commit

Permalink
Merge pull request #420 from Dynamoid/fix-persisted-for-deleted-model
Browse files Browse the repository at this point in the history
Fix #persisted? for deleted/destroyed model
  • Loading branch information
andrykonchin committed Apr 2, 2020
2 parents ed482f0 + 173c555 commit 3468d02
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 2 deletions.
3 changes: 2 additions & 1 deletion dynamoid.gemspec
Expand Up @@ -43,7 +43,8 @@ Gem::Specification.new do |spec|
spec.add_development_dependency 'appraisal', '~> 2.2'
spec.add_development_dependency 'bundler'
spec.add_development_dependency 'coveralls', '~> 0.8'
spec.add_development_dependency 'pry', '~> 0.12'
spec.add_development_dependency 'pry', '~> 0.12.0' # Since 0.13.0 pry is incompatible with old versions of pry-byebug.
# We use these old versions of pry-byebug to run tests on Ruby 2.3 which new versions dont't support
spec.add_development_dependency 'rake', '~> 13.0'
spec.add_development_dependency 'rspec', '~> 3.9'
spec.add_development_dependency 'rubocop'
Expand Down
8 changes: 7 additions & 1 deletion lib/dynamoid/persistence.rb
Expand Up @@ -283,7 +283,7 @@ def touch(name = nil)
#
# @since 0.2.0
def persisted?
!new_record?
!(new_record? || @destroyed)
end

# Run the callbacks and then persist this object in the datastore.
Expand Down Expand Up @@ -407,6 +407,9 @@ def destroy
ret = run_callbacks(:destroy) do
delete
end

@destroyed = true

ret == false ? false : self
end

Expand All @@ -431,6 +434,9 @@ def delete
end
options[:conditions] = conditions
end

@destroyed = true

Dynamoid.adapter.delete(self.class.table_name, hash_key, options)
rescue Dynamoid::Errors::ConditionalCheckFailedException
raise Dynamoid::Errors::StaleObjectError.new(self, 'delete')
Expand Down
34 changes: 34 additions & 0 deletions spec/dynamoid/persistence_spec.rb
Expand Up @@ -2713,4 +2713,38 @@ def log_message
end
end
end

describe '#persisted?' do
before do
klass.create_table
end

let(:klass) do
new_class
end

it 'returns true for saved model' do
model = klass.create!
expect(model.persisted?).to eq true
end

it 'returns false for new model' do
model = klass.new
expect(model.persisted?).to eq false
end

it 'returns false for deleted model' do
model = klass.create!

model.delete
expect(model.persisted?).to eq false
end

it 'returns false for destroyed model' do
model = klass.create!

model.destroy
expect(model.persisted?).to eq false
end
end
end

0 comments on commit 3468d02

Please sign in to comment.