Rubyによるオブジェクト指向 8章 コードサンプル

 
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