Resources

Summary

# main.rb
require 'date'
require 'ostruct'

class User
  attr_accessor :email

  def initialize(email:)
    @email = email
  end

  def settings=(role:, active:, last_sign_in_at:)
    @settings = OpenStruct.new(role: role, active: active, last_sign_in_at: last_sign_in_at)
  end
  alias_method :set_settings, :settings=

  def settings
    @settings
  end
end

class AdminUser < User
  def admin?
    @settings.role == :admin
  end
end

user = User.new(email: 'john.doe@example.com')
# user.settings = { role: :user, active: true, last_sign_in_at: Date.today }
user.set_settings(role: :user, active: true, last_sign_in_at: Date.today)

admin = AdminUser.new(email: 'admin@example.com')
# admin.settings = { role: :admin, active: true, last_sign_in_at: Date.today }
admin.set_settings(role: :admin, active: true, last_sign_in_at: Date.today)

@users = [user, admin]

def signed_in_today?
  @users.each do |user|
    if user.settings.last_sign_in_at == Date.today
      puts "#{user.email} signed in today"
    end
  end
end

signed_in_today?