lib/basketball/drafting/engine.rb in basketball-0.0.3 vs lib/basketball/drafting/engine.rb in basketball-0.0.4
- old
+ new
@@ -94,10 +94,26 @@
def not_done?
!done?
end
+ def skip!
+ return if done?
+
+ event = SkipEvent.new(
+ id: SecureRandom.uuid,
+ team: current_team,
+ pick: current_pick,
+ round: current_round,
+ round_pick: current_round_pick
+ )
+
+ play!(event)
+
+ event
+ end
+
def sim!(times = nil)
counter = 0
events = []
until done? || (times && counter >= times)
@@ -154,34 +170,44 @@
private
attr_reader :players_by_id, :teams_by_id
+ def player_events
+ events.select { |e| e.respond_to?(:player) }
+ end
+
def internal_current_pick
events.length + 1
end
def drafted_players(team = nil)
- events.each_with_object([]) do |e, memo|
+ player_events.each_with_object([]) do |e, memo|
next unless team.nil? || e.team == team
memo << e.player
end
end
# rubocop:disable Metrics/AbcSize
# rubocop:disable Metrics/CyclomaticComplexity
# rubocop:disable Metrics/PerceivedComplexity
def play!(event)
- raise AlreadyPickedError, "#{player} was already picked" if drafted_players.include?(event.player)
- raise DupeEventError, "#{event} is a dupe" if events.include?(event)
- raise EventOutOfOrder, "#{event} team cant pick right now" if event.team != current_team
- raise EventOutOfOrder, "#{event} has wrong pick" if event.pick != current_pick
- raise EventOutOfOrder, "#{event} has wrong round" if event.round != current_round
- raise EventOutOfOrder, "#{event} has wrong round_pick" if event.round_pick != current_round_pick
- raise UnknownTeamError, "#{team} doesnt exist" unless teams.include?(event.team)
- raise UnknownPlayerError, "#{player} doesnt exist" unless players.include?(event.player)
- raise EndOfDraftError, "#{total_picks} pick limit reached" if events.length > total_picks + 1
+ if event.respond_to?(:player) && drafted_players.include?(event.player)
+ raise AlreadyPickedError, "#{player} was already picked"
+ end
+
+ if event.respond_to?(:player) && !players.include?(event.player)
+ raise UnknownPlayerError, "#{event.player} doesnt exist"
+ end
+
+ raise DupeEventError, "#{event} is a dupe" if events.include?(event)
+ raise EventOutOfOrder, "#{event} team cant pick right now" if event.team != current_team
+ raise EventOutOfOrder, "#{event} has wrong pick" if event.pick != current_pick
+ raise EventOutOfOrder, "#{event} has wrong round" if event.round != current_round
+ raise EventOutOfOrder, "#{event} has wrong round_pick" if event.round_pick != current_round_pick
+ raise UnknownTeamError, "#{team} doesnt exist" unless teams.include?(event.team)
+ raise EndOfDraftError, "#{total_picks} pick limit reached" if events.length > total_picks + 1
events << event
event
end