class OpenBuildServiceAPI::Package
Attributes
name[R]
project[RW]
Public Class Methods
new(params = {})
click to toggle source
# File lib/models/package.rb, line 6 def initialize(params = {}) @name = params[:name] @project = params[:project] @connection = params[:connection] end
Public Instance Methods
binaries()
click to toggle source
# File lib/models/package.rb, line 87 def binaries collection_data = [] @project.repositories.each do |repository| binary_data = { repository: repository, binaries: [] } repository.architectures.each do |arch| begin response = @connection.send_request(:get, "/build/#{CGI.escape(@project.name)}/#{CGI.escape(repository.to_s)}/#{CGI.escape(arch)}/#{CGI.escape(@name)}") response_xml = Nokogiri::XML(response.body) response_xml.xpath('//binarylist/binary').each do |binary| file_name = binary.attr('filename') file_size = binary.attr('size') created_at = binary.attr('mtime').to_i if BinaryHelper.binary_file?(file_name) binary_data[:binaries] << Binary.new( name: file_name, size: file_size, architecture: arch, created_at: created_at, repository: repository, package: self, connection: @connection ) end end rescue RequestError => err # in case the repository does no longer exist, we can ignore it. there are no binaries anyways next if err.error_code == '404' && err.error_summary =~ /has no repository/ # raise any other error raise end end collection_data << binary_data unless binary_data[:binaries].empty? end BinariesCollection.new(data: collection_data, connection: @connection, package: self) end
delete!(message=nil)
click to toggle source
# File lib/models/package.rb, line 172 def delete!(message=nil) begin @connection.send_request(:delete, "/source/#{CGI.escape(@project.name)}/#{CGI.escape(@name)}", comment: message) rescue RequestError => err raise PackageDeletionPermissionError.new("No permission to delete package '#{@name}' in project " \ "'#{@project.name}'.") if err.error_code == 'delete_package_no_permission' raise end true end
description()
click to toggle source
# File lib/models/package.rb, line 28 def description return @description_updated if @description_updated description = meta.xpath('//package/description') description.empty? ? nil : description[0].text end
description=(value)
click to toggle source
# File lib/models/package.rb, line 35 def description=(value) @dirty = true @description_updated = value end
dirty?()
click to toggle source
# File lib/models/package.rb, line 144 def dirty? !!@dirty end
inspect()
click to toggle source
# File lib/models/package.rb, line 130 def inspect "#<#{self.class.name}:#{"0x00%x" % (object_id << 1)} @name=\"#{@name}\", @project=\"#{@project.name}\">" end
meta(opts = {})
click to toggle source
# File lib/models/package.rb, line 54 def meta(opts = {}) if !@cached_meta || @meta_reload @cached_meta = @connection.send_request(:get, "/source/#{CGI.escape(@project.name)}/#{CGI.escape(@name)}/_meta").body @meta_reload = false end if opts[:no_parse] @cached_meta else Nokogiri::XML(@cached_meta) end end
rebuild!(repository=nil, arch=nil)
click to toggle source
# File lib/models/package.rb, line 134 def rebuild!(repository=nil, arch=nil) @connection.send_request(:post, "/build/#{CGI.escape(@project.name)}", cmd: :rebuild, package: @name, repository: repository, arch: arch) true end
rebuild_failed!()
click to toggle source
# File lib/models/package.rb, line 139 def rebuild_failed! @connection.send_request(:post, "/build/#{CGI.escape(@project.name)}", cmd: :rebuild, package: @name, code: :failed) true end
reload!()
click to toggle source
# File lib/models/package.rb, line 184 def reload! @meta_reload = true @sources_reload = true end
run_service!()
click to toggle source
# File lib/models/package.rb, line 40 def run_service! begin @connection.send_request(:post, "/source/#{CGI.escape(@project.name)}/#{CGI.escape(@name)}", cmd: :runservice) rescue RequestError => err if err.error_code == 'not_found' && err.error_summary =~ /no source service defined/ raise NoSourceServiceDefinedError.new("Package '#{@name}' in project '#{@project.name}' has no source service defined.") end raise end true end
save!()
click to toggle source
# File lib/models/package.rb, line 148 def save! return false unless @dirty @meta_reload = true meta_xml = meta meta_xml.xpath('//package/title')[0].content = @title_updated if @title_updated meta_xml.xpath('//package/description')[0].content = @description_updated if @description_updated # update meta definition @connection.send_request(:put, "/source/#{CGI.escape(@project.name)}/#{CGI.escape(@name)}/_meta", request_body: meta_xml.to_xml) # reset updated values @dirty = false @title_updated = nil @description_updated = nil # updated cached meta @cached_meta = meta_xml.to_xml true end
sources()
click to toggle source
# File lib/models/package.rb, line 67 def sources return @cached_sources if @cached_sources && !@sources_reload collection_data = [] response_xml = Nokogiri::XML(@connection.send_request(:get, "/source/#{CGI.escape(@project.name)}/#{CGI.escape(@name)}").body) response_xml.xpath('//entry').each do |file| collection_data << Source.new( name: file.attr('name'), md5_hash: file.attr('md5'), size: file.attr('size'), updated_at: file.attr('mtime').to_i, package: self, connection: @connection ) end @sources_reload = false @cached_sources = SourcesCollection.new(data: collection_data, package: self, connection: @connection) end
title()
click to toggle source
# File lib/models/package.rb, line 16 def title return @title_updated if @title_updated title = meta.xpath('//package/title') title.empty? ? nil : title[0].text end
title=(value)
click to toggle source
# File lib/models/package.rb, line 23 def title=(value) @dirty = true @title_updated = value end
to_s()
click to toggle source
# File lib/models/package.rb, line 12 def to_s @name end