Sha256: 051dcaff017be13d36e36b5fe97c20394938ca2a81dc4a9d83e58a1597089ce4

Contents?: true

Size: 1.68 KB

Versions: 21

Compression:

Stored size: 1.68 KB

Contents

# frozen_string_literal: true

module Admin
  class User < ApplicationRecord
    include Koi::Model::Archivable

    def self.model_name
      ActiveModel::Name.new(self, nil, "Admin")
    end

    has_secure_password :password

    has_many :credentials, inverse_of: :admin, class_name: "Admin::Credential", dependent: :destroy

    validates :name, :email, presence: true
    validates :email, uniqueness: true, format: { with: URI::MailTo::EMAIL_REGEXP }

    scope :alphabetical, -> { order(name: :asc) }

    if "PgSearch::Model".safe_constantize
      include PgSearch::Model

      pg_search_scope :admin_search, against: %i[email name], using: { tsearch: { prefix: true } }
    else
      scope :admin_search, ->(query) do
        where("email LIKE :query OR name LIKE :query", query: "%#{query}%")
      end
    end

    # TODO(sfn) remove once Rails 7.1 is released
    # https://edgeapi.rubyonrails.org/classes/ActiveRecord/SecurePassword/ClassMethods.html#method-i-authenticate_by
    # rubocop:disable Metrics/PerceivedComplexity
    def self.authenticate_by(attributes)
      passwords, identifiers = attributes.to_h.partition do |name, _value|
        !has_attribute?(name) && has_attribute?("#{name}_digest")
      end.map(&:to_h)

      raise ArgumentError, "One or more password arguments are required" if passwords.empty?
      raise ArgumentError, "One or more finder arguments are required" if identifiers.empty?

      if (record = find_by(identifiers))
        record if passwords.count { |name, value| record.public_send(:"authenticate_#{name}", value) } == passwords.size
      else
        new(passwords)
        nil
      end
    end

    # rubocop:enable Metrics/PerceivedComplexity
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
katalyst-koi-4.4.1 app/models/admin/user.rb
katalyst-koi-4.4.0 app/models/admin/user.rb
katalyst-koi-4.3.5 app/models/admin/user.rb
katalyst-koi-4.3.4 app/models/admin/user.rb
katalyst-koi-4.3.3 app/models/admin/user.rb
katalyst-koi-4.3.2 app/models/admin/user.rb
katalyst-koi-4.3.1 app/models/admin/user.rb
katalyst-koi-4.3.0 app/models/admin/user.rb
katalyst-koi-4.3.0.beta.3 app/models/admin/user.rb
katalyst-koi-4.3.0.beta.2 app/models/admin/user.rb
katalyst-koi-4.2.1 app/models/admin/user.rb
katalyst-koi-4.2.0 app/models/admin/user.rb
katalyst-koi-4.2.0.beta.2 app/models/admin/user.rb
katalyst-koi-4.2.0.beta.1 app/models/admin/user.rb
katalyst-koi-4.1.2 app/models/admin/user.rb
katalyst-koi-4.1.1 app/models/admin/user.rb
katalyst-koi-4.1.0 app/models/admin/user.rb
katalyst-koi-4.0.3 app/models/admin/user.rb
katalyst-koi-4.0.2 app/models/admin/user.rb
katalyst-koi-4.0.1 app/models/admin/user.rb