summaryrefslogtreecommitdiff
path: root/app/models/blob.rb
diff options
context:
space:
mode:
authorDouwe Maan <douwe@selenight.nl>2017-05-08 18:50:23 -0500
committerDouwe Maan <douwe@selenight.nl>2017-05-10 20:07:04 -0500
commit08706f683725dcfbda1708ddf079347d989fbef1 (patch)
tree91cbd54eac137206b85908361ceee41ae9671102 /app/models/blob.rb
parent62c93ab91218daf176ccbfc1622a6f3c58f1ad82 (diff)
downloadgitlab-ce-08706f683725dcfbda1708ddf079347d989fbef1.tar.gz
Implement auxiliary blob viewers
Diffstat (limited to 'app/models/blob.rb')
-rw-r--r--app/models/blob.rb34
1 files changed, 22 insertions, 12 deletions
diff --git a/app/models/blob.rb b/app/models/blob.rb
index 8452a96e909..63a81c0e3bd 100644
--- a/app/models/blob.rb
+++ b/app/models/blob.rb
@@ -34,10 +34,13 @@ class Blob < SimpleDelegator
BlobViewer::BinarySTL,
BlobViewer::TextSTL
- ].freeze
+ ].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