lib/dependent_restrict.rb in dependent_restrict-0.2.2 vs lib/dependent_restrict.rb in dependent_restrict-0.2.3
- old
+ new
@@ -1,31 +1,24 @@
require 'active_record'
require 'dependent_restrict/delete_restriction_error'
module DependentRestrict
- VERSION = '0.2.2'
-
def self.included(base)
super
base.extend(ClassMethods)
base.class_eval do
- class << self
- alias_method_chain :has_one, :restrict
- alias_method_chain :has_many, :restrict
- alias_method_chain :has_and_belongs_to_many, :restrict
- end
end
end
module ClassMethods
VALID_DEPENDENTS = [:rollback, :restrict_with_error, :restrict, :restrict_with_exception]
# We should be aliasing configure_dependency_for_has_many but that method
# is private so we can't. We alias has_many instead trying to be as fair
# as we can to the original behaviour.
- def has_one_with_restrict(*args, &extension)
+ def has_one(*args, &extension)
options = args.extract_options! || {}
if VALID_DEPENDENTS.include?(options[:dependent].try(:to_sym))
reflection = if active_record_4?
association_id, scope = *args
restrict_create_reflection(:has_one, association_id, scope || {}, options, self)
@@ -34,14 +27,14 @@
create_reflection(:has_one, association_id, options, self)
end
add_dependency_callback!(reflection, options)
end
args << options
- has_one_without_restrict(*args, &extension)
+ super(*args, &extension)
end
- def has_many_with_restrict(*args, &extension)
+ def has_many(*args, &extension)
options = args.extract_options! || {}
if VALID_DEPENDENTS.include?(options[:dependent].try(:to_sym))
reflection = if active_record_4?
association_id, scope = *args
restrict_create_reflection(:has_many, association_id, scope || {}, options, self)
@@ -50,14 +43,14 @@
create_reflection(:has_many, association_id, options, self)
end
add_dependency_callback!(reflection, options)
end
args << options
- has_many_without_restrict(*args, &extension)
+ super(*args, &extension)
end
- def has_and_belongs_to_many_with_restrict(*args, &extension)
+ def has_and_belongs_to_many(*args, &extension)
options = args.extract_options! || {}
if VALID_DEPENDENTS.include?(options[:dependent].try(:to_sym))
reflection = if active_record_4?
raise ArgumentError, "dependent_restrict doesn't work with has_and_belongs_to_many. Use equivalent rails 4.1 has_many :through" if ActiveRecord::Reflection.respond_to? :create
association_id, scope = *args
@@ -68,11 +61,11 @@
end
add_dependency_callback!(reflection, options)
options.delete(:dependent)
end
args << options
- has_and_belongs_to_many_without_restrict(*args, &extension)
+ super(*args, &extension)
end
private
def add_dependency_callback!(reflection, options)
@@ -87,24 +80,24 @@
method = reflection.collection? ? :empty? : :nil?
unless send(name).send(method)
raise ActiveRecord::Rollback
end
end
- before_destroy method_name
+ before_destroy method_name.to_sym
when :restrict, :restrict_with_exception
options.delete(:dependent)
define_method(method_name) do
method = reflection.collection? ? :empty? : :nil?
unless send(name).send(method)
raise ActiveRecord::DetailedDeleteRestrictionError.new(name, self)
end
end
- before_destroy method_name
+ before_destroy method_name.to_sym
end
end
def active_record_4?
- ::ActiveRecord::VERSION::MAJOR == 4
+ ::ActiveRecord::VERSION::MAJOR >= 4
end
def restrict_create_reflection(*args)
if ActiveRecord::Reflection.respond_to? :create
ActiveRecord::Reflection.create *args