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