Drosty/truegm

View on GitHub
app/models/team.rb

Summary

Maintainability
A
0 mins
Test Coverage
# == Schema Information
#
# Table name: teams
#
#  id           :integer          not null, primary key
#  name         :string
#  tagline      :string
#  league_id    :integer
#  user_id      :integer
#  created_at   :datetime
#  updated_at   :datetime
#  total_salary :integer          default(0)
#  invite_code  :string
#

class Team < ActiveRecord::Base

  attr_accessible :name, :tagline, :total_salary, :invite_code

  belongs_to :league
  belongs_to :user

  has_many :invites, dependent: :destroy
  has_many :draft_picks, dependent: :destroy
  has_many :power_rankings, dependent: :destroy

  has_and_belongs_to_many :nfl_players

  before_save :update_total_salary

  delegate :name, :to => :user, :prefix => true

  def ordered_nfl_players
    nfl_players.sort_by { |a| NflPlayer.available_positions_for_filter.index(a.position) }
  end

  def have_roster_space_for_new_player?
    nfl_players.count < league.max_team_players
  end

  def would_be_under_minimum_roster_size_if_player_released?
    nfl_players.count-1 < league.min_team_players
  end

  def would_be_over_maximum_roster_size_if_player_added?
    nfl_players.count + 1 > league.max_team_players
  end

  def team_salary_if_player_released player
    self.total_salary - player.salary
  end

  def team_salary_if_player_added player
    self.total_salary + player.salary
  end

  def team_salary_if_player_released_and_other_added added_player, released_player
    self.total_salary + added_player.salary - released_player.salary
  end

  def add_player player
    team = player.fantasy_team self.league_id

    unless team.nil?
      team.nfl_players.delete(player)
    end

    self.nfl_players << player
    if self.save
      self.create_activity action: 'add_player', owner: self.user.team_in_league(self.league.id), recipient: player
    end
  end

  def remove_player player
    team = player.fantasy_team self.league_id

    if team && team.id == self.id
      team.nfl_players.delete(player.id)

      if self.save
        self.create_activity action: 'remove_player', owner: self.user.team_in_league(self.league.id), recipient: player
      end
    end
  end

  def quarterbacks
    get_players_by_position Position::QUARTERBACK
  end

  def runningbacks
    get_players_by_position Position::RUNNINGBACK
  end

  def receivers
    get_players_by_position Position::WIDERECEIVER
  end

  def tightends
    get_players_by_position Position::TIGHTEND
  end

  def kickers
    get_players_by_position Position::KICKER
  end

  def defenses
    get_players_by_position Position::DEFENSE
  end

  def under_cap?
    return true if league.salary_cap.nil?
    self.total_salary < league.salary_cap
  end

  def cap_delta
    cap = league.salary_cap unless league.nil?
    cap = 0 if cap.nil?
    return (self.total_salary - cap).abs
  end

  def update_total_salary
    self.total_salary = nfl_players.sum(:salary)
    self.total_salary = 0 if total_salary.nil? || total_salary < 0
  end

private

  def get_players_by_position position
    nfl_players.select { |p| p.position == position }
  end

end