Commit 8fa377b0 authored by Mark Chao's avatar Mark Chao

Add BlobPresenter for highlighting

Force FoundBlob to use BlobPresenter
parent eb83f87f
# frozen_string_literal: true
# Blob is a Rails-specific wrapper around Gitlab::Git::Blob objects
# Blob is a Rails-specific wrapper around Gitlab::Git::Blob, SnippetBlob and Ci::ArtifactBlob
class Blob < SimpleDelegator
prepend EE::Blob
include Presentable
CACHE_TIME = 60 # Cache raw blobs referred to by a (mutable) ref for 1 minute
CACHE_TIME_IMMUTABLE = 3600 # Cache blobs referred to by an immutable reference for 1 hour
......
# frozen_string_literal: true
class BlobPresenter < Gitlab::View::Presenter::Simple
presents :blob
def highlight(plain: nil)
Gitlab::Highlight.highlight(
blob.path,
blob.data,
language: blob.language_from_gitattributes,
plain: (plain || blob.no_highlighting?)
)
end
end
......@@ -4,6 +4,7 @@ module Gitlab
class SearchResults
class FoundBlob
include EncodingHelper
include Presentable
attr_reader :id, :filename, :basename, :ref, :startline, :data, :project_id
......@@ -31,6 +32,10 @@ module Gitlab
def language_from_gitattributes
nil
end
def present
super(presenter_class: BlobPresenter)
end
end
attr_reader :current_user, :query, :per_page
......
# frozen_string_literal: true
require 'spec_helper'
describe BlobPresenter, :seed_helper do
let(:repository) { Gitlab::Git::Repository.new('default', TEST_REPO_PATH, '') }
let(:git_blob) do
Gitlab::Git::Blob.find(
repository,
'fa1b1e6c004a68b7d8763b86455da9e6b23e36d6',
'files/ruby/regex.rb'
)
end
let(:blob) { Blob.new(git_blob) }
describe '#highlight' do
subject { described_class.new(blob) }
it 'returns highlighted content' do
expect(Gitlab::Highlight).to receive(:highlight).with('files/ruby/regex.rb', git_blob.data, plain: false, language: nil)
subject.highlight
end
context 'with :plain' do
it 'returns plain content when no_highlighting? is true' do
allow(blob).to receive(:no_highlighting?).and_return(true)
subject.highlight
end
it 'returns plain content when :plain is true' do
expect(Gitlab::Highlight).to receive(:highlight).with('files/ruby/regex.rb', git_blob.data, plain: true, language: nil)
subject.highlight(plain: true)
end
it 'returns plain content when :plain is false, but no_highlighting? is true' do
allow(blob).to receive(:no_highlighting?).and_return(true)
expect(Gitlab::Highlight).to receive(:highlight).with('files/ruby/regex.rb', git_blob.data, plain: true, language: nil)
subject.highlight(plain: false)
end
end
context 'gitlab-language contains a match' do
before do
allow(blob).to receive(:language_from_gitattributes).and_return('ruby')
end
it 'passes language to inner call' do
expect(Gitlab::Highlight).to receive(:highlight).with('files/ruby/regex.rb', git_blob.data, plain: false, language: 'ruby')
subject.highlight
end
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment