jbox-web/redmine_git_hosting

View on GitHub
app/presenters/repository_presenter.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

class RepositoryPresenter < SimpleDelegator
  attr_reader :repository

  def initialize(repository, template)
    super template
    @repository = repository
  end

  def link_to_repository
    link_to repository.name,
            controller: 'repositories',
            action: 'show',
            id: repository.project,
            repository_id: repository.identifier_param,
            rev: nil,
            path: nil
  end

  def git_urls_box
    tag.div class: 'git_url_box', id: urls_container_id do
      render_git_urls +
        render_git_url_text +
        render_permissions +
        render_clipboard_button
    end
  end

  private

  def render_git_urls
    tag.ul render_url_list, class: 'git_url_list'
  end

  def render_url_list
    s = []
    repository.available_urls_sorted.each do |key, value|
      s << tag.li(link_to(key.upcase, 'javascript:void(0)').html_safe, **options_for_git_url(key, value))
    end
    safe_join s
  end

  def options_for_git_url(_key, value)
    { class: 'git_url', data: { url: value[:url], target: element_name, committer: committer_label(value) } }
  end

  def render_git_url_text
    tag.input '', class: 'git_url_text', id: url_text_container_id, readonly: 'readonly'
  end

  def render_permissions
    tag.div tag.span('', id: permissions_container_id), class: 'git_url_permissions'
  end

  def render_clipboard_button
    clipboardjs_button_for url_text_container_id
  end

  def committer_label(value)
    RedminePluginKit.true?(value[:committer]) ? l(:label_read_write_permission) : l(:label_read_only_permission)
  end

  def element_name
    "repository_#{repository.id}"
  end

  def urls_container_id
    "git_url_box_#{element_name}"
  end

  def permissions_container_id
    "git_url_permissions_#{element_name}"
  end

  def url_text_container_id
    "git_url_text_#{element_name}"
  end
end