diff options
author | Stan Hu <stanhu@gmail.com> | 2017-05-11 12:40:44 -0700 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2017-05-11 12:40:44 -0700 |
commit | e3bac7dffe87a6e5adb1b51700acedba09420515 (patch) | |
tree | 3cad0696bdfeb79609c0442f79708fbbed2d93f1 /app/models/blob.rb | |
parent | f4b6bc06da18bce9553032463ca2012d7cad7268 (diff) | |
parent | e7e132529bff3af38175076b84c818b6dea4b05f (diff) | |
download | gitlab-ce-sh-ajax-tests.tar.gz |
Merge branch 'master' into sh-ajax-testssh-ajax-tests
Diffstat (limited to 'app/models/blob.rb')
-rw-r--r-- | app/models/blob.rb | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/app/models/blob.rb b/app/models/blob.rb index eaf0b713122..63a81c0e3bd 100644 --- a/app/models/blob.rb +++ b/app/models/blob.rb @@ -33,11 +33,14 @@ class Blob < SimpleDelegator BlobViewer::PDF, BlobViewer::BinarySTL, - BlobViewer::TextSTL, - ].freeze + BlobViewer::TextSTL + ].sort_by { |v| v.binary? ? 0 : 1 }.freeze - BINARY_VIEWERS = RICH_VIEWERS.select(&:binary?).freeze - TEXT_VIEWERS = RICH_VIEWERS.select(&:text?).freeze + AUXILIARY_VIEWERS = [ + BlobViewer::GitlabCiYml, + BlobViewer::RouteMap, + BlobViewer::License + ].freeze attr_reader :project @@ -154,6 +157,12 @@ class Blob < SimpleDelegator @rich_viewer = rich_viewer_class&.new(self) end + def auxiliary_viewer + return @auxiliary_viewer if defined?(@auxiliary_viewer) + + @auxiliary_viewer = auxiliary_viewer_class&.new(self) + end + def rendered_as_text?(ignore_errors: true) simple_viewer.text? && (ignore_errors || simple_viewer.render_error.nil?) end @@ -180,17 +189,18 @@ class Blob < SimpleDelegator end def rich_viewer_class + viewer_class_from(RICH_VIEWERS) + end + + def auxiliary_viewer_class + viewer_class_from(AUXILIARY_VIEWERS) + end + + def viewer_class_from(classes) return if empty? || external_storage_error? - classes = - if stored_externally? - BINARY_VIEWERS + TEXT_VIEWERS - elsif binary? - BINARY_VIEWERS - else # text - TEXT_VIEWERS - end + verify_binary = !stored_externally? - classes.find { |viewer_class| viewer_class.can_render?(self) } + classes.find { |viewer_class| viewer_class.can_render?(self, verify_binary: verify_binary) } end end |