Created
January 12, 2016 22:15
-
-
Save rob0t7/324e2b453c7797c353fc to your computer and use it in GitHub Desktop.
Moving from Procedural to OOP Programming
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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