attr_reader :size, :parts def initialize(args={}) @size = args[:size] @parts = args[:parts] end def spares parts.spares end end class Part attr_reader :name, :description, :needs_spares def initialize(args) @name = args[:name] @description = args[:description] @needs_spares = args.fetch(:needs_spares, true) end end class Parts attr_reader :parts def initialize(parts) @parts = parts end def spares parts.select { |part| part.needs_spares } end end chain = Part.new(name: "chain", description: "10-speed") road_tire = Part.new(name: 'tire_size', description: "23") road_parts = Parts.new([chain, road_tire]) road_bike = Bycycle.new( size: 'L', parts: road_parts ) puts road_bike.size puts road_bike.spares.size