module Rodauth::Model::Sequel
def association_options(name)
def association_options(name) options = @association_options options = options.call(name) if options.respond_to?(:call) options || {} end
def define_association(model, type:, name:, table:, key:, **options)
def define_association(model, type:, name:, table:, key:, **options) associated_model = Class.new(::Sequel::Model) associated_model.set_dataset(model.db[table]) associated_model.many_to_one :account, class: model.name, key: key model.const_set(camelize(singularize(name.to_s)), associated_model) model.public_send type, name, class: associated_model.name, key: key, **options, **association_options(name) model.add_association_dependencies name => :delete end
def define_associations(model)
def define_associations(model) model.plugin :association_dependencies define_password_hash_association(model) unless rodauth.account_password_hash_column feature_associations.each do |association| association[:type] = ASSOCIATION_TYPES.fetch(association[:type]) define_association(model, **association) end end
def define_methods(model)
def define_methods(model) rodauth = @auth_class.allocate.freeze unless rodauth.account_password_hash_column model.plugin :nested_attributes model.nested_attributes :password_hash, destroy: true end attr_reader :password define_method(:password=) do |password| @password = password password_hash = rodauth.password_hash(password) if password set_password_hash(password_hash) end define_method(:set_password_hash) do |password_hash| if rodauth.account_password_hash_column public_send(:"#{rodauth.account_password_hash_column}=", password_hash) else return if password_hash.nil? && self.password_hash.nil? attributes = { rodauth.password_hash_id_column => self.password_hash&.pk }.compact if password_hash attributes[rodauth.password_hash_column] = password_hash else attributes[:_delete] = true end self.password_hash_attributes = attributes end end end
def define_password_hash_association(model)
def define_password_hash_association(model) select = [rodauth.password_hash_id_column] if rodauth.send(:use_database_authentication_functions?) define_association model, type: :one_to_one, name: :password_hash, table: rodauth.password_hash_table, key: rodauth.password_hash_id_column, select: select end