cfoundry 0.5.3.rc4 → 0.5.3.rc5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,5 @@
1
1
  require "multi_json"
2
+ require "tmpdir"
2
3
 
3
4
  require "cfoundry/baseclient"
4
5
  require "cfoundry/uaaclient"
@@ -50,22 +51,40 @@ module CFoundry::V1
50
51
  end
51
52
 
52
53
  def upload_app(name, zipfile = nil, resources = [])
53
- payload = {
54
- :_method => "put",
55
- :resources => MultiJson.dump(resources),
56
- :application =>
57
- UploadIO.new(
58
- if zipfile.is_a? File
59
- zipfile
60
- elsif zipfile.is_a? String
61
- File.new(zipfile, "rb")
62
- end,
63
- "application/zip")
64
- }
65
-
66
- post("apps", name, "application", :payload => payload)
54
+ use_or_create_empty_zipfile(zipfile) do |zipfile|
55
+ payload = {
56
+ :_method => "put",
57
+ :resources => MultiJson.dump(resources),
58
+ :application =>
59
+ UploadIO.new(
60
+ if zipfile.is_a? File
61
+ zipfile
62
+ elsif zipfile.is_a? String
63
+ File.new(zipfile, "rb")
64
+ end,
65
+ "application/zip")
66
+ }
67
+
68
+ post("apps", name, "application", :payload => payload)
69
+ end
67
70
  rescue EOFError
68
71
  retry
69
72
  end
73
+
74
+ private
75
+
76
+ def use_or_create_empty_zipfile(zipfile)
77
+ Dir.mktmpdir do |working_dir|
78
+ zip_path = "#{working_dir}/empty_zip.zip"
79
+
80
+ zipfile ||= Dir.mktmpdir do |zip_dir|
81
+ File.new("#{zip_dir}/.__empty_file", "wb").close
82
+ CFoundry::Zip.pack(zip_dir, zip_path)
83
+ zip_path
84
+ end
85
+
86
+ yield zipfile
87
+ end
88
+ end
70
89
  end
71
90
  end
@@ -1,4 +1,4 @@
1
1
  module CFoundry # :nodoc:
2
2
  # CFoundry library version number.
3
- VERSION = "0.5.3.rc4".freeze
3
+ VERSION = "0.5.3.rc5".freeze
4
4
  end
@@ -55,4 +55,42 @@ describe CFoundry::V1::Base do
55
55
  end
56
56
  end
57
57
  end
58
+
59
+ describe "#upload_app" do
60
+ let!(:stubbed_request) do
61
+ stub_request(:post, 'https://api.cloudfoundry.com/apps/app_name/application').to_return(:status => 200).with(:body => /#{expected_zipfile}/)
62
+ end
63
+
64
+ subject { base.upload_app("app_name", zipfile)}
65
+
66
+ context "when passed a falsy zipfile" do
67
+ let(:zipfile) { false }
68
+ let(:expected_zipfile) { "empty.zip" }
69
+
70
+ it "creates a temporary empty zipfile" do
71
+ subject
72
+
73
+ stubbed_request.should have_been_requested
74
+ end
75
+ end
76
+
77
+ context "when passed a valid zipfile" do
78
+ let(:zipfile) { "proper-zipfile.zip" }
79
+ let(:expected_zipfile) { zipfile }
80
+
81
+ before do
82
+ File.new(zipfile, "wb")
83
+ end
84
+
85
+ after do
86
+ FileUtils.rm(zipfile)
87
+ end
88
+
89
+ it "uses that zipfile" do
90
+ subject
91
+
92
+ stubbed_request.should have_been_requested
93
+ end
94
+ end
95
+ end
58
96
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cfoundry
3
3
  version: !ruby/object:Gem::Version
4
- hash: -577135546
4
+ hash: -2049338452
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 0
8
8
  - 5
9
9
  - 3
10
10
  - rc
11
- - 4
12
- version: 0.5.3.rc4
11
+ - 5
12
+ version: 0.5.3.rc5
13
13
  platform: ruby
14
14
  authors:
15
15
  - Cloud Foundry Team
@@ -18,7 +18,7 @@ autorequire:
18
18
  bindir: bin
19
19
  cert_chain: []
20
20
 
21
- date: 2013-03-12 00:00:00 Z
21
+ date: 2013-03-14 00:00:00 Z
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
24
24
  version_requirements: &id001 !ruby/object:Gem::Requirement