From 259f3e87ae36c548941683558c99994e8b12f212 Mon Sep 17 00:00:00 2001 From: Caio Salgado + Diego Araújo + Pedro Leal Date: Thu, 1 Mar 2012 23:16:58 +0300 Subject: [PATCH] [Mezuro] Refactored the source tree navegation with tests --- plugins/mezuro/controllers/mezuro_plugin_profile_controller.rb | 7 +++++-- plugins/mezuro/lib/kalibro/entities/module.rb | 8 ++++++-- plugins/mezuro/lib/kalibro/entities/project_result.rb | 33 +++++++++++++++++---------------- plugins/mezuro/test/fixtures/module_node_fixtures.rb | 8 ++++++-- plugins/mezuro/test/unit/kalibro/entities/project_result_test.rb | 13 +++++++++++-- 5 files changed, 45 insertions(+), 24 deletions(-) diff --git a/plugins/mezuro/controllers/mezuro_plugin_profile_controller.rb b/plugins/mezuro/controllers/mezuro_plugin_profile_controller.rb index a8311a7..fd25ef4 100644 --- a/plugins/mezuro/controllers/mezuro_plugin_profile_controller.rb +++ b/plugins/mezuro/controllers/mezuro_plugin_profile_controller.rb @@ -18,8 +18,11 @@ class MezuroPluginProfileController < ProfileController def project_result content = profile.articles.find(params[:id]) project_result = content.project_result - source_tree = project_result.subtree(params[:module_name]) - source_tree = project_result.source_tree if source_tree.nil? + if params[:module_name].nil? + source_tree = project_result.source_tree + else + source_tree = project_result.get_node(params[:module_name]) + end render :partial => 'content_viewer/project_result', :locals => { :project_result => project_result, :source_tree => source_tree } end diff --git a/plugins/mezuro/lib/kalibro/entities/module.rb b/plugins/mezuro/lib/kalibro/entities/module.rb index 29e1f4f..e2994a9 100644 --- a/plugins/mezuro/lib/kalibro/entities/module.rb +++ b/plugins/mezuro/lib/kalibro/entities/module.rb @@ -2,13 +2,17 @@ class Kalibro::Entities::Module < Kalibro::Entities::Entity attr_accessor :name, :granularity - def ancestor_names + def self.parent_names(name) path = [] ancestors = [] - @name.split(".").each do |token| + name.split(".").each do |token| path << token ancestors << path.join(".") end ancestors end + + def ancestor_names + Kalibro::Entities::Module.parent_names(@name) + end end diff --git a/plugins/mezuro/lib/kalibro/entities/project_result.rb b/plugins/mezuro/lib/kalibro/entities/project_result.rb index d5ed758..ac9c63d 100644 --- a/plugins/mezuro/lib/kalibro/entities/project_result.rb +++ b/plugins/mezuro/lib/kalibro/entities/project_result.rb @@ -14,22 +14,6 @@ class Kalibro::Entities::ProjectResult < Kalibro::Entities::Entity format_milliseconds(@load_time) end - def subtree(name) - find_subtree(@source_tree, name) - end - - def find_subtree(tree, name) - if tree.module.name == name - tree - elsif !tree.children.nil? - tree.children.each do |child| - found = find_subtree(child, name) - return found if !found.nil? - end - return nil - end - end - def formatted_analysis_time format_milliseconds(@analysis_time) end @@ -47,4 +31,21 @@ class Kalibro::Entities::ProjectResult < Kalibro::Entities::Entity ('%2d' % amount).sub(/\s/, '0') end + def get_node(module_name) + path = Kalibro::Entities::Module.parent_names(module_name) + parent = @source_tree + path.each do |node_name| + parent = get_leaf_from(parent, node_name) + end + return parent + end + + private + def get_leaf_from(node, module_name) + node.children.each do |child_node| + return child_node if child_node.module.name == module_name + end + nil + end + end diff --git a/plugins/mezuro/test/fixtures/module_node_fixtures.rb b/plugins/mezuro/test/fixtures/module_node_fixtures.rb index 3432057..a2c9bdc 100644 --- a/plugins/mezuro/test/fixtures/module_node_fixtures.rb +++ b/plugins/mezuro/test/fixtures/module_node_fixtures.rb @@ -3,7 +3,9 @@ class ModuleNodeFixtures def self.qt_calculator_tree node = Kalibro::Entities::ModuleNode.new node.module = ModuleFixtures.qt_calculator - node.children = [new_node('Dialog', 'CLASS'), new_node('main', 'CLASS')] + org_node = new_node('org', 'PACKAGE') + org_node.children = [new_node('org.Window', 'CLASS')] + node.children = [new_node('Dialog', 'CLASS'), new_node('main', 'CLASS'), org_node] node end @@ -11,7 +13,9 @@ class ModuleNodeFixtures {:module => ModuleFixtures.qt_calculator_hash, :child => [ {:module => {:name => 'Dialog', :granularity => 'CLASS'}}, - {:module => {:name => 'main', :granularity => 'CLASS'}} + {:module => {:name => 'main', :granularity => 'CLASS'}}, + {:module => {:name => 'org', :granularity => 'PACKAGE'}, + :child => [{:module => {:name => 'org.Window', :granularity => 'CLASS'}}]} ] } end diff --git a/plugins/mezuro/test/unit/kalibro/entities/project_result_test.rb b/plugins/mezuro/test/unit/kalibro/entities/project_result_test.rb index db9f138..44415e9 100644 --- a/plugins/mezuro/test/unit/kalibro/entities/project_result_test.rb +++ b/plugins/mezuro/test/unit/kalibro/entities/project_result_test.rb @@ -24,5 +24,14 @@ class ProjectResultTest < ActiveSupport::TestCase should 'retrieve formatted analysis time' do assert_equal '00:00:01', @result.formatted_analysis_time end - -end \ No newline at end of file + + should 'retrieve module node' do + node = @result.get_node("main") + assert_equal @hash[:source_tree][:child][1], node.to_hash + end + + should 'retrive complex module' do + node = @result.get_node("org.Window") + assert_equal @hash[:source_tree][:child][2][:child].first, node.to_hash + end +end -- libgit2 0.21.2