Skip to content

Instantly share code, notes, and snippets.

@eseca
Created July 5, 2018 22:04
Show Gist options
  • Save eseca/a610f79a6641ba08cdae71b40508078a to your computer and use it in GitHub Desktop.
Save eseca/a610f79a6641ba08cdae71b40508078a to your computer and use it in GitHub Desktop.
EasyBroker_test001
class Product
attr_reader :name, :description, :price_cents
def initialize(name, description, price_cents)
@name = name
@description = description
@price_cents = price_cents
end
def price
return @price_cents / 100
end
end
class Discount
attr_reader :name, :condition, :off_percent
def initialize(name, off_percent, condition)
@name = name
@off_percent = off_percent
@condition = condition
end
def label
return "#{off_percent * 100}%"
end
end
class ShopingCar
attr_accessor :products
def initialize
@discounts = []
end
def total_cents
return products.map(&:price_cents).sum
end
def total
return total_cents / 100
end
def receipt
list = products.map do |product|
"#{product.name}: #{product.price}"
end
receipt = []
receipt << list.join("\n")
receipt << "Total: #{total}"
final_total_cents = total_cents
unless @discounts.empty?
receipt << "Discounts :)"
@discounts.each do |discount|
final_total_cents *= 1 - discount.off_percent
receipt << "#{discount.name}: #{discount.label}"
end
end
receipt << "Final total: #{final_total_cents/100}"
return receipt.join("\n")
end
def apply_discount(discount)
if total_cents > discount.condition
@discounts << discount
end
end
end
def main
products = []
products << Product.new( "Balero pequeño", "Rojo. 20gr", 2000 )
products << Product.new("Balero grande", "Rojo. 80gr", 8000)
products << Product.new( "Balero chino", "Rojo. 50gr", 5000 )
discount = Discount.new("Navidad", 0.05, 10000)
car = ShopingCar.new
car.products = products
car.apply_discount(discount)
puts car.receipt
end
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment