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

  settings_items :description, :configuration_to_clone_name

  after_save :send_kalibro_configuration_to_service
  after_destroy :remove_kalibro_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 kalibro_configuration
    begin
      @kalibro_configuration ||= Kalibro::Configuration.find_by_name(self.name)
    rescue Exception => exception 
      errors.add_to_base(exception.message)
    end
    @kalibro_configuration
  end

  def metric_configurations
    kalibro_configuration.metric_configurations
  end

  def kalibro_configuration_names
    begin
      ["None"] + Kalibro::Configuration.all_names.sort
    rescue Exception => exception
      errors.add_to_base(exception.message)
      ["None"]
    end
  end

  private

  def validate_kalibro_configuration_name
    existing = kalibro_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_kalibro_configuration_to_service
    if editing_kalibro_configuration?
      kalibro_configuration.update_attributes({:description => description})
    else
      create_kalibro_configuration
    end
  end

  def remove_kalibro_configuration_from_service
    kalibro_configuration.destroy unless kalibro_configuration.nil?
  end

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

end