Class: VagrantCloud::Box::Version
- Inherits:
-
Data::Mutable
- Object
- Data
- Data::Immutable
- Data::Mutable
- VagrantCloud::Box::Version
- Defined in:
- lib/vagrant_cloud/box/version.rb
Constant Summary
Constants inherited from Data
Instance Attribute Summary collapse
-
#box ⇒ Object
readonly
Returns the value of attribute box.
Instance Method Summary collapse
-
#add_provider(pname, architecture = nil) ⇒ Provider
Add a new provider for this version.
-
#delete ⇒ nil
Delete this version.
-
#dirty?(key = nil, deep: false) ⇒ Boolean
Check if this instance is dirty.
-
#exist? ⇒ Boolean
Version exists remotely.
-
#initialize(box:, **opts) ⇒ Version
constructor
A new instance of Version.
-
#release ⇒ self
Release this version.
- #released? ⇒ Boolean
-
#revoke ⇒ self
Revoke this version.
-
#save ⇒ self
Save the version if any changes have been made.
Methods inherited from Data::Mutable
#[], attr_mutable, #clean, #clean!, #freeze, load
Methods inherited from Data::Immutable
attr_optional, attr_required, inherited, #inspect, sync
Methods inherited from Data
Constructor Details
#initialize(box:, **opts) ⇒ Version
Returns a new instance of Version.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# 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 |
Instance Attribute Details
#box ⇒ Object (readonly)
Returns the value of attribute box.
4 5 6 |
# File 'lib/vagrant_cloud/box/version.rb', line 4 def box @box end |
Instance Method Details
#add_provider(pname, architecture = nil) ⇒ Provider
Add a new provider for this version
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/vagrant_cloud/box/version.rb', line 93 def add_provider(pname, architecture=nil) if providers.any? { |p| p.name == pname && (architecture.nil? || p.architecture == architecture) } raise Error::BoxError::VersionProviderExistsError, "Provider #{pname} already exists for box #{box.tag} version #{version} (#{architecture})" end pv = Provider.new( version: self, name: pname, ) pv.architecture = architecture if architecture clean(data: {providers: providers + [pv]}) pv end |
#delete ⇒ nil
Note:
This will delete the version, and all providers
Delete this version
31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# 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) ⇒ Boolean
Check if this instance is dirty
114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/vagrant_cloud/box/version.rb', line 114 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? ⇒ Boolean
Returns version exists remotely.
127 128 129 |
# File 'lib/vagrant_cloud/box/version.rb', line 127 def exist? !!created_at end |
#release ⇒ self
Release this version
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# 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? ⇒ Boolean
85 86 87 |
# File 'lib/vagrant_cloud/box/version.rb', line 85 def released? status == "active" end |
#revoke ⇒ self
Revoke this version
70 71 72 73 74 75 76 77 78 79 80 81 82 |
# 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 ⇒ self
Save the version if any changes have been made
134 135 136 137 138 |
# File 'lib/vagrant_cloud/box/version.rb', line 134 def save save_version if dirty? save_providers if dirty?(deep: true) self end |