# require "eitil_wrapper/callbacks/helper_methods" # require "eitil_wrapper/railtie" to run the dynamic dispatch as an init hook during boot require "eitil_wrapper/railtie" require "eitil_core/argument_helpers/all_args_to_ivars" module EitilWrapper module Callbacks module HelperMethods Eitil::ApplicationRecordModules << self def inherited(subclass) super subclass.use_eitil_callback_helper_methods rescue => e puts "callback helper methods failed for #{subclass} because of #{e.class} and '#{e.to_s.split(' ').first}'" end def use_eitil_callback_helper_methods return if abstract_class? create_eitil_boolean_callback_helper_methods end def columns_of_type(data_type) columns_hash.select { |column,v| v.sql_type_metadata.type == data_type } end def create_eitil_boolean_callback_helper_methods columns = columns_of_type :boolean columns&.each do |column_name, eitil_object| # truthy methods create_eitil_became_true_callback_helper column_name create_eitil_becomes_true_callback_helper column_name create_eitil_to_true_callback_helper column_name # falsy methods create_eitil_became_false_callback_helper column_name create_eitil_becomes_false_callback_helper column_name create_eitil_to_false_callback_helper column_name end end def create_eitil_became_true_callback_helper(column_name) method_name = "#{column_name}_became_true" define_method(method_name) do _changes = previous_changes[column_name] _changes && !_changes[0] && _changes[1] end end def create_eitil_becomes_true_callback_helper(column_name) method_name = "#{column_name}_becomes_true" define_method(method_name) do _changes = changes[column_name] _changes && !_changes[0] && _changes[1] end end def create_eitil_to_true_callback_helper(column_name) method_name = "#{column_name}_to_true" becomes_method = "#{column_name}_becomes_true" became_method = "#{column_name}_became_true" define_method(method_name) do return send(becomes_method) if changes&.present? return send(became_method) if previous_changes&.present? end end def create_eitil_became_false_callback_helper(column_name) method_name = "#{column_name}_became_false" define_method(method_name) do _changes = previous_changes[column_name] _changes && _changes[0] && !_changes[1] end end def create_eitil_becomes_false_callback_helper(column_name) method_name = "#{column_name}_becomes_false" define_method(method_name) do _changes = changes[column_name] _changes && _changes[0] && !_changes[1] end end def create_eitil_to_false_callback_helper(column_name) method_name = "#{column_name}_to_false" becomes_method = "#{column_name}_becomes_false" became_method = "#{column_name}_became_false" define_method(method_name) do return send(becomes_method) if changes&.present? return send(became_method) if previous_changes&.present? end end end end end