continuum-stager-api 0.1.7 → 0.1.8

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
  SHA1:
3
- metadata.gz: b8397c207ff012d3a21c39caaf0c8831173f9860
4
- data.tar.gz: 82da84b55827b2b4ec29b1f2a1d30971ba5891e8
3
+ metadata.gz: 12edd2b8b9c59ea9e1559d0d82a70dcd80974852
4
+ data.tar.gz: 4ff0c5b27bcce22bbfceeeb0efbbb42ec58f9156
5
5
  SHA512:
6
- metadata.gz: 01dc3b2af39d1d59cc942e435aa3a9bba2997ecc052d83318060a88fda4197fabb2b1edd8682ef7b5f2abe5487e32f59aced4ba8623faf8ddbfa97c569e7134c
7
- data.tar.gz: 24c2214f6dccbcc8955d5d97fd3cf1d29d63eaa433b79e19654dff2af480f9ca4ea178d123c6a00b8baf8c9caa48df3bc383f8a8e3f44edb760c09fce1b86bbe
6
+ metadata.gz: 882efbf11bd13e8d214ab3da90bec6305fd6d77d3bd1bf8e1c02b5b428ebed875a79a1df9d92db6882b08d1fe51c960dcd059fd8a6f84ce04f742f4d30f66621
7
+ data.tar.gz: 428d0d08dd667c23809f312c89cbde645d0971b8f4605788faafe4c92e1a3ac3199667972172a16ccfa31b55e524f1b780eaa73d23bac41ada92dacf77290ae9
@@ -15,7 +15,7 @@ Gem::Specification.new do |gem|
15
15
  gem.test_files = `git ls-files -- {spec}/*`.split("\n")
16
16
  gem.name = "continuum-stager-api"
17
17
  gem.require_paths = ["lib"]
18
- gem.version = "0.1.7"
18
+ gem.version = "0.1.8"
19
19
 
20
20
  gem.add_development_dependency 'rspec', '~> 2.6.0'
21
21
  gem.add_development_dependency 'rake'
@@ -2,5 +2,6 @@ module Apcera
2
2
  module Error
3
3
  class StagerURLRequired < StandardError; end
4
4
  class ExecuteError < StandardError; end
5
+ class AppPathError < StandardError; end
5
6
  end
6
7
  end
@@ -41,6 +41,7 @@ module Apcera
41
41
 
42
42
  # Execute a command in the app dir. Useful helper.
43
43
  def execute_app(cmd)
44
+ raise_app_path_error if @app_path == nil
44
45
  Bundler.with_clean_env do
45
46
  Dir.chdir(@app_path) do |app_path|
46
47
  result = system(cmd, @system_options)
@@ -67,12 +68,13 @@ module Apcera
67
68
 
68
69
  # Upload the new package to the staging coordinator
69
70
  def upload
71
+ raise_app_path_error if @app_path == nil
70
72
  app_dir = Pathname.new(@app_path).relative_path_from(Pathname.new(@root_path)).to_s
71
73
  execute_app("cd #{app_path}/.. && tar czf #{@updated_pkg_path} #{app_dir}")
72
74
 
73
75
  sha1 = Digest::SHA1.file(@updated_pkg_path)
74
76
  File.open(@updated_pkg_path, "rb") do |f|
75
- response = RestClient.post(@stager_url+"/data?sha1=#{sha1.to_s}", f.read, { :content_type => "application/octet-stream" } )
77
+ response = RestClient.post(@stager_url+"/data?sha1=#{sha1.to_s}", f, { :content_type => "application/octet-stream" } )
76
78
  end
77
79
  rescue => e
78
80
  fail e
@@ -87,7 +89,7 @@ module Apcera
87
89
 
88
90
  # Add environment variable to package.
89
91
  def environment_add(key, value)
90
- response = RestClient.put(@stager_url+"/meta", {
92
+ response = RestClient.put(stager_meta_url, {
91
93
  :resource => "environment",
92
94
  :action => "add",
93
95
  :key => key,
@@ -99,7 +101,7 @@ module Apcera
99
101
 
100
102
  # Delete environment variable from package.
101
103
  def environment_remove(key, value)
102
- response = RestClient.put(@stager_url+"/meta", {
104
+ response = RestClient.put(stager_meta_url, {
103
105
  :resource => "environment",
104
106
  :action => "remove",
105
107
  :key => key,
@@ -111,7 +113,7 @@ module Apcera
111
113
 
112
114
  # Add provides to package.
113
115
  def provides_add(type, name)
114
- response = RestClient.put(@stager_url+"/meta", {
116
+ response = RestClient.put(stager_meta_url, {
115
117
  :resource => "provides",
116
118
  :action => "add",
117
119
  :type => type,
@@ -123,7 +125,7 @@ module Apcera
123
125
 
124
126
  # Delete provides from package.
125
127
  def provides_remove(key, value)
126
- response = RestClient.put(@stager_url+"/meta", {
128
+ response = RestClient.put(stager_meta_url, {
127
129
  :resource => "provides",
128
130
  :action => "remove",
129
131
  :type => type,
@@ -138,7 +140,7 @@ module Apcera
138
140
  exists = self.meta["dependencies"].detect { |dep| dep["type"] == type && dep["name"] == name }
139
141
  return false if exists
140
142
 
141
- response = RestClient.put(@stager_url+"/meta", {
143
+ response = RestClient.put(stager_meta_url, {
142
144
  :resource => "dependencies",
143
145
  :action => "add",
144
146
  :type => type,
@@ -155,7 +157,7 @@ module Apcera
155
157
  exists = self.meta["dependencies"].detect { |dep| dep["type"] == type && dep["name"] == name}
156
158
  return false if !exists
157
159
 
158
- response = RestClient.put(@stager_url+"/meta", {
160
+ response = RestClient.put(stager_meta_url, {
159
161
  :resource => "dependencies",
160
162
  :action => "remove",
161
163
  :type => type,
@@ -169,7 +171,7 @@ module Apcera
169
171
 
170
172
  # Add template to package.
171
173
  def templates_add(path, left_delimiter = "{{", right_delimiter = "}}")
172
- response = RestClient.put(@stager_url+"/meta", {
174
+ response = RestClient.put(stager_meta_url, {
173
175
  :resource => "templates",
174
176
  :action => "add",
175
177
  :path => path,
@@ -182,7 +184,7 @@ module Apcera
182
184
 
183
185
  # Delete template from package.
184
186
  def templates_remove(path, left_delimiter = "{{", right_delimiter = "}}")
185
- response = RestClient.put(@stager_url+"/meta", {
187
+ response = RestClient.put(stager_meta_url, {
186
188
  :resource => "templates",
187
189
  :action => "remove",
188
190
  :path => path,
@@ -195,7 +197,7 @@ module Apcera
195
197
 
196
198
  # Get metadata for the package being staged.
197
199
  def meta
198
- response = RestClient.get(@stager_url+"/meta")
200
+ response = RestClient.get(stager_meta_url)
199
201
  return JSON.parse(response.to_s)
200
202
  rescue => e
201
203
  output_error "Error: #{e.message}.\n"
@@ -272,6 +274,10 @@ module Apcera
272
274
 
273
275
  private
274
276
 
277
+ def raise_app_path_error
278
+ raise Apcera::Error::AppPathError.new("app path not set, please run extract!\n")
279
+ end
280
+
275
281
  def setup_environment
276
282
  # When staging we use the root path. These are overridden in tests.
277
283
  @root_path = "/tmp"
@@ -279,5 +285,9 @@ module Apcera
279
285
  @updated_pkg_path = File.join(@root_path, UPDATED_PKG_NAME)
280
286
  @system_options = {}
281
287
  end
288
+
289
+ def stager_meta_url
290
+ @stager_url + "/meta"
291
+ end
282
292
  end
283
293
  end
@@ -128,20 +128,29 @@ describe Apcera::Stager do
128
128
  VCR.use_cassette('download') do
129
129
  @stager.download
130
130
  end
131
-
132
- @stager.extract(@appdir)
133
131
  end
134
132
 
135
133
  it "should execute commands in app dir with clean bundler environment" do
136
134
  Bundler.should_receive(:with_clean_env).at_least(:once).and_yield
137
135
 
136
+ @stager.extract(@appdir)
137
+
138
138
  @stager.execute_app("cat thing").should == nil
139
139
  @stager.execute_app("cat #{File.join("app", "Gemfile")}").should == true
140
140
  end
141
141
 
142
+ it "should bubble errors to fail when app path is missing (no extract)" do
143
+ @stager.should_receive(:exit0r).with(1) { raise }
144
+
145
+ cmd = "cat thing"
146
+ expect {@stager.execute_app(cmd) }.to raise_error(Apcera::Error::AppPathError, "app path not set, please run extract!\n")
147
+ end
148
+
142
149
  it "should bubble errors to fail" do
143
150
  @stager.should_receive(:exit0r).with(1) { raise }
144
151
 
152
+ @stager.extract(@appdir)
153
+
145
154
  cmd = "cat thing"
146
155
  expect {@stager.execute_app(cmd) }.to raise_error(Apcera::Error::ExecuteError, "failed to execute: #{cmd}.\n")
147
156
  end
@@ -152,11 +161,11 @@ describe Apcera::Stager do
152
161
  VCR.use_cassette('download') do
153
162
  @stager.download
154
163
  end
155
-
156
- @stager.extract(@appdir)
157
164
  end
158
165
 
159
166
  it "should compress a new package and send to the staging coordinator" do
167
+ @stager.extract(@appdir)
168
+
160
169
  VCR.use_cassette('upload') do
161
170
  @stager.upload
162
171
  end
@@ -165,14 +174,25 @@ describe Apcera::Stager do
165
174
  end
166
175
 
167
176
  it "should compress using tar czf" do
177
+ @stager.extract(@appdir)
178
+
168
179
  @stager.should_receive(:execute_app).with("cd #{@stager.app_path}/.. && tar czf #{@stager.updated_pkg_path} #{@appdir}").and_return
169
180
 
170
181
  @stager.upload
171
182
  end
172
183
 
184
+ it "should bubble errors to fail when app path is missing (no extract)" do
185
+ @stager.should_receive(:exit0r).with(1) { raise }
186
+
187
+ cmd = "cat thing"
188
+ expect {@stager.upload }.to raise_error(Apcera::Error::AppPathError, "app path not set, please run extract!\n")
189
+ end
190
+
173
191
  it "should bubble errors to fail" do
174
192
  @stager.should_receive(:exit0r).with(1) { raise }
175
193
 
194
+ @stager.extract(@appdir)
195
+
176
196
  VCR.use_cassette('invalid/upload') do
177
197
  expect { @stager.upload }.to raise_error(RestClient::ResourceNotFound, "404 Resource Not Found")
178
198
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: continuum-stager-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Ellithorpe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-26 00:00:00.000000000 Z
11
+ date: 2014-08-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client