OSDN Git Service

Refactor: replace "render :json = graph.to_json" to view template(show.json.erb).
authorSato Hiroyuki <sathiroyuki@gmail.com>
Wed, 6 Mar 2013 11:31:28 +0000 (20:31 +0900)
committerSato Hiroyuki <sathiroyuki@gmail.com>
Thu, 7 Mar 2013 06:19:32 +0000 (15:19 +0900)
Because model shouldn't know about view logic.

app/controllers/graph_controller.rb
app/helpers/graph_helper.rb [new file with mode: 0644]
app/models/graph/commit.rb
app/models/graph/json_builder.rb
app/views/graph/show.json.erb [new file with mode: 0644]

index 33cb2d2..d27fd03 100644 (file)
@@ -8,24 +8,21 @@ class GraphController < ProjectResourceController
   before_filter :require_non_empty_project
 
   def show
-    if params.has_key?(:q) && params[:q].blank?
-      redirect_to project_graph_path(@project, params[:id])
-      return
-    end
-
     if params.has_key?(:q)
+      if params[:q].blank?
+        redirect_to project_graph_path(@project, params[:id])
+        return
+      end
+
       @q = params[:q]
       @commit = @project.repository.commit(@q) || @commit
     end
 
     respond_to do |format|
       format.html
+
       format.json do
-        graph = Graph::JsonBuilder.new(project, @ref, @commit)
-        graph.commits.each do |c|
-          c.icon = gravatar_icon(c.author.email)
-        end
-        render :json => graph.to_json
+        @graph = Graph::JsonBuilder.new(project, @ref, @commit)
       end
     end
   end
diff --git a/app/helpers/graph_helper.rb b/app/helpers/graph_helper.rb
new file mode 100644 (file)
index 0000000..ba8c68a
--- /dev/null
@@ -0,0 +1,5 @@
+module GraphHelper
+  def join_with_space(ary)
+    ary.collect{|r|r.name}.join(" ") unless ary.nil?
+  end
+end
index 8ed61f4..e47a543 100644 (file)
@@ -4,7 +4,7 @@ module Graph
   class Commit
     include ActionView::Helpers::TagHelper
 
-    attr_accessor :time, :spaces, :refs, :parent_spaces, :icon
+    attr_accessor :time, :spaces, :refs, :parent_spaces
 
     def initialize(commit)
       @_commit = commit
@@ -17,26 +17,6 @@ module Graph
       @_commit.send(m, *args, &block)
     end
 
-    def to_graph_hash
-      h = {}
-      h[:parents] = self.parents.collect do |p|
-        [p.id,0,0]
-      end
-      h[:author]  = {
-        name: author.name,
-        email: author.email,
-        icon: icon
-      }
-      h[:time]    = time
-      h[:space]   = spaces.first
-      h[:parent_spaces]   = parent_spaces
-      h[:refs]    = refs.collect{|r|r.name}.join(" ") unless refs.nil?
-      h[:id]      = sha
-      h[:date]    = date
-      h[:message] = message
-      h
-    end
-
     def add_refs(ref_cache, repo)
       if ref_cache.empty?
         repo.refs.each do |ref|
index 013d15f..2e0edb8 100644 (file)
@@ -19,13 +19,6 @@ module Graph
       @days = index_commits
     end
 
-    def to_json(*args)
-      {
-        days: @days.compact.map { |d| [d.day, d.strftime("%b")] },
-        commits: @commits.map(&:to_graph_hash)
-      }.to_json(*args)
-    end
-
   protected
 
     # Get commits from repository
diff --git a/app/views/graph/show.json.erb b/app/views/graph/show.json.erb
new file mode 100644 (file)
index 0000000..0531bc3
--- /dev/null
@@ -0,0 +1,26 @@
+<% self.formats = ["html"] %>
+
+<%= raw(
+  {
+    days: @graph.days.compact.map { |d| [d.day, d.strftime("%b")] },
+    commits: @graph.commits.map do |c|
+      {
+        parents: c.parents.collect do |p|
+          [p.id,0,0]
+        end,
+        author: {
+          name: c.author.name,
+          email: c.author.email,
+          icon: gravatar_icon(c.author.email, 20)
+        },
+        time: c.time,
+        space: c.spaces.first,
+        parent_spaces: c.parent_spaces,
+        refs: join_with_space(c.refs),
+        id: c.sha,
+        date: c.date,
+        message: c.message,
+      }
+    end
+  }.to_json
+) %>