Commit 398ba6f1bb60f176444dedc7b26188e08b920f54

Authored by Robert Speicher
1 parent 576cec6c

DRY up Blame, Blob and Tree controllers

app/controllers/blame_controller.rb
1 1 # Controller for viewing a file's blame
2 2 class BlameController < ApplicationController
3   - # Thrown when given an invalid path
4   - class InvalidPathError < StandardError; end
5 3  
6 4 include RefExtractor
7 5  
... ... @@ -15,31 +13,10 @@ class BlameController &lt; ApplicationController
15 13 before_filter :authorize_code_access!
16 14 before_filter :require_non_empty_project
17 15  
18   - before_filter :define_tree_vars
  16 + before_filter :assign_ref_vars
19 17  
20 18 def show
  19 + @repo = @project.repo
21 20 @blame = Grit::Blob.blame(@repo, @commit.id, @path)
22 21 end
23   -
24   - private
25   -
26   - def define_tree_vars
27   - @ref, @path = extract_ref(params[:id])
28   -
29   - @id = File.join(@ref, @path)
30   - @repo = @project.repo
31   - @commit = CommitDecorator.decorate(@project.commit(@ref))
32   -
33   - @tree = Tree.new(@commit.tree, @project, @ref, @path)
34   - @tree = TreeDecorator.new(@tree)
35   -
36   - raise InvalidPathError if @tree.invalid?
37   -
38   - @hex_path = Digest::SHA1.hexdigest(@path)
39   -
40   - @history_path = project_tree_path(@project, @id)
41   - @logs_path = logs_file_project_ref_path(@project, @ref, @path)
42   - rescue NoMethodError, InvalidPathError
43   - not_found!
44   - end
45 22 end
... ...
app/controllers/blob_controller.rb
... ... @@ -16,7 +16,7 @@ class BlobController &lt; ApplicationController
16 16 before_filter :authorize_code_access!
17 17 before_filter :require_non_empty_project
18 18  
19   - before_filter :define_tree_vars
  19 + before_filter :assign_ref_vars
20 20  
21 21 def show
22 22 if @tree.is_blob?
... ... @@ -37,26 +37,4 @@ class BlobController &lt; ApplicationController
37 37 not_found!
38 38 end
39 39 end
40   -
41   - private
42   -
43   - def define_tree_vars
44   - @ref, @path = extract_ref(params[:id])
45   -
46   - @id = File.join(@ref, @path)
47   - @repo = @project.repo
48   - @commit = CommitDecorator.decorate(@project.commit(@ref))
49   -
50   - @tree = Tree.new(@commit.tree, @project, @ref, @path)
51   - @tree = TreeDecorator.new(@tree)
52   -
53   - raise InvalidPathError if @tree.invalid?
54   -
55   - @hex_path = Digest::SHA1.hexdigest(@path)
56   -
57   - @history_path = project_tree_path(@project, @id)
58   - @logs_path = logs_file_project_ref_path(@project, @ref, @path)
59   - rescue NoMethodError, InvalidPathError
60   - not_found!
61   - end
62 40 end
... ...
app/controllers/tree_controller.rb
... ... @@ -15,35 +15,18 @@ class TreeController &lt; ApplicationController
15 15 before_filter :authorize_code_access!
16 16 before_filter :require_non_empty_project
17 17  
18   - before_filter :define_tree_vars
  18 + before_filter :assign_ref_vars
19 19  
20 20 def show
  21 + @hex_path = Digest::SHA1.hexdigest(@path)
  22 +
  23 + @history_path = project_tree_path(@project, @id)
  24 + @logs_path = logs_file_project_ref_path(@project, @ref, @path)
  25 +
21 26 respond_to do |format|
22 27 format.html
23 28 # Disable cache so browser history works
24 29 format.js { no_cache_headers }
25 30 end
26 31 end
27   -
28   - private
29   -
30   - def define_tree_vars
31   - @ref, @path = extract_ref(params[:id])
32   -
33   - @id = File.join(@ref, @path)
34   - @repo = @project.repo
35   - @commit = CommitDecorator.decorate(@project.commit(@ref))
36   -
37   - @tree = Tree.new(@commit.tree, @project, @ref, @path.gsub(/^\//, ''))
38   - @tree = TreeDecorator.new(@tree)
39   -
40   - raise InvalidPathError if @tree.invalid?
41   -
42   - @hex_path = Digest::SHA1.hexdigest(@path)
43   -
44   - @history_path = project_tree_path(@project, @id)
45   - @logs_path = logs_file_project_ref_path(@project, @ref, @path)
46   - rescue NoMethodError, InvalidPathError
47   - not_found!
48   - end
49 32 end
... ...
app/views/tree/show.html.haml
1 1 = render "head"
2   -#tree-holder= render partial: "tree", locals: {repo: @repo, commit: @commit, tree: @tree}
  2 +#tree-holder= render partial: "tree", locals: {commit: @commit, tree: @tree}
3 3  
4 4 :javascript
5 5 $(function() {
... ...
app/views/tree/show.js.haml
1 1 :plain
2 2 // Load Files list
3   - $("#tree-holder").html("#{escape_javascript(render(partial: "tree", locals: {repo: @repo, commit: @commit, tree: @tree}))}");
  3 + $("#tree-holder").html("#{escape_javascript(render(partial: "tree", locals: {commit: @commit, tree: @tree}))}");
4 4 $("#tree-content-holder").show("slide", { direction: "right" }, 150);
5 5 $('.project-refs-form #path').val("#{@path}");
6 6  
... ...
lib/ref_extractor.rb
... ... @@ -67,4 +67,31 @@ module RefExtractor
67 67  
68 68 pair
69 69 end
  70 +
  71 + # Assigns common instance variables for views working with Git tree-ish objects
  72 + #
  73 + # Assignments are:
  74 + #
  75 + # - @id - A string representing the joined ref and path
  76 + # - @ref - A string representing the ref (e.g., the branch, tag, or commit SHA)
  77 + # - @path - A string representing the filesystem path
  78 + # - @commit - A CommitDecorator representing the commit from the given ref
  79 + # - @tree - A TreeDecorator representing the tree at the given ref/path
  80 + #
  81 + # Automatically renders `not_found!` if a valid tree could not be resolved
  82 + # (e.g., when a user inserts an invalid path or ref).
  83 + def assign_ref_vars
  84 + @ref, @path = extract_ref(params[:id])
  85 +
  86 + @id = File.join(@ref, @path)
  87 +
  88 + @commit = CommitDecorator.decorate(@project.commit(@ref))
  89 +
  90 + @tree = Tree.new(@commit.tree, @project, @ref, @path)
  91 + @tree = TreeDecorator.new(@tree)
  92 +
  93 + raise InvalidPathError if @tree.invalid?
  94 + rescue NoMethodError, InvalidPathError
  95 + not_found!
  96 + end
70 97 end
... ...