class Bonus < Team
class Subscriber
attr_accessor :collectedCredits
def initialize()
@collectedCredits = 0
end
def collect(bonusitems)
result = 0
bonusitems.each { |bonusitem|
result += bonusitem.bonus
}
@collectedCredits += result
end
end
class BonusItem
attr :bonus
def initialize()
@bonus = 0
end
def earnCredit()
@bonus = self.calculateCredit()
end
expected :calculateCredit
end
end
class FlightBonus < Bonus
class BonusItem
def calculateCredit()
return ((self.getDistance().to_f/1000).ceil*1000)
end
expected :getDistance
end
playRole( Subscriber, Passenger ) {
after( :collect, :booked ) { |flight|
[flight.segments]
}
}
playRole( BonusItem, Segment ) {
after( :earnCredit, :book )
}
end
class FlightBonusVIP < FlightBonus
class BonusItem
def calculateCredit()
return super()*2
end
end
end
syntax highlighted by Code2HTML, v. 0.9.1