class VagrantCloud::Box::Version
Attributes
box[R]
Public Class Methods
new(box:, **opts)
click to toggle source
Calls superclass method
# File lib/vagrant_cloud/box/version.rb, line 11 def initialize(box:, **opts) if !box.is_a?(Box) raise TypeError, "Expecting type `#{Box.name}` but received `#{box.class.name}`" end @box = box opts[:providers] = Array(opts[:providers]).map do |provider| if provider.is_a?(Provider) provider else Provider.load(version: self, **provider) end end super(**opts) clean! end
Public Instance Methods
add_provider(pname)
click to toggle source
Add a new provider for this version
@param [String] pname Name of provider @return [Provider]
# File lib/vagrant_cloud/box/version.rb, line 93 def add_provider(pname) if providers.any? { |p| p.name == pname } raise Error::BoxError::VersionProviderExistsError, "Provider #{pname} already exists for box #{box.tag} version #{version}" end pv = Provider.new(version: self, name: pname) clean(data: {providers: providers + [pv]}) pv end
delete()
click to toggle source
Delete this version
@return [nil] @note This will delete the version, and all providers
# File lib/vagrant_cloud/box/version.rb, line 31 def delete if exist? box.organization.account.client.box_version_delete( username: box.username, name: box.name, version: version ) # Remove self from box v = box.versions.dup v.delete(self) box.clean(data: {versions: v}) end nil end
dirty?(key=nil, deep: false)
click to toggle source
Check if this instance is dirty
@param [Boolean] deep Check nested instances @return [Boolean] instance is dirty
Calls superclass method
# File lib/vagrant_cloud/box/version.rb, line 107 def dirty?(key=nil, deep: false) if key super(key) else d = super() || !exist? if deep && !d d = providers.any? { |p| p.dirty?(deep: true) } end d end end
exist?()
click to toggle source
@return [Boolean] version exists remotely
# File lib/vagrant_cloud/box/version.rb, line 120 def exist? !!created_at end
release()
click to toggle source
Release this version
@return [self]
# File lib/vagrant_cloud/box/version.rb, line 49 def release if released? raise Error::BoxError::VersionStatusChangeError, "Version #{version} is already released for box #{box.tag}" end if !exist? raise Error::BoxError::VersionStatusChangeError, "Version #{version} for box #{box.tag} must be saved before release" end result = box.organization.account.client.box_version_release( username: box.username, name: box.name, version: version ) clean(data: result, only: :status) self end
released?()
click to toggle source
@return [Boolean]
# File lib/vagrant_cloud/box/version.rb, line 85 def released? status == "active" end
revoke()
click to toggle source
Revoke this version
@return [self]
# File lib/vagrant_cloud/box/version.rb, line 70 def revoke if !released? raise Error::BoxError::VersionStatusChangeError, "Version #{version} is not yet released for box #{box.tag}" end result = box.organization.account.client.box_version_revoke( username: box.username, name: box.name, version: version ) clean(data: result, only: :status) self end
save()
click to toggle source
Save the version if any changes have been made
@return [self]
# File lib/vagrant_cloud/box/version.rb, line 127 def save save_version if dirty? save_providers if dirty?(deep: true) self end
Protected Instance Methods
save_providers()
click to toggle source
Save the providers if any require saving
@return [self]
# File lib/vagrant_cloud/box/version.rb, line 157 def save_providers Array(providers).map(&:save) self end
save_version()
click to toggle source
Save the version
@return [self]
# File lib/vagrant_cloud/box/version.rb, line 138 def save_version params = { username: box.username, name: box.name, version: version, description: description } if exist? result = box.organization.account.client.box_version_update(**params) else result = box.organization.account.client.box_version_create(**params) end clean(data: result, ignores: :providers) self end