Class: Blobs::UnfoldPresenter

Inherits:
BlobPresenter show all
Includes:
ActiveModel::AttributeAssignment, ActiveModel::Attributes, Gitlab::Utils::StrongMemoize
Defined in:
app/presenters/blobs/unfold_presenter.rb

Instance Method Summary collapse

Methods included from Gitlab::Utils::StrongMemoize

#clear_memoization, #strong_memoize, #strong_memoized?

Methods inherited from BlobPresenter

#archived?, #blame_path, #blob_data, #blob_language, #can_current_user_push_to_branch?, #can_modify_blob?, #code_navigation_path, #code_owners, #edit_blob_path, #environment_external_url_for_route_map, #environment_formatted_external_url, #external_storage_url, #find_file_path, #fork_and_edit_path, #fork_and_view_path, #gitpod_blob_url, #highlight, #history_path, #ide_edit_path, #ide_fork_and_edit_path, #permalink_path, #pipeline_editor_path, #plain_data, #project_blob_path_root, #raw_path, #raw_plain_data, #replace_path, #web_path, #web_url

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, #can_modify_blob?, #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_blob_path, #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_and_edit_path, #fork_path_for_current_user, #gitignore_names, #gitlab_ci_ymls, #human_access, #ide_edit_path, #ide_fork_and_edit_path, #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 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, #web_path, #web_url

Methods included from Gitlab::Allowable

#can?

Methods included from Gitlab::Routing

add_helpers, includes_helpers, redirect_legacy_paths, url_helpers

Constructor Details

#initialize(blob, params) ⇒ UnfoldPresenter

Returns a new instance of UnfoldPresenter.


23
24
25
26
27
28
29
30
31
32
# File 'app/presenters/blobs/unfold_presenter.rb', line 23

def initialize(blob, params)
  super(blob)
  self.attributes = params

  # Load all blob data first as we need to ensure they're all loaded first
  # so we can accurately show the rest of the diff when unfolding.
  load_all_blob_data

  handle_full_or_end!
end

Instance Method Details

#diff_linesObject

Returns an array of Gitlab::Diff::Line with match line added


35
36
37
38
39
40
41
42
43
44
45
# File 'app/presenters/blobs/unfold_presenter.rb', line 35

def diff_lines
  diff_lines = lines.map.with_index do |line, index|
    full_line = limited_blob_lines[index].delete("\n")

    Gitlab::Diff::Line.new(full_line, nil, nil, nil, nil, rich_text: line)
  end

  add_match_line(diff_lines)

  diff_lines
end

#linesObject


47
48
49
50
51
# File 'app/presenters/blobs/unfold_presenter.rb', line 47

def lines
  strong_memoize(:lines) do
    limit(highlight(to: to).lines).map(&:html_safe)
  end
end

#match_line_textObject


53
54
55
56
57
58
59
# File 'app/presenters/blobs/unfold_presenter.rb', line 53

def match_line_text
  return '' if bottom?

  lines_length = lines.length - 1
  line = [since, lines_length].join(',')
  "@@ -#{line}+#{line} @@"
end