21. class PlayTeamGameUseCase Use case == context
constructor: (@game, @player) ->
Role(@player, PlayerWithFriends)
Role(@game, TeamCompetition) Roles injected runtime
tryToEnterGameArea: () =>
if @amIEnteringGameFirstTime()
if @amICommingFromInvitation()
@tellPlayerHeIsPartOfTeam()
data objects interact with
@teachPlayerHowToPlay()
each other
else #n-th time...
if @amICommingFromInvitation()
@tellPlayerHeIsPartOfTeam()
if @haveNotYetPickedFavPizzaCountry()
@askPlayerToDeclareHisFavPizzaCountry()
(more methods here)
22. class PlayerWithFriends
setup: => a role
@friends = []
@invitedFriends = []
@acceptedFriends = []
setInvitedFriends: (facebookUids) =>
for facebookUid in facebookUids
friend = new Friend({facebookUid: facebookUid})
@invitedFriends.push(friend)
setFriends: (friends) =>
@friends = friends
addFriend: (friend) =>
existing = @getFriendByFacebookUid(friend?.facebookUid)
if not existing?
@friends.push(friend)