2017-04-13 13:14:08 -04:00
|
|
|
module BlobViewer
|
|
|
|
class Base
|
|
|
|
class_attribute :partial_name, :type, :extensions, :client_side, :text_based, :switcher_icon, :switcher_title, :max_size, :absolute_max_size
|
|
|
|
|
2017-04-21 14:22:04 -04:00
|
|
|
delegate :partial_path, :rich?, :simple?, :client_side?, :server_side?, :text_based?, to: :class
|
2017-04-13 13:14:08 -04:00
|
|
|
|
|
|
|
attr_reader :blob
|
|
|
|
|
|
|
|
def initialize(blob)
|
|
|
|
@blob = blob
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.partial_path
|
|
|
|
"projects/blob/viewers/#{partial_name}"
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.rich?
|
|
|
|
type == :rich
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.simple?
|
|
|
|
type == :simple
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.client_side?
|
|
|
|
client_side
|
|
|
|
end
|
|
|
|
|
2017-04-21 14:22:04 -04:00
|
|
|
def self.server_side?
|
2017-04-13 13:14:08 -04:00
|
|
|
!client_side?
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.text_based?
|
|
|
|
text_based
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.can_render?(blob)
|
|
|
|
!extensions || extensions.include?(blob.extension)
|
|
|
|
end
|
|
|
|
|
|
|
|
def can_override_max_size?
|
|
|
|
too_large? && !too_large?(override_max_size: true)
|
|
|
|
end
|
|
|
|
|
|
|
|
def relevant_max_size
|
|
|
|
if too_large?(override_max_size: true)
|
|
|
|
absolute_max_size
|
|
|
|
elsif too_large?
|
|
|
|
max_size
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def render_error(override_max_size: false)
|
|
|
|
if too_large?(override_max_size: override_max_size)
|
|
|
|
:too_large
|
|
|
|
elsif server_side_but_stored_in_lfs?
|
|
|
|
:server_side_but_stored_in_lfs
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def prepare!
|
|
|
|
if server_side? && blob.project
|
|
|
|
blob.load_all_data!(blob.project.repository)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def too_large?(override_max_size: false)
|
|
|
|
if override_max_size
|
|
|
|
blob.raw_size > absolute_max_size
|
|
|
|
else
|
|
|
|
blob.raw_size > max_size
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def server_side_but_stored_in_lfs?
|
2017-04-20 12:48:19 -04:00
|
|
|
server_side? && blob.valid_lfs_pointer?
|
2017-04-13 13:14:08 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|