Commit 7ad294ee9f70b846847a4f763ba7b2e82c24e410

Authored by João M. M. da Silva
1 parent 4cbb0d67

[Mezuro] Feature of create a configuration based on a old one

plugins/mezuro/lib/kalibro/configuration.rb
... ... @@ -22,10 +22,11 @@ class Kalibro::Configuration < Kalibro::Model
22 22 new request("Configuration", :get_configuration, {:configuration_name => configuration_name})[:configuration]
23 23 end
24 24  
25   - def self.create(content)
26   - attributes = {
27   - :name => content.name,
28   - :description => content.description
  25 + def self.create(content, configuration)
  26 + attributes = {
  27 + :name => content.name,
  28 + :description => content.description,
  29 + :metric_configuration => configuration.to_hash[:metric_configuration]
29 30 }
30 31 super attributes
31 32 end
... ... @@ -34,7 +35,13 @@ class Kalibro::Configuration < Kalibro::Model
34 35 request("Configuration", :get_configuration_names)[:configuration_name]
35 36 end
36 37  
37   - def destroy
  38 + def destroy
38 39 self.class.request("Configuration", :remove_configuration, {:configuration_name => name})
39 40 end
  41 +
  42 + def update_attributes(attributes={})
  43 + attributes.each { |field, value| send("#{field}=", value) if self.class.is_valid?(field) }
  44 + save
  45 + end
  46 +
40 47 end
... ...
plugins/mezuro/lib/mezuro_plugin/configuration_content.rb
... ... @@ -9,7 +9,7 @@ class MezuroPlugin::ConfigurationContent < Article
9 9 'Sets of thresholds to interpret metrics'
10 10 end
11 11  
12   - settings_items :description
  12 + settings_items :description, :clone_configuration_name
13 13  
14 14 include ActionView::Helpers::TagHelper
15 15 def to_html(options = {})
... ... @@ -20,21 +20,20 @@ class MezuroPlugin::ConfigurationContent < Article
20 20  
21 21 def configuration
22 22 begin
23   - configuration = Kalibro::Configuration.find_by_name(self.name)
24   - configuration.description = self.description
25   - configuration
26   - rescue Exception
27   - Kalibro::Configuration.new({
28   - :name => self.name,
29   - :description => self.description
30   - })
  23 + @configuration ||= Kalibro::Configuration.find_by_name(self.name)
  24 + rescue Exception => error
  25 + errors.add_to_base(error.message)
  26 + nil
31 27 end
32 28 end
33   -
  29 +
34 30 def metric_configurations
35 31 configuration.metric_configurations
36 32 end
37   -
  33 +
  34 + def configuration_names
  35 + ["None"] + Kalibro::Configuration.all_names.sort
  36 + end
38 37  
39 38 after_save :send_configuration_to_service
40 39 after_destroy :remove_configuration_from_service
... ... @@ -42,8 +41,7 @@ class MezuroPlugin::ConfigurationContent < Article
42 41 private
43 42  
44 43 def validate_kalibro_configuration_name
45   - existing = Kalibro::Configuration.all_names
46   - existing.each { |a| a.downcase!}
  44 + existing = configuration_names.map { |a| a.downcase}
47 45  
48 46 if existing.include?(name.downcase)
49 47 errors.add_to_base("Configuration name already exists in Kalibro")
... ... @@ -51,11 +49,24 @@ class MezuroPlugin::ConfigurationContent < Article
51 49 end
52 50  
53 51 def send_configuration_to_service
54   - configuration.save
  52 + if configuration.nil?
  53 + begin
  54 + clone_configuration = Kalibro::Configuration.find_by_name(self.clone_configuration_name)
  55 + rescue Exception => error
  56 + clone_configuration = nil
  57 + end
  58 + Kalibro::Configuration.create(self, clone_configuration)
  59 + else
  60 + configuration.update_attributes({:description => description})
  61 + end
55 62 end
56 63  
57 64 def remove_configuration_from_service
58   - configuration.destroy
  65 + begin
  66 + configuration.destroy
  67 + rescue Exception => error
  68 + errors.add_to_base(error.message)
  69 + end
59 70 end
60 71  
61 72 end
... ...
plugins/mezuro/test/unit/mezuro_plugin/configuration_content_test.rb
... ... @@ -61,5 +61,5 @@ class ConfigurationContentTest < ActiveSupport::TestCase
61 61 @configuration.expects(:destroy)
62 62 @content.send :remove_configuration_from_service
63 63 end
64   -
  64 +
65 65 end
... ...
plugins/mezuro/views/cms/mezuro_plugin/_configuration_content.html.erb
1 1 <h1> <%= _(MezuroPlugin::ConfigurationContent.short_description) %> </h1>
2 2  
3 3 <%
4   -begin
5   - @configuration = @article.title.nil? ? nil : Kalibro::Configuration.find_by_name(@article.title)
6   -rescue
7   - @configuration = nil
8   -end
  4 + begin
  5 + configuration = @article.title.nil? ? nil : @article.configuration
  6 + rescue
  7 + configuration = nil
  8 + end
9 9 %>
10 10  
11 11 <%= error_messages_for 'kalibro_configuration' %>
... ... @@ -13,8 +13,20 @@ end
13 13 <%= hidden_field_tag 'kalibro_configuration[profile_id]', profile.id %>
14 14 <%= hidden_field_tag 'id', @article.id %>
15 15  
  16 +<% configuration_names = @article.configuration_names %>
  17 +
  18 +<% selected = (configuration.nil? ? configuration_names[0] : @article.clone_configuration_name) %>
  19 +
16 20 <%= required_fields_message %>
17 21  
18   -<%= required f.text_field(:name, :disabled => !(@configuration.nil? || @article.id.nil?)) %>
  22 +<%= required labelled_form_field _('Clone Configuration'),
  23 +if !configuration.nil? && !@article.id.nil?
  24 + f.select(:clone_configuration_name, configuration_names, {:selected => selected}, :disabled => 'true')
  25 +else
  26 + f.select(:clone_configuration_name, configuration_names, {:selected => selected})
  27 +end %>
  28 +<br/>
  29 +
  30 +<%= required f.text_field(:name, :disabled => !(configuration.nil? || @article.id.nil?)) %>
19 31  
20 32 <%= f.text_field :description %><br/>
... ...
plugins/mezuro/views/content_viewer/show_configuration.rhtml
1 1 <% @configuration_content = @page
2   -@configuration = Kalibro::Configuration.find_by_name(@configuration_content.name) %>
  2 +@configuration = @page.configuration %>
3 3  
4 4 <table id="project_info">
5 5 <tr>
... ...