vagrant_cloud 3.0.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 360b98c309f3b2804dce161d08972266978ac3059dbc5516bd12b52e5c1fff98
4
- data.tar.gz: d258cb4d89be2bc698e4f087e8a504e2ba9a4e085ff9ab5e48c24c262926784f
3
+ metadata.gz: 00b96df31d811857d6e1322587604bc91195401913872e3340fa89eb8c0816fd
4
+ data.tar.gz: 52da865c61e7d50b5777a2a9ea2cc3bd6d7c22c1a3e2a34bc2bfdd537515b0da
5
5
  SHA512:
6
- metadata.gz: 4dadf15e12aa55529ff8023f73c19a59f4882496003246cca6ee5e2b798f86004beb343b68c97dcda465205a227312ba49023ba91b83429ac24da8cb919c8372
7
- data.tar.gz: b46249ed808cf36ffe8e65f0e234ef7fb291e9648e8cc1d8e044c1fe0ac7b1da2814eda39a14b048728bd5376b7a14a24a31d2ab68ab56f832e4ea0c2ebafb4b
6
+ metadata.gz: 9e6a2b72a501bc694992e9de0b789cba4c38fb8c6f176cd4c2e5ca4bd0fb387db5d2b23ada2307b7c63d6590b4ad3b1a8c8f98c74fbcd4f95ffd9c49cb028604
7
+ data.tar.gz: a0e90c8f8adad13d0dccd154cf50407065048a8e773df01c50482bdf79787d744e91d5b2e1a6f431c20c7d37656d894aa82c3fdf3e4f7501da5882bd029dff42
data/README.md CHANGED
@@ -163,7 +163,7 @@ Release a new version:
163
163
  1. Update the version in the `version.txt` file
164
164
  1. Commit the change to master
165
165
  1. Create a new version tag in git: `git tag vX.X.X`
166
- 1. Push the new tag and master to GitHub `git push origin master --tags`
166
+ 1. Push the new tag and master to GitHub `git push origin main --tags`
167
167
 
168
168
  The new release will be automatically built and published.
169
169
 
@@ -37,7 +37,13 @@ module VagrantCloud
37
37
  # @note This will delete the box, and all versions
38
38
  def delete
39
39
  if exist?
40
- organization.account.client.box_delete(username: username, name: name)
40
+ organization.account.client.box_delete(
41
+ username: username,
42
+ name: name
43
+ )
44
+ b = organization.boxes.dup
45
+ b.delete(self)
46
+ organization.clean(data: {boxes: b})
41
47
  end
42
48
  nil
43
49
  end
@@ -82,11 +88,15 @@ module VagrantCloud
82
88
  # only when requested
83
89
  def versions_on_demand
84
90
  if !@versions_loaded
85
- r = self.organization.account.client.box_get(username: username, name: name)
86
- v = Array(r[:versions]).map do |version|
87
- Box::Version.load(box: self, **version)
91
+ if exist?
92
+ r = self.organization.account.client.box_get(username: username, name: name)
93
+ v = Array(r[:versions]).map do |version|
94
+ Box::Version.load(box: self, **version)
95
+ end
96
+ clean(data: {versions: v + Array(plain_versions)})
97
+ else
98
+ clean(data: {versions: []})
88
99
  end
89
- clean(data: {versions: v + Array(plain_versions)})
90
100
  @versions_loaded = true
91
101
  end
92
102
  plain_versions
@@ -7,7 +7,8 @@ module VagrantCloud
7
7
  #
8
8
  # @param [String] upload_url URL for uploading file asset
9
9
  # @param [String] callback_url URL callback to PUT after successful upload
10
- DirectUpload = Struct.new(:upload_url, :callback_url, keyword_init: true)
10
+ # @param [Proc] callback Callable proc to perform callback via configured client
11
+ DirectUpload = Struct.new(:upload_url, :callback_url, :callback, keyword_init: true)
11
12
 
12
13
  attr_reader :version
13
14
  attr_required :name
@@ -36,7 +37,9 @@ module VagrantCloud
36
37
  version: version.version,
37
38
  provider: name
38
39
  )
39
- version.providers.delete(self)
40
+ pv = version.providers.dup
41
+ pv.delete(self)
42
+ version.clean(data: {providers: pv})
40
43
  end
41
44
  nil
42
45
  end
@@ -93,25 +96,24 @@ module VagrantCloud
93
96
  end
94
97
  result = DirectUpload.new(
95
98
  upload_url: r[:upload_path],
96
- callback_url: r[:callback]
99
+ callback_url: r[:callback],
100
+ callback: proc {
101
+ if r[:callback]
102
+ version.box.organization.account.client.
103
+ request(method: :put, path: URI.parse(r[:callback]).path)
104
+ end
105
+ }
97
106
  )
98
107
  if block_given?
99
108
  block_r = yield result.upload_url
100
- Excon.put(result.callback_url) if direct
109
+ result[:callback].call
101
110
  block_r
102
111
  elsif path
103
112
  File.open(path, "rb") do |file|
104
113
  chunks = lambda { file.read(Excon.defaults[:chunk_size]).to_s }
105
- # When performing a direct upload, we must POST the request
106
- # to the provided upload URL. If it's just a regular upload
107
- # then we just PUT to the upload URL.
108
- if direct
109
- Excon.post(result.upload_url, request_block: chunks)
110
- else
111
- Excon.put(result.upload_url, request_block: chunks)
112
- end
114
+ Excon.put(result.upload_url, request_block: chunks)
113
115
  end
114
- Excon.put(result.callback_url) if direct
116
+ result[:callback].call
115
117
  self
116
118
  else
117
119
  # When returning upload information for requester to complete,
@@ -36,7 +36,9 @@ module VagrantCloud
36
36
  version: version
37
37
  )
38
38
  # Remove self from box
39
- box.versions.delete(self)
39
+ v = box.versions.dup
40
+ v.delete(self)
41
+ box.clean(data: {versions: v})
40
42
  end
41
43
  nil
42
44
  end
@@ -91,8 +91,10 @@ module VagrantCloud
91
91
  # @param [Hash] params Parameters to send with request
92
92
  # @return [Hash]
93
93
  def request(path:, method: :get, params: {})
94
- # Build the full path for the request and clean it
95
- path = [path_base, path].compact.join("/").gsub(/\/{2,}/, "/")
94
+ if !path.start_with?(path_base)
95
+ # Build the full path for the request and clean it
96
+ path = [path_base, path].compact.join("/").gsub(/\/{2,}/, "/")
97
+ end
96
98
  method = method.to_s.downcase.to_sym
97
99
 
98
100
  # Build base request parameters
@@ -172,8 +174,12 @@ module VagrantCloud
172
174
  login: username,
173
175
  password: password
174
176
  },
175
- description: description,
176
- two_factor: code
177
+ token: {
178
+ description: description
179
+ },
180
+ two_factor: {
181
+ code: code
182
+ }
177
183
  }
178
184
  request(method: :post, path: "authenticate", params: params)
179
185
  end
@@ -42,6 +42,7 @@ module VagrantCloud
42
42
  class ProviderNotFoundError < BoxError; end
43
43
  class VersionExistsError < BoxError; end
44
44
  class VersionStatusChangeError < BoxError; end
45
+ class VersionProviderExistsError < BoxError; end
45
46
  end
46
47
  end
47
48
  end
@@ -26,11 +26,15 @@ module VagrantCloud
26
26
  # sure that the log level is an integer, as Log4r requires.
27
27
  level = nil if !level.is_a?(Integer)
28
28
 
29
- base_formatter = Log4r::PatternFormatter.new(
30
- pattern: "%d [%5l] %m",
31
- date_pattern: "%F %T"
32
- )
33
- Log4r::Outputter.stderr.formatter = base_formatter
29
+ # Only override the log output format if the default is set
30
+ if Log4r::Outputter.stderr.formatter.is_a?(Log4r::DefaultFormatter)
31
+ base_formatter = Log4r::PatternFormatter.new(
32
+ pattern: "%d [%5l] %m",
33
+ date_pattern: "%F %T"
34
+ )
35
+ Log4r::Outputter.stderr.formatter = base_formatter
36
+ end
37
+
34
38
  logger = Log4r::Logger.new("vagrantcloud")
35
39
  logger.outputters = Log4r::Outputter.stderr
36
40
  logger.level = level
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant_cloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - HashiCorp
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-09-21 00:00:00.000000000 Z
12
+ date: 2020-10-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: excon
@@ -128,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
128
  - !ruby/object:Gem::Version
129
129
  version: '0'
130
130
  requirements: []
131
- rubygems_version: 3.0.3
131
+ rubygems_version: 3.1.2
132
132
  signing_key:
133
133
  specification_version: 4
134
134
  summary: Vagrant Cloud API Library