Commit 3be6de1e810b97e4194aab7068145f47d3686abd

Authored by Paulo Meireles
1 parent 1f34a5b4

[Mezuro] Refactoring project content, views and controller (profile)

plugins/mezuro/controllers/mezuro_plugin_profile_controller.rb
1 1 class MezuroPluginProfileController < ProfileController
2 2  
3 3 append_view_path File.join(File.dirname(__FILE__) + '/../views')
4   -
  4 +
5 5 def project_state
6   - content = profile.articles.find(params[:id])
7   - project = content.project
  6 + @content = profile.articles.find(params[:id])
  7 + project = @content.project
8 8 state = project.error.nil? ? project.state : "ERROR"
9 9 render :text => state
10 10 end
11 11  
12 12 def project_error
13   - content = profile.articles.find(params[:id])
14   - project = content.project
15   - render :partial => 'content_viewer/project_error', :locals => { :project => project }
  13 + @content = profile.articles.find(params[:id])
  14 + @project = @content.project
  15 + render :partial => 'content_viewer/project_error'
16 16 end
17 17  
18 18 def project_result
19   - content = profile.articles.find(params[:id])
  19 + @content = profile.articles.find(params[:id])
20 20 date = params[:date]
21   - project_result = date.nil? ? content.project_result : content.get_date_result(date)
22   - project = content.project
23   - render :partial => 'content_viewer/project_result', :locals => { :project_result => project_result}
  21 + @project_result = date.nil? ? @content.project_result : @content.get_date_result(date)
  22 + render :partial => 'content_viewer/project_result'
24 23 end
25 24  
26 25 def module_result
27   - content = profile.articles.find(params[:id])
  26 + @content = profile.articles.find(params[:id])
28 27 date = params[:date]
29   - date.nil? ? content.project_result : content.get_date_result(date)
30   - module_result = content.module_result(params[:module_name])
31   - render :partial => 'content_viewer/module_result', :locals => { :module_result => module_result}
  28 + date.nil? ? @content.project_result : @content.get_date_result(date)
  29 + @module_result = @content.module_result(params[:module_name])
  30 + render :partial => 'content_viewer/module_result'
32 31 end
33 32  
34 33 def project_tree
35   - content = profile.articles.find(params[:id])
  34 + @content = profile.articles.find(params[:id])
36 35 date = params[:date]
37   - project_result = date.nil? ? content.project_result : content.get_date_result(date)
38   - source_tree = project_result.node_of(params[:module_name])
39   - render :partial =>'content_viewer/source_tree', :locals => { :source_tree => source_tree, :project_name => content.project.name}
  36 + project_result = date.nil? ? @content.project_result : @content.get_date_result(date)
  37 + @project_name = @content.project.name
  38 + @source_tree = project_result.node_of(params[:module_name])
  39 + render :partial =>'content_viewer/source_tree'
40 40 end
41 41  
42 42 def module_metrics_history
43 43 metric_name = params[:metric_name]
44   - content = profile.articles.find(params[:id])
45   - module_history = content.result_history(params[:module_name])
46   - score_history = (module_history.collect { |module_result| (module_result.metric_results.select { |metric_result| metric_result.metric.name.delete("() ") == metric_name })[0] }).collect { |metric_result| metric_result.value }
47   - render :partial => 'content_viewer/score_history', :locals => {:score_history => score_history}
  44 + @content = profile.articles.find(params[:id])
  45 + module_history = @content.result_history(params[:module_name])
  46 + @score_history = filtering_metric_history(metric_name, module_history)
  47 + render :partial => 'content_viewer/score_history'
48 48 end
49 49  
50 50 def module_grade_history
51   - content = profile.articles.find(params[:id])
52   - modules_results = content.result_history(params[:module_name])
53   - score_history = modules_results.collect { |module_result| module_result.grade }
54   - render :partial => 'content_viewer/score_history', :locals => {:score_history => score_history}
  51 + @content = profile.articles.find(params[:id])
  52 + modules_results = @content.result_history(params[:module_name])
  53 + @score_history = modules_results.collect { |module_result| module_result.grade }
  54 + render :partial => 'content_viewer/score_history'
  55 + end
  56 +
  57 + private
  58 +
  59 + def filtering_metric_history(metric_name, module_history)
  60 + metric_history = module_history.collect do |module_result|
  61 + module_result.metric_results.select do |metric_result|
  62 + metric_result.metric.name.delete("() ") == metric_name
  63 + end
  64 + end
  65 + metric_history[0].collect{ |metric_result| metric_result.value }
55 66 end
56 67 end
... ...
plugins/mezuro/lib/mezuro_plugin/project_content.rb
1 1 class MezuroPlugin::ProjectContent < Article
2   - validate :validate_kalibro_project_name
3   -
  2 + validate_on_create :validate_kalibro_project_name
  3 + validate_on_create :validate_repository_url
4 4 def self.short_description
5 5 'Kalibro project'
6 6 end
... ... @@ -20,17 +20,29 @@ class MezuroPlugin::ProjectContent &lt; Article
20 20  
21 21  
22 22 def project
23   - @project ||= Kalibro::Client::ProjectClient.project(name)
  23 + begin
  24 + @project ||= Kalibro::Client::ProjectClient.project(name)
  25 + rescue Exception => error
  26 + errors.add_to_base(error.message)
  27 + end
24 28 end
25 29  
26 30 def project_result
27   - @project_result ||= Kalibro::Client::ProjectResultClient.last_result(name)
  31 + begin
  32 + @project_result ||= Kalibro::Client::ProjectResultClient.last_result(name)
  33 + rescue Exception => error
  34 + errors.add_to_base(error.message)
  35 + end
28 36 end
29 37  
30 38 def get_date_result(date)
31   - client = Kalibro::Client::ProjectResultClient.new
32   - @project_result ||= client.has_results_before(name, date) ? client.last_result_before(name, date) :
  39 + begin
  40 + client = Kalibro::Client::ProjectResultClient.new
  41 + @project_result ||= client.has_results_before(name, date) ? client.last_result_before(name, date) :
33 42 client.first_result_after(name, date)
  43 + rescue Exception => error
  44 + errors.add_to_base(error.message)
  45 + end
34 46 end
35 47  
36 48 def module_result(module_name)
... ... @@ -48,24 +60,47 @@ client.first_result_after(name, date)
48 60 private
49 61  
50 62 def validate_kalibro_project_name
51   - existing = Kalibro::Client::ProjectClient.new.project_names
  63 + begin
  64 + existing = Kalibro::Client::ProjectClient.new.project_names
  65 + rescue Exception => error
  66 + errors.add_to_base(error.message)
  67 + end
52 68  
53   - if existing.include?(name)
  69 + if existing.any?{|existing_name| existing_name.casecmp(name)==0} # existing.include?(name) + case insensitive
54 70 errors.add_to_base("Project name already exists in Kalibro")
55 71 end
56 72 end
57   -
  73 +
  74 + def validate_repository_url
  75 + if(repository_url.nil? || repository_url == "")
  76 + errors.add_to_base("Repository URL is mandatory")
  77 + end
  78 + end
  79 +
58 80 def send_project_to_service
59   - Kalibro::Client::ProjectClient.save(self)
60   - Kalibro::Client::KalibroClient.process_project(name, periodicity_in_days)
  81 + begin
  82 + Kalibro::Client::ProjectClient.save(self)
  83 + Kalibro::Client::KalibroClient.process_project(name, periodicity_in_days)
  84 + rescue Exception => error
  85 + errors.add_to_base(error.message)
  86 + end
  87 +
61 88 end
62 89  
63 90 def remove_project_from_service
64   - Kalibro::Client::ProjectClient.remove(name)
  91 + begin
  92 + Kalibro::Client::ProjectClient.remove(name)
  93 + rescue Exception => error
  94 + errors.add_to_base(error.message)
  95 + end
  96 +
65 97 end
66 98  
67 99 def module_result_client
68   - @module_result_client ||= Kalibro::Client::ModuleResultClient.new
  100 + begin
  101 + @module_result_client ||= Kalibro::Client::ModuleResultClient.new
  102 + rescue Exception => error
  103 + errors.add_to_base(error.message)
  104 + end
69 105 end
70 106 end
71   -
... ...
plugins/mezuro/public/javascripts/project_content.js
... ... @@ -5,6 +5,7 @@ jQuery(function (){
5 5 jQuery('[data-show]').live("click", toggle_mezuro);
6 6 jQuery('[show-metric-history]').live("click", display_metric_history);
7 7 jQuery('[show-grade-history]').live("click", display_grade_history);
  8 + jQuery('#project_date_submit').live("click", reloadProjectWithDate);
8 9 showLoadingProcess(true);
9 10 showProjectContent();
10 11 });
... ... @@ -55,8 +56,17 @@ function reloadProjectWithDate(){
55 56 var month = jQuery("#project_date_month").val();
56 57 var year = jQuery("#project_date_year").val();
57 58  
58   - var date = year + "-" + month + "-" + day + "T00:00:00+00:00";
  59 + if(day.length == 1)
  60 + day = "0" + day;
  61 + if(month.length == 1)
  62 + month = "0" + month;
59 63  
  64 + var date = new Date(year + "-" + month + "-" + day + "T00:00:00+00:00");
  65 +
  66 + if(isNaN(date)){
  67 + alert("Invalid date! " + date);
  68 + return false;
  69 + }
60 70 reloadProject(date);
61 71 return false;
62 72 }
... ...
plugins/mezuro/test/functional/mezuro_plugin_profile_controller_test.rb
... ... @@ -6,6 +6,7 @@ require &quot;#{RAILS_ROOT}/plugins/mezuro/test/fixtures/error_fixtures&quot;
6 6 require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/base_tool_fixtures"
7 7 require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/native_metric_fixtures"
8 8 require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/metric_configuration_fixtures"
  9 +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/repository_fixtures"
9 10  
10 11 class MezuroPluginProfileControllerTest < ActionController::TestCase
11 12  
... ... @@ -17,6 +18,7 @@ class MezuroPluginProfileControllerTest &lt; ActionController::TestCase
17 18  
18 19 @project_result = ProjectResultFixtures.qt_calculator
19 20 @module_result = ModuleResultFixtures.create
  21 + @repository_url = RepositoryFixtures.qt_calculator.address
20 22 @project = @project_result.project
21 23 @name = @project.name
22 24  
... ... @@ -66,7 +68,6 @@ class MezuroPluginProfileControllerTest &lt; ActionController::TestCase
66 68 should 'get project results without date' do
67 69 create_project_content
68 70 Kalibro::Client::ProjectResultClient.expects(:last_result).with(@name).returns(@project_result)
69   - Kalibro::Client::ProjectClient.expects(:project).with(@name).returns(@project)
70 71 get :project_result, :profile => @profile.identifier, :id => @content.id
71 72 assert_response 200
72 73 assert_select('h4', 'Last Result')
... ... @@ -75,7 +76,6 @@ class MezuroPluginProfileControllerTest &lt; ActionController::TestCase
75 76 should 'get project results from a specific date' do
76 77 create_project_content
77 78 mock_project_result
78   - Kalibro::Client::ProjectClient.expects(:project).with(@name).returns(@project)
79 79 get :project_result, :profile => @profile.identifier, :id => @content.id, :date => @project_result.date
80 80 assert_response 200
81 81 end
... ... @@ -90,7 +90,6 @@ class MezuroPluginProfileControllerTest &lt; ActionController::TestCase
90 90 mock_module_result
91 91 Kalibro::Client::ProjectResultClient.expects(:last_result).with(@name).returns(@project_result)
92 92 Kalibro::Client::ProjectClient.expects(:project).with(@name).returns(@project)
93   -
94 93 get :module_result, :profile => @profile.identifier, :id => @content.id, :module_name => @name
95 94 assert_response 200
96 95 assert_select('h5', 'Metric results for: Qt-Calculator (APPLICATION)')
... ... @@ -157,6 +156,7 @@ class MezuroPluginProfileControllerTest &lt; ActionController::TestCase
157 156 @content = MezuroPlugin::ProjectContent.new(:profile => @profile, :name => @name)
158 157 @content.expects(:send_project_to_service).returns(nil)
159 158 Kalibro::Client::ProjectClient.expects(:new).returns(client)
  159 + @content.repository_url = @repository_url
160 160 client.expects(:project_names).returns([])
161 161 @content.save
162 162 end
... ...
plugins/mezuro/views/cms/mezuro_plugin/_project_content.html.erb
... ... @@ -15,8 +15,11 @@
15 15 <%= hidden_field_tag 'id', @article.id %>
16 16  
17 17 <%= required_fields_message %>
18   -
19   -<%= required f.text_field(:name) %>
  18 +<% if !@project.nil? && !@article.id.nil? %>
  19 + <%= required f.text_field(:name, :disabled => 'true') %>
  20 +<% else %>
  21 + <%= required f.text_field(:name) %>
  22 +<% end %>
20 23  
21 24 <%= f.text_field :license %><br/>
22 25  
... ... @@ -31,9 +34,14 @@
31 34  
32 35 <% @configuration_names = Kalibro::Client::ConfigurationClient.new.configuration_names.sort %>
33 36 <% @selected = (@project.nil? ? @configuration_names[0] : @project.configuration_name) %>
34   -<%= required labelled_form_field _('Configuration'),
35   - f.select(:configuration_name, @configuration_names, {:selected => @selected}) %><br/>
36 37  
  38 +<% if !@project.nil? && !@article.id.nil? %>
  39 + <%= required labelled_form_field _('Configuration'),
  40 + f.select(:configuration_name, @configuration_names, {:selected => @selected}, :disabled => 'true') %>
  41 +<% else %>
  42 + <%= required labelled_form_field _('Configuration'),
  43 + f.select(:configuration_name, @configuration_names, {:selected => @selected}) %><br/>
  44 +<% end %>
37 45  
38 46 <% selected = (@project.nil? ? 0 : @kalibro_client.process_period(@article.title).to_i) %>
39 47 <%= required labelled_form_field _('Periodic Avaliation'),
... ...
plugins/mezuro/views/content_viewer/_module_result.rhtml
1   -<% the_module = module_result.module %>
2   -<% module_label = "#{the_module.name} (#{the_module.granularity})" %>
  1 +<% unless @content.errors[:base].nil? %>
  2 + <%= @content.errors[:base] %>
  3 +<% else %>
  4 + <% the_module = @module_result.module %>
  5 + <% module_label = "#{the_module.name} (#{the_module.granularity})" %>
3 6  
4   -<h5><%= _('Metric results for: ') + module_label %> </h5>
  7 + <h5><%= _('Metric results for: ') + module_label %> </h5>
5 8  
6   -<hr/>
7   -<div class="zoomable-image">
8   -<table>
9   - <thead>
10   - <tr>
11   - <th>Metric</th>
12   - <th>Value</th>
13   - <th>Weight</th>
14   - <th>Threshold</th>
15   - </tr>
16   - </thead>
17   - <tbody>
18   - <% module_result.metric_results.each do |metric_result| %>
19   - <% range = metric_result.range %>
20   - <% if !range.nil? %>
21   - <tr>
22   - <td><a href="#" data-show=".<%= MezuroPlugin::Helpers::ContentViewerHelper.format_name(metric_result) %>"><%= metric_result.metric.name %></a></td>
23   - <td><%= MezuroPlugin::Helpers::ContentViewerHelper.format_grade(metric_result.value) %></td>
24   - <td><%= metric_result.weight %></td>
25   - <td style="background-color: #<%= range.color[2..-1] %>"><%= range.label %></td>
26   - </tr>
27   - <tr class="<%= MezuroPlugin::Helpers::ContentViewerHelper.format_name(metric_result) %>" style="display: none;">
28   - <td colspan="3">
29   - <div id='historical-<%= MezuroPlugin::Helpers::ContentViewerHelper.format_name(metric_result) %>'>
30   - <a href="#" show-metric-history="<%= MezuroPlugin::Helpers::ContentViewerHelper.format_name(metric_result) %>" data-module-name="<%= the_module.name %>" data-metric-name="<%= MezuroPlugin::Helpers::ContentViewerHelper.format_name(metric_result) %>"> <p style="text-indent: 3em;"> Get Historical Values </p> </a>
31   - </div>
32   - </td>
33   - <td align="right">
34   - <%= range.comments.nil? ? '' : range.comments %>
35   - </td>
36   - </tr>
  9 + <hr/>
  10 + <div class="zoomable-image">
  11 + <table>
  12 + <thead>
  13 + <tr>
  14 + <th>Metric</th>
  15 + <th>Value</th>
  16 + <th>Weight</th>
  17 + <th>Threshold</th>
  18 + </tr>
  19 + </thead>
  20 + <tbody>
  21 + <% @module_result.metric_results.each do |metric_result| %>
  22 + <% range = metric_result.range %>
  23 + <% if !range.nil? %>
  24 + <tr>
  25 + <td><a href="#" data-show=".<%= MezuroPlugin::Helpers::ContentViewerHelper.format_name(metric_result) %>"><%= metric_result.metric.name %></a></td>
  26 + <td><%= MezuroPlugin::Helpers::ContentViewerHelper.format_grade(metric_result.value) %></td>
  27 + <td><%= metric_result.weight %></td>
  28 + <td style="background-color: #<%= range.color[2..-1] %>"><%= range.label %></td>
  29 + </tr>
  30 + <tr class="<%= MezuroPlugin::Helpers::ContentViewerHelper.format_name(metric_result) %>" style="display: none;">
  31 + <td colspan="3">
  32 + <div id='historical-<%= MezuroPlugin::Helpers::ContentViewerHelper.format_name(metric_result) %>'>
  33 + <a href="#" show-metric-history="<%= MezuroPlugin::Helpers::ContentViewerHelper.format_name(metric_result) %>" data-module-name="<%= the_module.name %>" data-metric-name="<%= MezuroPlugin::Helpers::ContentViewerHelper.format_name(metric_result) %>"> <p style="text-indent: 3em;"> Get Historical Values </p> </a>
  34 + </div>
  35 + </td>
  36 + <td align="right">
  37 + <%= range.comments.nil? ? '' : range.comments %>
  38 + </td>
  39 + </tr>
  40 + <% end %>
37 41 <% end %>
38   - <% end %>
39   - </tbody>
40   - <tfoot>
41   - <tr>
42   - <td colspan = "3">
43   - <div id='historical-grade'></div>
44   - </td>
45   - <td align = "right">
46   - <a href="#" show-grade-history="<%= module_result.module.name %>" data-module-name="<%= the_module.name%>" >
47   - <strong>
48   - <%= _('Grade:') %>
49   - <%= "%.02f" % module_result.grade %>
50   - </strong>
51   - </a>
52   - </td>
53   - </tr>
54   - </tfoot>
55   -</table>
56   -</div>
  42 + </tbody>
  43 + <tfoot>
  44 + <tr>
  45 + <td colspan = "3">
  46 + <div id='historical-grade'></div>
  47 + </td>
  48 + <td align = "right">
  49 + <a href="#" show-grade-history="<%= @module_result.module.name %>" data-module-name="<%= the_module.name%>" >
  50 + <strong>
  51 + <%= _('Grade:') %>
  52 + <%= "%.02f" % @module_result.grade %>
  53 + </strong>
  54 + </a>
  55 + </td>
  56 + </tr>
  57 + </tfoot>
  58 + </table>
  59 + </div>
  60 +<% end %>
... ...
plugins/mezuro/views/content_viewer/_project_error.rhtml
1 1 <h3><%= _('ERROR') %></h3>
2 2 <p>
3   - <%= "State when error ocurred: #{project.state}" %>
  3 + <%= "State when error ocurred: #{@project.state}" %>
4 4 <br/>
5   - <% error = project.error %>
  5 + <% error = @project.error %>
6 6 <%= error.message %>
7 7 <ul>
8 8 <% error.stack_trace.each do |trace| %>
... ...
plugins/mezuro/views/content_viewer/_project_result.rhtml
1   -
2   -<% form_for :project_date, :html=>{:id=>"project_history_date"} do |f| %>
3   - <%= f.label :day, "Choose project date:" %>
  1 +<% unless @content.errors[:base].nil? %>
  2 + <%= @content.errors[:base] %>
  3 +<% else %>
  4 + <% form_for :project_date, :html=>{:id=>"project_history_date"} do |f| %>
  5 + <%= f.label :day, "Choose project date:" %>
4 6  
5   -<table>
6   - <tr>
7   - <td>
8   - Day
9   - </td>
10   - <td>
11   - Month
12   - </td>
13   - <td>
14   - Year
15   - </td>
16   - </tr>
17   - <tr>
18   - <td>
19   - <%= f.text_field :day, :size => 1, :maxlength => 2, :placeholder =>"dd" %>
20   - </td>
21   - <td>
22   - <%= f.text_field :month, :size => 1, :maxlength => 2, :placeholder =>"mm" %>
23   - </td>
24   - <td>
25   - <%= f.text_field :year, :size => 1, :maxlength => 4, :placeholder =>"yyyy" %>
26   - </td>
27   - </tr>
28   -</table>
29   - <%= f.submit "Refresh" %>
30   -<% end %>
  7 + <table>
  8 + <tr>
  9 + <td>
  10 + Day
  11 + </td>
  12 + <td>
  13 + Month
  14 + </td>
  15 + <td>
  16 + Year
  17 + </td>
  18 + </tr>
  19 + <tr>
  20 + <td>
  21 + <%= f.text_field :day, :size => 1, :maxlength => 2, :placeholder =>"dd" %>
  22 + </td>
  23 + <td>
  24 + <%= f.text_field :month, :size => 1, :maxlength => 2, :placeholder =>"mm" %>
  25 + </td>
  26 + <td>
  27 + <%= f.text_field :year, :size => 1, :maxlength => 4, :placeholder =>"yyyy" %>
  28 + </td>
  29 + </tr>
  30 + </table>
  31 + <%= f.submit "Refresh" %>
  32 + <% end %>
31 33  
32   -
33   -<h4><%= _('Last Result') %></h4>
  34 +
  35 + <h4><%= _('Last Result') %></h4>
34 36  
35   -<table>
36   - <tr>
37   - <td><%= _('Date') %></td>
38   - <td><%= project_result.date %></td>
39   - </tr>
40   - <tr>
41   - <td><%= _('Load time') %></td>
42   - <td><%= project_result.formatted_load_time %></td>
43   - </tr>
44   - <tr>
45   - <td><%= _('Analysis time') %></td>
46   - <td><%= project_result.formatted_analysis_time %></td>
47   - </tr>
48   -</table>
  37 + <table>
  38 + <tr>
  39 + <td><%= _('Date') %></td>
  40 + <td><%= @project_result.date %></td>
  41 + </tr>
  42 + <tr>
  43 + <td><%= _('Load time') %></td>
  44 + <td><%= @project_result.formatted_load_time %></td>
  45 + </tr>
  46 + <tr>
  47 + <td><%= _('Analysis time') %></td>
  48 + <td><%= @project_result.formatted_analysis_time %></td>
  49 + </tr>
  50 + </table>
  51 +<% end %>
... ...
plugins/mezuro/views/content_viewer/_score_history.rhtml
1   -<%= image_tag(MezuroPlugin::Helpers::ContentViewerHelper.generate_chart(score_history)) %>
  1 +<%= image_tag(MezuroPlugin::Helpers::ContentViewerHelper.generate_chart(@score_history)) %>
2 2  
... ...
plugins/mezuro/views/content_viewer/_source_tree.rhtml
1   -<h4><%= _('Source tree') %></h4>
2   -<% module_name = source_tree.module.name %>
3   -<% module_label = "#{module_name} (#{source_tree.module.granularity})" %>
  1 +<% unless @content.errors[:base].nil? %>
  2 + <%= @content.errors[:base] %>
  3 +<% else %>
  4 + <h4><%= _('Source tree') %></h4>
  5 + <% module_name = @source_tree.module.name %>
  6 + <% module_label = "#{module_name} (#{@source_tree.module.granularity})" %>
4 7  
5   -<p><h2 class="path">
6   - <% if module_name != project_name %>
7   - <a href="#" class="source-tree-link" data-module-name="<%= project_name %>">
8   - <%= project_name %>
9   - </a>
10   - <% end %>
  8 + <p><h2 class="path">
  9 + <% if module_name != @project_name %>
  10 + <a href="#" class="source-tree-link" data-module-name="<%= @project_name %>">
  11 + <%= @project_name %>
  12 + </a>
  13 + <% end %>
11 14  
12 15  
13   - <% split_link = source_tree.module.ancestor_names %>
14   - <% split_link.each do |link| %>
15   - /<a href="#" class="source-tree-link" data-module-name="<%= link %>">
16   - <%= link.split(".").last %>
17   - </a>
  16 + <% split_link = @source_tree.module.ancestor_names %>
  17 + <% split_link.each do |link| %>
  18 + /<a href="#" class="source-tree-link" data-module-name="<%= link %>">
  19 + <%= link.split(".").last %>
  20 + </a>
  21 + <% end %>
  22 + </h2></p>
  23 +
  24 + <% if @source_tree.children %>
  25 + <table border="0" class="source-tree">
  26 + <% @source_tree.children.each do |child| %>
  27 + <% if child.module.granularity=='PACKAGE' %>
  28 + <tr>
  29 + <td class="icon"><%= image_tag('/plugins/mezuro/images/folder.png')%></td>
  30 + <td class="source-tree-text"><a href='#' class="source-tree-link" data-module-name="<%= child.module.name %>"><%= child.module.name %></a></td>
  31 + </tr>
  32 + <% else %>
  33 + <tr>
  34 + <td class="icon"><%= image_tag('/plugins/mezuro/images/file.png') %></td>
  35 + <td class="source-tree-text">
  36 + <a href='#' class="source-tree-link" data-module-name="<%= child.module.name %>">
  37 + <%= child.module.name %>
  38 + </a>
  39 + </td>
  40 + </tr>
  41 + <% end %>
  42 + <% end %>
  43 + </table>
18 44 <% end %>
19   -</h2></p>
20   -
21   -<% if source_tree.children %>
22   - <table border="0" class="source-tree">
23   - <% source_tree.children.each do |child| %>
24   - <% if child.module.granularity=='PACKAGE' %>
25   - <tr>
26   - <td class="icon"><%= image_tag('/plugins/mezuro/images/folder.png')%></td>
27   - <td class="source-tree-text"><a href='#' class="source-tree-link" data-module-name="<%= child.module.name %>"><%= child.module.name %></a></td>
28   - </tr>
29   - <% else %>
30   - <tr>
31   - <td class="icon"><%= image_tag('/plugins/mezuro/images/file.png') %></td>
32   - <td class="source-tree-text">
33   - <a href='#' class="source-tree-link" data-module-name="<%= child.module.name %>">
34   - <%= child.module.name %>
35   - </a>
36   - </td>
37   - </tr>
38   - <% end %>
39   - <% end %>
40   - </table>
41 45 <% end %>
... ...
plugins/mezuro/views/content_viewer/show_project.rhtml
1 1 <script src="/plugins/mezuro/javascripts/project_content.js" type="text/javascript"></script>
2 2  
3 3 <% @project = @page.project %>
4   -<% if (@project==nil) %>
5   - <h3>Warning:</h3>
6   - <p>This project doesn't exist on the Web Service. Do you want to <a href="/myprofile/<%= @page.profile.name %>/cms/destroy/<%= @page.id%>">delete</a> or <a href="/myprofile/<%= @page.profile.name %>/cms/edit/<%= @page.id%>">save it again</a>?</p>
  4 +<% unless @page.errors[:base].nil? %>
  5 + <%= @page.errors[:base] %>
7 6 <% else %>
8 7  
  8 + <% if (@project==nil) %>
  9 + <h3>Warning:</h3>
  10 + <p>This project doesn't exist on the Web Service. Do you want to <a href="/myprofile/<%= @page.profile.name %>/cms/destroy/<%= @page.id%>">delete</a> or <a href="/myprofile/<%= @page.profile.name %>/cms/edit/<%= @page.id%>">save it again</a>?</p>
  11 + <% else %>
9 12  
10   -<table>
11   - <tr>
12   - <td><%= _('Name') %></td>
13   - <td><%= @project.name %></td>
14   - </tr>
15   - <tr>
16   - <td><%= _('License') %></td>
17   - <td><%= @project.license %></td>
18   - </tr>
19   - <tr>
20   - <td><%= _('Description') %></td>
21   - <td><%= @project.description %></td>
22   - </tr>
23   - <tr>
24   - <td><%= _('Repository type') %></td>
25   - <td><%= @project.repository.type %></td>
26   - </tr>
27   - <tr>
28   - <td><%= _('Repository address') %></td>
29   - <td><%= @project.repository.address %></td>
30   - </tr>
31   - <tr>
32   - <td><%= _('Configuration') %></td>
33   - <td><%= @project.configuration_name %></td>
34   - </tr>
35   - <tr>
36   - <td><%= _('Periodicity') %></td>
37   - <td><%= MezuroPlugin::Helpers::ContentViewerHelper.get_periodicity_option(@page.periodicity_in_days) %></td>
38   - </tr>
39   - <tr>
40   - <td><%= _('Status')%></td>
41   - <td>
42   - <div id="project-state"><%= @project.state %></div>
43   - <div id="msg-time"></div>
44   - </td>
45   - </tr>
46   -</table>
47 13  
48   -<br />
  14 + <table>
  15 + <tr>
  16 + <td><%= _('Name') %></td>
  17 + <td><%= @project.name %></td>
  18 + </tr>
  19 + <tr>
  20 + <td><%= _('License') %></td>
  21 + <td><%= @project.license %></td>
  22 + </tr>
  23 + <tr>
  24 + <td><%= _('Description') %></td>
  25 + <td><%= @project.description %></td>
  26 + </tr>
  27 + <tr>
  28 + <td><%= _('Repository type') %></td>
  29 + <td><%= @project.repository.type %></td>
  30 + </tr>
  31 + <tr>
  32 + <td><%= _('Repository address') %></td>
  33 + <td><%= @project.repository.address %></td>
  34 + </tr>
  35 + <tr>
  36 + <td><%= _('Configuration') %></td>
  37 + <td><%= @project.configuration_name %></td>
  38 + </tr>
  39 + <tr>
  40 + <td><%= _('Periodicity') %></td>
  41 + <td><%= MezuroPlugin::Helpers::ContentViewerHelper.get_periodicity_option(@page.periodicity_in_days) %></td>
  42 + </tr>
  43 + <tr>
  44 + <td><%= _('Status')%></td>
  45 + <td>
  46 + <div id="project-state"><%= @project.state %></div>
  47 + <div id="msg-time"></div>
  48 + </td>
  49 + </tr>
  50 + </table>
49 51  
50   -<div id="project-result" data-profile="<%= @page.profile.identifier %>" data-content="<%= @page.id %>"
51   - data-project-name="<%= @project.name %>">
52   -</div>
53   -<div id="project-tree"></div>
54   -<div id="module-result">
55   -</div>
56   -<% end %>
  52 + <br />
57 53  
  54 + <div id="project-result" data-profile="<%= @page.profile.identifier %>" data-content="<%= @page.id %>"
  55 + data-project-name="<%= @project.name %>">
  56 + </div>
  57 + <div id="project-tree"></div>
  58 + <div id="module-result">
  59 + </div>
  60 + <% end %>
  61 +<% end %>
... ...