blob: 7d6d412c5010a4240c472a530481b4b3750f7d9e [file] [log] [blame]
require 'yaml'
require 'net/http'
module ASF
# Represents a Petri culture
# currently defined in
# https://petri.apache.org/info.yaml
PETRI_INFO = 'https://petri.apache.org/info.yaml'
class Petri
include Enumerable
attr_reader :id
attr_reader :name
attr_reader :description
attr_reader :status
attr_reader :mentors
attr_reader :website
attr_reader :mailinglists
attr_reader :repository
attr_reader :issues
attr_reader :wiki
attr_reader :release
attr_reader :licensing
attr_accessor :error
def initialize(entry)
key, hash = entry
@id = key
hash.each { |name, value| instance_variable_set("@#{name}", value) }
end
# Array of all Petri culture entries
def self.list
@list = []
response = Net::HTTP.get_response(URI(PETRI_INFO))
response.value() # Raises error if not OK
yaml = YAML.safe_load(response.body, permitted_classes: [Symbol])
# @mentors = yaml['mentors']
yaml['cultures'].each do |proj|
prj = new(proj)
if yaml['projects'].include? proj
prj.error = 'Listed as a current project' unless prj.status == 'current'
else
prj.error = 'Not listed as a current project' if prj.status == 'current'
end
@list << prj
end
# Now check against projects listing
yaml['projects'].each do |proj|
unless yaml['cultures'].include? proj
@list << new([proj,{name: '', status: '', error: 'No culture entry found'}])
end
end
@list
end
end
end
if __FILE__ == $0
ASF::Petri.list.each do |e|
p e
p e.website
end
end