project_content.rb 2 KB
class MezuroPlugin::ProjectContent < Article
  include ActionView::Helpers::TagHelper

  settings_items :project_id

  before_save :send_project_to_service
  after_destroy :destroy_project_from_service

  def self.short_description
    'Mezuro project'
  end

  def self.description
    'Software project tracked by Kalibro'
  end

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

  def project
    begin
      @project ||= Kalibro::Project.find(project_id)
    rescue Exception => error
      errors.add_to_base(error.message)
    end
    @project
  end

  def repositories
    begin
      @repositories ||= Kalibro::Repository.repositories_of(project_id)
    rescue Exception => error
      errors.add_to_base(error.message)
      @repositories = []
    end
    @repositories
  end

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

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

  private
  
  def self.to_repository value
    value.kind_of?(Hash) ? Kalibro::Repository.new(value) : value
  end

  def validate_repository_address
    repositories.each do |repository|
      if (!repository.nil?)
        address = repository.address
        if(address.nil? || address == "")
          errors.add_to_base("Repository Address is mandatory")
        end
      else
        errors.add_to_base("Repository is mandatory")
      end       
    end
  end

  def send_project_to_service
    created_project = create_kalibro_project
    self.project_id = created_project.id
  end

  def create_kalibro_project
   Kalibro::Project.create(
      :name => name,
      :description => description,
      :id => self.project_id
    )
  end

  def destroy_project_from_service
    project.destroy unless project.nil?
  end

end