cf 4.2.8 → 4.2.9.rc2

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 658bb15baee12d49dedab15c3e842db99f8bdc81
4
+ data.tar.gz: 7c6bc93e7f5c8c381abc3cfee2736a53ea603f5f
5
+ SHA512:
6
+ metadata.gz: 7b99f6e8a7dcdb928ab74a390cb8011ce4b16ad58b215720e549c45c6d410297109d8ac250ece4828ebbcda73728bf7b3cd0240f65bc23ef0aac7869e03f179c
7
+ data.tar.gz: b9d1b5a8a9425fb8c7936fe51f5ce477a9f2ec100059b28217812f071a2e379abf21dc5138beea43183e77801b782ee72ffbc2d85106274355a3ea539a12bdf3
@@ -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,84 @@ 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 keys = ask("Keys").split(/\s*,\s*/).map(&:strip)
112
+ if bad_key = keys.detect { |key| key !~ /^[-\w]+$/ }
113
+ line("'#{bad_key}' is not a valid key")
114
+ else
115
+ break
116
+ end
117
+ end
118
+ finalize
119
+ keys.each do |key|
120
+ value = ask(key)
121
+ finalize
122
+ credentials[key] = value
123
+ end
124
+
125
+ credentials
126
+ end
127
+
85
128
  def ask_offering(offerings)
86
129
  [ask("What kind?", :choices => offerings.sort_by(&:label),
87
- :display => proc { |s|
130
+ :display => proc do |s|
88
131
  str = "#{c(s.label, :name)} #{s.version}"
89
132
  if s.provider != "core"
90
133
  str << ", via #{s.provider}"
91
134
  end
92
135
  str
93
- },
136
+ end,
94
137
  :complete => proc { |s| "#{s.label} #{s.version}" })]
95
138
  end
96
139
 
97
140
  def ask_name(offering)
98
- random = sprintf("%x", rand(1000000))
99
- ask "Name?", :default => "#{offering.label}-#{random}"
141
+ default = nil
142
+ unless offering == CF::Service::USER_PROVIDED_OFFERING
143
+ random = sprintf("%x", rand(1000000))
144
+ default = "#{offering.label}-#{random}"
145
+ end
146
+
147
+ ask "Name?", :default => default
100
148
  end
101
149
 
102
150
  def ask_plan(plans)
@@ -4,7 +4,7 @@ module CF::Service
4
4
  class Delete < Base
5
5
  desc "Delete a service"
6
6
  group :services, :manage
7
- input :service, :desc => "Service to bind", :argument => :optional,
7
+ input :service, :desc => "Service to delete", :argument => :optional,
8
8
  :from_given => by_name(:service_instance, :service)
9
9
  input :unbind, :desc => "Unbind from applications before deleting?",
10
10
  :type => :boolean, :default => proc { force? || interact }
@@ -76,7 +76,7 @@ module CF::Service
76
76
  plan = i.service_plan
77
77
 
78
78
  unless plan
79
- [ c(i.name, :name), "none", "none", "none", "none", apps]
79
+ [ c(i.name, :name), "user-provided", "none", "none", "none", apps]
80
80
  else
81
81
  service = plan.service
82
82
  label = service.label
data/lib/cf/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module CF
2
- VERSION = "4.2.8".freeze
2
+ VERSION = "4.2.9.rc2".freeze
3
3
  end
@@ -20,7 +20,7 @@ namespace :gem do
20
20
  def generate_release_notes(old_version)
21
21
  print_with_purpose "Generating release notes..."
22
22
  file_name = "release_#{gem_version}"
23
- sh!("anchorman notes --name=#{file_name} --from=v#{old_version}")
23
+ #sh!("anchorman notes --name=#{file_name} --from=v#{old_version}")
24
24
  sh!("git add release_notes")
25
25
  end
26
26
 
@@ -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,37 @@ 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("Keys") { "host, port, user name" }
112
+ should_print("'user name' is not a valid key")
113
+ should_ask("Keys") { "host, port" }
114
+ should_ask("host") { "example.com" }
115
+ should_ask("port") { "8080" }
116
+ mock_with_progress("Creating service user-provided-service-name-1")
117
+
118
+ instance = client.user_provided_service_instance
119
+ client.should_receive(:user_provided_service_instance).and_return(instance)
120
+ instance.should_receive(:create!)
121
+
122
+ capture_output { command }
123
+
124
+ instance.credentials['host'].should == 'example.com'
125
+ instance.credentials['port'].should == '8080'
126
+ end
127
+ end
97
128
  end
98
129
  end
99
130
  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
+
64
+ it "produces a table of services" do
65
+ subject
66
+ stdout.rewind
67
+ output = stdout.read
63
68
 
64
- expect(output).to match /Getting services in the space.*OK/
69
+ expect(output).to match /Getting services in the space.*OK/
65
70
 
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
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,45 +77,69 @@ 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]) }
84
85
 
85
- expect(output).to match /Getting services in the space.*OK/
86
+ it 'still produces a table of service' do
87
+ subject
88
+ stdout.rewind
89
+ output = stdout.read
86
90
 
87
- expect(output).to match /name\s+service\s+provider\s+version\s+plan\s+bound apps/
91
+ expect(output).to match /Getting services in the space.*OK/
88
92
 
89
- expect(output).to match /service-instance-.+?\s+ # name
93
+ expect(output).to match /name\s+service\s+provider\s+version\s+plan\s+bound apps/
94
+
95
+ expect(output).to match /service-instance-.+?\s+ # name
90
96
  service-.*?\s+ # service
91
97
  provider.*?\s+ # provider
92
98
  service_version\s+ # version
93
99
  service-plan-.*?\s+ # plan
94
- app-name-\d+\s+ # bound apps
100
+ app-name-\d+\s+ # bound apps
95
101
  /x
96
102
 
97
- expect(output).to match /service-instance-.+?\s+ # name
98
- none\s+ # service
99
- none\s+ # provider
100
- none\s+ # version
101
- none\s+ # plan
102
- app-name-\d+\s+ # bound apps
103
+ expect(output).to match /service-instance-.+?\s+ # name
104
+ user-provided\s+ # service
105
+ none\s+ # provider
106
+ none\s+ # version
107
+ none\s+ # plan
108
+ app-name-\d+\s+ # bound apps
103
109
  /x
110
+ end
111
+ end
112
+
113
+ context 'when given --marketplace argument' do
114
+ it 'lists services on the target' do
115
+ client.stub(:services => Array.new(3) { build(:service) })
116
+ cf %W[services --marketplace]
117
+ expect(output).to say("Getting services... OK")
118
+ expect(output).to say(/service\s+version\s+provider\s+plans\s+description/)
119
+ end
104
120
  end
105
121
  end
106
122
 
123
+ context "when the user is not targeted to a space" do
124
+ before do
125
+ service_command.stub(:check_logged_in).and_return(true)
126
+ client.stub(:current_organization).and_return(true)
127
+ end
128
+ let(:service_command) { CF::Service::Services.new(nil, {}) }
129
+ let(:current_space) { nil }
130
+
131
+ subject do
132
+ capture_output { service_command.execute(:services, inputs, global) }
133
+
134
+ #capture_output { CF::CLI.new.invoke(:services, inputs, given, global) }
135
+ end
136
+
137
+ it "returns an error" do
138
+ subject
139
+ stdout.rewind
140
+ output = stderr.read
107
141
 
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/)
142
+ expect(output.to_s).to match "Please select a space with 'cf target --space SPACE_NAME'"
114
143
  end
115
144
  end
116
145
  end
@@ -6,6 +6,25 @@ if ENV['CF_V2_RUN_INTEGRATION']
6
6
  login
7
7
  end
8
8
 
9
+ describe "listing services" do
10
+ let(:service1) { "some-provided-instance-#{Time.now.to_i}" }
11
+ let(:service2) { "cf-managed-instance-#{Time.now.to_i}" }
12
+
13
+ it "shows all service instances in the space" do
14
+ create_service_instance("user-provided", service1, credentials: { hostname: "myservice.com"} )
15
+ create_service_instance("dummy-dev", service2, plan: "small")
16
+
17
+ BlueShell::Runner.run("#{cf_bin} services") do |runner|
18
+ expect(runner).to say /#{service1}\s+user-provided\s+none\s+none\s+none\s+.*/
19
+ end
20
+ end
21
+
22
+ after do
23
+ delete_service(service1)
24
+ delete_service(service2)
25
+ end
26
+ end
27
+
9
28
  describe "creating a service" do
10
29
  describe "when the user leaves the line blank for a plan" do
11
30
  it "re-prompts for the plan" do
@@ -20,6 +39,84 @@ if ENV['CF_V2_RUN_INTEGRATION']
20
39
  end
21
40
  end
22
41
  end
42
+
43
+ describe "when the service is a user-provided instance" do
44
+ let(:service_name) { "my-private-db-#{Random.rand(1000) + 1000}"}
45
+
46
+ it "can create a service instance" do
47
+ BlueShell::Runner.run("#{cf_bin} create-service") do |runner|
48
+ expect(runner).to say "What kind?"
49
+ runner.send_keys "user-provided"
50
+
51
+ expect(runner).to say "Name?"
52
+ runner.send_keys service_name
53
+
54
+ 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)
55
+ Keys"
56
+ runner.send_keys "hostname"
57
+ expect(runner).to say "hostname"
58
+ runner.send_keys "myserviceinstance.com"
59
+
60
+ expect(runner).to say /Creating service #{service_name}.+ OK/
61
+ end
62
+ end
63
+
64
+ after do
65
+ delete_service(service_name)
66
+ end
67
+ end
68
+ end
69
+
70
+ describe "binding to a service" do
71
+ let(:app_folder) { "env" }
72
+ let(:app_name) { "services_env_test_app-#{Time.now.to_i}" }
73
+
74
+ let(:service_name) { "some-provided-instance-#{Time.now.to_i}" }
75
+
76
+ it "can bind and unbind user-provided services to apps" do
77
+ push_app(app_folder, app_name, start_command: "'bundle exec ruby env_test.rb -p $PORT'", timeout: 90)
78
+ create_service_instance("user-provided", service_name, credentials: { hostname: "myservice.com"} )
79
+
80
+ BlueShell::Runner.run("#{cf_bin} bind-service") do |runner|
81
+ expect(runner).to say "Which application?>"
82
+ runner.send_keys app_name
83
+
84
+ expect(runner).to say "Which service?>"
85
+ runner.send_keys service_name
86
+
87
+ expect(runner).to say "Binding #{service_name} to #{app_name}... OK"
88
+ end
89
+
90
+ BlueShell::Runner.run("#{cf_bin} unbind-service") do |runner|
91
+ expect(runner).to say "Which application?"
92
+ runner.send_keys app_name
93
+
94
+ expect(runner).to say "Which service?>"
95
+ runner.send_keys service_name
96
+
97
+ expect(runner).to say "Unbinding #{service_name} from #{app_name}... OK"
98
+ end
99
+ end
100
+
101
+ after do
102
+ delete_app(app_name)
103
+ end
104
+ end
105
+
106
+ def delete_service(service_name)
107
+ BlueShell::Runner.run("#{cf_bin} delete-service --service #{service_name} --force") do |runner|
108
+ expect(runner).to say "Deleting #{service_name}... OK"
109
+ end
110
+ end
111
+
112
+ def delete_app(app_name, routes=true)
113
+ delete_cmd = "#{cf_bin} delete #{app_name}"
114
+ delete_cmd + " --routes" if routes
115
+ BlueShell::Runner.run(delete_cmd) do |runner|
116
+ expect(runner).to say "Really delete #{app_name}?"
117
+ runner.send_keys "y"
118
+ expect(runner).to say "Deleting #{app_name}... OK"
119
+ end
23
120
  end
24
121
  end
25
122
  end
@@ -28,9 +28,40 @@ 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
+ expect(runner).to say "Keys"
44
+ runner.send_keys credentials.keys.join(", ")
45
+
46
+ credentials.each do |key, value|
47
+ expect(runner).to say key.to_s
48
+ runner.send_keys value.to_s
49
+ end
50
+ else
51
+ expect(runner).to say "Which plan?"
52
+ runner.send_keys plan_name
53
+ end
54
+
55
+ expect(runner).to say "Creating service #{instance_name}... OK"
56
+ end
57
+ end
58
+
59
+ def push_app(app_folder, deployed_app_name, opts = {})
60
+ push_cmd = "#{cf_bin} push --no-manifest"
61
+ push_cmd += " --command #{opts[:start_command]}" if opts[:start_command]
62
+
32
63
  Dir.chdir("#{SPEC_ROOT}/assets/#{app_folder}") do
33
- BlueShell::Runner.run("#{cf_bin} push --no-manifest") do |runner|
64
+ BlueShell::Runner.run(push_cmd) do |runner|
34
65
  expect(runner).to say "Name>"
35
66
  runner.send_keys deployed_app_name
36
67
 
@@ -59,7 +90,9 @@ module FeaturesHelper
59
90
  runner.send_return
60
91
  end
61
92
 
62
- runner.wait_for_exit
93
+ expect(runner).to say "Push successful!"
94
+
95
+ runner.wait_for_exit opts[:timeout] || 30
63
96
  end
64
97
  end
65
98
  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.8
5
- prerelease:
4
+ version: 4.2.9.rc2
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-29 00:00:00.000000000 Z
12
+ date: 2013-07-30 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.3
48
+ version: 4.0.4.rc1
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.3
55
+ version: 4.0.4.rc1
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,31 +139,13 @@ 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
164
145
  version: '2.1'
165
- - !ruby/object:Gem::Dependency
166
- name: anchorman
167
- requirement: !ruby/object:Gem::Requirement
168
- none: false
169
- requirements:
170
- - - ! '>='
171
- - !ruby/object:Gem::Version
172
- version: '0'
173
- type: :development
174
- prerelease: false
175
- version_requirements: !ruby/object:Gem::Requirement
176
- none: false
177
- requirements:
178
- - - ! '>='
179
- - !ruby/object:Gem::Version
180
- version: '0'
181
146
  - !ruby/object:Gem::Dependency
182
147
  name: blue-shell
183
148
  requirement: !ruby/object:Gem::Requirement
184
- none: false
185
149
  requirements:
186
150
  - - ! '>='
187
151
  - !ruby/object:Gem::Version
@@ -189,7 +153,6 @@ dependencies:
189
153
  type: :development
190
154
  prerelease: false
191
155
  version_requirements: !ruby/object:Gem::Requirement
192
- none: false
193
156
  requirements:
194
157
  - - ! '>='
195
158
  - !ruby/object:Gem::Version
@@ -197,7 +160,6 @@ dependencies:
197
160
  - !ruby/object:Gem::Dependency
198
161
  name: factory_girl
199
162
  requirement: !ruby/object:Gem::Requirement
200
- none: false
201
163
  requirements:
202
164
  - - ! '>='
203
165
  - !ruby/object:Gem::Version
@@ -205,7 +167,6 @@ dependencies:
205
167
  type: :development
206
168
  prerelease: false
207
169
  version_requirements: !ruby/object:Gem::Requirement
208
- none: false
209
170
  requirements:
210
171
  - - ! '>='
211
172
  - !ruby/object:Gem::Version
@@ -213,7 +174,6 @@ dependencies:
213
174
  - !ruby/object:Gem::Dependency
214
175
  name: fakefs
215
176
  requirement: !ruby/object:Gem::Requirement
216
- none: false
217
177
  requirements:
218
178
  - - ~>
219
179
  - !ruby/object:Gem::Version
@@ -221,7 +181,6 @@ dependencies:
221
181
  type: :development
222
182
  prerelease: false
223
183
  version_requirements: !ruby/object:Gem::Requirement
224
- none: false
225
184
  requirements:
226
185
  - - ~>
227
186
  - !ruby/object:Gem::Version
@@ -229,7 +188,6 @@ dependencies:
229
188
  - !ruby/object:Gem::Dependency
230
189
  name: ffaker
231
190
  requirement: !ruby/object:Gem::Requirement
232
- none: false
233
191
  requirements:
234
192
  - - '='
235
193
  - !ruby/object:Gem::Version
@@ -237,7 +195,6 @@ dependencies:
237
195
  type: :development
238
196
  prerelease: false
239
197
  version_requirements: !ruby/object:Gem::Requirement
240
- none: false
241
198
  requirements:
242
199
  - - '='
243
200
  - !ruby/object:Gem::Version
@@ -245,7 +202,6 @@ dependencies:
245
202
  - !ruby/object:Gem::Dependency
246
203
  name: gem-release
247
204
  requirement: !ruby/object:Gem::Requirement
248
- none: false
249
205
  requirements:
250
206
  - - ! '>='
251
207
  - !ruby/object:Gem::Version
@@ -253,7 +209,6 @@ dependencies:
253
209
  type: :development
254
210
  prerelease: false
255
211
  version_requirements: !ruby/object:Gem::Requirement
256
- none: false
257
212
  requirements:
258
213
  - - ! '>='
259
214
  - !ruby/object:Gem::Version
@@ -261,7 +216,6 @@ dependencies:
261
216
  - !ruby/object:Gem::Dependency
262
217
  name: rake
263
218
  requirement: !ruby/object:Gem::Requirement
264
- none: false
265
219
  requirements:
266
220
  - - ~>
267
221
  - !ruby/object:Gem::Version
@@ -269,7 +223,6 @@ dependencies:
269
223
  type: :development
270
224
  prerelease: false
271
225
  version_requirements: !ruby/object:Gem::Requirement
272
- none: false
273
226
  requirements:
274
227
  - - ~>
275
228
  - !ruby/object:Gem::Version
@@ -277,7 +230,6 @@ dependencies:
277
230
  - !ruby/object:Gem::Dependency
278
231
  name: rspec
279
232
  requirement: !ruby/object:Gem::Requirement
280
- none: false
281
233
  requirements:
282
234
  - - ~>
283
235
  - !ruby/object:Gem::Version
@@ -285,7 +237,6 @@ dependencies:
285
237
  type: :development
286
238
  prerelease: false
287
239
  version_requirements: !ruby/object:Gem::Requirement
288
- none: false
289
240
  requirements:
290
241
  - - ~>
291
242
  - !ruby/object:Gem::Version
@@ -293,7 +244,6 @@ dependencies:
293
244
  - !ruby/object:Gem::Dependency
294
245
  name: rspec-instafail
295
246
  requirement: !ruby/object:Gem::Requirement
296
- none: false
297
247
  requirements:
298
248
  - - ~>
299
249
  - !ruby/object:Gem::Version
@@ -301,7 +251,6 @@ dependencies:
301
251
  type: :development
302
252
  prerelease: false
303
253
  version_requirements: !ruby/object:Gem::Requirement
304
- none: false
305
254
  requirements:
306
255
  - - ~>
307
256
  - !ruby/object:Gem::Version
@@ -309,7 +258,6 @@ dependencies:
309
258
  - !ruby/object:Gem::Dependency
310
259
  name: webmock
311
260
  requirement: !ruby/object:Gem::Requirement
312
- none: false
313
261
  requirements:
314
262
  - - ~>
315
263
  - !ruby/object:Gem::Version
@@ -317,7 +265,6 @@ dependencies:
317
265
  type: :development
318
266
  prerelease: false
319
267
  version_requirements: !ruby/object:Gem::Requirement
320
- none: false
321
268
  requirements:
322
269
  - - ~>
323
270
  - !ruby/object:Gem::Version
@@ -450,6 +397,9 @@ files:
450
397
  - spec/admin/curl_spec.rb
451
398
  - spec/admin/guid_spec.rb
452
399
  - spec/admin/set_quota_spec.rb
400
+ - spec/assets/env/env_test.rb
401
+ - spec/assets/env/Gemfile
402
+ - spec/assets/env/Gemfile.lock
453
403
  - spec/assets/hello-sinatra/config.ru
454
404
  - spec/assets/hello-sinatra/fat-cat-makes-app-larger.png
455
405
  - spec/assets/hello-sinatra/Gemfile
@@ -602,38 +552,34 @@ files:
602
552
  homepage: http://github.com/cloudfoundry/cf
603
553
  licenses:
604
554
  - Apache 2.0
555
+ metadata: {}
605
556
  post_install_message:
606
557
  rdoc_options: []
607
558
  require_paths:
608
559
  - lib
609
560
  required_ruby_version: !ruby/object:Gem::Requirement
610
- none: false
611
561
  requirements:
612
562
  - - ! '>='
613
563
  - !ruby/object:Gem::Version
614
564
  version: '0'
615
- segments:
616
- - 0
617
- hash: 1212679267713831030
618
565
  required_rubygems_version: !ruby/object:Gem::Requirement
619
- none: false
620
566
  requirements:
621
- - - ! '>='
567
+ - - ! '>'
622
568
  - !ruby/object:Gem::Version
623
- version: '0'
624
- segments:
625
- - 0
626
- hash: 1212679267713831030
569
+ version: 1.3.1
627
570
  requirements: []
628
571
  rubyforge_project: cf
629
- rubygems_version: 1.8.25
572
+ rubygems_version: 2.0.6
630
573
  signing_key:
631
- specification_version: 3
574
+ specification_version: 4
632
575
  summary: Friendly command-line interface for Cloud Foundry.
633
576
  test_files:
634
577
  - spec/admin/curl_spec.rb
635
578
  - spec/admin/guid_spec.rb
636
579
  - spec/admin/set_quota_spec.rb
580
+ - spec/assets/env/env_test.rb
581
+ - spec/assets/env/Gemfile
582
+ - spec/assets/env/Gemfile.lock
637
583
  - spec/assets/hello-sinatra/config.ru
638
584
  - spec/assets/hello-sinatra/fat-cat-makes-app-larger.png
639
585
  - spec/assets/hello-sinatra/Gemfile