podemos-info/census

View on GitHub
app/decorators/issue_decorator.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

class IssueDecorator < ApplicationDecorator
  delegate_all

  decorates_association :assigned_to

  def name
    issue_type_name
  end

  alias to_s name
  alias listable_name name

  def issue_type
    @issue_type ||= object.issue_type.underscore.sub("issues/", "")
  end

  def issue_type_name
    "#{I18n.t("census.issues.types.#{issue_type}.name")} ##{object.id}"
  end

  def issue_type_tip
    I18n.t("census.issues.types.#{issue_type}.tip")
  end

  def role_name
    I18n.t("census.admins.roles.#{object.role}")
  end

  def level_name
    I18n.t("census.issues.levels.#{object.level}")
  end

  def description
    return I18n.t("#{object.class.i18n_messages_scope}.#{object.description}") if object.class.i18n_messages_scope

    object.description
  end

  def objects_links
    object.issue_objects.map do |issue_object|
      obj = issue_object.object.decorate(context: context)
      h.link_to obj.listable_name, h.url_for(obj)
    end.to_sentence.html_safe
  end

  def people_by_creation_date
    @people_by_creation_date ||= object.people.decorate(context: context).sort_by(&:created_at)
  end

  def classed_relevant_attributes
    @classed_relevant_attributes ||= object.class.stored_attributes[:information].zip(%w(relevant).cycle).to_h
  end

  def fix_attributes
    @fix_attributes ||= object.class.try(:fix_attributes) || object.class.stored_attributes[:fix_information]
  end

  def link(text = nil)
    return view_link(text) if object.closed? || !can?(:update)

    edit_link(text)
  end

  def link_with_name
    link(name)
  end

  def view_link(text = nil)
    h.link_to text || I18n.t("active_admin.view"), h.issue_path(object), class: "member_link"
  end

  def edit_link(text = nil)
    h.link_to text || I18n.t("census.issues.close.action"), h.edit_issue_path(object), class: "member_link"
  end

  def status
    if object.closed?
      object.close_result
    else
      "open"
    end
  end

  def status_name
    I18n.t("census.issues.status.#{status}")
  end

  def cause_options
    @cause_options ||= object.class.causes.map do |cause|
      [I18n.t("census.issues.causes.#{cause}"), cause]
    end.freeze
  end
end