Class: VirtualTree
- Inherits:
- 
      Object
      
        - Object
- VirtualTree
 
- Defined in:
- lib/virtual_tree.rb
Instance Attribute Summary collapse
- 
  
    
      #commits  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute commits. 
- 
  
    
      #files  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute files. 
- 
  
    
      #issues  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute issues. 
- 
  
    
      #path  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute path. 
- 
  
    
      #previous_tree_id  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute previous_tree_id. 
- 
  
    
      #tree_id  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute tree_id. 
- 
  
    
      #trees  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute trees. 
Class Method Summary collapse
Instance Method Summary collapse
- #add_tree(tree) ⇒ Object
- #all_files ⇒ Object
- #as_json ⇒ Object
- #delete_file(file_path) ⇒ Object
- #get_file(file_path) ⇒ Object
- 
  
    
      #initialize(diff_tree, commit)  ⇒ VirtualTree 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    A new instance of VirtualTree. 
- #move_file(a_file_name, b_file_name) ⇒ Object
- #prune(diff_tree, commit) ⇒ Object
- 
  
    
      #save(commit)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    TODO: Figure out how to save only when something changes. 
- #set_file(file_path, file) ⇒ Object
- 
  
    
      #touch(diff_tree, commit)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    TODO: What happens when a tree moves??. 
Constructor Details
#initialize(diff_tree, commit) ⇒ VirtualTree
Returns a new instance of VirtualTree.
| 14 15 16 17 18 19 20 21 22 | # File 'lib/virtual_tree.rb', line 14 def initialize(diff_tree, commit) @path = diff_tree[:path] @tree_id = nil @previous_tree_id = nil @commits = [] @issues = [] @files = {} @trees = {} end | 
Instance Attribute Details
#commits ⇒ Object (readonly)
Returns the value of attribute commits.
| 10 11 12 | # File 'lib/virtual_tree.rb', line 10 def commits @commits end | 
#files ⇒ Object (readonly)
Returns the value of attribute files.
| 11 12 13 | # File 'lib/virtual_tree.rb', line 11 def files @files end | 
#issues ⇒ Object (readonly)
Returns the value of attribute issues.
| 9 10 11 | # File 'lib/virtual_tree.rb', line 9 def issues @issues end | 
#path ⇒ Object (readonly)
Returns the value of attribute path.
| 6 7 8 | # File 'lib/virtual_tree.rb', line 6 def path @path end | 
#previous_tree_id ⇒ Object (readonly)
Returns the value of attribute previous_tree_id.
| 8 9 10 | # File 'lib/virtual_tree.rb', line 8 def previous_tree_id @previous_tree_id end | 
#tree_id ⇒ Object (readonly)
Returns the value of attribute tree_id.
| 7 8 9 | # File 'lib/virtual_tree.rb', line 7 def tree_id @tree_id end | 
#trees ⇒ Object (readonly)
Returns the value of attribute trees.
| 12 13 14 | # File 'lib/virtual_tree.rb', line 12 def trees @trees end | 
Class Method Details
.from_json(tree_json) ⇒ Object
| 24 25 26 27 28 29 30 31 | # File 'lib/virtual_tree.rb', line 24 def self.from_json(tree_json) new_tree = VirtualTree.new({path: tree_json["path"]}, {}) new_tree.instance_variable_set(:@commits, tree_json["commits"]) new_tree.instance_variable_set(:@issues, tree_json["issues"]) new_tree.instance_variable_set(:@tree_id, tree_json["tree_id"]) new_tree.instance_variable_set(:@previous_tree_id, tree_json["previous_tree_id"]) new_tree end | 
Instance Method Details
#add_tree(tree) ⇒ Object
| 117 118 119 120 121 122 123 124 125 | # File 'lib/virtual_tree.rb', line 117 def add_tree(tree) tree_name = tree_name(tree.path) subtree = subtree(tree.path) if subtree.path == tree.path Loggr.instance.warn("Cannot add pre-existing tree: #{tree.path}") else subtree.trees[tree_name] = tree end end | 
#all_files ⇒ Object
| 74 75 76 77 78 79 | # File 'lib/virtual_tree.rb', line 74 def all_files() @trees .values .flat_map { |tree| tree.all_files() } .concat(@files.values) end | 
#as_json ⇒ Object
| 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | # File 'lib/virtual_tree.rb', line 127 def as_json() stats = @files .values .reduce(new_context()) do |acc, file| acc[:business_value] += file.business_value acc[:lines] += file.lines.count acc[:covered_lines] += file.covered_lines acc[:uncovered_lines] += file.uncovered_lines acc[:buggy_lines] += file.buggy_lines_total acc[:changes] += file.revisions_total acc[:errors] += file.errors_total acc end { path: @path, tree_id: @tree_id, previous_tree_id: @previous_tree_id, issues: @issues, commits: @commits, files: @files.values.map(&method(:file_json)) }.merge(stats) end | 
#delete_file(file_path) ⇒ Object
| 41 42 43 44 45 | # File 'lib/virtual_tree.rb', line 41 def delete_file(file_path) file_subtree(file_path) .files .delete(file_path) end | 
#get_file(file_path) ⇒ Object
| 33 34 35 | # File 'lib/virtual_tree.rb', line 33 def get_file(file_path) file_subtree(file_path).files[file_path] end | 
#move_file(a_file_name, b_file_name) ⇒ Object
| 47 48 49 50 51 | # File 'lib/virtual_tree.rb', line 47 def move_file(a_file_name, b_file_name) file = get_file(a_file_name) delete_file(a_file_name) set_file(b_file_name, file) end | 
#prune(diff_tree, commit) ⇒ Object
| 65 66 67 68 69 70 71 72 | # File 'lib/virtual_tree.rb', line 65 def prune(diff_tree, commit) return if diff_tree[:operation] != :delete tree_name = tree_name(diff_tree[:path]) subtree(file_tree_path(diff_tree[:path])) .trees .delete(tree_name) end | 
#save(commit) ⇒ Object
TODO: Figure out how to save only when something changes.
| 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | # File 'lib/virtual_tree.rb', line 82 def save(commit) trees_json = @trees .values .map { |tree| tree.save(commit) } json = trees_json .reduce(as_json()) do |acc, tree_json| [ :lines, :covered_lines, :uncovered_lines, :changes, :errors, :buggy_lines, :business_value ].each do |key| acc[key] += tree_json[key] end acc end relevant_lines = json[:covered_lines] + json[:uncovered_lines] json[:coverage_percent] = relevant_lines > 0 ? (json[:covered_lines] / relevant_lines.to_f * 100).round : 0 json[:trees] = trees_json.map(&method(:slim_tree_json)) tree_id = @tree_id.present? ? @tree_id : commit.id Cache.write_object(tree_id, json) json end | 
#set_file(file_path, file) ⇒ Object
| 37 38 39 | # File 'lib/virtual_tree.rb', line 37 def set_file(file_path, file) file_subtree(file_path).files[file_path] = file end | 
#touch(diff_tree, commit) ⇒ Object
TODO: What happens when a tree moves??
| 54 55 56 57 58 59 60 61 62 63 | # File 'lib/virtual_tree.rb', line 54 def touch(diff_tree, commit) if @path == diff_tree[:path] @previous_tree_id = diff_tree[:a_tree_id] @tree_id = diff_tree[:b_tree_id] @commits << commit.id @issues << commit.issue_id if commit.issue_id.present? else find_or_create_subtree!(diff_tree, commit).touch(diff_tree, commit) end end |