lib/adaptive_alias.rb in adaptive_alias-0.0.2 vs lib/adaptive_alias.rb in adaptive_alias-0.0.3

- old
+ new

@@ -1,65 +1,73 @@ -# frozen_string_literal: true - -require 'adaptive_alias/version' -require 'adaptive_alias/active_model_patches/read_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' -require 'adaptive_alias/hooks/association_scope' -require 'adaptive_alias/hooks/singular_association' -require 'adaptive_alias/hooks/relation' - -module AdaptiveAlias - @log_interval = 10 * 60 - @current_patches = {} - @model_modules ||= {} - - class << self - attr_accessor :unexpected_old_column_proc - attr_accessor :log_interval - attr_accessor :current_patches - end - - class << self - def [](old_column, new_column) - old_column = old_column.to_sym - new_column = new_column.to_sym - - 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 - end - end - end - - def rescue_statement_invalid(relation) - yield - rescue ActiveRecord::StatementInvalid => error - raise error if AdaptiveAlias.current_patches.all?{|_key, patch| !patch.fix_association.call(relation, error) } - retry - end - - def rescue_missing_attribute - yield - rescue ActiveModel::MissingAttributeError => error - raise error if AdaptiveAlias.current_patches.all?{|_key, patch| !patch.fix_missing_attribute.call } - retry - end - - def get_or_create_model_module(klass) - return @model_modules[klass] if @model_modules[klass] - - @model_modules[klass] = Module.new - klass.prepend(@model_modules[klass]) - return @model_modules[klass] - end - end -end +# frozen_string_literal: true + +require 'adaptive_alias/version' +require 'adaptive_alias/active_model_patches/read_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' +require 'adaptive_alias/hooks/association_scope' +require 'adaptive_alias/hooks/singular_association' +require 'adaptive_alias/hooks/relation' + +module AdaptiveAlias + @log_interval = 10 * 60 + @current_patches = {} + @model_modules ||= {} + + class << self + attr_accessor :unexpected_old_column_proc + attr_accessor :log_interval + attr_accessor :current_patches + end + + class << self + def [](old_column, new_column) + old_column = old_column.to_sym + new_column = new_column.to_sym + + 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 + end + end + end + + def rescue_statement_invalid(relation) + yield + rescue ActiveRecord::StatementInvalid => error + raise error if AdaptiveAlias.current_patches.all?{|_key, patch| !patch.fix_association.call(relation, error) } + retry + end + + def rescue_missing_attribute + yield + rescue ActiveModel::MissingAttributeError => error + raise error if AdaptiveAlias.current_patches.all?{|_key, patch| !patch.fix_missing_attribute.call } + retry + end + + def get_or_create_model_module(klass) + return @model_modules[klass] if @model_modules[klass] + + @model_modules[klass] = Module.new + klass.prepend(@model_modules[klass]) + return @model_modules[klass] + end + + def missing_value?(attributes, klass, name) + return false if attributes.key?(name) + + old_name = klass.attribute_aliases.key(name) + return false if old_name == nil + return !!AdaptiveAlias.current_patches[[klass, old_name.to_sym, name.to_sym]] + end + end +end