Commit e9001a6345b6e4863c3eaba4e27c898229e6f108

Authored by João da Silva
2 parents 55817d71 75412d95

Merge branch 'fix_edit_project' of gitorious.org:+mezuro/noosfero/mezuro into fix_edit_project

plugins/mezuro/controllers/mezuro_plugin_myprofile_controller.rb
... ... @@ -13,6 +13,7 @@ class MezuroPluginMyprofileController < ProfileController
13 13 @collector_name = params[:collector_name]
14 14 @collector = Kalibro::Client::BaseToolClient.new.base_tool(@collector_name)
15 15 end
  16 +
16 17 def new_metric_configuration
17 18 metric_name = params[:metric_name]
18 19 collector_name = params[:collector_name]
... ... @@ -20,18 +21,39 @@ class MezuroPluginMyprofileController < ProfileController
20 21 @metric = collector.supported_metrics.find {|metric| metric.name == metric_name}
21 22 @configuration_name = params[:configuration_name]
22 23 end
  24 +
23 25 def edit_metric_configuration
24 26 metric_name = params[:metric_name]
25 27 @configuration_name = params[:configuration_name]
26 28 @metric_configuration = Kalibro::Client::MetricConfigurationClient.new.metric_configuration(@configuration_name, metric_name)
27 29 @metric = @metric_configuration.metric
28 30 end
  31 +
  32 + def edit_compound_metric_configuration
  33 + metric_name = params[:metric_name]
  34 + @configuration_name = params[:configuration_name]
  35 + @metric_configuration = Kalibro::Client::MetricConfigurationClient.new.metric_configuration(@configuration_name, metric_name)
  36 + @metric = @metric_configuration.metric
  37 + end
  38 +
29 39 def create_metric_configuration
30 40 @configuration_name = params[:configuration_name]
31 41 metric_configuration = new_metric_configuration_instance
32 42 Kalibro::Client::MetricConfigurationClient.new.save(metric_configuration, @configuration_name)
33 43 redirect_to "/#{profile.identifier}/#{@configuration_name.downcase.gsub(/\s/, '-')}"
34 44 end
  45 +
  46 + def new_compound_metric
  47 + @configuration_name = params[:configuration_name]
  48 + @metric_configurations = Kalibro::Client::ConfigurationClient.new.configuration(@configuration_name).metric_configurations
  49 + end
  50 +
  51 + def create_compound_metric_configuration
  52 + @configuration_name = params[:configuration_name]
  53 + compound_metric_configuration = new_compound_metric_configuration_instance
  54 + Kalibro::Client::MetricConfigurationClient.new.save(compound_metric_configuration, @configuration_name)
  55 + redirect_to "/#{profile.identifier}/#{@configuration_name.downcase.gsub(/\s/, '-')}"
  56 + end
35 57  
36 58 def update_metric_configuration
37 59 @configuration_name = params[:configuration_name]
... ... @@ -41,6 +63,15 @@ class MezuroPluginMyprofileController < ProfileController
41 63 Kalibro::Client::MetricConfigurationClient.new.save(metric_configuration, @configuration_name)
42 64 redirect_to "/#{profile.identifier}/#{@configuration_name.downcase.gsub(/\s/, '-')}"
43 65 end
  66 +
  67 + def update_compound_metric_configuration
  68 + @configuration_name = params[:configuration_name]
  69 + metric_name = params[:metric][:name]
  70 + metric_configuration = Kalibro::Client::MetricConfigurationClient.new.metric_configuration(@configuration_name, metric_name)
  71 + assign_compound_metric_configuration_instance (metric_configuration)
  72 + Kalibro::Client::MetricConfigurationClient.new.save(metric_configuration, @configuration_name)
  73 + redirect_to "/#{profile.identifier}/#{@configuration_name.downcase.gsub(/\s/, '-')}"
  74 + end
44 75  
45 76 def new_range
46 77 @metric_name = params[:metric_name]
... ... @@ -89,7 +120,11 @@ class MezuroPluginMyprofileController < ProfileController
89 120 Kalibro::Client::MetricConfigurationClient.new.save(metric_configuration, configuration_name)
90 121 formatted_configuration_name = configuration_name.gsub(/\s/, '+')
91 122 formatted_metric_name = metric_name.gsub(/\s/, '+')
92   - redirect_to "/myprofile/#{profile.identifier}/plugins/mezuro/edit_metric_configuration?configuration_name=#{formatted_configuration_name}&metric_name=#{formatted_metric_name}"
  123 + if metric_configuration.metric.class == Kalibro::Entities::CompoundMetric
  124 + redirect_to "/myprofile/#{profile.identifier}/plugin/mezuro/edit_compound_metric_configuration?configuration_name=#{formatted_configuration_name}&metric_name=#{formatted_metric_name}"
  125 + else
  126 + redirect_to "/myprofile/#{profile.identifier}/plugin/mezuro/edit_metric_configuration?configuration_name=#{formatted_configuration_name}&metric_name=#{formatted_metric_name}"
  127 + end
93 128 end
94 129  
95 130 def remove_metric_configuration
... ... @@ -99,6 +134,8 @@ class MezuroPluginMyprofileController < ProfileController
99 134 redirect_to "/#{profile.identifier}/#{configuration_name.downcase.gsub(/\s/, '-')}"
100 135 end
101 136  
  137 +
  138 +
102 139 private
103 140  
104 141 def new_metric_configuration_instance
... ... @@ -106,8 +143,14 @@ class MezuroPluginMyprofileController < ProfileController
106 143 metric_configuration.metric = Kalibro::Entities::NativeMetric.new
107 144 assign_metric_configuration_instance (metric_configuration)
108 145 end
109   -
110   - def assign_metric_configuration_instance (metric_configuration)
  146 +
  147 + def new_compound_metric_configuration_instance
  148 + metric_configuration = Kalibro::Entities::MetricConfiguration.new
  149 + metric_configuration.metric = Kalibro::Entities::CompoundMetric.new
  150 + assign_compound_metric_configuration_instance (metric_configuration)
  151 + end
  152 +
  153 + def assign_metric_configuration_instance (metric_configuration)
111 154 metric_configuration.metric.name = params[:metric][:name]
112 155 metric_configuration.metric.description = params[:description]
113 156 metric_configuration.metric.origin = params[:metric][:origin]
... ... @@ -119,6 +162,17 @@ class MezuroPluginMyprofileController < ProfileController
119 162 metric_configuration
120 163 end
121 164  
  165 + def assign_compound_metric_configuration_instance (metric_configuration)
  166 + metric_configuration.metric.name = params[:metric_configuration][:metric_name]
  167 + metric_configuration.metric.description = params[:metric_configuration][:description]
  168 + metric_configuration.metric.scope = params[:metric_configuration][:scope]
  169 + metric_configuration.metric.script = params[:metric_configuration][:script]
  170 + metric_configuration.code = params[:metric_configuration][:code]
  171 + metric_configuration.weight = params[:metric_configuration][:weight]
  172 + metric_configuration.aggregation_form = params[:metric_configuration][:aggregation_form]
  173 + metric_configuration
  174 + end
  175 +
122 176 def new_range_instance
123 177 range = Kalibro::Entities::Range.new
124 178 range.beginning = params[:range][:beginning]
... ...
plugins/mezuro/lib/mezuro_plugin/helpers/content_viewer_helper.rb
... ... @@ -12,7 +12,7 @@ class MezuroPlugin::Helpers::ContentViewerHelper
12 12 def self.generate_chart(values)
13 13 Gchart.line(
14 14 :title_color => 'FF0000',
15   - :size => '700x180',
  15 + :size => '600x180',
16 16 :bg => {:color => 'efefef', :type => 'stripes'},
17 17 :line_colors => 'c4a000',
18 18 :data => values,
... ...
plugins/mezuro/lib/mezuro_plugin/project_content.rb
... ... @@ -29,7 +29,8 @@ class MezuroPlugin::ProjectContent < Article
29 29  
30 30 def get_date_result(date)
31 31 client = Kalibro::Client::ProjectResultClient.new
32   - @project_result ||= client.has_results_before(name, date) ? client.last_result_before(name, date) : client.first_result_after(name, date)
  32 + @project_result ||= client.has_results_before(name, date) ? client.last_result_before(name, date) :
  33 +client.first_result_after(name, date)
33 34 end
34 35  
35 36 def module_result(module_name)
... ... @@ -50,12 +51,11 @@ class MezuroPlugin::ProjectContent < Article
50 51  
51 52 private
52 53  
53   - #FIXME
54 54 def validate_kalibro_project_name
55   - begin
56   - Kalibro::Client::ProjectClient.project(name)
  55 + existing = Kalibro::Client::ProjectClient.new.project_names
  56 +
  57 + if existing.include?(name)
57 58 errors.add_to_base("Project name already exists in Kalibro")
58   - rescue
59 59 end
60 60 end
61 61  
... ...
plugins/mezuro/test/functional/mezuro_plugin_myprofile_controller_test.rb
... ... @@ -18,6 +18,7 @@ class MezuroPluginMyprofileControllerTest < ActionController::TestCase
18 18 @metric = NativeMetricFixtures.amloc
19 19 @metric_configuration_client = Kalibro::Client::MetricConfigurationClient.new
20 20 @metric_configuration = MetricConfigurationFixtures.amloc_configuration
  21 + @compound_metric_configuration = MetricConfigurationFixtures.sc_configuration
21 22 end
22 23  
23 24 should 'assign configuration name in choose_base_tool' do
... ... @@ -71,17 +72,30 @@ class MezuroPluginMyprofileControllerTest < ActionController::TestCase
71 72 assert_equal assigns(:configuration_name), "test name"
72 73 assert_response 302
73 74 end
74   -
75   - should 'test metric edition' do
  75 +
  76 + should 'test compound metric creation' do
76 77 Kalibro::Client::MetricConfigurationClient.expects(:new).returns(@metric_configuration_client)
77 78 @metric_configuration_client.expects(:save)
78 79 get :create_metric_configuration, :profile => @profile.identifier, :configuration_name => "test name", :description => @metric.description,
79   - :scope => @metric.scope, :language => @metric.language, :metric => { :name => @metric.name, :origin => @metric.origin},
80   - :metric_configuration => { :code => @metric_configuration.code, :weight => @metric_configuration.code, :aggregation => @metric_configuration.aggregation_form }
81   - assert_equal assigns(:configuration_name), "test name"
  80 + :scope => @metric.scope, :language => @metric.language, :metric => { :name => @metric.name},
  81 + :metric_configuration => { :script => @compound_metric_configuration.metric.script, :code => @compound_metric_configuration.code, :weight => @compound_metric_configuration.code, :aggregation => @compound_metric_configuration.aggregation_form}
82 82 assert_response 302
83 83 end
84 84  
  85 + should 'test metric edition' do
  86 + Kalibro::Client::MetricConfigurationClient.expects(:new).returns(@metric_configuration_client)
  87 + @metric_configuration_client.expects(:metric_configuration).with("test name","test metric name").returns(@metric_configuration)
  88 + get :edit_metric_configuration, :profile => @profile.identifier, :configuration_name => "test name", :metric_name => "test metric name"
  89 + assert_response 200
  90 + end
  91 +
  92 + should 'test compound metric edition' do
  93 + Kalibro::Client::MetricConfigurationClient.expects(:new).returns(@metric_configuration_client)
  94 + @metric_configuration_client.expects(:metric_configuration).with("test name","test metric name").returns(@compound_metric_configuration)
  95 + get :edit_compound_metric_configuration, :profile => @profile.identifier, :configuration_name => "test name", :metric_name => "test metric name"
  96 + assert_response 200
  97 + end
  98 +
85 99 should 'assign configuration name and metric name to new range' do
86 100 get :new_range, :profile => @profile.identifier, :configuration_name => "test name", :metric_name => @metric.name
87 101 assert_equal assigns(:configuration_name), "test name"
... ...
plugins/mezuro/test/functional/mezuro_plugin_profile_controller_test.rb
... ... @@ -21,6 +21,8 @@ class MezuroPluginProfileControllerTest < ActionController::TestCase
21 21 @name = @project.name
22 22  
23 23 @date = "2012-04-13T20:39:41+04:00"
  24 +
  25 + @date = "2012-04-13T20:39:41+04:00"
24 26 end
25 27  
26 28 should 'not find module result for inexistent project content' do
... ... @@ -65,9 +67,9 @@ class MezuroPluginProfileControllerTest < ActionController::TestCase
65 67  
66 68 should 'get project results from a specific date' do
67 69 create_project_content
68   - mock_project_result
69   - Kalibro::Client::ProjectClient.expects(:project).with(@name).returns(@project)
70   - get :project_result, :profile => @profile.identifier, :id => @content.id, :date => @project_result.date
  70 + mock_project_result
  71 + Kalibro::Client::ProjectClient.expects(:project).with(@name).returns(@project)
  72 + get :project_result, :profile => @profile.identifier, :id => @content.id, :date => @project_result.date
71 73 assert_response 200
72 74 end
73 75  
... ... @@ -121,7 +123,6 @@ class MezuroPluginProfileControllerTest < ActionController::TestCase
121 123 def create_project_content
122 124 @content = MezuroPlugin::ProjectContent.new(:profile => @profile, :name => @name)
123 125 @content.expects(:send_project_to_service).returns(nil)
124   - Kalibro::Client::ProjectClient.expects(:project).raises("there's no project named macaco")
125 126 @content.save
126 127 end
127 128  
... ...
plugins/mezuro/test/unit/mezuro_plugin/project_content_test.rb
... ... @@ -92,9 +92,11 @@ returns(module_result)
92 92 end
93 93  
94 94 should 'not save a project with an existing project name in kalibro' do
95   - Kalibro::Client::ProjectClient.expects(:project).with(@content.name).returns(mock)
  95 + client = mock
  96 + Kalibro::Client::ProjectClient.expects(:new).returns(client)
  97 + client.expects(:project_names).returns([@content.name])
96 98 @content.send :validate_kalibro_project_name
97   - assert_equal @content.errors.on_base, "Project name already exists in Kalibro"
  99 + assert_equal "Project name already exists in Kalibro", @content.errors.on_base
98 100 end
99 101  
100 102 private
... ...
plugins/mezuro/views/content_viewer/_module_result.rhtml
... ... @@ -25,12 +25,12 @@
25 25 <td style="background-color: #<%= range.color[2..-1] %>"><%= range.label %></td>
26 26 </tr>
27 27 <tr class="<%= metric_result.metric.name.delete("() ")%>" style="display: none;">
28   - <td colspan="4">
  28 + <td colspan="3">
29 29 <div id='historical-<%= metric_result.metric.name.delete("() ") %>'>
30 30 <a href="#" show-metric-history="<%= metric_result.metric.name.delete("() ") %>" data-module-name="<%= the_module.name %>" data-metric-name="<%= metric_result.metric.name.delete("() ") %>"> <p style="text-indent: 3em;"> Get Historical Values </p> </a>
31 31 </div>
32 32 </td>
33   - <td colspan="3" align="right">
  33 + <td align="right">
34 34 <%= range.comments.nil? ? '' : range.comments %>
35 35 </td>
36 36 </tr>
... ... @@ -39,10 +39,10 @@
39 39 </tbody>
40 40 <tfoot>
41 41 <tr>
42   - <td colspan = "1">
  42 + <td colspan = "3">
43 43 <div id='historical-grade'></div>
44 44 </td>
45   - <td colspan = "4" align = "right">
  45 + <td align = "right">
46 46 <a href="#" show-grade-history="<%= module_result.module.name %>" data-module-name="<%= the_module.name%>" >
47 47 <strong>
48 48 <%= _('Grade:') %>
... ...
plugins/mezuro/views/content_viewer/show_configuration.rhtml
... ... @@ -14,7 +14,7 @@
14 14  
15 15 <br/>
16 16  
17   -<%= link_to "#{image_tag ('/plugins/mezuro/images/plus.png')}Add Metric", :controller => "mezuro_plugin_myprofile",
  17 +<%= link_to "#{image_tag ('/plugins/mezuro/images/plus.png')}Add Metric", :controller => "mezuro_plugin_myprofile",
18 18 :action => "choose_base_tool", :params => {:configuration_name => @configuration.name} %><br/>
19 19  
20 20 <table>
... ... @@ -26,12 +26,24 @@
26 26 <% @configuration.metric_configurations.each do |metric_configuration| %>
27 27 <tr class="metric">
28 28 <td><%= metric_configuration.metric.name %></td>
29   - <td><%= metric_configuration.metric.origin %></td>
30   - <td><%= metric_configuration.code %></td>
31   - <td><%= link_to "Edit", :controller => "mezuro_plugin_myprofile", :action => "edit_metric_configuration", :params =>
32   - {:configuration_name => @configuration.name, :metric_name => metric_configuration.metric.name} %></td>
  29 + <% if metric_configuration.metric.instance_of? Kalibro::Entities::NativeMetric %>
  30 + <td>
  31 + <%= metric_configuration.metric.origin %>
  32 + </td>
  33 + <td><%= metric_configuration.code %></td>
  34 + <td><%= link_to "Edit", :controller => "mezuro_plugin_myprofile", :action => "edit_metric_configuration", :params =>
  35 + {:configuration_name => @configuration.name, :metric_name => metric_configuration.metric.name} %></td>
  36 + <% else %>
  37 + <td>
  38 + Compound Metric
  39 + </td>
  40 + <td><%= metric_configuration.code %></td>
  41 + <td><%= link_to "Edit", :controller => "mezuro_plugin_myprofile", :action => "edit_compound_metric_configuration", :params =>
  42 + {:configuration_name => @configuration.name, :metric_name => metric_configuration.metric.name} %></td>
  43 + <% end %>
  44 +
33 45 <td><%= link_to "Remove", :controller => "mezuro_plugin_myprofile", :action => "remove_metric_configuration", :params =>
34 46 {:configuration_name => @configuration.name, :metric_name => metric_configuration.metric.name} %></td>
35 47 </tr>
36   -<% end %>
  48 + <% end %>
37 49 </table>
... ...
plugins/mezuro/views/mezuro_plugin_myprofile/choose_base_tool.html.erb
1 1 <h2><%= @configuration_name%> Configuration</h2>
2 2  
  3 +<%= link_to "* New Compound Metric *", :controller => "mezuro_plugin_myprofile", :action => "new_compound_metric", :params =>
  4 +{:configuration_name => @configuration_name} %>
  5 +
3 6 <h5>Base Tools:</h5>
4 7 <table id="project_info">
5 8 <% @tool_names.base_tool_names.each do |collector_name| %>
... ...
plugins/mezuro/views/mezuro_plugin_myprofile/edit_compound_metric_configuration.html.erb 0 → 100644
... ... @@ -0,0 +1,76 @@
  1 +<h2><%= @configuration_name %> Configuration</h2>
  2 +
  3 +<% form_for :metric_configuration, :url => {:action =>"update_compound_metric_configuration", :controller => "mezuro_plugin_myprofile"}, :method => :get do |f| %>
  4 + <%= hidden_field_tag :configuration_name, @configuration_name %>
  5 + <%= hidden_field_tag :scope, @metric.scope %>
  6 +
  7 + <p>
  8 + <%= f.label :metric_name, "Metric Name:" %>
  9 + <%= @metric.name %>
  10 + <%= hidden_field_tag "metric[name]", @metric.name %>
  11 + </p>
  12 + <p>
  13 + <%= f.label :description, "Description:" %>
  14 + <%= text_field_tag "metric[description]", @metric.description %>
  15 + </p>
  16 + <p>
  17 + <%= f.label :scope, "Scope:" %>
  18 + <%= select_tag "metric[scope]", options_for_select([["Teste", "NIL"], ["Class", "CLASS"]], :selected => @metric.scope) %>
  19 + </p>
  20 + <p>
  21 + <%= f.label :code, "Code:" %>
  22 + <%= text_field_tag "metric[code]", @metric_configuration.code %>
  23 + </p>
  24 + <p>
  25 + <%= f.label :aggregation_form, "Aggregation Form:" %>
  26 + <%= f.select :aggregation_form, [["Average","AVERAGE"], ["Median", "MEDIAN"], ["Maximum", "MAXIMUM"], ["Minimum", "MINIMUM"],
  27 + ["Count", "COUNT"], ["Standard Deviation", "STANDARD_DEVIATION"]] %>
  28 + </p>
  29 + <p>
  30 + <%= f.label :weight, "Weight:" %>
  31 + <%= f.text_field :weight %>
  32 + </p>
  33 +
  34 + <p>
  35 + <%= f.label :script, "Script:" %>
  36 + <%= text_area_tag "metric[script]", @metric.script %>
  37 + </p>
  38 +
  39 + <p>
  40 + <%= f.submit "Save" %>
  41 + </p>
  42 +<% end %>
  43 +
  44 +
  45 +<h5> Ranges </h5><br/>
  46 +
  47 +<table id="ranges">
  48 + <tr>
  49 + <td>
  50 + Label
  51 + </td>
  52 + <td>
  53 + Beginning
  54 + </td>
  55 + <td>
  56 + End
  57 + </td>
  58 + <td>
  59 + Grade
  60 + </td>
  61 + <td>
  62 + Color
  63 + </td>
  64 + </tr>
  65 + <% if (@metric_configuration.ranges!=nil)
  66 + @metric_configuration.ranges.each do |range| %>
  67 + <%= render :partial => "range", :locals => {:range => range, :configuration_name => @configuration_name,
  68 + :metric_name => @metric_configuration.metric.name} %>
  69 + <% end
  70 + end %>
  71 +</table>
  72 +
  73 +<br/>
  74 +<%= link_to_remote "New Range", :url => {:action =>"new_range", :controller => "mezuro_plugin_myprofile", :configuration_name => @configuration_name, :metric_name => @metric.name} %>
  75 +<div id="range_form" style="display:none"></div>
  76 +
... ...
plugins/mezuro/views/mezuro_plugin_myprofile/new_compound_metric.html.erb 0 → 100644
... ... @@ -0,0 +1,55 @@
  1 +<h2><%= @configuration_name %> Configuration</h2>
  2 +
  3 +<% form_for :metric_configuration, :url => {:action =>"create_compound_metric_configuration",
  4 +:controller => "mezuro_plugin_myprofile"}, :method => :get do |f| %>
  5 + <%= hidden_field_tag :configuration_name, @configuration_name %>
  6 +
  7 + <p>
  8 + <%= f.label :metric_name, "Metric Name:" %>
  9 + <%= f.text_field :metric_name %>
  10 + </p>
  11 + <p>
  12 + <%= f.label :description, "Description:" %>
  13 + <%= f.text_field :description %>
  14 + </p>
  15 + <p>
  16 + <%= f.label :scope, "Scope:" %>
  17 + <%= f.select :scope, [["Class", "CLASS"]] %>
  18 + </p>
  19 + <p>
  20 + <%= f.label :code, "Code:" %>
  21 + <%= f.text_field :code %>
  22 + </p>
  23 + <p>
  24 + <%= f.label :aggregation_form, "Aggregation:" %>
  25 + <%= f.select :aggregation_form, [["Average","AVERAGE"], ["Median", "MEDIAN"], ["Maximum", "MAXIMUM"], ["Minimum", "MINIMUM"],
  26 + ["Count", "COUNT"], ["Standard Deviation", "STANDARD_DEVIATION"]] %>
  27 + </p>
  28 + <p>
  29 + <%= f.label :weight, "Weight:" %>
  30 + <%= f.text_field :weight %>
  31 + </p>
  32 + <p>
  33 + <%= f.label :script, "Script:" %>
  34 + <%= f.text_area :script %>
  35 + </p>
  36 +
  37 + <p>
  38 + <%= f.submit "Add" %>
  39 + </p>
  40 +
  41 +<% end %>
  42 +
  43 +<!-- make this prettier -->
  44 +<table>
  45 + <tr class="titles">
  46 + <td><h5>Metric Name</h5></td>
  47 + <td><h5>Metric Code</h5></td>
  48 + </tr>
  49 + <% @metric_configurations.each do |metric_configuration| %>
  50 + <tr class="metric">
  51 + <td><%= metric_configuration.metric.name %></td>
  52 + <td><%= metric_configuration.code %></td>
  53 + </tr>
  54 + <% end %>
  55 +</table>
... ...