lib/adaptive_alias.rb in adaptive_alias-0.0.3 vs lib/adaptive_alias.rb in adaptive_alias-0.1.0
- old
+ new
@@ -1,9 +1,10 @@
# frozen_string_literal: true
require 'adaptive_alias/version'
require 'adaptive_alias/active_model_patches/read_attribute'
+require 'adaptive_alias/active_model_patches/write_attribute'
require 'adaptive_alias/active_model_patches/remove_alias_attribute'
require 'adaptive_alias/patches/backward_patch'
require 'adaptive_alias/patches/forward_patch'
require 'adaptive_alias/hooks/association'
@@ -29,30 +30,34 @@
Module.new do
extend ActiveSupport::Concern
included do
- if column_names.include?(new_column)
- Patches::BackwardPatch.new(self, old_column, new_column).apply!
- else
- Patches::ForwardPatch.new(self, old_column, new_column).apply!
- end
+ patch = (column_names.include?(new_column) ? Patches::BackwardPatch : Patches::ForwardPatch).new(self, old_column, new_column)
+ patch.apply!
+ patch.mark_removable
end
end
end
- def rescue_statement_invalid(relation)
+ def rescue_statement_invalid(relation, &block)
yield
rescue ActiveRecord::StatementInvalid => error
raise error if AdaptiveAlias.current_patches.all?{|_key, patch| !patch.fix_association.call(relation, error) }
- retry
+
+ result = rescue_statement_invalid(relation, &block)
+ AdaptiveAlias.current_patches.each_value(&:mark_removable)
+ return result
end
- def rescue_missing_attribute
+ def rescue_missing_attribute(klass, &block)
yield
rescue ActiveModel::MissingAttributeError => error
- raise error if AdaptiveAlias.current_patches.all?{|_key, patch| !patch.fix_missing_attribute.call }
- retry
+ raise error if AdaptiveAlias.current_patches.all?{|_key, patch| !patch.fix_missing_attribute.call(klass, error) }
+
+ result = rescue_missing_attribute(klass, &block)
+ AdaptiveAlias.current_patches.each_value(&:mark_removable)
+ return result
end
def get_or_create_model_module(klass)
return @model_modules[klass] if @model_modules[klass]