Skip to content

Instantly share code, notes, and snippets.

@stujo
Last active July 1, 2017 18:00
Show Gist options
  • Save stujo/165da836a2e7aeb3d18e to your computer and use it in GitHub Desktop.
Save stujo/165da836a2e7aeb3d18e to your computer and use it in GitHub Desktop.
ruby_oop
motorbike = {
max_speed: 100,
color: :red,
number_of_wheels: 2,
current_speed: 0,
current_heading: 0,
engine_running: false,
odometer: 0
}
puts 'Before Trip:'
p motorbike
motorbike[:engine_running] = true
motorbike[:current_heading] = 90
motorbike[:current_speed] += 45
motorbike[:odometer] += 10
motorbike[:current_speed] -= 15
motorbike[:current_heading] = 180
motorbike[:odometer] += 4
motorbike[:current_speed] = 0
motorbike[:engine_running] = false
puts 'After Trip:'
p motorbike
motorbike = {
max_speed: 100,
color: :red,
number_of_wheels: 2,
current_speed: 0,
current_heading: 0,
engine_running: false,
odometer: 0
}
puts 'Before Trip:'
p motorbike
start_engine(motorbike)
set_heading(motorbike, 90) # East
accelerate(motorbike, 45) # 45 mph
drive_distance(motorbike, 10) # 10 miles
brake(motorbike, 15) # 30 mph
set_heading(motorbike, 180) # South
drive_distance(motorbike, 4) # 4 miles
stop(motorbike) # brake to 0 mph
stop_engine(motorbike) # park it
puts 'After Trip:'
p motorbike
class Motorbike
def initialize
@max_speed = 100
@color = :red
@number_of_wheels = 2
@current_speed = 0
@current_heading = 0
@engine_running = false
@odometer = 0
end
def start_engine
@engine_running = true
end
def stop_engine
@engine_running = false
end
def heading=(heading)
@current_heading = heading
end
def accelerate(increase)
if @current_speed + increase > @max_speed
@current_speed += increase
else
@current_speed = @max_speed
end
end
def drive_distance(distance)
@odometer += distance
end
def brake(decrease)
if @current_speed - decrease > 0
@current_speed -= decrease
else
stop
end
end
def stop
@current_speed = 0
end
def to_s
<<-LONG_STRING
#{@color} motorbike
with max speed of #{@max_speed} mph
with #{@odometer} miles on the clock
LONG_STRING
end
end
motorbike = Motorbike.new
puts 'Before Trip:'
puts motorbike.to_s
motorbike.start_engine
motorbike.heading = 90 # East
motorbike.accelerate(45) # 45 mph
motorbike.drive_distance(10) # 10 miles
motorbike.brake(15) # 30 mph
motorbike.heading = 180 # South
motorbike.drive_distance(4) # 4 miles
motorbike.stop
motorbike.stop_engine
puts 'After Trip:'
puts motorbike.to_s
class Motorbike
def initialize(color, max_speed)
@color = color
@max_speed = max_speed
@number_of_wheels = 2
@current_speed = 0
@current_heading = 0
@engine_running = false
@odometer = 0
end
def start_engine
@engine_running = true
end
def stop_engine
@engine_running = false
end
def heading=(heading)
@current_heading = heading
end
def accelerate(increase)
if @current_speed + increase > @max_speed
@current_speed += increase
else
@current_speed = @max_speed
end
end
def drive_distance(distance)
@odometer += distance
end
def brake(decrease)
if @current_speed - decrease > 0
@current_speed -= decrease
else
stop
end
end
def stop
@current_speed = 0
end
def to_s
<<-LONG_STRING
#{@color} motorbike
with max speed of #{@max_speed} mph
with #{@odometer} miles on the clock
LONG_STRING
end
end
motorbike = Motorbike.new(:blue, 80)
puts 'Before Trip:'
puts motorbike.to_s
motorbike.start_engine
motorbike.heading = 90 # East
motorbike.accelerate(45) # 45 mph
motorbike.drive_distance(10) # 10 miles
motorbike.brake(15) # 30 mph
motorbike.heading = 180 # South
motorbike.drive_distance(4) # 4 miles
motorbike.stop
motorbike.stop_engine
puts 'After Trip:'
puts motorbike.to_s
class Vehicle
def initialize(color, max_speed, number_of_wheels)
@color = color
@max_speed = max_speed
@number_of_wheels = number_of_wheels
@current_speed = 0
@current_heading = 0
@engine_running = false
@odometer = 0
end
def start_engine
@engine_running = true
end
def stop_engine
@engine_running = false
end
def heading=(heading)
@current_heading = heading
end
def accelerate(increase)
if @current_speed + increase > @max_speed
@current_speed += increase
else
@current_speed = @max_speed
end
end
def drive_distance(distance)
@odometer += distance
end
def brake(decrease)
if @current_speed - decrease > 0
@current_speed -= decrease
else
stop
end
end
def stop
@current_speed = 0
end
def to_s
<<-LONG_STRING
#{@color} #{self.class.name}
with max speed of #{@max_speed} mph
with #{@odometer} miles on the clock
LONG_STRING
end
end
class Motorbike < Vehicle
def initialize(color, max_speed)
super(color, max_speed, 2)
end
end
def take_trip(vehicle)
puts 'Before Trip:'
puts vehicle.to_s
vehicle.start_engine
vehicle.heading = 90 # East
vehicle.accelerate(45) # 45 mph
vehicle.drive_distance(10) # 10 miles
vehicle.brake(15) # 30 mph
vehicle.heading = 180 # South
vehicle.drive_distance(4) # 4 miles
vehicle.stop
vehicle.stop_engine
puts 'After Trip:'
puts vehicle.to_s
end
motorbike = Motorbike.new(:blue, 80)
take_trip(motorbike)
class Vehicle
def initialize(color, max_speed, number_of_wheels)
@color = color
@max_speed = max_speed
@number_of_wheels = number_of_wheels
@current_speed = 0
@current_heading = 0
@engine_running = false
@odometer = 0
end
def start_engine
@engine_running = true
end
def stop_engine
@engine_running = false
end
def heading=(heading)
@current_heading = heading
end
def accelerate(increase)
if @current_speed + increase > @max_speed
@current_speed += increase
else
@current_speed = @max_speed
end
end
def drive_distance(distance)
@odometer += distance
end
def brake(decrease)
if @current_speed - decrease > 0
@current_speed -= decrease
else
stop
end
end
def stop
@current_speed = 0
end
def to_s
<<-LONG_STRING
#{@color} #{self.class.name}
with max speed of #{@max_speed} mph
with #{@odometer} miles on the clock
LONG_STRING
end
end
class Motorbike < Vehicle
def initialize(color, max_speed)
super(color, max_speed, 2)
end
end
class EighteenWheeler < Vehicle
def initialize(color, max_speed)
super(color, max_speed, 18)
end
end
def take_trip(vehicle)
puts 'Before Trip:'
puts vehicle.to_s
vehicle.start_engine
vehicle.heading = 90 # East
vehicle.accelerate(45) # 45 mph
vehicle.drive_distance(10) # 10 miles
vehicle.brake(15) # 30 mph
vehicle.heading = 180 # South
vehicle.drive_distance(4) # 4 miles
vehicle.stop
vehicle.stop_engine
puts 'After Trip:'
puts vehicle.to_s
end
motorbike = Motorbike.new(:blue, 80)
take_trip(motorbike)
truck = EighteenWheeler.new(:green, 75)
take_trip(truck)
module Transportation
module Heading
NORTH = 0
EAST = 90
SOUTH = 180
WEST = 270
end
HEADING_DEFAULT = Heading::NORTH
class Vehicle
attr_reader :max_speed, :color, :odometer
attr_accessor :heading
def initialize(color, max_speed, number_of_wheels)
@color = color
@max_speed = max_speed
@number_of_wheels = number_of_wheels
@current_speed = 0
@current_heading = HEADING_DEFAULT
@engine_running = false
@odometer = 0
end
def start_engine
@engine_running = true
end
def stop_engine
@engine_running = false
end
def accelerate(increase)
if @current_speed + increase > max_speed
@current_speed += increase
else
@current_speed = max_speed
end
end
def drive_distance(distance)
@odometer += distance
end
def brake(decrease)
if @current_speed - decrease > 0
@current_speed -= decrease
else
stop
end
end
def stop
@current_speed = 0
end
def to_s
<<-LONG_STRING
#{color} #{self.class.name}
with max speed of #{max_speed} mph
with #{odometer} miles on the clock
LONG_STRING
end
end
class Motorbike < Vehicle
def initialize(color, max_speed)
super(color, max_speed, 2)
end
end
class EighteenWheeler < Vehicle
def initialize(color, max_speed)
super(color, max_speed, 18)
end
end
end
module Driver
def log_vehicle_state(message, vehicle)
puts "#{message} : "
puts vehicle.to_s
end
def take_trip(vehicle)
log_vehicle_state 'Before Trip', vehicle
vehicle.start_engine
vehicle.heading = 90 # East
vehicle.accelerate(45) # 45 mph
vehicle.drive_distance(10) # 10 miles
vehicle.brake(15) # 30 mph
vehicle.heading = 180 # South
vehicle.drive_distance(4) # 4 miles
vehicle.stop
vehicle.stop_engine
log_vehicle_state 'After Trip', vehicle
end
end
motorbike = Transportation::Motorbike.new(:blue, 80)
Driver.take_trip(motorbike)
truck = Transportation::EighteenWheeler.new(:green, 75)
take_trip(truck)
module Physics
module Velocity
def initialize
@current_speed = 0
end
def accelerate(increase)
if @current_speed + increase > max_speed
@current_speed += increase
else
@current_speed = max_speed
end
end
def brake(decrease)
if @current_speed - decrease > 0
@current_speed -= decrease
else
stop
end
end
def stop
@current_speed = 0
end
end
end
module Transportation
module Heading
NORTH = 0
EAST = 90
SOUTH = 180
WEST = 270
end
HEADING_DEFAULT = Heading::NORTH
class Vehicle
include Physics::Velocity
attr_reader :max_speed, :color, :odometer, :engine_running
attr_accessor :heading
def initialize( opts = {})
super()
@color = opts.fetch(:color, :red)
@max_speed = opts[:max_speed] || 100
@current_heading = HEADING_DEFAULT
@engine_running = false
@odometer = 0
end
def start_engine
@engine_running = true
end
def stop_engine
@engine_running = false
end
def drive_distance(distance)
@odometer += distance
end
def vehicle_type
self.class.name
end
def to_s
<<-LONG_STRING
#{color} #{number_of_wheels} wheeled #{vehicle_type}
with max speed of #{max_speed} mph
with #{odometer} miles on the clock
LONG_STRING
end
end
class Motorbike < Vehicle
def initialize(color, max_speed)
super(:color => color,
:max_speed => max_speed
)
end
def number_of_wheels
2
end
def vehicle_type
'MotorCycle'
end
end
class EighteenWheeler < Vehicle
def initialize(color, max_speed)
super(:color => color,
:max_speed => max_speed
)
end
def number_of_wheels
18
end
end
end
def log_vehicle_state(message, vehicle)
puts "#{message} : "
puts vehicle.to_s
end
def take_trip(vehicle)
log_vehicle_state 'Before Trip', vehicle
vehicle.start_engine
vehicle.heading = 90 # East
vehicle.accelerate(45) # 45 mph
vehicle.drive_distance(10) # 10 miles
vehicle.brake(15) # 30 mph
vehicle.heading = 180 # South
vehicle.drive_distance(4) # 4 miles
vehicle.stop
vehicle.stop_engine
log_vehicle_state 'After Trip', vehicle
end
motorbike = Transportation::Motorbike.new(:blue, 80)
take_trip(motorbike)
truck = Transportation::EighteenWheeler.new(:green, 75)
take_trip(truck)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment