La clase Bank
sería así:
class Bank
def initialize
@accounts = {} # acá vamos a almacenar las cuentas
@seq = 0 # consecutivo para los ids de las cuentas
end
def open(name, initial_balance)
@seq += 1 # incrementamos el consecutivo
account = { id: @seq, name: name, balance: initial_balance }
@accounts[@seq] = account
account
end
# devuelve la info de la cuenta con el nuevo balance o nil si la cuenta no existe
def deposit(id, amount)
account = @accounts[id]
account[:balance] += amount if account
account # acá sería mejor account.clone para que no se pueda cambiar el balance
end
# devuleve la info de la cuenta con el nuevo balance o nil si la cuenta no existe o
# no tiene fondos
def withdraw(id, amount)
account = @accounts[id]
if account && account[:balance] >= amount
account[:balance] -= amount
account
else
nil
end
end
def accounts
@accounts.values # acá sería mejor @accounts.values.clone para que no se puedan modificar desde afuera
end
end
Se podría probar de la siguiente forma:
# la idea es utilizarlo de la siguiente forma
bank = Bank.new
a1 = bank.open("Juan", 100)
a2 = bank.open("Pedro", 100)
a3 = bank.open("Pablo", 100)
bank.deposit(a1[:id], 100)
bank.withdraw(a2[:id], 100)
puts bank.accounts.inspect