mysociety/alaveteli

View on GitHub
app/helpers/public_body_helper.rb

Summary

Maintainability
A
0 mins
Test Coverage
module PublicBodyHelper
  # Public: The reasons a request can't be made to a PublicBody
  # The returned reasons are ordered by priority. For example, if the body no
  # longer exists there is no reason to ask for its contact details if we don't
  # have an email for it.
  #
  # public_body - Instance of a PublicBody
  #
  # Returns an Array
  def public_body_not_requestable_reasons(public_body)
    reasons = []

    if public_body.defunct?
      reasons.push _('This authority no longer exists, so you cannot make a request to it.')
    end

    if public_body.not_apply?
      reasons.push _('Freedom of Information law does not apply to this authority, so you cannot make a request to it.')
    end

    unless public_body.has_request_email?
      # Make the authority appear requestable to encourage users to help find
      # the authority's email address
      msg = link_to _("Make a request to this authority"),
        new_request_to_body_path(url_name: public_body.url_name),
        class: "link_button_green"

      reasons.push(msg)
    end

    reasons.compact
  end

  # Use tags to describe what type of authority a PublicBody is.
  #
  # public_body - Instance of a PublicBody
  #
  # Returns a String
  def type_of_authority(public_body)
    categories = PublicBody.category_list.
      where(category_tag: public_body.tag_string.split).order(:id)

    types = categories.each_with_index.map do |category, index|
      desc = category.description
      desc = desc.sub(/\S/, &:upcase) if index.zero?
      link_to(desc, list_public_bodies_by_tag_path(category.category_tag))
    end

    if types.any?
      types.to_sentence(last_word_connector: ' and ').html_safe
    else
      _("A public authority")
    end
  end
end