Skip to content

Instantly share code, notes, and snippets.

@JFickel
Forked from dbc-challenges/P5: OO Inheritance.rb
Last active December 18, 2015 11:29
Show Gist options
  • Save JFickel/5775976 to your computer and use it in GitHub Desktop.
Save JFickel/5775976 to your computer and use it in GitHub Desktop.
class Vehicle
WHEELS = 4
attr_reader :status
attr_accessor :manufacturer
def initialize(args)
@manufacturer = args[:manufacturer]
@wheels = WHEELS
end
def brake
@status = :stopped
end
end
class Car < Vehicle
def initialize(args)
super
@color = args[:color]
end
def drive
@status = :driving
end
def needs_gas?
return [true,true,false].sample
end
end
class Bus < Vehicle
attr_reader :passengers
def initialize(args)
super
@color = args[:color]
@wheels = args[:wheels]
@num_seats = args[:num_seats]
@fare = args[:fare]
@passengers=[]
end
def drive
return self.brake if stop_requested?
@status = :driving
end
def admit_passenger(passenger,money)
@passengers << passenger if money >= @fare
end
def stop_requested?
return [true,false].sample
end
def needs_gas?
return [true,true,true,false].sample
end
end
class Motorbike < Vehicle
WHEELS = 2
def initialize(args)
super
@color = args[:color]
@wheels = WHEELS
end
def drive
@status = :driving
@speed = :fast
end
def needs_gas?
return [true,false,false,false].sample
end
def weave_through_traffic
@status = :driving_like_a_crazy_person
end
end
# TESTS
c = Car.new(color: "red")
p c.drive
p c.brake
b = Bus.new(color: 'black', wheels: 6, num_seats: 60, fare: 2)
p b.drive
p b.admit_passenger("Bob", 3)
p b.brake
p b.stop_requested?
p b.needs_gas?
m = Motorbike.new(color: 'purple')
p m.drive
p m.brake
p m.needs_gas?
p m.weave_through_traffic
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment