Skip to content

Instantly share code, notes, and snippets.

@vestige
Created January 28, 2019 12:31
Show Gist options
  • Save vestige/9a2e9d5a2d3c2d912b360f295cb321ef to your computer and use it in GitHub Desktop.
Save vestige/9a2e9d5a2d3c2d912b360f295cb321ef to your computer and use it in GitHub Desktop.
class Bicycle
attr_reader :size, :parts
def initialize(args={})
@size = args[:size]
@parts = args[:parts]
end
def spares
parts.spares
end
end
class Parts
attr_reader :parts
def initialize(parts)
@parts = parts
end
def spares
parts.select{|part| part.needs_spare}
end
end
class Part
attr_reader :name, :description, :needs_spare
def initialize(args)
@name = args[:name]
@description = args[:description]
@needs_spare = args.fetch(:needs_spare, true)
end
end
#create parts
chain = Part.new(name: 'chain', description: '10-speed')
road_tire = Part.new(name: 'tire_size', description: '23')
tape = Part.new(name: 'tape_color', description: '2.1')
rear_shock = Part.new(name: 'rear_shock', description: 'Fox')
front_shock = Part.new(name: 'front_shock', description: 'Manitou', needs_spare: false)
#user
road_bike = Bicycle.new(size: 'L', parts: Parts.new([chain, road_tire, tape]))
p road_bike.size
p road_bike.spares
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment