Skip to content

Instantly share code, notes, and snippets.

@jdmorlan
Created March 11, 2015 21:24
Show Gist options
  • Save jdmorlan/4604a2e074ed29029022 to your computer and use it in GitHub Desktop.
Save jdmorlan/4604a2e074ed29029022 to your computer and use it in GitHub Desktop.
Aero Components - Ingersoll Rand
class Model
attr_reader :model_number
def initialize(model_number)
@model_number = model_number
@aeros = []
end
def create_aero(part_number, horsepower, pressure)
aero = Aero.new(part_number, horsepower, pressure)
@aeros << aero
return aero
end
def aeros
@aeros
end
end
class Part
attr_reader :part_number, :list_price, :standard_cost
def initialize(part_number)
@part_number = part_number
@children = []
end
def add_child(child)
if child.kind_of?(Part)
@children << child
end
end
def material_cost
sum = 0
@children.each do |child|
sum += child.standard_cost
end
return sum
end
def children
@children
end
def set_list_price(list_price)
@list_price = list_price
end
def set_standard_cost(std_cost)
@standard_cost = std_cost
end
end
class AeroComponent < Part
attr_reader :component_type, :stage
def initialize(part_number, component_type, stage)
@component_type = component_type
@stage = stage
super(part_number)
end
end
class Aero < Part
attr_reader :horsepower, :pressure
def initialize(part_number, horsepower, pressure)
@horsepower = horsepower
@pressure = pressure
super(part_number)
end
def add_component(aero_component)
if aero_component.kind_of?(AeroComponent)
self.add_child(aero_component)
return aero_component
end
end
def components
self.children
end
end
model = Model.new('TA-2000')
aero = model.create_aero('AAMB795115-00707', 150, 100)
aero.add_component(AeroComponent.new('AAP1793842-00108', :impeller, 1))
aero.add_component(AeroComponent.new('AAP1793841-00210', :impeller, 2))
aero.add_component(AeroComponent.new('AAP1793840-00210', :impeller, 3))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment