Skip to content

Commit

Permalink
Merge pull request #247 from codeodor/rails4
Browse files Browse the repository at this point in the history
Fix for #122, #121 and #175 on Rails 4 branch
  • Loading branch information
radar committed Jun 22, 2015
2 parents fcdcc7a + 7232e2f commit 857ed34
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 2 deletions.
15 changes: 14 additions & 1 deletion lib/paranoia.rb
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ def restore_associated_records
association_find_conditions = { association_foreign_key => self.id }
end

association_class = Object.const_get(association_class_name)
association_class = association_class_name.constantize
if association_class.paranoid?
association_class.only_deleted.where(association_find_conditions).first.try!(:restore, recursive: true)
end
Expand Down Expand Up @@ -237,3 +237,16 @@ def paranoia_sentinel_value
end

require 'paranoia/rspec' if defined? RSpec

module ActiveRecord
module Validations
class UniquenessValidator < ActiveModel::EachValidator
protected
def build_relation_with_paranoia(klass, table, attribute, value)
relation = build_relation_without_paranoia(klass, table, attribute, value)
relation.and(klass.arel_table[klass.paranoia_column].eq(nil))
end
alias_method_chain :build_relation, :paranoia
end
end
end
16 changes: 15 additions & 1 deletion test/paranoia_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def setup!
'fail_callback_models' => 'deleted_at DATETIME',
'related_models' => 'parent_model_id INTEGER, parent_model_with_counter_cache_column_id INTEGER, deleted_at DATETIME',
'asplode_models' => 'parent_model_id INTEGER, deleted_at DATETIME',
'employers' => 'deleted_at DATETIME',
'employers' => 'name VARCHAR(32), deleted_at DATETIME',
'employees' => 'deleted_at DATETIME',
'jobs' => 'employer_id INTEGER NOT NULL, employee_id INTEGER NOT NULL, deleted_at DATETIME',
'custom_column_models' => 'destroyed_at DATETIME',
Expand Down Expand Up @@ -685,6 +685,19 @@ def test_observers_not_notified_if_not_supported
# essentially, we're just ensuring that this doesn't crash
end

def test_validates_uniqueness_only_checks_non_deleted_records
a = Employer.create!(name: "A")
a.destroy
b = Employer.new(name: "A")
assert b.valid?
end

def test_validates_uniqueness_still_works_on_non_deleted_records
a = Employer.create!(name: "A")
b = Employer.new(name: "A")
refute b.valid?
end

def test_i_am_the_destroyer
expected = %Q{
Sharon: "There should be a method called I_AM_THE_DESTROYER!"
Expand Down Expand Up @@ -909,6 +922,7 @@ def set_after_commit_on_destroy_callback_called

class Employer < ActiveRecord::Base
acts_as_paranoid
validates_uniqueness_of :name
has_many :jobs
has_many :employees, :through => :jobs
end
Expand Down

0 comments on commit 857ed34

Please sign in to comment.