cf 4.2.7 → 4.2.8.rc1

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.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Y2E2N2JhODkyOTg2YzFiNGI3YzFkOTZhMTUwYTcwYTViZGFlMDYzYw==
5
+ data.tar.gz: !binary |-
6
+ OWExNzFiZGNlYmFhODE4MjZlOTIzMDIwNGNkNTcyN2JhZWM3MGUwNg==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ MDAzYWU4ODRmODA0YTU3NjMwYmE3NzYzMjUxZDI1NmI4MmY2OGNlNzIxZmE0
10
+ MzNiNmM1OTUzNTUyOGYzZjExZDVjYTFhNDE1MGNjNWM4YzAxODhhMDM2NjE4
11
+ NGIyOGQ0ZTI1M2NjMDg4MmYyNTBhYTc3ODUzMzM5OTY4YmY0M2Y=
12
+ data.tar.gz: !binary |-
13
+ OTkxYTMwYjg5MTQ1MGJlMjcxMTk4MGQzNDZjOTdmZjI0OTU1MjdlMGU3MGEw
14
+ ZTQ0ZDhkNTI2Nzc4ZmRjYmE0NzgwNzU3YzI4NjczZDdkMGM3OTM1YjgwOTY4
15
+ ZDVkMDJjMjNmMDc2ZTI2NWZjN2VmZjc5MTdjNzQwMGFhNmQ0MTI=
@@ -1,6 +1,16 @@
1
1
  require "cf/cli/service/base"
2
2
 
3
3
  module CF::Service
4
+ USER_PROVIDED_OFFERING = "user-provided" # I'd rather move this to CFoundry
5
+
6
+ class UPDummy
7
+ def label
8
+ "user-provided"
9
+ end
10
+
11
+ attr_reader :version, :provider
12
+ end
13
+
4
14
  class Create < Base
5
15
  offerings_from_label = proc { |label, offerings|
6
16
  offerings.select { |s| s.label == label }
@@ -46,6 +56,8 @@ module CF::Service
46
56
  end
47
57
  finalize
48
58
 
59
+ offerings << UPDummy.new
60
+
49
61
  selected_offerings = offerings.any? ? Array(input[:offering, offerings.sort_by(&:label)]) : []
50
62
  finalize
51
63
 
@@ -55,48 +67,80 @@ module CF::Service
55
67
 
56
68
  offering = selected_offerings.first
57
69
 
58
- service = client.service_instance
59
- service.name = input[:name, offering]
60
- finalize
61
- plan = input[:plan, offering.service_plans]
62
- finalize
63
- service.service_plan = if plan.is_a?(String)
64
- offering.service_plans.find { |p| p.name.casecmp(plan) == 0 }
65
- else
66
- plan
67
- end
68
- service.space = client.current_space
69
-
70
- with_progress("Creating service #{c(service.name, :name)}") do
71
- service.create!
70
+ if offering.label == CF::Service::USER_PROVIDED_OFFERING
71
+ service_instance = client.user_provided_service_instance
72
+ service_instance.name = input[:name, offering]
73
+ finalize
74
+
75
+ service_instance.credentials = ask_credentials # input[:credentials]
76
+ else
77
+ service_instance = client.service_instance
78
+ service_instance.name = input[:name, offering]
79
+ finalize
80
+
81
+ plan = input[:plan, offering.service_plans]
82
+ finalize
83
+ service_instance.service_plan = if plan.is_a?(String)
84
+ offering.service_plans.find { |p| p.name.casecmp(plan) == 0 }
85
+ else
86
+ plan
87
+ end
88
+ end
89
+
90
+ service_instance.space = client.current_space
91
+
92
+ with_progress("Creating service #{c(service_instance.name, :name)}") do
93
+ service_instance.create!
72
94
  end
73
95
 
74
96
  app = input[:app]
75
97
  finalize
76
98
 
77
99
  if app
78
- invoke :bind_service, :service => service, :app => app
100
+ invoke :bind_service, :service => service_instance, :app => app
79
101
  end
80
- service
102
+ service_instance
81
103
  end
82
104
 
83
105
  private
84
106
 
107
+ def ask_credentials
108
+ credentials = {}
109
+ line("What credentials parameters should applications use to connect to this service instance? (e.g. key: uri, value: mysql://username:password@hostname:port/name)")
110
+
111
+ while true
112
+ key = ask("Key")
113
+ finalize
114
+ value = ask("Value")
115
+ finalize
116
+ credentials[key] = value
117
+
118
+ break unless ask("Another credentials parameter?", :default => false)
119
+ end
120
+
121
+ credentials
122
+ end
123
+
85
124
  def ask_offering(offerings)
86
125
  [ask("What kind?", :choices => offerings.sort_by(&:label),
87
- :display => proc { |s|
126
+ :display => proc do |s|
88
127
  str = "#{c(s.label, :name)} #{s.version}"
89
128
  if s.provider != "core"
90
129
  str << ", via #{s.provider}"
91
130
  end
92
131
  str
93
- },
132
+ end,
94
133
  :complete => proc { |s| "#{s.label} #{s.version}" })]
95
134
  end
96
135
 
97
136
  def ask_name(offering)
98
- random = sprintf("%x", rand(1000000))
99
- ask "Name?", :default => "#{offering.label}-#{random}"
137
+ default = nil
138
+ unless offering == CF::Service::USER_PROVIDED_OFFERING
139
+ random = sprintf("%x", rand(1000000))
140
+ default = "#{offering.label}-#{random}"
141
+ end
142
+
143
+ ask "Name?", :default => default
100
144
  end
101
145
 
102
146
  def ask_plan(plans)
@@ -1,3 +1,3 @@
1
1
  module CF
2
- VERSION = "4.2.7".freeze
2
+ VERSION = "4.2.8.rc1".freeze
3
3
  end
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+ gem 'bundler'
3
+ gem 'sinatra'
4
+ gem 'json'
@@ -0,0 +1,17 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ json (1.5.1)
5
+ rack (1.2.2)
6
+ sinatra (1.2.1)
7
+ rack (~> 1.1)
8
+ tilt (>= 1.2.2, < 2.0)
9
+ tilt (1.2.2)
10
+
11
+ PLATFORMS
12
+ ruby
13
+
14
+ DEPENDENCIES
15
+ bundler
16
+ json
17
+ sinatra
@@ -0,0 +1,58 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'sinatra'
4
+ require 'json'
5
+
6
+ $stdout.sync = true
7
+
8
+ def dump_env(fmt)
9
+ if fmt == 'html' || fmt == nil
10
+ res = ''
11
+ ENV.each do |k, v|
12
+ res << "#{k}: #{v}<br/>"
13
+ end
14
+ res
15
+ elsif fmt == 'json'
16
+ res = {}
17
+ ENV.each do |k, v|
18
+ res[k] = v
19
+ end
20
+ puts res
21
+ res.to_json
22
+ end
23
+ end
24
+
25
+ get '/' do
26
+ dump_env('html')
27
+ end
28
+
29
+ get '/healthcheck' do
30
+ "OK"
31
+ end
32
+
33
+ get '/env' do
34
+ dump_env('json')
35
+ end
36
+
37
+
38
+ get '/services' do
39
+ app_instance = JSON.parse(ENV['VCAP_APPLICATION'])
40
+ services = JSON.parse(ENV['VCAP_SERVICES'])
41
+
42
+ valid_services = false
43
+ service_list = []
44
+ services.each do |k, v|
45
+ v.each do |i|
46
+ s = {}
47
+ s['vendor'] = k.split('-')[0]
48
+ s['name'] = i['name']
49
+ service_list << s
50
+ valid_services = true
51
+ end
52
+ end
53
+ response = "{\"status\":\"ok\", \"services\": #{service_list.to_json}}" if valid_services
54
+ response = "{\"status\":\"fail\", \"services\": []}" if !valid_services
55
+
56
+ puts "my response: #{response}"
57
+ response
58
+ end
@@ -94,6 +94,38 @@ module CF
94
94
  capture_output { command }
95
95
  end
96
96
  end
97
+
98
+ describe "when selecting the user-provided service" do
99
+ let(:services) { [build(:service), build(:service)] }
100
+ let(:user_provided_service) { build(:service, label: "user-provided")}
101
+
102
+ before do
103
+ client.stub(:services).and_return(services)
104
+ end
105
+
106
+ it "asks for an instance name and credentials" do
107
+ should_ask("What kind?", hash_including(choices: include(has_label("user-provided")))) { user_provided_service }
108
+ should_ask("Name?", anything) { "user-provided-service-name-1" }
109
+
110
+ should_print("What credentials parameters should applications use to connect to this service instance? (e.g. key: uri, value: mysql://username:password@hostname:port/name)")
111
+ should_ask("Key") { "host" }
112
+ should_ask("Value") { "example.com" }
113
+ should_ask("Another credentials parameter?", anything) { true }
114
+ should_ask("Key") { "port" }
115
+ should_ask("Value") { 8080 }
116
+ should_ask("Another credentials parameter?", anything) { false }
117
+ mock_with_progress("Creating service user-provided-service-name-1")
118
+
119
+ instance = client.user_provided_service_instance
120
+ client.should_receive(:user_provided_service_instance).and_return(instance)
121
+ instance.should_receive(:create!)
122
+
123
+ capture_output { command }
124
+
125
+ instance.credentials['host'].should == 'example.com'
126
+ instance.credentials['port'].should == 8080
127
+ end
128
+ end
97
129
  end
98
130
  end
99
131
  end
@@ -48,23 +48,28 @@ module CF
48
48
  let(:current_space) { build(:space, :name => "the space") }
49
49
 
50
50
  subject do
51
- capture_output { Mothership.new.invoke(:services, inputs, given, global) }
51
+ capture_output { CF::CLI.new.invoke(:services, inputs, given, global) }
52
52
  end
53
53
 
54
54
  before do
55
- stub_client_and_precondition
55
+ stub_client
56
56
  client.stub(:service_bindings).and_return([service_binding])
57
57
  end
58
58
 
59
- it "produces a table of services" do
60
- subject
61
- stdout.rewind
62
- output = stdout.read
59
+ context "when the user is targeted to a space" do
60
+ before do
61
+ stub_precondition
62
+ end
63
63
 
64
- expect(output).to match /Getting services in the space.*OK/
64
+ it "produces a table of services" do
65
+ subject
66
+ stdout.rewind
67
+ output = stdout.read
65
68
 
66
- expect(output).to match /name\s+service\s+provider\s+version\s+plan\s+bound apps/
67
- expect(output).to match /service-instance-.+?\s+ # name
69
+ expect(output).to match /Getting services in the space.*OK/
70
+
71
+ expect(output).to match /name\s+service\s+provider\s+version\s+plan\s+bound apps/
72
+ expect(output).to match /service-instance-.+?\s+ # name
68
73
  service-.*?\s+ # service
69
74
  provider.*?\s+ # provider
70
75
  service_version\s+ # version
@@ -72,21 +77,21 @@ module CF
72
77
  app-name-\d+\s+ # bound apps
73
78
  /x
74
79
 
75
- end
80
+ end
76
81
 
77
- context "when one of the services does not have a service plan" do
78
- let(:service_instances) { [service1, service2]}
79
- let(:service2) { build(:service_instance, :service_plan => nil, :service_bindings => [service_binding]) }
80
- it 'still produces a table of service' do
81
- subject
82
- stdout.rewind
83
- output = stdout.read
82
+ context "when one of the services does not have a service plan" do
83
+ let(:service_instances) { [service1, service2]}
84
+ let(:service2) { build(:service_instance, :service_plan => nil, :service_bindings => [service_binding]) }
85
+ it 'still produces a table of service' do
86
+ subject
87
+ stdout.rewind
88
+ output = stdout.read
84
89
 
85
- expect(output).to match /Getting services in the space.*OK/
90
+ expect(output).to match /Getting services in the space.*OK/
86
91
 
87
- expect(output).to match /name\s+service\s+provider\s+version\s+plan\s+bound apps/
92
+ expect(output).to match /name\s+service\s+provider\s+version\s+plan\s+bound apps/
88
93
 
89
- expect(output).to match /service-instance-.+?\s+ # name
94
+ expect(output).to match /service-instance-.+?\s+ # name
90
95
  service-.*?\s+ # service
91
96
  provider.*?\s+ # provider
92
97
  service_version\s+ # version
@@ -94,23 +99,46 @@ module CF
94
99
  app-name-\d+\s+ # bound apps
95
100
  /x
96
101
 
97
- expect(output).to match /service-instance-.+?\s+ # name
102
+ expect(output).to match /service-instance-.+?\s+ # name
98
103
  none\s+ # service
99
104
  none\s+ # provider
100
105
  none\s+ # version
101
106
  none\s+ # plan
102
107
  app-name-\d+\s+ # bound apps
103
108
  /x
109
+ end
110
+ end
111
+
112
+ context 'when given --marketplace argument' do
113
+ it 'lists services on the target' do
114
+ client.stub(:services => Array.new(3) { build(:service) })
115
+ cf %W[services --marketplace]
116
+ expect(output).to say("Getting services... OK")
117
+ expect(output).to say(/service\s+version\s+provider\s+plans\s+description/)
118
+ end
104
119
  end
105
120
  end
106
121
 
122
+ context "when the user is not targeted to a space" do
123
+ before do
124
+ service_command.stub(:check_logged_in).and_return(true)
125
+ client.stub(:current_organization).and_return(true)
126
+ end
127
+ let(:service_command) { CF::Service::Services.new(nil, {}) }
128
+ let(:current_space) { nil }
129
+
130
+ subject do
131
+ capture_output { service_command.execute(:services, inputs, global) }
132
+
133
+ #capture_output { CF::CLI.new.invoke(:services, inputs, given, global) }
134
+ end
135
+
136
+ it "returns an error" do
137
+ subject
138
+ stdout.rewind
139
+ output = stderr.read
107
140
 
108
- context 'when given --marketplace argument' do
109
- it 'lists services on the target' do
110
- client.stub(:services => Array.new(3) { build(:service) })
111
- cf %W[services --marketplace]
112
- expect(output).to say("Getting services... OK")
113
- expect(output).to say(/service\s+version\s+provider\s+plans\s+description/)
141
+ expect(output.to_s).to match "Please select a space with 'cf target --space SPACE_NAME'"
114
142
  end
115
143
  end
116
144
  end
@@ -6,10 +6,23 @@ if ENV['CF_V2_RUN_INTEGRATION']
6
6
  login
7
7
  end
8
8
 
9
+ describe "listing services" do
10
+ it "shows all service instances in the space" do
11
+ pending "Need a test environment to run this against. A1 should soon contain the necessary changes - DS & RT"
12
+ service1 = "some-provided-instance-#{Time.now.to_i}"
13
+ service2 = "cf-managed-instance-#{Time.now.to_i}"
14
+ create_service_instance("user-provided", service1, credentials: { hostname: "myservice.com"} )
15
+ create_service_instance("1", service2, plan: "1")
16
+
17
+ BlueShell::Runner.run("#{cf_bin} services") do |runner|
18
+ expect(runner).to say /#{service1}\s+none\s+none\s+none\s+none\s+.*/
19
+ end
20
+
21
+ end
22
+ end
23
+
9
24
  describe "creating a service" do
10
25
  describe "when the user leaves the line blank for a plan" do
11
- let(:services) { [selected_service] }
12
-
13
26
  it "re-prompts for the plan" do
14
27
  BlueShell::Runner.run("#{cf_bin} create-service") do |runner|
15
28
  expect(runner).to say "What kind?"
@@ -22,6 +35,75 @@ if ENV['CF_V2_RUN_INTEGRATION']
22
35
  end
23
36
  end
24
37
  end
38
+
39
+ describe "when the service is a user-provided instance" do
40
+ let(:service_name) { "my-private-db-#{Random.rand(1000) + 1000}"}
41
+
42
+ it "can create a service instance" do
43
+ pending "Need a test environment to run this against. A1 should soon contain the necessary changes - DS & RT"
44
+ BlueShell::Runner.run("#{cf_bin} create-service") do |runner|
45
+ expect(runner).to say "What kind?"
46
+ runner.send_keys "user-provided"
47
+
48
+ expect(runner).to say "Name?"
49
+ runner.send_keys service_name
50
+
51
+ expect(runner).to say "What credentials parameters should applications use to connect to this service instance? (e.g. key: uri, value: mysql://username:password@hostname:port/name)
52
+ Key"
53
+ runner.send_keys "hostname"
54
+ expect(runner).to say "Value"
55
+ runner.send_keys "myserviceinstance.com"
56
+ expect(runner).to say "Another credentials parameter?"
57
+ runner.send_keys "n"
58
+
59
+ expect(runner).to say /Creating service #{service_name}.+ OK/
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ describe "binding to a service" do
66
+ let(:app_folder) { "env" }
67
+ let(:app_name) { "services_env_test_app" }
68
+
69
+ let(:service_name) { "some-provided-instance-#{Time.now.to_i}" }
70
+
71
+ xit "can bind and unbind user-provided services to apps" do
72
+ pending "Unbind needs to work -- RT + WR"
73
+ push_app(app_folder, app_name, start_command: "'bundle exec ruby env_test.rb -p $PORT'", timeout: 90)
74
+ create_service_instance("user-provided", service_name, credentials: { hostname: "myservice.com"} )
75
+
76
+ BlueShell::Runner.run("#{cf_bin} bind-service") do |runner|
77
+ expect(runner).to say "Which application?>"
78
+ runner.send_keys app_name
79
+
80
+ expect(runner).to say "Which service?>"
81
+ runner.send_keys service_name
82
+
83
+ expect(runner).to say "Binding #{service_name} to #{app_name}... OK"
84
+ end
85
+
86
+ BlueShell::Runner.run("#{cf_bin} unbind-service") do |runner|
87
+ expect(runner).to say "Which application?"
88
+ runner.send_keys app_name
89
+
90
+
91
+ end
92
+ end
93
+
94
+ after do
95
+ delete_app(app_name)
96
+ end
97
+
98
+ def delete_app(app_name, routes=true)
99
+ delete_cmd = "#{cf_bin} delete #{app_name}"
100
+ delete_cmd + " --routes" if routes
101
+ BlueShell::Runner.run(delete_cmd) do |runner|
102
+ expect(runner).to say "Really delete #{app_name}?"
103
+ runner.send_keys "y"
104
+ expect(runner).to say "Deleting #{app_name}... OK"
105
+ end
106
+ end
25
107
  end
26
108
  end
27
109
  end
@@ -97,7 +97,6 @@ if ENV["CF_V2_RUN_INTEGRATION"]
97
97
  expect(runner).to say "Uploading #{app}... OK", 180
98
98
  expect(runner).to say "Preparing to start #{app}... OK", 180
99
99
  expect(runner).to say "Checking status of app '#{app}'...", 180
100
- expect(runner).to say "0 of 1 instances running (1 starting)"
101
100
  expect(runner).to say "1 of 1 instances running"
102
101
  expect(runner).to say "Push successful! App '#{app}' available at http://#{subdomain}.a1-app.cf-app.com", 30
103
102
  end
@@ -28,9 +28,45 @@ module FeaturesHelper
28
28
  end
29
29
  end
30
30
 
31
- def push_app(app_folder, deployed_app_name)
31
+ def create_service_instance(service_name, instance_name, opts = {})
32
+ plan_name = opts[:plan]
33
+ credentials = opts[:credentials]
34
+
35
+ BlueShell::Runner.run("#{cf_bin} create-service") do |runner|
36
+ expect(runner).to say "What kind?>"
37
+ runner.send_keys service_name
38
+
39
+ expect(runner).to say "Name?>"
40
+ runner.send_keys instance_name
41
+
42
+ if service_name == "user-provided"
43
+ credentials.keys.each_with_index do |k, i|
44
+ expect(runner).to say "Key"
45
+ runner.send_keys k
46
+ expect(runner).to say "Value"
47
+ runner.send_keys credentials[k]
48
+ expect(runner).to say "Another credentials parameter?"
49
+ if i < credentials.size - 1
50
+ runner.send_keys "y"
51
+ else
52
+ runner.send_keys "n"
53
+ end
54
+ end
55
+ else
56
+ expect(runner).to say "Which plan?"
57
+ runner.send_keys plan_name
58
+ end
59
+
60
+ expect(runner).to say "Creating service #{instance_name}... OK"
61
+ end
62
+ end
63
+
64
+ def push_app(app_folder, deployed_app_name, opts = {})
65
+ push_cmd = "#{cf_bin} push --no-manifest"
66
+ push_cmd += " --command #{opts[:start_command]}" if opts[:start_command]
67
+
32
68
  Dir.chdir("#{SPEC_ROOT}/assets/#{app_folder}") do
33
- BlueShell::Runner.run("#{cf_bin} push --no-manifest") do |runner|
69
+ BlueShell::Runner.run(push_cmd) do |runner|
34
70
  expect(runner).to say "Name>"
35
71
  runner.send_keys deployed_app_name
36
72
 
@@ -59,7 +95,9 @@ module FeaturesHelper
59
95
  runner.send_return
60
96
  end
61
97
 
62
- runner.wait_for_exit
98
+ expect(runner).to say "Push successful!"
99
+
100
+ runner.wait_for_exit opts[:timeout] || 30
63
101
  end
64
102
  end
65
103
  end
@@ -7,6 +7,14 @@ module InteractHelper
7
7
  CF::CLI.any_instance.should_receive(:ask).with(*args, &block)
8
8
  end
9
9
 
10
+ def should_print(*args, &block)
11
+ CF::CLI.any_instance.should_receive(:line).with(*args, &block)
12
+ end
13
+
14
+ def should_print_error(*args, &block)
15
+ CF::CLI.any_instance.should_receive(:err).with(*args, &block)
16
+ end
17
+
10
18
  def dont_allow_ask(*args)
11
19
  CF::CLI.any_instance.should_not_receive(:ask).with(*args)
12
20
  end
@@ -0,0 +1,5 @@
1
+ RSpec::Matchers.define :has_label do |expected|
2
+ match do |actual|
3
+ actual.label == expected
4
+ end
5
+ end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cf
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.7
5
- prerelease:
4
+ version: 4.2.8.rc1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Cloud Foundry Team
@@ -10,12 +9,11 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-07-24 00:00:00.000000000 Z
12
+ date: 2013-07-26 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: addressable
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
18
  - - ~>
21
19
  - !ruby/object:Gem::Version
@@ -23,7 +21,6 @@ dependencies:
23
21
  type: :runtime
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
25
  - - ~>
29
26
  - !ruby/object:Gem::Version
@@ -31,7 +28,6 @@ dependencies:
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: caldecott-client
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
32
  - - ~>
37
33
  - !ruby/object:Gem::Version
@@ -39,7 +35,6 @@ dependencies:
39
35
  type: :runtime
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
39
  - - ~>
45
40
  - !ruby/object:Gem::Version
@@ -47,23 +42,20 @@ dependencies:
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: cfoundry
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
46
  - - ~>
53
47
  - !ruby/object:Gem::Version
54
- version: 4.0.1
48
+ version: 4.0.2.rc5
55
49
  type: :runtime
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
52
  requirements:
60
53
  - - ~>
61
54
  - !ruby/object:Gem::Version
62
- version: 4.0.1
55
+ version: 4.0.2.rc5
63
56
  - !ruby/object:Gem::Dependency
64
57
  name: interact
65
58
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
59
  requirements:
68
60
  - - ~>
69
61
  - !ruby/object:Gem::Version
@@ -71,7 +63,6 @@ dependencies:
71
63
  type: :runtime
72
64
  prerelease: false
73
65
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
66
  requirements:
76
67
  - - ~>
77
68
  - !ruby/object:Gem::Version
@@ -79,7 +70,6 @@ dependencies:
79
70
  - !ruby/object:Gem::Dependency
80
71
  name: json_pure
81
72
  requirement: !ruby/object:Gem::Requirement
82
- none: false
83
73
  requirements:
84
74
  - - ~>
85
75
  - !ruby/object:Gem::Version
@@ -87,7 +77,6 @@ dependencies:
87
77
  type: :runtime
88
78
  prerelease: false
89
79
  version_requirements: !ruby/object:Gem::Requirement
90
- none: false
91
80
  requirements:
92
81
  - - ~>
93
82
  - !ruby/object:Gem::Version
@@ -95,7 +84,6 @@ dependencies:
95
84
  - !ruby/object:Gem::Dependency
96
85
  name: mothership
97
86
  requirement: !ruby/object:Gem::Requirement
98
- none: false
99
87
  requirements:
100
88
  - - ! '>='
101
89
  - !ruby/object:Gem::Version
@@ -106,7 +94,6 @@ dependencies:
106
94
  type: :runtime
107
95
  prerelease: false
108
96
  version_requirements: !ruby/object:Gem::Requirement
109
- none: false
110
97
  requirements:
111
98
  - - ! '>='
112
99
  - !ruby/object:Gem::Version
@@ -117,7 +104,6 @@ dependencies:
117
104
  - !ruby/object:Gem::Dependency
118
105
  name: multi_json
119
106
  requirement: !ruby/object:Gem::Requirement
120
- none: false
121
107
  requirements:
122
108
  - - ~>
123
109
  - !ruby/object:Gem::Version
@@ -125,7 +111,6 @@ dependencies:
125
111
  type: :runtime
126
112
  prerelease: false
127
113
  version_requirements: !ruby/object:Gem::Requirement
128
- none: false
129
114
  requirements:
130
115
  - - ~>
131
116
  - !ruby/object:Gem::Version
@@ -133,7 +118,6 @@ dependencies:
133
118
  - !ruby/object:Gem::Dependency
134
119
  name: rest-client
135
120
  requirement: !ruby/object:Gem::Requirement
136
- none: false
137
121
  requirements:
138
122
  - - ~>
139
123
  - !ruby/object:Gem::Version
@@ -141,7 +125,6 @@ dependencies:
141
125
  type: :runtime
142
126
  prerelease: false
143
127
  version_requirements: !ruby/object:Gem::Requirement
144
- none: false
145
128
  requirements:
146
129
  - - ~>
147
130
  - !ruby/object:Gem::Version
@@ -149,7 +132,6 @@ dependencies:
149
132
  - !ruby/object:Gem::Dependency
150
133
  name: uuidtools
151
134
  requirement: !ruby/object:Gem::Requirement
152
- none: false
153
135
  requirements:
154
136
  - - ~>
155
137
  - !ruby/object:Gem::Version
@@ -157,7 +139,6 @@ dependencies:
157
139
  type: :runtime
158
140
  prerelease: false
159
141
  version_requirements: !ruby/object:Gem::Requirement
160
- none: false
161
142
  requirements:
162
143
  - - ~>
163
144
  - !ruby/object:Gem::Version
@@ -165,7 +146,6 @@ dependencies:
165
146
  - !ruby/object:Gem::Dependency
166
147
  name: anchorman
167
148
  requirement: !ruby/object:Gem::Requirement
168
- none: false
169
149
  requirements:
170
150
  - - ! '>='
171
151
  - !ruby/object:Gem::Version
@@ -173,7 +153,6 @@ dependencies:
173
153
  type: :development
174
154
  prerelease: false
175
155
  version_requirements: !ruby/object:Gem::Requirement
176
- none: false
177
156
  requirements:
178
157
  - - ! '>='
179
158
  - !ruby/object:Gem::Version
@@ -181,7 +160,6 @@ dependencies:
181
160
  - !ruby/object:Gem::Dependency
182
161
  name: blue-shell
183
162
  requirement: !ruby/object:Gem::Requirement
184
- none: false
185
163
  requirements:
186
164
  - - ! '>='
187
165
  - !ruby/object:Gem::Version
@@ -189,7 +167,6 @@ dependencies:
189
167
  type: :development
190
168
  prerelease: false
191
169
  version_requirements: !ruby/object:Gem::Requirement
192
- none: false
193
170
  requirements:
194
171
  - - ! '>='
195
172
  - !ruby/object:Gem::Version
@@ -197,7 +174,6 @@ dependencies:
197
174
  - !ruby/object:Gem::Dependency
198
175
  name: factory_girl
199
176
  requirement: !ruby/object:Gem::Requirement
200
- none: false
201
177
  requirements:
202
178
  - - ! '>='
203
179
  - !ruby/object:Gem::Version
@@ -205,7 +181,6 @@ dependencies:
205
181
  type: :development
206
182
  prerelease: false
207
183
  version_requirements: !ruby/object:Gem::Requirement
208
- none: false
209
184
  requirements:
210
185
  - - ! '>='
211
186
  - !ruby/object:Gem::Version
@@ -213,7 +188,6 @@ dependencies:
213
188
  - !ruby/object:Gem::Dependency
214
189
  name: fakefs
215
190
  requirement: !ruby/object:Gem::Requirement
216
- none: false
217
191
  requirements:
218
192
  - - ~>
219
193
  - !ruby/object:Gem::Version
@@ -221,7 +195,6 @@ dependencies:
221
195
  type: :development
222
196
  prerelease: false
223
197
  version_requirements: !ruby/object:Gem::Requirement
224
- none: false
225
198
  requirements:
226
199
  - - ~>
227
200
  - !ruby/object:Gem::Version
@@ -229,7 +202,6 @@ dependencies:
229
202
  - !ruby/object:Gem::Dependency
230
203
  name: ffaker
231
204
  requirement: !ruby/object:Gem::Requirement
232
- none: false
233
205
  requirements:
234
206
  - - '='
235
207
  - !ruby/object:Gem::Version
@@ -237,7 +209,6 @@ dependencies:
237
209
  type: :development
238
210
  prerelease: false
239
211
  version_requirements: !ruby/object:Gem::Requirement
240
- none: false
241
212
  requirements:
242
213
  - - '='
243
214
  - !ruby/object:Gem::Version
@@ -245,7 +216,6 @@ dependencies:
245
216
  - !ruby/object:Gem::Dependency
246
217
  name: gem-release
247
218
  requirement: !ruby/object:Gem::Requirement
248
- none: false
249
219
  requirements:
250
220
  - - ! '>='
251
221
  - !ruby/object:Gem::Version
@@ -253,7 +223,6 @@ dependencies:
253
223
  type: :development
254
224
  prerelease: false
255
225
  version_requirements: !ruby/object:Gem::Requirement
256
- none: false
257
226
  requirements:
258
227
  - - ! '>='
259
228
  - !ruby/object:Gem::Version
@@ -261,7 +230,6 @@ dependencies:
261
230
  - !ruby/object:Gem::Dependency
262
231
  name: rake
263
232
  requirement: !ruby/object:Gem::Requirement
264
- none: false
265
233
  requirements:
266
234
  - - ~>
267
235
  - !ruby/object:Gem::Version
@@ -269,7 +237,6 @@ dependencies:
269
237
  type: :development
270
238
  prerelease: false
271
239
  version_requirements: !ruby/object:Gem::Requirement
272
- none: false
273
240
  requirements:
274
241
  - - ~>
275
242
  - !ruby/object:Gem::Version
@@ -277,7 +244,6 @@ dependencies:
277
244
  - !ruby/object:Gem::Dependency
278
245
  name: rspec
279
246
  requirement: !ruby/object:Gem::Requirement
280
- none: false
281
247
  requirements:
282
248
  - - ~>
283
249
  - !ruby/object:Gem::Version
@@ -285,7 +251,6 @@ dependencies:
285
251
  type: :development
286
252
  prerelease: false
287
253
  version_requirements: !ruby/object:Gem::Requirement
288
- none: false
289
254
  requirements:
290
255
  - - ~>
291
256
  - !ruby/object:Gem::Version
@@ -293,7 +258,6 @@ dependencies:
293
258
  - !ruby/object:Gem::Dependency
294
259
  name: rspec-instafail
295
260
  requirement: !ruby/object:Gem::Requirement
296
- none: false
297
261
  requirements:
298
262
  - - ~>
299
263
  - !ruby/object:Gem::Version
@@ -301,7 +265,6 @@ dependencies:
301
265
  type: :development
302
266
  prerelease: false
303
267
  version_requirements: !ruby/object:Gem::Requirement
304
- none: false
305
268
  requirements:
306
269
  - - ~>
307
270
  - !ruby/object:Gem::Version
@@ -309,7 +272,6 @@ dependencies:
309
272
  - !ruby/object:Gem::Dependency
310
273
  name: webmock
311
274
  requirement: !ruby/object:Gem::Requirement
312
- none: false
313
275
  requirements:
314
276
  - - ~>
315
277
  - !ruby/object:Gem::Version
@@ -317,7 +279,6 @@ dependencies:
317
279
  type: :development
318
280
  prerelease: false
319
281
  version_requirements: !ruby/object:Gem::Requirement
320
- none: false
321
282
  requirements:
322
283
  - - ~>
323
284
  - !ruby/object:Gem::Version
@@ -450,6 +411,9 @@ files:
450
411
  - spec/admin/curl_spec.rb
451
412
  - spec/admin/guid_spec.rb
452
413
  - spec/admin/set_quota_spec.rb
414
+ - spec/assets/env/env_test.rb
415
+ - spec/assets/env/Gemfile
416
+ - spec/assets/env/Gemfile.lock
453
417
  - spec/assets/hello-sinatra/config.ru
454
418
  - spec/assets/hello-sinatra/fat-cat-makes-app-larger.png
455
419
  - spec/assets/hello-sinatra/Gemfile
@@ -593,6 +557,7 @@ files:
593
557
  - spec/support/fake_home_dir.rb
594
558
  - spec/support/features_helper.rb
595
559
  - spec/support/interact_helper.rb
560
+ - spec/support/matchers.rb
596
561
  - spec/support/shared_examples/errors.rb
597
562
  - spec/support/shared_examples/input.rb
598
563
  - spec/tunnel/plugin_spec.rb
@@ -601,32 +566,34 @@ files:
601
566
  homepage: http://github.com/cloudfoundry/cf
602
567
  licenses:
603
568
  - Apache 2.0
569
+ metadata: {}
604
570
  post_install_message:
605
571
  rdoc_options: []
606
572
  require_paths:
607
573
  - lib
608
574
  required_ruby_version: !ruby/object:Gem::Requirement
609
- none: false
610
575
  requirements:
611
576
  - - ! '>='
612
577
  - !ruby/object:Gem::Version
613
578
  version: '0'
614
579
  required_rubygems_version: !ruby/object:Gem::Requirement
615
- none: false
616
580
  requirements:
617
- - - ! '>='
581
+ - - ! '>'
618
582
  - !ruby/object:Gem::Version
619
- version: '0'
583
+ version: 1.3.1
620
584
  requirements: []
621
585
  rubyforge_project: cf
622
- rubygems_version: 1.8.25
586
+ rubygems_version: 2.0.5
623
587
  signing_key:
624
- specification_version: 3
588
+ specification_version: 4
625
589
  summary: Friendly command-line interface for Cloud Foundry.
626
590
  test_files:
627
591
  - spec/admin/curl_spec.rb
628
592
  - spec/admin/guid_spec.rb
629
593
  - spec/admin/set_quota_spec.rb
594
+ - spec/assets/env/env_test.rb
595
+ - spec/assets/env/Gemfile
596
+ - spec/assets/env/Gemfile.lock
630
597
  - spec/assets/hello-sinatra/config.ru
631
598
  - spec/assets/hello-sinatra/fat-cat-makes-app-larger.png
632
599
  - spec/assets/hello-sinatra/Gemfile
@@ -770,6 +737,7 @@ test_files:
770
737
  - spec/support/fake_home_dir.rb
771
738
  - spec/support/features_helper.rb
772
739
  - spec/support/interact_helper.rb
740
+ - spec/support/matchers.rb
773
741
  - spec/support/shared_examples/errors.rb
774
742
  - spec/support/shared_examples/input.rb
775
743
  - spec/tunnel/plugin_spec.rb