configuration_content.rb 2.07 KB
class MezuroPlugin::ConfigurationContent < Article
  validate_on_create :validate_kalibro_configuration_name

  settings_items :description, :configuration_to_clone_name

  after_save :send_configuration_to_service
  after_destroy :remove_configuration_from_service

  def self.short_description
    'Kalibro configuration'
  end

  def self.description
    'Sets of thresholds to interpret metrics'
  end

  include ActionView::Helpers::TagHelper
  def to_html(options = {})
    lambda do
      render :file => 'content_viewer/show_configuration.rhtml'
    end
  end

  def configuration
    @configuration ||= Kalibro::Configuration.find_by_name(self.name)
    if @configuration.nil? 
      errors.add_to_base("Kalibro Configuration not found")
    end
    @configuration
  end

  def metric_configurations
    configuration.metric_configurations
  end

  def configuration_names
    ["None"] + Kalibro::Configuration.all_names.sort
  end

  private

  def validate_kalibro_configuration_name
    existing = configuration_names.map { |a| a.downcase}

    if existing.include?(name.downcase)
      errors.add_to_base("Configuration name already exists in Kalibro")
    end
  end

  def send_configuration_to_service
    if editing_configuration?
      configuration.update_attributes({:description => description})
    else
      create_kalibro_configuration
    end
  end

  def remove_configuration_from_service
    configuration.destroy
  end

  def create_kalibro_configuration
    attributes = {:name => name, :description => description}
    if cloning_configuration?
      attributes[:metric_configuration] = configuration_to_clone.metric_configurations_hash
    end
    Kalibro::Configuration.create attributes
  end
  
  def editing_configuration?
    configuration.present?
  end
  
  def configuration_to_clone
    @configuration_to_clone ||= find_configuration_to_clone
  end
  
  def find_configuration_to_clone
    configuration_to_clone_name.nil? ? nil : Kalibro::Configuration.find_by_name(configuration_to_clone_name)
  end
  
  def cloning_configuration?
    configuration_to_clone.present?
  end

end