Sha256: 43c2606b8a654a05b78dd404618114ecd69f05b46f362d2dcea574070e453ca2

Contents?: true

Size: 1.63 KB

Versions: 35

Compression:

Stored size: 1.63 KB

Contents

module Tenon
  class User < ActiveRecord::Base
    # Include default devise modules. Others available are:
    # :token_authenticatable, :confirmable, :lockable and
    devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable, :timeoutable

    # To use :timeoutable, extent the Tenon::User model and
    # include the following method your preferred value:
    # def timeout_in
    #   30.days
    # end

    # Roles
    has_many :role_assignments
    has_many :roles, through: :role_assignments
    has_many :posts

    # After a user is created, always give them the role of Member
    after_create :apply_member_role

    # Scope to exclude super admins
    scope :exclude_super_admins, -> () {
      includes(:roles)
      .where
      .not(tenon_roles: { title: 'Super Admin' })
      .references(:roles)
    }

    # Scope to only get approved users
    scope :approved, -> () { where(approved: true) }

    # Mass create some is_whatev? convenience methods
    ['Admin', 'Super Admin', 'Contributor', 'Member'].each do |role|
      define_method("is_#{role.dehumanize}?".to_sym) { roles.include?(Role.find_by_title(role)) }
    end
    alias_method :member?, :is_member?

    def as_json(opts = {})
      super(opts.merge(methods: [:is_admin?]))
    end

    def staff?
      is_super_admin? || is_admin? || is_contributor?
    end

    def active_for_authentication?
      super && approved?
    end

    private

    def apply_member_role
      roles << Role.find_by_title('Member') if roles.blank?
    end

    def password_required?
      !persisted? || !password.blank? || !password_confirmation.blank?
    end
  end
end

Version data entries

35 entries across 35 versions & 1 rubygems

Version Path
tenon-1.1.8 app/models/tenon/user.rb
tenon-1.1.7 app/models/tenon/user.rb
tenon-1.1.6 app/models/tenon/user.rb
tenon-1.1.5 app/models/tenon/user.rb
tenon-1.1.4 app/models/tenon/user.rb
tenon-1.1.3 app/models/tenon/user.rb
tenon-1.1.2 app/models/tenon/user.rb
tenon-1.1.1 app/models/tenon/user.rb
tenon-1.0.76 app/models/tenon/user.rb
tenon-1.0.75 app/models/tenon/user.rb
tenon-1.0.74 app/models/tenon/user.rb
tenon-1.0.73 app/models/tenon/user.rb
tenon-1.0.72 app/models/tenon/user.rb
tenon-1.0.71 app/models/tenon/user.rb
tenon-1.0.70 app/models/tenon/user.rb
tenon-1.0.69 app/models/tenon/user.rb
tenon-1.0.68 app/models/tenon/user.rb
tenon-1.0.67 app/models/tenon/user.rb
tenon-1.0.66 app/models/tenon/user.rb
tenon-1.0.65 app/models/tenon/user.rb