Commit 857ed343 by Ryan Bigg

Merge pull request #247 from codeodor/rails4

Fix for #122, #121 and #175 on Rails 4 branch
parents fcdcc7a9 7232e2f5
......@@ -154,7 +154,7 @@ module Paranoia
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
......@@ -237,3 +237,16 @@ class ActiveRecord::Base
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
......@@ -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',
......@@ -685,6 +685,19 @@ class ParanoiaTest < test_framework
# 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!"
......@@ -909,6 +922,7 @@ end
class Employer < ActiveRecord::Base
acts_as_paranoid
validates_uniqueness_of :name
has_many :jobs
has_many :employees, :through => :jobs
end
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment