ozfortress/citadel

View on GitHub
app/presenters/league/roster_presenter.rb

Summary

Maintainability
A
0 mins
Test Coverage
class League
  class RosterPresenter < BasePresenter
    presents :roster

    delegate :id, to: :roster
    delegate :name, to: :roster
    delegate :league, to: :roster
    delegate :division, to: :roster
    delegate :approved?, to: :roster
    delegate :disbanded?, to: :roster
    delegate :points, to: :roster
    delegate :==, to: :roster

    def link(label = nil, options = {}, &block)
      label ||= name
      link_to(label, team_path(roster.team_id), options, &block)
    end

    def title
      title = if league.completed?
                past_title
              elsif league.signuppable? || !roster.approved? || league.hidden?
                signup_title
              else
                active_title
              end
      title += disbanded_tag if roster.disbanded?
      title
    end

    def listing
      listing = link
      listing += disbanded_tag if roster.disbanded?
      listing
    end

    def team_listing
      if league.completed?
        safe_join(['Played in ', division.name, ' for ', league_p.link, ' as ', link])
      elsif league.signuppable? || !roster.approved?
        safe_join(['Signed up to ', league_p.link, ' as ', link])
      else
        safe_join(['Playing in ', division.name, ' for ', league_p.link, ' as ', link])
      end
    end

    def points_s
      number_with_precision(
        roster.points,
        strip_insignificant_zeros: true
      )
    end

    def score_s
      if disbanded?
        'Disbanded'
      else
        "Points: #{points}"
      end
    end

    def created_at_s
      roster.created_at.strftime('%c')
    end

    def league_p
      @league_p ||= present(league)
    end

    def description
      # rubocop:disable Rails/OutputSafety
      roster.description_render_cache.html_safe
      # rubocop:enable Rails/OutputSafety
    end

    def notice
      # rubocop:disable Rails/OutputSafety
      roster.notice_render_cache.html_safe
      # rubocop:enable Rails/OutputSafety
    end

    def bracket_data
      { name: html_escape(roster.name), id: roster.id, link: team_path(roster.team_id) }
    end

    def to_s
      roster.name
    end

    private

    def disbanded_tag
      safe_join([' ', content_tag(:span, 'Disbanded', class: 'label label-danger')])
    end

    def signup_title
      html_escape("#{roster.name} signed up on #{created_at_s} to ") + league_p.link
    end

    def active_title
      text = "Active roster for #{roster.name} playing in #{roster.division.name} for "
      html_escape(text) + league_p.link
    end

    def past_title
      verb = object.placement ? "placed #{(object.placement + 1).ordinalize}" : 'played'
      text = "#{roster.name} #{verb} in #{roster.division.name} for "
      html_escape(text) + league_p.link
    end
  end
end