Вот что мне нужно сделать:
Мне нужен этот атрибут "титульный", чтобы быть клиентом.
В Conta. rb, во вставке 'conta.titular.nome, равный titular'
Я пытался использовать super (), чтобы сделать класс Cliente родительским для Conta. Но ничего не сработало, и я полностью потерян. Я не могу представить, как один атрибут из класса может быть видом другого. Я прочитал много уроков о наследовании, но ничего из этого не приблизилось. Надеюсь, кто-то может объяснить мне это.
Conta.rb
class Conta
attr_accessor :titular, :limite, :saldo, :numero
def initialize(numero, titular, saldo, limite)
@numero = numero
@titular = titular
@saldo = saldo
@limite = limite
end
def kind_of(klass)
Cliente >= klass
end
def sacar(valor)
return false if valor > (@saldo + @limite)
@saldo -= valor
true
end
def depositar(valor)
@saldo += valor
end
def no_limite?
@saldo < 0
end
def ==(conta)
conta.titular == titular &&
conta.limite == limite &&
conta.saldo == saldo &&
conta.numero == numero
end
def transfere(conta_destino, valor_transferencia)
return false unless sacar(valor_transferencia)
conta_destino.depositar(valor_transferencia)
end
end
Spec
describe Conta do
#1.
it "titular deveria ser um Cliente" do
conta = Conta.new('2303-2', 'José da Silva', 1000.10, 500)
expect(conta.titular).to be_a(Cliente)
end
#2.
it "deveria conseguir criar um objeto do tipo Conta" do
numero = "2303-2"
titular = "José da Silva"
saldo = 1000.10
limite = 500
conta = Conta.new(numero, titular, saldo, limite)
expect(conta.numero).to eq numero
expect(conta.titular.nome).to eq titular
expect(conta.limite).to eq limite
expect(conta.saldo).to eq saldo
end
Cliente.rb
class Cliente
attr_accessor :nome, :sobrenome, :cpf, :nome_completo, :tratamento
def initialize(nome, sobrenome, cpf)
@nome = nome
@sobrenome = sobrenome
@cpf = cpf
end
def nome_completo
if @tratamento.nil?
return @nome_completo = @nome + ' ' + @sobrenome
else
return @nome_completo = @tratamento + ' ' + @nome + ' ' + @sobrenome
end
end
end
Ошибка:
1) Conta titular deveria ser um Cliente
Failure/Error: expect(conta.titular).to be_a(Cliente)
expected "José da Silva" to be a kind of Cliente
# ./spec/conta_spec.rb:7:in `block (2 levels) in <top (required)>'
2) Conta deveria conseguir criar um objeto do tipo Conta
Failure/Error: expect(conta.titular.nome).to eq titular
NoMethodError:
undefined method `nome' for "José da Silva":String
# ./spec/conta_spec.rb:18:in `block (2 levels) in <top (required)>'