jcbantuelle/dominion-meteor

View on GitHub
app/lobby/server/proposal_accepter.js

Summary

Maintainability
A
0 mins
Test Coverage
ProposalAccepter = class ProposalAccepter {

  constructor(proposal_id) {
    this.proposal_id = proposal_id
  }

  accept_proposal() {
    this.player_accept()
    this.start_game()
  }

  player_accept() {
    ProposalModel.update({_id: this.proposal_id, 'players._id': Meteor.userId()},
      {
        $set: {'players.$.accepted': true}
      }
    )
  }

  start_game() {
    this.proposal = ProposalModel.findOne(this.proposal_id)
    if (this.all_players_have_accepted()) {
      this.update_players()
      let game_creator = new GameCreator(this.proposal.players, this.proposal.cards, this.proposal.exclusions, this.proposal.edition)
      game_creator.create()
      ProposalModel.remove(this.proposal._id)
    }
  }

  update_players() {
    _.each(this.proposal.players, function(player) {
      Meteor.users.update(player._id, {
        $unset: {
          has_proposal: '',
          declined_proposal: ''
        }
      })
    })
  }

  all_players_have_accepted() {
    return this.pending_accept_players().length == 0
  }

  pending_accept_players() {
    return _.filter(this.proposal.players, function(player) {
      return !player.accepted
    })
  }

}