OSDN Git Service

refactoring
authorgitlabhq <m@gitlabhq.com>
Thu, 20 Oct 2011 19:00:00 +0000 (22:00 +0300)
committergitlabhq <m@gitlabhq.com>
Thu, 20 Oct 2011 19:00:00 +0000 (22:00 +0300)
app/helpers/application_helper.rb
app/models/snippet.rb
app/views/commits/_diff.html.haml
app/views/projects/_tree_file.html.haml
app/views/snippets/show.html.haml
config/initializers/grit_ext.rb [new file with mode: 0644]
lib/utils.rb

index c389fd4..0895eb0 100644 (file)
@@ -53,25 +53,4 @@ module ApplicationHelper
     [projects, default_nav, project_nav].flatten.to_json
   end
 
-  def handle_file_type(file_name, mime_type = nil)
-    if file_name =~ /(\.rb|\.ru|\.rake|Rakefile|\.gemspec|\.rbx|Gemfile)$/
-      :ruby
-    elsif file_name =~ /\.py$/
-      :python
-    elsif file_name =~ /(\.pl|\.scala|\.c|\.cpp|\.java|\.haml|\.html|\.sass|\.scss|\.xml|\.php|\.erb)$/
-      $1[1..-1].to_sym
-    elsif file_name =~ /\.js$/
-      :javascript
-    elsif file_name =~ /\.sh$/
-      :bash
-    elsif file_name =~ /\.coffee$/
-      :coffeescript
-    elsif file_name =~ /\.yml$/
-      :yaml
-    elsif file_name =~ /\.md$/
-      :minid
-    else
-      :text
-    end
-  end
 end
index 0a54fee..119b69a 100644 (file)
@@ -1,4 +1,6 @@
 class Snippet < ActiveRecord::Base
+  include Utils::Colorize
+
   belongs_to :project
   belongs_to :author, :class_name => "User"
   has_many :notes, :as => :noteable
@@ -28,6 +30,11 @@ class Snippet < ActiveRecord::Base
       ".js", ".sh", ".coffee", ".yml", ".md"
     ]
   end
+
+  def colorize
+    ft = handle_file_type(file_name)
+    Albino.colorize(content, ft, :html, 'utf-8', "linenos=True")
+  end
 end
 # == Schema Information
 #
index dff99bf..73652aa 100644 (file)
@@ -1,4 +1,3 @@
-- require "utils"
 .file_stats
   - @commit.diffs.each do |diff|
     - if diff.deleted_file
@@ -35,7 +34,7 @@
         %strong{:id => "#{diff.b_path}"}= diff.b_path
       %br/
     .diff_file_content
-      - if file.mime_type =~ /application|text/ && !Utils.binary?(file.data)
+      - if file.text?
         - lines_arr = diff.diff.lines.to_a
         - line_old = lines_arr[2].match(/-(\d)/)[0].to_i.abs rescue 0
         - line_new = lines_arr[2].match(/\+(\d)/)[0].to_i.abs rescue 0
@@ -50,9 +49,9 @@
           - else 
             - line_new += 1
             - line_old += 1
-      - elsif file.mime_type =~ /image/
+      - elsif file.image?
         .diff_file_content_image
-          %img{:src => "data:image/jpeg;base64,#{Base64.encode64(file.data)}"}
+          %img{:src => "data:#{file.mime_type};base64,#{Base64.encode64(file.data)}"}
       - else
         %p 
           %center No preview for this file type
index 3463bfc..ae95d48 100644 (file)
@@ -1,4 +1,3 @@
-- require "utils"
 .view_file
   .view_file_header
     %strong
@@ -6,14 +5,13 @@
       = link_to "raw", blob_project_path(@project, :commit_id => @commit.id, :path => params[:path] ), :class => "right", :target => "_blank"
       = link_to "history", project_commits_path(@project, :path => params[:path]), :class => "right", :style => "margin-right:10px;"
       %br/
-  - if file.mime_type =~ /application|text/ && !Utils.binary?(file.data)
+  - if file.text?
     .view_file_content
-      - ft = handle_file_type(file.name, file.mime_type)
       :erb
-        <%= raw Albino.colorize(content, ft, :html, 'utf-8', "linenos=True") %>
-  - elsif file.mime_type =~ /image/
+        <%= raw file.colorize %>
+  - elsif file.image?
     .view_file_content_image
-      %img{ :src => "data:image/jpeg;base64,#{Base64.encode64(file.data)}"}
+      %img{ :src => "data:#{file.mime_type};base64,#{Base64.encode64(file.data)}"}
   - else
     %p 
       %center No preview for this file type
index bb444ef..899950b 100644 (file)
@@ -7,9 +7,8 @@
       = @snippet.file_name
       %br/
   .view_file_content
-    - ft = handle_file_type(@snippet.file_name)
     :erb
-      <%= raw Albino.colorize(@snippet.content, ft, :html, 'utf-8', "linenos=True") %>
+      <%= raw @snippet.colorize %>
 
 - if can?(current_user, :admin_snippet, @project) || @snippet.author == current_user
   = link_to 'Edit', edit_project_snippet_path(@project, @snippet), :class => "lbutton positive"
diff --git a/config/initializers/grit_ext.rb b/config/initializers/grit_ext.rb
new file mode 100644 (file)
index 0000000..8f1329a
--- /dev/null
@@ -0,0 +1,8 @@
+require 'grit'
+require 'albino'
+require "utils"
+
+Grit::Blob.class_eval do
+  include Utils::FileHelper
+  include Utils::Colorize
+end
index 6e7460e..40bf267 100644 (file)
@@ -1,8 +1,47 @@
 module Utils
-  def self.binary?(string) 
-    string.each_byte do |x|
-      x.nonzero? or return true 
+  module FileHelper
+    def binary?(string) 
+      string.each_byte do |x|
+        x.nonzero? or return true 
+      end
+      false
+    end
+
+    def image?
+      mime_type =~ /image/
+    end
+
+    def text?
+      mime_type =~ /application|text/ && !binary?(data)
+    end
+  end
+
+  module Colorize
+    def colorize
+      ft = handle_file_type(name, mime_type)
+      Albino.colorize(data, ft, :html, 'utf-8', "linenos=True")
+    end
+
+    def handle_file_type(file_name, mime_type = nil)
+      if file_name =~ /(\.rb|\.ru|\.rake|Rakefile|\.gemspec|\.rbx|Gemfile)$/
+        :ruby
+      elsif file_name =~ /\.py$/
+        :python
+      elsif file_name =~ /(\.pl|\.scala|\.c|\.cpp|\.java|\.haml|\.html|\.sass|\.scss|\.xml|\.php|\.erb)$/
+        $1[1..-1].to_sym
+      elsif file_name =~ /\.js$/
+        :javascript
+      elsif file_name =~ /\.sh$/
+        :bash
+      elsif file_name =~ /\.coffee$/
+        :coffeescript
+      elsif file_name =~ /\.yml$/
+        :yaml
+      elsif file_name =~ /\.md$/
+        :minid
+      else
+        :text
+      end
     end
-    false
   end
 end