Skip to content

Instantly share code, notes, and snippets.

@anirudh-eka
Forked from dbc-challenges/P5: OO Inheritance.rb
Last active December 20, 2015 03:49
Show Gist options
  • Save anirudh-eka/6066324 to your computer and use it in GitHub Desktop.
Save anirudh-eka/6066324 to your computer and use it in GitHub Desktop.
class Vehicle
def initialize(args)
@color = args[:color]
@wheels = args[:wheels]
end
def drive
if crash
@status = :crashed
else
@status = :driving
end
end
def brake
@status = :stopped
end
def crash
return [true,false,false,false,false].sample
end
def needs_gas?
return [true,true,false].sample
end
end
class Car < Vehicle
@@WHEELS = 4
def initialize(args)
super(args)
@wheels = @@WHEELS
end
end
class Bus < Vehicle
attr_reader :passengers
def initialize(args)
super(args)
@num_seats = args[:num_seats]
@fare = args[:fare]
@passengers=[]
end
def drive
return self.brake if stop_requested?
super
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(args)
@wheels = @@WHEELS
end
def rev_engine
return "people are impressed"
end
def drive
super
@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
p car = Car.new({color: "red"})
p bus = Bus.new({color: "yellow", wheels: 8, num_seats: 12, fare: 6})
p bike = Motorbike.new({color: "green"})
[car, bus, bike].each do |vehicle|
p vehicle.drive == :driving || :crashed unless bike
if vehicle == bike
p vehicle.drive == :fast
vehicle.weave_through_traffic == :driving_like_a_crazy_person
vehicle.rev_engine == "people_are_impressed"
end
if vehicle == bus
vehicle.admit_passenger("anirudh", 4)
p vehicle.passengers == []
vehicle.admit_passenger("ani", 8)
p vehicle.passengers == ["ani"]
end
p vehicle.brake == :stopped
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment