Class: BlobPresenter

Inherits:
Gitlab::View::Presenter::Delegated show all
Includes:
ApplicationHelper, BlobHelper, ChecksCollaboration, DiffHelper, TreeHelper
Defined in:
app/presenters/blob_presenter.rb

Instance Method Summary collapse

Methods included from ChecksCollaboration

#can_collaborate_with_project?, #user_access

Methods included from TreeHelper

#breadcrumb_data_attributes, #can_edit_tree?, #commit_in_fork_help, #commit_in_single_accessible_branch, #directory_download_links, #edit_in_new_fork_notice, #edit_in_new_fork_notice_action, #edit_in_new_fork_notice_now, #flatten_tree, #fork_modal_options, #on_top_of_branch?, #patch_branch_name, #path_breadcrumbs, #relative_url_root, #selected_branch, #tree_edit_branch, #tree_edit_project, #tree_icon, #tree_join, #up_dir_path, #vue_file_list_data, #web_ide_button_data

Methods included from WebIdeButtonHelper

#can_collaborate?, #can_create_mr_from_fork?, #can_push_code?, #edit_url, #fork?, #gitpod_url, #needs_to_fork?, #project_fork, #project_to_use, #readable_blob?, #show_edit_button?, #show_gitpod_button?, #show_pipeline_editor_button?, #show_web_ide_button?, #web_ide_url

Methods included from BlobHelper

#blob_editor_paths, #blob_icon, #blob_raw_path, #blob_raw_url, #blob_render_error_options, #blob_render_error_reason, #contribution_options, #copy_blob_source_button, #copy_file_path_button, #delete_blob_link, #dockerfile_names, #download_blob_button, #edit_blob_button, #edit_blob_fork_params, #edit_button_tag, #edit_disabled_button_tag, #edit_fork_button_tag, #edit_link_tag, #edit_modify_file_fork_params, #editing_ci_config?, #editing_preview_title, #encode_ide_path, #fork_path_for_current_user, #gitignore_names, #gitlab_ci_ymls, #human_access, #ide_merge_request_path, #leave_edit_message, #licenses_for_select, #metrics_dashboard_ymls, #modify_file_button, #open_raw_blob_button, #parent_dir_raw_path, #readable_blob, #ref_project, #replace_blob_link, #sanitize_svg_data, #show_suggest_pipeline_creation_celebration?, #suggest_pipeline_commit_cookie_name

Methods included from DiffHelper

#apply_diff_view_cookie!, #collapsed_diff_url, #diff_file_blob_raw_path, #diff_file_blob_raw_url, #diff_file_html_data, #diff_file_old_blob_raw_path, #diff_file_old_blob_raw_url, #diff_file_stats_data, #diff_line_content, #diff_link_number, #diff_match_line, #diff_nomappinginraw_line, #diff_options, #diff_view, #diffs_expanded?, #editable_diff?, #inline_diff_btn, #mark_inline_diffs, #parallel_diff_btn, #parallel_diff_discussions, #render_fork_suggestion, #render_overflow_warning?, #show_only_context_commits?, #submodule_diff_compare_link, #submodule_link

Methods included from ApplicationHelper

#active_when, #add_page_specific_style, #add_page_startup_api_call, #admin_section?, #asset_to_string, #autocomplete_data_sources, #body_data, #body_data_page, #client_class_list, #client_js_flags, #collapsed_sidebar?, #conditional_link_to, #current_action?, #current_controller?, #dispensable_render, #dispensable_render_if_exists, #edited_time_ago_with_tooltip, #external_storage_url_or_path, #extra_config, #gitlab_config, #gitlab_ui_form_for, #hexdigest, #instance_review_permitted?, #last_commit, #linkedin_url, #locale_path, #outdated_browser?, #page_class, #page_filter_path, #page_startup_api_calls, #partial_exists?, #path_to_key, #project_data, promo_host, #promo_host, #promo_url, #read_only_message, #registry_config, #render_if_exists, #show_callout?, #show_last_push_widget?, #simple_sanitize, #static_objects_external_storage_enabled?, #stylesheet_link_tag_defer, #support_url, #system_message_class, #template_exists?, #time_ago_with_tooltip, #truncate_first_line, #twitter_url

Methods inherited from Gitlab::View::Presenter::Delegated

#initialize

Methods included from Gitlab::Utils::DelegatorOverride

#delegator_override, #delegator_override_with, #delegator_target, validator, validators, verify!

Methods included from Gitlab::View::Presenter::Base

#__subject__, #can?, #declarative_policy_delegate, #is_a?, #present, #url_builder

Methods included from Gitlab::Allowable

#can?

Methods included from Gitlab::Routing

add_helpers, includes_helpers, redirect_legacy_paths, url_helpers

Constructor Details

This class inherits a constructor from Gitlab::View::Presenter::Delegated

Instance Method Details

#archived?Boolean

Returns:

  • (Boolean)

126
127
128
# File 'app/presenters/blob_presenter.rb', line 126

def archived?
  project.archived
end

#blame_pathObject


75
76
77
# File 'app/presenters/blob_presenter.rb', line 75

def blame_path
  url_helpers.project_blame_path(project, ref_qualified_path)
end

#blob_data(to) ⇒ Object


29
30
31
# File 'app/presenters/blob_presenter.rb', line 29

def blob_data(to)
  @_blob_data ||= Gitlab::Diff::CustomDiff.transformed_blob_data(blob) || limited_blob_data(to: to)
end

#blob_languageObject


33
34
35
# File 'app/presenters/blob_presenter.rb', line 33

def blob_language
  @_blob_language ||= Gitlab::Diff::CustomDiff.transformed_blob_language(blob) || gitattr_language || detect_language
end

#can_current_user_push_to_branch?Boolean

Returns:

  • (Boolean)

120
121
122
123
124
# File 'app/presenters/blob_presenter.rb', line 120

def can_current_user_push_to_branch?
  return false unless current_user && project.repository.branch_exists?(blob.commit_id)

  user_access(project).can_push_to_branch?(blob.commit_id)
end

#can_modify_blob?Boolean

Returns:

  • (Boolean)

116
117
118
# File 'app/presenters/blob_presenter.rb', line 116

def can_modify_blob?
  super(blob, project, blob.commit_id)
end

#code_navigation_pathObject


140
141
142
# File 'app/presenters/blob_presenter.rb', line 140

def code_navigation_path
  Gitlab::CodeNavigationPath.new(project, blob.commit_id).full_json_path_for(blob.path)
end

#code_ownersObject

Will be overridden in EE


100
101
102
# File 'app/presenters/blob_presenter.rb', line 100

def code_owners
  []
end

#edit_blob_pathObject


49
50
51
# File 'app/presenters/blob_presenter.rb', line 49

def edit_blob_path
  url_helpers.project_edit_blob_path(project, ref_qualified_path)
end

#environment_external_url_for_route_mapObject


93
94
95
96
97
# File 'app/presenters/blob_presenter.rb', line 93

def environment_external_url_for_route_map
  return unless environment

  environment.external_url_for(blob.path, blob.commit_id)
end

#environment_formatted_external_urlObject


87
88
89
90
91
# File 'app/presenters/blob_presenter.rb', line 87

def environment_formatted_external_url
  return unless environment

  environment.formatted_external_url
end

#external_storage_urlObject


134
135
136
137
138
# File 'app/presenters/blob_presenter.rb', line 134

def external_storage_url
  return unless static_objects_external_storage_enabled?

  external_storage_url_or_path(url_helpers.project_raw_url(project, ref_qualified_path), project)
end

#find_file_pathObject


71
72
73
# File 'app/presenters/blob_presenter.rb', line 71

def find_file_path
  url_helpers.project_find_file_path(project, ref_qualified_path)
end

#fork_and_edit_pathObject


104
105
106
# File 'app/presenters/blob_presenter.rb', line 104

def fork_and_edit_path
  fork_path_for_current_user(project, edit_blob_path)
end

#fork_and_view_pathObject


112
113
114
# File 'app/presenters/blob_presenter.rb', line 112

def fork_and_view_path
  fork_path_for_current_user(project, web_path)
end

#gitpod_blob_urlObject


65
66
67
68
69
# File 'app/presenters/blob_presenter.rb', line 65

def gitpod_blob_url
  return unless Gitlab::CurrentSettings.gitpod_enabled && !current_user.nil? && current_user.gitpod_enabled

  "#{Gitlab::CurrentSettings.gitpod_url}##{url_helpers.project_tree_url(project, tree_join(blob.commit_id, blob.path || ''))}"
end

#highlight(to: nil, plain: nil) ⇒ Object


12
13
14
15
16
17
18
19
20
21
# File 'app/presenters/blob_presenter.rb', line 12

def highlight(to: nil, plain: nil)
  load_all_blob_data

  Gitlab::Highlight.highlight(
    blob.path,
    blob_data(to),
    language: blob_language,
    plain: plain
  )
end

#history_pathObject


79
80
81
# File 'app/presenters/blob_presenter.rb', line 79

def history_path
  url_helpers.project_commits_path(project, ref_qualified_path)
end

#ide_edit_pathObject


130
131
132
# File 'app/presenters/blob_presenter.rb', line 130

def ide_edit_path
  super(project, blob.commit_id, blob.path)
end

#ide_fork_and_edit_pathObject


108
109
110
# File 'app/presenters/blob_presenter.rb', line 108

def ide_fork_and_edit_path
  fork_path_for_current_user(project, ide_edit_path)
end

83
84
85
# File 'app/presenters/blob_presenter.rb', line 83

def permalink_path
  url_helpers.project_blob_path(project, File.join(project.repository.commit.sha, blob.path))
end

#pipeline_editor_pathObject


61
62
63
# File 'app/presenters/blob_presenter.rb', line 61

def pipeline_editor_path
  project_ci_pipeline_editor_path(project, branch_name: blob.commit_id) if can_collaborate_with_project?(project) && blob.path == project.ci_config_path_or_default
end

#plain_dataObject


23
24
25
26
27
# File 'app/presenters/blob_presenter.rb', line 23

def plain_data
  return if blob.binary?

  highlight(plain: false)
end

#project_blob_path_rootObject


144
145
146
# File 'app/presenters/blob_presenter.rb', line 144

def project_blob_path_root
  project_blob_path(project, blob.commit_id)
end

#raw_pathObject


53
54
55
# File 'app/presenters/blob_presenter.rb', line 53

def raw_path
  url_helpers.project_raw_path(project, ref_qualified_path)
end

#raw_plain_dataObject


37
38
39
# File 'app/presenters/blob_presenter.rb', line 37

def raw_plain_data
  blob.data unless blob.binary?
end

#replace_pathObject


57
58
59
# File 'app/presenters/blob_presenter.rb', line 57

def replace_path
  url_helpers.project_update_blob_path(project, ref_qualified_path)
end

#web_pathObject


45
46
47
# File 'app/presenters/blob_presenter.rb', line 45

def web_path
  url_helpers.project_blob_path(project, ref_qualified_path)
end

#web_urlObject


41
42
43
# File 'app/presenters/blob_presenter.rb', line 41

def web_url
  url_helpers.project_blob_url(project, ref_qualified_path)
end