class User
def exists
true
end
def authenticate
true
end
@@user_types = []
def User.inherited(user_type)
puts "New sublcass inherited: #{user_type}"
@@user_types.push(user_type)
end
def User.load(user_type)
puts "Searching loaded user types for #{user_type}"
@ret_val = nil
@@user_types.each do |user_object|
puts "Comparing #{user_type} to #{user_object}"
if user_type == user_object.to_s
puts "Found a positive match."
@ret_val = user_object.new
else
puts "No match, checking next registered user subclass..."
end
end
puts "Completed search of User subclasses..."
@ret_val
end
# Fully working constructor system
def User.create(user_type)
puts "Searching loaded user types for #{user_type}"
@ret_val = nil
@@user_types.each do |user_object|
tmp_obj = user_object.new()
puts "Checking #{user_type} against #{tmp_obj.class}"
if user_type == tmp_obj.class.to_s
puts "Found a positive match."
@ret_val = tmp_obj
else
puts "No match, checking next registered user subclass..."
end
end
puts "Completed search of User subclasses..."
@ret_val
end
end
class Manager < User
end
class Employee < User
end
class Customer < User
def authenticate
false
end
end
puts "-----------------------"
@test_group = ["Manager", "Employee", "Customer", "bogus"]
@test_group.each do |user_type|
# I would like to be able to use user_type.new() or even "Employee".new()
puts ""
puts "Creating Object: "
puts ""
@me = User.load(user_type)
puts "--------------------------"
if @me
puts "Object exists: " << @me.exists.to_s
puts "Object able to be authenticated? " << @me.authenticate.to_s
else
puts "Object type: #{user_type} was not found in the User class tree."
end
puts "--------------------------"
end