BigW Consortium Gitlab

blob.rb 1.25 KB
Newer Older
1 2
# Blob is a Rails-specific wrapper around Gitlab::Git::Blob objects
class Blob < SimpleDelegator
Jacob Vosmaer committed
3 4 5
  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

6 7 8
  # The maximum size of an SVG that can be displayed.
  MAXIMUM_SVG_SIZE = 2.megabytes

9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  # Wrap a Gitlab::Git::Blob object, or return nil when given nil
  #
  # This method prevents the decorated object from evaluating to "truthy" when
  # given a nil value. For example:
  #
  #     blob = Blob.new(nil)
  #     puts "truthy" if blob # => "truthy"
  #
  #     blob = Blob.decorate(nil)
  #     puts "truthy" if blob # No output
  def self.decorate(blob)
    return if blob.nil?

    new(blob)
  end

25 26 27 28 29
  def no_highlighting?
    size && size > 1.megabyte
  end

  def only_display_raw?
30
    size && truncated?
31 32
  end

33 34 35 36
  def svg?
    text? && language && language.name == 'SVG'
  end

37 38 39 40
  def size_within_svg_limits?
    size <= MAXIMUM_SVG_SIZE
  end

41 42 43 44
  def video?
    UploaderHelper::VIDEO_EXT.include?(extname.downcase.delete('.'))
  end

45 46 47 48 49 50 51 52 53 54 55 56
  def to_partial_path
    if lfs_pointer?
      'download'
    elsif image? || svg?
      'image'
    elsif text?
      'text'
    else
      'download'
    end
  end
end