Sha256: aff3177dcbf1c08f6e9ce6f31bd161f9df6f71642334cc47b545dc185beeaf6f

Contents?: true

Size: 940 Bytes

Versions: 1

Compression:

Stored size: 940 Bytes

Contents

# frozen_string_literal: true

module Basketball
  module Drafting
    class Roster < ValueObject
      extend Forwardable

      class WrongTeamEventError < StandardError; end

      attr_reader_value :team, :events

      def_delegators :team, :id

      def initialize(team:, events: [])
        super()

        raise ArgumentError, 'team is required' unless team

        other_teams_pick_event_ids = events.reject { |e| e.team == team }.map(&:id)

        if other_teams_pick_event_ids.any?
          raise WrongTeamEventError,
                "Event(s): #{other_teams_pick_event_ids.join(',')} has wrong team"
        end

        @team   = team
        @events = events
      end

      def player_events
        events.select { |e| e.respond_to?(:player) }
      end

      def players
        player_events.map(&:player)
      end

      def to_s
        ([team.to_s] + players.map(&:to_s)).join("\n")
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
basketball-0.0.4 lib/basketball/drafting/roster.rb