reading_group_content.rb 1.76 KB
class MezuroPlugin::ReadingGroupContent < Article
  include ActionView::Helpers::TagHelper

  settings_items :reading_group_id

  before_save :send_reading_group_to_service
  after_destroy :destroy_reading_group_from_service

  def self.short_description
    'Mezuro reading group'
  end

  def self.description
    'Set of thresholds to interpret metric results'
  end

  def to_html(options = {})
    lambda do
      render :file => 'content_viewer/show_reading_group.rhtml'
    end
  end

  def reading_group
    begin
      @reading_group ||= Kalibro::ReadingGroup.find(reading_group_id)
    rescue Exception => error
      errors.add_to_base(error.message)
    end
    @reading_group
  end

  def readings
    begin
      @readings ||= Kalibro::Reading.readings_of(reading_group_id)
    rescue Exception => error
      errors.add_to_base(error.message)
      @readings = []
    end
    @readings
  end

  def description=(value)
    @description=value
  end
  
  def description
    begin
      @description ||= reading_group.description
    rescue
      @description = ""
    end
    @description
  end

  def readings=(value)
    @readings = value.kind_of?(Array) ? value : [value]
    @readings = @readings.map { |element| to_reading(element) }
  end

  private
  
  def self.to_reading value
    value.kind_of?(Hash) ? Kalibro::Reading.new(value) : value
  end

  def send_reading_group_to_service
    created_reading_group = create_kalibro_reading_group
    self.reading_group_id = created_reading_group.id
  end

  def create_kalibro_reading_group
   Kalibro::ReadingGroup.create(
      :name => name,
      :description => description,
      :id => self.reading_group_id
    )
  end

  def destroy_reading_group_from_service
    reading_group.destroy unless reading_group.nil?
  end

end