project_content.rb 1.58 KB
class MezuroPlugin::ProjectContent < Article 

  def self.short_description
    'Kalibro project'
  end

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

  settings_items :license, :description, :repository_type, :repository_url, :configuration_name

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

  # FIXME is this really needed?
  def project
    Kalibro::Client::ProjectClient.new.project(title)
  end

  def project_result
    @project_result ||= Kalibro::Client::ProjectResultClient.new.last_result(title)
  end

  def module_result(module_name)
    @module_client ||= Kalibro::Client::ModuleResultClient.new
    @module_client.module_result(title, module_name, project_result.date)
  end

  after_save :send_project_to_service
  after_destroy :remove_project_from_service

  private

  def send_project_to_service
    Kalibro::Client::ProjectClient.save(create_project)
    Kalibro::Client::KalibroClient.process_project(title)
  end

  def remove_project_from_service
    Kalibro::Client::ProjectClient.remove(title)
  end

  def create_project
    project = Kalibro::Entities::Project.new
    project.name = title
    project.license = license
    project.description = description
    project.repository = create_repository
    project.configuration_name = configuration_name
    project
  end

  def create_repository
    repository = Kalibro::Entities::Repository.new
    repository.type = repository_type
    repository.address = repository_url
    repository
  end

end