class OpenBuildServiceAPI::API::Projects
Public Class Methods
new(connection)
click to toggle source
# File lib/api/projects.rb, line 4 def initialize(connection) @connection = connection end
Public Instance Methods
create(name, meta = nil)
click to toggle source
# File lib/api/projects.rb, line 8 def create(name, meta = nil) raise ProjectAlreadyExistsError.new("Project name '#{name}' has already been taken.") if exists?(name) meta = meta ? meta : meta_for_new_project(name) begin response = @connection.send_request(:put, "/source/#{CGI.escape(name)}/_meta", request_body: meta) rescue RequestError => err raise ProjectCreationPermissionError.new(err.error_summary) if err.error_code == 'create_project_no_permission' raise end return Project.new(projects: self, connection: @connection, name: name) if response.is_a?(Net::HTTPOK) raise ProjectCreationFailedError.new("could not create project. API responded with '#{response.code}': #{response.body}") end
exists?(name)
click to toggle source
# File lib/api/projects.rb, line 29 def exists?(name) !!find(name) end
find(name)
click to toggle source
# File lib/api/projects.rb, line 33 def find(name) begin project_data = Nokogiri::XML(@connection.send_request(:get, "/source/#{CGI.escape(name)}").body) packages = project_data.xpath('//entry').map { |package| package.attr('name') } Project.new(projects: self, name: name, packages: packages, connection: @connection) rescue RequestError => err return if err.error_code == 'unknown_project' raise end end
find!(name)
click to toggle source
# File lib/api/projects.rb, line 45 def find!(name) project = find(name) raise ProjectNotFoundError.new("Project '#{name}' does not exist.") unless project project end
list()
click to toggle source
# File lib/api/projects.rb, line 24 def list projects = Nokogiri::XML(@connection.send_request(:get, '/source').body) projects.xpath('//entry').map {|project| Project.new(projects: self, connection: @connection, name: project.attr('name')) } end
Private Instance Methods
meta_for_new_project(name)
click to toggle source
# File lib/api/projects.rb, line 54 def meta_for_new_project(name) project_meta = Nokogiri::XML::Builder.new do |xml| xml.project('name': name) do xml.title name xml.description end end project_meta.to_xml end