Skip to content

Instantly share code, notes, and snippets.

@rob0t7
Created January 12, 2016 22:15
Show Gist options
  • Save rob0t7/324e2b453c7797c353fc to your computer and use it in GitHub Desktop.
Save rob0t7/324e2b453c7797c353fc to your computer and use it in GitHub Desktop.
Moving from Procedural to OOP Programming
# Brewery related Functions
def create_beer(brewery, name, style, abv)
beer = {name: name, style: style, abv: abv, quantity: 0}
brewery[:beers] << beer
end
def print_brewery(brewery)
puts "\n"
puts "#{brewery[:name]}"
puts "Address: #{brewery[:address]}, #{brewery[:city]}"
puts "Beer List"
brewery[:beers].each do |beer|
puts "\t#{beer[:name]} | #{beer[:style]} | #{beer[:quantity]}"
end
end
def brew_beer(brewery, beer_name, quantity)
beer = brewery[:beers].find { |x| x[:name] == beer_name }
beer[:quantity] += quantity
end
def sell_beer(brewery, beer_name, quantity)
beer = brewery[:beers].find { |x| x[:name] == beer_name }
beer[:quantity] -= quantity
end
# Run / Test the Code
puts "Create the Brewery"
brewery = {
name: 'Sawdust City Brewing',
address: '345 Main St',
city: 'Gravenhurst',
beers: []
}
print_brewery(brewery)
puts "Add a beer to the brewery"
create_beer(brewery, 'Lone Pine', 'IPA', 5.5)
print_brewery(brewery)
puts "Brew some of that beer"
brew_beer(brewery, 'Lone Pine', 10)
print_brewery(brewery)
puts "Sell some of that beer"
sell_beer(brewery, 'Lone Pine', 5)
print_brewery(brewery)
class Beer
attr_reader :name
def initialize(name, style, abv)
@name = name
@style = style
@abv = abv
end
def beer_description
"#{@name} | #{@style}"
end
end
class SKU
attr_accessor :quantity
def initialize(beer, quantity)
@beer = beer
@quantity = quantity
end
def print_details
"#{@beer.beer_description} | #{@quantity}"
end
def beer_name
@beer.name
end
#delegate :beer_name, @beer
end
class Brewery
def initialize(name, address, city)
@name = name
@address = address
@city = city
@beers = []
end
def add_beer(beer)
@beers << SKU.new(beer, 0)
end
def brew_beer(beer_name, amount)
beer = find_beer(beer_name)
beer.quantity += amount
end
def sell_beer(beer_name, amount)
beer = find_beer(beer_name)
beer.quantity -= amount
end
def print_details
puts "\n"
puts "#{@name}"
puts "Address: #{@address}, #{@city}"
puts "Beer List"
@beers.each do |beer|
puts "\t #{beer.print_details}"
end
end
private
def find_beer(beer_name)
@beers.find { |x| x.beer_name == beer_name }
end
end
# Run / Test the Code
puts "Create the Brewery"
brewery = Brewery.new(
"Sawdust City Brewing",
"345 Main St",
"Gravenhurst"
)
brewery.print_details()
puts "Add a beer to the brewery"
beer = Beer.new('Lone Pine', "IPA", 5.5)
brewery.add_beer(beer)
brewery.print_details()
puts "Brew some of that beer"
brewery.brew_beer('Lone Pine', 100)
brewery.print_details()
puts "Sell some of that Beer"
brewery.sell_beer('Lone Pine', 50)
brewery.print_details()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment