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