Sha256: f04fc59e52f0ef31bacf02f0d61fc1c197e6cf99b00b93b497cac0e6941fcf59

Contents?: true

Size: 1005 Bytes

Versions: 5

Compression:

Stored size: 1005 Bytes

Contents

# frozen_string_literal: true

module Basketball
  module Season
    # A collection of divisions, teams, and players.
    class Conference < Entity
      include HasDivisions

      attr_reader :divisions, :name

      def initialize(id:, name: '', divisions: [])
        super(id)

        @divisions = []
        @name      = name.to_s

        divisions.each { |d| register_division!(d) }

        freeze
      end

      def to_s
        (["[#{super}] #{name}"] + divisions.map(&:to_s)).join("\n")
      end

      def teams
        divisions.flat_map(&:teams)
      end

      def players
        divisions.flat_map(&:players)
      end

      private

      def register_division!(division)
        raise ArgumentError, 'division is required' unless division
        raise DivisionAlreadyRegisteredError, "#{division} already registered" if division?(division)

        assert_teams_are_not_already_registered(division.teams)

        divisions << division

        self
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
basketball-0.0.27 lib/basketball/season/conference.rb
basketball-0.0.26 lib/basketball/season/conference.rb
basketball-0.0.25 lib/basketball/season/conference.rb
basketball-0.0.24 lib/basketball/season/conference.rb
basketball-0.0.23 lib/basketball/season/conference.rb