121 lines
5.2 KiB
Text
121 lines
5.2 KiB
Text
PERSON.CFC
|
|
|
|
component displayName="Person" accessors="true" {
|
|
property name="Name" type="string";
|
|
property name="MrOrMrsGoodEnough" type="Person";
|
|
property name="UnrealisticExpectations" type="array";
|
|
property name="PersonalHistory" type="array";
|
|
|
|
public Person function init( required String name ) {
|
|
setName( arguments.name );
|
|
setPersonalHistory([ getName() & " is on the market." ]);
|
|
this.HotnessScale = 0;
|
|
return this;
|
|
}
|
|
|
|
public Boolean function hasSettled() {
|
|
// if we have settled, return true;
|
|
return isInstanceOf( getMrOrMrsGoodEnough(), "Person" );
|
|
}
|
|
|
|
public Person function getBestOfWhatIsLeft() {
|
|
// increment the hotness scale...1 is best, 10 is...well...VERY settling.
|
|
this.HotnessScale++;
|
|
// get the match from the current rung in the barrel
|
|
var bestChoice = getUnrealisticExpectations()[ this.HotnessScale ];
|
|
return bestChoice;
|
|
}
|
|
|
|
public Boolean function wouldRatherBeWith( required Person person ) {
|
|
// only compare if we've already settled on a potential mate
|
|
if( isInstanceOf( this.getMrOrMrsGoodEnough(), "Person" ) ) {
|
|
// if the new person's hotness is greater (numerically smaller) than our current beau...
|
|
return getHotness( this, arguments.person ) < getHotness( this, this.getMrOrMrsGoodEnough() );
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public Void function settle( required Person person ) {
|
|
if( person.hasSettled() ) {
|
|
// this is the match we want. Force a break up of a previous relationship (sorry!)
|
|
dumpLikeATonOfBricks( person );
|
|
}
|
|
person.setMrOrMrsGoodEnough( this );
|
|
if( hasSettled() ) {
|
|
// this is the match we want, so write a dear john to our current match
|
|
dumpLikeATonOfBricks( this );
|
|
}
|
|
logHookup( arguments.person );
|
|
// we've found the mate of our dreams!
|
|
setMrOrMrsGoodEnough( arguments.person );
|
|
}
|
|
|
|
public Void function swing( required Person person ) {
|
|
// get our spouses
|
|
var mySpouse = getMrOrMrsGoodEnough();
|
|
var notMySpouse = arguments.person.getMrOrMrsGoodEnough();
|
|
// swap em'
|
|
setMrOrMrsGoodEnough( notMySpouse );
|
|
person.setMrOrMrsGoodEnough( mySpouse );
|
|
}
|
|
|
|
public Void function dumpLikeATonOfBricks( required Person person ) {
|
|
logBreakup( arguments.person );
|
|
person.getMrOrMrsGoodEnough().setMrOrMrsGoodEnough( JavaCast( "null", "" ) );
|
|
}
|
|
|
|
public String function psychoAnalyze() {
|
|
logNuptuals();
|
|
logRegrets();
|
|
var personalJourney = "";
|
|
for( var entry in getPersonalHistory() ) {
|
|
personalJourney = personalJourney & entry & "<br />";
|
|
}
|
|
return personalJourney;
|
|
}
|
|
|
|
private Numeric function getHotness( required Person pursuer, required Person pursued ) {
|
|
var pursuersExpectations = pursuer.getUnrealisticExpectations();
|
|
var hotnessFactor = 1;
|
|
for( var hotnessFactor=1; hotnessFactor<=arrayLen( pursuersExpectations ); hotnessFactor++ ) {
|
|
if( pursuersExpectations[ hotnessFactor ].getName()==arguments.pursued.getName() ) {
|
|
return hotnessFactor;
|
|
}
|
|
}
|
|
}
|
|
|
|
private Void function logRegrets() {
|
|
var spouse = getMrOrMrsGoodEnough();
|
|
var spouseHotness = getHotness( this, spouse );
|
|
var myHotness = getHotness( spouse, this );
|
|
if( spouseHotness == 1 && myHotness == 1 ) {
|
|
arrayAppend( getPersonalHistory(), "Yes, yes, the beautiful people always find happy endings: #getName()# (her ###myHotness#), #spouse.getName()# (his ###spouseHotness#)");
|
|
}
|
|
else if( spouseHotness == myHotness ) {
|
|
arrayAppend( getPersonalHistory(), "#getName()# (her ###myHotness#) was made for #spouse.getName()# (his ###spouseHotness#). How precious.");
|
|
}
|
|
else if( spouseHotness > myHotness ) {
|
|
arrayAppend( getPersonalHistory(), "#getName()# (her ###myHotness#) could have done better than #spouse.getName()# (his ###spouseHotness#). Poor slob.");
|
|
}
|
|
else {
|
|
arrayAppend( getPersonalHistory(), "#getName()# (her ###myHotness#) is a lucky bastard to have landed #spouse.getName()# (his ###spouseHotness#).");
|
|
}
|
|
}
|
|
|
|
private Void function logNuptuals() {
|
|
arrayAppend( getPersonalHistory(), "#getName()# has settled for #getMrOrMrsGoodEnough().getName()#." );
|
|
}
|
|
|
|
private Void function logHookup( required Person person ) {
|
|
var winnerHotness = getHotness( this, arguments.person );
|
|
var myHotness = getHotness( arguments.person, this );
|
|
arrayAppend( getPersonalHistory(), "#getName()# (her ###myHotness#) is checking out #arguments.person.getName()# (his ###winnerHotness#), but wants to keep his options open.");
|
|
}
|
|
|
|
private Void function logBreakup( required Person person ) {
|
|
var scrub = person.getMrOrMrsGoodEnough();
|
|
var scrubHotness = getHotness( person, scrub );
|
|
var myHotness = getHotness( person, this );
|
|
arrayAppend( getPersonalHistory(), "#getName()# is so hot (her ###myHotness#) that #person.getName()# is dumping #scrub.getName()# (her ###scrubHotness#)");
|
|
}
|
|
}
|