Skip to content

Instantly share code, notes, and snippets.

@wulab
Created September 19, 2014 17:30
Show Gist options
  • Save wulab/005169f192b7181f2b89 to your computer and use it in GitHub Desktop.
Save wulab/005169f192b7181f2b89 to your computer and use it in GitHub Desktop.
Starbuzz Coffee Ordering Systems
class Beverage
attr_reader :description
def initialize()
@description = "Unknown beverage"
end
def cost()
raise NotImplementedError
end
end
class Espresso < Beverage
def initialize()
@description = "Espresso"
end
def cost()
1.99
end
end
class HouseBlend < Beverage
def initialize()
@description = "House blend coffee"
end
def cost()
0.89
end
end
class DarkRoast < Beverage
def initialize()
@description = "Dark roast coffee"
end
def cost()
0.99
end
end
###
class CondimentDecorator < Beverage
def description
raise NotImplementedError
end
end
class Mocha < CondimentDecorator
attr_reader :beverage
def initialize(beverage)
@beverage = beverage
end
def description
beverage.description + ", mocha"
end
def cost()
beverage.cost() + 0.20
end
end
class Soy < CondimentDecorator
attr_reader :beverage
def initialize(beverage)
@beverage = beverage
end
def description
beverage.description + ", soy"
end
def cost()
beverage.cost() + 0.15
end
end
class Whip < CondimentDecorator
attr_reader :beverage
def initialize(beverage)
@beverage = beverage
end
def description
beverage.description + ", whip"
end
def cost()
beverage.cost() + 0.10
end
end
###
class StarbuzzCoffee
def self.start()
prices = []
beverage1 = Espresso.new
prices << "%-60s $%5.2f" % [ beverage1.description, beverage1.cost() ]
beverage2 = DarkRoast.new
beverage2 = Mocha.new(beverage2)
beverage2 = Mocha.new(beverage2)
beverage2 = Whip.new(beverage2)
prices << "%-60s $%5.2f" % [ beverage2.description, beverage2.cost() ]
beverage3 = HouseBlend.new
beverage3 = Soy.new(beverage3)
beverage3 = Mocha.new(beverage3)
beverage3 = Whip.new(beverage3)
prices << "%-60s $%5.2f" % [ beverage3.description, beverage3.cost() ]
puts box("Brewed Coffee", prices)
end
# UTF-8 encoding table and Unicode characters
# http://www.utf8-chartable.de/unicode-utf8-table.pl?start=9472&unicodeinhtml=dec
def self.box(title, bodies, width=80)
lines = []
lines << "╔%s╗" % ( "[ #{title} ]".center(width - 2, "═") )
lines << "║%s║" % ( " " * (width - 2) )
bodies.each do |body|
lines << "║%s║" % ( body.center(width - 2, " ") )
end
lines << "║%s║" % ( " " * (width - 2) )
lines << "╚%s╝" % ( "═" * (width - 2) )
lines.join("\n")
end
end
if $0 == __FILE__
StarbuzzCoffee.start()
end
@wulab
Copy link
Author

wulab commented Sep 19, 2014

$ ruby starbuzz_ordering_systems.rb 
╔══════════════════════════════[ Brewed Coffee ]═══════════════════════════════╗
║                                                                              ║
║     Espresso                                                     $ 1.99      ║
║     Dark roast coffee, mocha, mocha, whip                        $ 1.49      ║
║     House blend coffee, soy, mocha, whip                         $ 1.34      ║
║                                                                              ║
╚══════════════════════════════════════════════════════════════════════════════╝

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment