# 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?