Skip to content

Instantly share code, notes, and snippets.

@siegy22
Created April 19, 2018 12:36
Show Gist options
  • Save siegy22/66693c44840447cfbaea8ac892e75883 to your computer and use it in GitHub Desktop.
Save siegy22/66693c44840447cfbaea8ac892e75883 to your computer and use it in GitHub Desktop.
### Example
# okra = Okra.enter
# okra.order('poulet', nan: true, pakora: false)
#
# chainable:
# Okra.enter.order('poulet').order('fish', pakora: true)
###
class Okra
# Raj's sick today Damayanti's here for the rescue
class Damayanti
def self.say(str)
system("say -v Damayanti '#{str}'")
end
end
class Menu
def self.choose(name, options = {})
menu_class = Okra.const_get("#{name.capitalize}Menu", false)
menu_class.new(options)
end
def initialize(nan: false, pakora: false)
@nan = nan
@pakora = pakora
end
def price
price = base_price
price += 3 if @nan
price += 3 if @pakora
price
end
def to_s
str = name
str << 'mit nan' if @nan
str << ' und ' if @nan && @pakora
str << 'mit pakora' if @pakora
str
end
protected
def name
''
end
def base_price
0
end
end
class DaalMenu < Menu
def base_price; 10 end
def name
'Daal Menu'
end
end
class VegiMenu < Menu
def base_price; 11 end
def name
'Vegi Menu'
end
end
class FishMenu < Menu
def base_price; 12 end
def name
'Fish Menu'
end
end
class PouletMenu < Menu
def base_price; 13 end
def name
'Poulet Menu'
end
end
def self.enter; new end
def initialize
@menus = []
end
def order(menu, options = {})
menu = Menu.choose(menu, options)
@menus << menu
Damayanti.say(menu)
Damayanti.say("Das macht #{menu.price} Franken bitte.")
rescue NameError
Damayanti.say("#{menu} haben wir nicht.")
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment