Skip to content

Instantly share code, notes, and snippets.

@klustig88
Created August 12, 2013 22:55
Show Gist options
  • Save klustig88/6216121 to your computer and use it in GitHub Desktop.
Save klustig88/6216121 to your computer and use it in GitHub Desktop.
# This is how you define your own custom exception classes
class NoOrangesError < StandardError
end
class OrangeTree
attr_reader :height, :age
def initialize (height, age)
@height = height
@age = age
@basket = []
end
def height
@height
end
def age
@age
end
# Ages the tree one year
def age!
if @age < 10
@age += 1
end
if @age < 7
@height += 3
end
end
def dead?
if @age >= 10
true
else
false
end
end
# Returns +true+ if there are any oranges on the tree, +false+ otherwise
def any_oranges?
if @age >= 3 && @age < 10# Do we need to range this and make it stop bearing oranges at age 10?
true # "I bear fruit"
@basket << Orange.new(rand(3..5))
else
false # "nope"
end
end
# Returns an Orange if there are any
# Raises a NoOrangesError otherwise
def pick_an_orange!
raise NoOrangesError, "This tree has no oranges" unless self.any_oranges?
# orange-picking logic goes here
p @basket.pop
end
end
class Orange
attr_reader :diameter
# Initializes a new Orange with diameter +diameter+
def initialize(diameter)
@diameter = diameter
end
end
my_tree = OrangeTree.new(0,0)
puts "year 1"
my_tree.age!
my_tree.any_oranges?
my_tree
puts "year 2"
my_tree.age!
my_tree.any_oranges?
my_tree
puts "year 3"
my_tree.age!
my_tree.any_oranges?
my_tree
my_tree.pick_an_orange!
puts "year 4"
my_tree.age!
my_tree.any_oranges?
my_tree
my_tree.pick_an_orange!
puts "year 5"
my_tree.age!
my_tree.any_oranges?
my_tree
my_tree.pick_an_orange!
puts "year 6"
my_tree.age!
my_tree.any_oranges?
my_tree
my_tree.pick_an_orange!
puts "year 7"
my_tree.age!
my_tree.any_oranges?
my_tree
my_tree.pick_an_orange!
puts "year 8"
my_tree.age!
my_tree.any_oranges?
my_tree
my_tree.pick_an_orange!
puts "year 9"
my_tree.age!
my_tree.any_oranges?
my_tree
my_tree.pick_an_orange!
puts "year 10"
my_tree.age!
my_tree.any_oranges?
my_tree
my_tree.pick_an_orange!
puts "year 11"
my_tree.age!
my_tree.any_oranges?
my_tree
my_tree.pick_an_orange!
puts "year 12"
my_tree.age!
my_tree.any_oranges?
my_tree
my_tree.pick_an_orange!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment