engineyard 1.3.18 → 1.3.19

Sign up to get free protection for your applications and to get access to all the features.
@@ -37,8 +37,8 @@ module EY
37
37
  end
38
38
 
39
39
  def apps_for_repo(repo)
40
- raise NoRemotesError.new(repo.path) if repo.urls.empty?
41
- apps.find_all {|a| repo.urls.include?(a.repository_uri) }
40
+ repo.fail_on_no_remotes!
41
+ apps.find_all {|a| repo.has_remote?(a.repository_uri) }
42
42
  end
43
43
 
44
44
  class InvalidCredentials < EY::Error; end
@@ -78,6 +78,27 @@ module EY
78
78
  raise exists ? EnvironmentUnlinkedError.new(options[:environment]) : e
79
79
  end
80
80
 
81
+ desc "status", "Show the deployment status of the app"
82
+ long_desc <<-DESC
83
+ Show the current status of most recent deployment of the specified
84
+ application and environment.
85
+ DESC
86
+ method_option :environment, :type => :string, :aliases => %w(-e),
87
+ :desc => "Environment where the application is deployed"
88
+ method_option :app, :type => :string, :aliases => %w(-a),
89
+ :desc => "Name of the application"
90
+ method_option :account, :type => :string, :aliases => %w(-c),
91
+ :desc => "Name of the account in which the application can be found"
92
+ def status
93
+ app, environment = fetch_app_and_environment(options[:app], options[:environment], options[:account])
94
+ deployment = app.last_deployment_on(environment)
95
+ if deployment
96
+ EY.ui.show_deployment(deployment)
97
+ else
98
+ raise EY::Error, "Application #{app.name} hass not been deployed on #{environment.name}."
99
+ end
100
+ end
101
+
81
102
  desc "environments [--all]", "List environments for this app; use --all to list all environments."
82
103
  long_desc <<-DESC
83
104
  By default, environments for this app are displayed. The --all option will
@@ -89,18 +110,21 @@ module EY
89
110
  def environments
90
111
  if options[:all] && options[:simple]
91
112
  # just put each env
92
- api.environments.each do |environment|
93
- puts environment.name
94
- end
113
+ puts api.environments.map {|env| env.name}
114
+ elsif options[:all]
115
+ EY.ui.print_envs(api.apps, EY.config.default_environment, options[:simple])
95
116
  else
96
- apps = get_apps(options[:all])
97
- if !options[:all] && apps.size > 1
117
+ apps = api.apps_for_repo(repo)
118
+
119
+ if apps.size > 1
98
120
  message = "This git repo matches multiple Applications in AppCloud:\n"
99
121
  apps.each { |app| message << "\t#{app.name}\n" }
100
122
  message << "The following environments contain those applications:\n\n"
101
123
  EY.ui.warn(message)
124
+ elsif apps.empty?
125
+ EY.ui.warn(NoAppError.new(repo).message)
102
126
  end
103
- EY.ui.warn(NoAppError.new(repo).message) unless apps.any? || options[:all]
127
+
104
128
  EY.ui.print_envs(apps, EY.config.default_environment, options[:simple])
105
129
  end
106
130
  end
@@ -75,9 +75,7 @@ module EY
75
75
  def print_envs(apps, default_env_name = nil, simple = false)
76
76
  if simple
77
77
  envs = apps.map{ |a| a.environments }
78
- envs.flatten.map{|x| x.name}.uniq.each do |env|
79
- puts env
80
- end
78
+ puts envs.flatten.map{|x| x.name}.uniq
81
79
  else
82
80
  apps.each do |app|
83
81
  puts "#{app.name} (#{app.account.name})"
@@ -101,6 +99,37 @@ module EY
101
99
  end
102
100
  end
103
101
 
102
+ def show_deployment(dep)
103
+ puts "# Status of last deployment of #{dep.app.account.name}/#{dep.app.name}/#{dep.environment.name}:"
104
+ puts "#"
105
+
106
+ output = []
107
+ output << ["Account", dep.app.account.name]
108
+ output << ["Application", dep.app.name]
109
+ output << ["Environment", dep.environment.name]
110
+ output << ["Input Ref", dep.ref]
111
+ output << ["Resolved Ref", dep.ref]
112
+ output << ["Commit", dep.commit || '(Unable to resolve)']
113
+ output << ["Migrate", dep.migrate]
114
+ output << ["Migrate command", dep.migrate_command] if dep.migrate
115
+ output << ["Deployed by", dep.user_name]
116
+ output << ["Created at", dep.created_at]
117
+ output << ["Finished at", dep.finished_at]
118
+
119
+ output.each do |att, val|
120
+ puts "# %-15s %s" % ["#{att}:", val.to_s]
121
+ end
122
+ puts "#"
123
+
124
+ if dep.successful?
125
+ info 'Deployment was successful.'
126
+ elsif dep.finished_at.nil?
127
+ warn 'Deployment is not finished.'
128
+ else
129
+ say_with_status('Deployment failed.', nil, :red)
130
+ end
131
+ end
132
+
104
133
  def print_exception(e)
105
134
  if e.message.empty? || (e.message == e.class.to_s)
106
135
  message = nil
@@ -4,9 +4,9 @@ module EY
4
4
  module Collection
5
5
  class Abstract < Array
6
6
  COLLAB_MESSAGE = <<-MSG
7
- \nThis error is due to having access to another account's resources via the beta collaboration feature.
8
- We are working on letting you specify the account name to resolve this ambiguity.
9
- MSG
7
+ \nThis error is due to having access to another account's resources via the collaboration feature.
8
+ Specify --account ACCOUNT_NAME to resolve this ambiguity.
9
+ MSG
10
10
 
11
11
  def named(name, account_name=nil)
12
12
  candidates = find_all do |x|
@@ -25,17 +25,17 @@ module EY
25
25
 
26
26
  class NoAppError < Error
27
27
  def initialize(repo)
28
- error = [%|There is no application configured for any of the following remotes:|]
29
- repo.urls.each{|url| error << %|\t#{url}| }
30
- error << %|You can add this application at #{EY.config.endpoint}|
31
- super error.join("\n")
28
+ super <<-ERROR
29
+ There is no application configured for any of the following remotes:
30
+ \t#{repo ? repo.urls.join("\n\t") : "No remotes found."}
31
+ You can add this application at #{EY.config.endpoint}
32
+ ERROR
32
33
  end
33
34
  end
34
35
 
35
36
  class InvalidAppError < Error
36
37
  def initialize(name)
37
- error = %|There is no app configured with the name "#{name}"|
38
- super error
38
+ super %|There is no app configured with the name "#{name}"|
39
39
  end
40
40
  end
41
41
 
@@ -23,6 +23,10 @@ module EY
23
23
  sole_environment or raise NoSingleEnvironmentError.new(self)
24
24
  end
25
25
 
26
+ def last_deployment_on(environment)
27
+ Deployment.last(self, environment, api)
28
+ end
29
+
26
30
  end
27
31
  end
28
32
  end
@@ -2,7 +2,28 @@ require 'escape'
2
2
 
3
3
  module EY
4
4
  module Model
5
- class Deployment < ApiStruct.new(:id, :app, :created_at, :commit, :environment, :finished_at, :migrate_command, :output, :ref, :resolved_ref, :successful)
5
+ class Deployment < ApiStruct.new(:id, :app, :created_at, :commit, :environment, :finished_at, :migrate_command, :output, :ref, :resolved_ref, :successful, :user_name)
6
+ def self.api_root(app_id, environment_id)
7
+ "/apps/#{app_id}/environments/#{environment_id}/deployments"
8
+ end
9
+
10
+ def self.last(app, environment, api)
11
+ get(app, environment, 'last', api)
12
+ end
13
+
14
+ def self.get(app, environment, id, api)
15
+ response = api.request(api_root(app.id, environment.id) + "/#{id}", :method => :get)
16
+ load_from_response app, environment, response
17
+ end
18
+
19
+ def self.load_from_response(app, environment, response)
20
+ dep = new
21
+ dep.app = app
22
+ dep.environment = environment
23
+ dep.update_with_response(response)
24
+ dep
25
+ end
26
+
6
27
  def self.started(environment, app, ref, migrate_command)
7
28
  deployment = from_hash({
8
29
  :app => app,
@@ -14,9 +35,15 @@ module EY
14
35
  deployment
15
36
  end
16
37
 
38
+ def migrate
39
+ !!migrate_command
40
+ end
41
+
42
+ alias successful? successful
43
+
17
44
  def start
18
45
  post_to_api({
19
- :migrate => !!migrate_command,
46
+ :migrate => migrate,
20
47
  :migrate_command => migrate_command,
21
48
  :output => output,
22
49
  :ref => ref,
@@ -29,6 +56,12 @@ module EY
29
56
  put_to_api({:successful => successful, :output => output})
30
57
  end
31
58
 
59
+ def update_with_response(response)
60
+ response['deployment'].each do |key,val|
61
+ send("#{key}=", val) if respond_to?("#{key}=")
62
+ end
63
+ end
64
+
32
65
  private
33
66
 
34
67
  def post_to_api(params)
@@ -39,19 +72,12 @@ module EY
39
72
  update_with_response api.request(member_uri("/finished"), :method => :put, :params => {:deployment => params})
40
73
  end
41
74
 
42
- def update_with_response(response)
43
- data = response['deployment']
44
- data.each do |key,val|
45
- self.send("#{key}=", val) if respond_to?("#{key}=")
46
- end
47
- end
48
-
49
75
  def collection_uri
50
- "/apps/#{app.id}/environments/#{environment.id}/deployments"
76
+ self.class.api_root(app.id, environment.id)
51
77
  end
52
78
 
53
79
  def member_uri(path = nil)
54
- "/apps/#{app.id}/environments/#{environment.id}/deployments/#{id}#{path}"
80
+ collection_uri + "/#{id}#{path}"
55
81
  end
56
82
 
57
83
  def api
@@ -1,34 +1,55 @@
1
+ require 'engineyard/error'
1
2
  require 'escape'
3
+ require 'pathname'
2
4
 
3
5
  module EY
4
6
  class Repo
5
7
 
6
8
  attr_reader :path
7
9
 
8
- def initialize(path=File.expand_path('.'))
9
- @path = path
10
+ def initialize(repo_path='.')
11
+ self.path = repo_path
10
12
  end
11
13
 
12
- def exists?
13
- File.directory?(File.join(@path, ".git"))
14
+ def path=(new_path)
15
+ @path = Pathname.new(new_path).expand_path
16
+ end
17
+
18
+ def exist?
19
+ dotgit.directory?
14
20
  end
15
21
 
16
22
  def current_branch
17
- if exists?
18
- head = File.read(File.join(@path, ".git/HEAD")).chomp
19
- if head.gsub!("ref: refs/heads/", "")
20
- head
21
- else
22
- nil
23
- end
23
+ if exist? && (head = dotgit("HEAD").read.chomp) && head.gsub!("ref: refs/heads/", "")
24
+ head
24
25
  else
25
26
  nil
26
27
  end
27
28
  end
28
29
 
29
30
  def urls
30
- lines = `git config -f #{Escape.shell_command([@path])}/.git/config --get-regexp 'remote.*.url'`.split(/\n/)
31
- lines.map { |c| c.split.last }
31
+ @urls ||= config('remote.*.url').map { |c| c.split.last }
32
+ end
33
+
34
+ def has_remote?(repository_uri)
35
+ urls.include?(repository_uri)
36
+ end
37
+
38
+ def fail_on_no_remotes!
39
+ if urls.empty?
40
+ raise NoRemotesError.new(path)
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def dotgit(child='')
47
+ path.join('.git', child)
48
+ end
49
+
50
+ def config(pattern)
51
+ config_file = Escape.shell_command([dotgit('config').to_s])
52
+ `git config -f #{config_file} --get-regexp '#{pattern}'`.split(/\n/)
32
53
  end
33
54
 
34
55
  end # Repo
@@ -110,8 +110,8 @@ module EY
110
110
  end
111
111
 
112
112
  def filter_by_repo(candidates, repo)
113
- results = candidates.select do |c|
114
- repo.urls.include?(c[:repository_uri])
113
+ results = candidates.select do |candidate|
114
+ repo.has_remote?(candidate[:repository_uri])
115
115
  end
116
116
 
117
117
  if results.empty?
@@ -17,7 +17,7 @@ module EY
17
17
  :environment_name => environment_name,
18
18
  :account_name => account_name
19
19
  }
20
- options.merge! :repo => repo if repo.exists?
20
+ options.merge! :repo => repo if repo.exist?
21
21
  api.resolver.environment(options)
22
22
  end
23
23
 
@@ -27,18 +27,10 @@ module EY
27
27
  :environment_name => environment_name,
28
28
  :account_name => account_name
29
29
  }
30
- options.merge! :repo => repo if repo.exists?
30
+ options.merge! :repo => repo if repo.exist?
31
31
  api.resolver.app_and_environment(options)
32
32
  end
33
33
 
34
- def get_apps(all_apps = false)
35
- if all_apps
36
- api.apps
37
- else
38
- api.apps_for_repo(repo)
39
- end
40
- end
41
-
42
34
  end # UtilityMethods
43
35
 
44
36
  class Thor < ::Thor
@@ -1,3 +1,3 @@
1
1
  module EY
2
- VERSION = '1.3.18'
2
+ VERSION = '1.3.19'
3
3
  end
@@ -2,9 +2,29 @@ require 'spec_helper'
2
2
 
3
3
  describe EY::Repo do
4
4
  before(:all) do
5
- @path = "/tmp/ey-test/.git/"
5
+ FakeFS.deactivate!
6
+ @path = Pathname.new("/tmp/ey-test/.git/")
6
7
  @r = EY::Repo.new("/tmp/ey-test")
7
8
  end
9
+ after(:all) { FakeFS.activate! }
10
+ after(:each) { clear_urls }
11
+
12
+ def set_head(head)
13
+ @path.join("HEAD").open('w') {|f| f.write(head) }
14
+ end
15
+
16
+ def config_path
17
+ @path.join("config")
18
+ end
19
+
20
+ def set_url(url, remote)
21
+ system("mkdir -p #{@path} && cd #{@path} && git init -q")
22
+ system("git config -f #{config_path} remote.#{remote}.url #{url}")
23
+ end
24
+
25
+ def clear_urls
26
+ system("rm -rf #{config_path}")
27
+ end
8
28
 
9
29
  describe "current_branch method" do
10
30
  it "returns the name of the current branch" do
@@ -16,34 +36,22 @@ describe EY::Repo do
16
36
  set_head "20bf478ab6a91ec5771130aa4c8cfd3d150c4146"
17
37
  @r.current_branch.should be_nil
18
38
  end
39
+ end # current_branch
19
40
 
20
- def set_head(head)
21
- File.open(@path+"HEAD", "w"){|f| f.write(head) }
41
+ describe "#fail_on_no_remotes!" do
42
+ it "raises when there are no remotes" do
43
+ lambda { @r.fail_on_no_remotes! }.should raise_error(EY::NoRemotesError)
22
44
  end
23
- end # current_branch
45
+ end
24
46
 
25
- describe "urls method" do
47
+ describe "#has_remote?" do
26
48
  it "returns the urls of the remotes" do
27
49
  origin_url = "git://github.com/engineyard/engineyard.git"
28
50
  other_url = "git@github.com:engineyard/engineyard.git"
29
51
  set_url origin_url, "origin"
30
52
  set_url other_url, "other"
31
- @r.urls.should include(origin_url)
32
- @r.urls.should include(other_url)
33
- end
34
-
35
- def config_path
36
- @path+"config"
37
- end
38
-
39
- # This has to all shell out because FakeFS is enabled
40
- def set_url(url, remote)
41
- system("mkdir -p #{@path} && cd #{@path} && git init -q")
42
- system("git config -f #{config_path} remote.#{remote}.url #{url}")
43
- end
44
-
45
- def clear_urls
46
- system("rm -rf #{config_path}")
53
+ @r.should be_has_remote(origin_url)
54
+ @r.should be_has_remote(other_url)
47
55
  end
48
56
  end # url
49
57
 
@@ -40,7 +40,9 @@ describe EY::Resolver do
40
40
  end
41
41
 
42
42
  def repo(url)
43
- mock("repo", :urls => [url])
43
+ r = mock("repo", :has_remote? => false)
44
+ r.stub!(:has_remote?).with(url).and_return(true)
45
+ r
44
46
  end
45
47
 
46
48
  def resolve_to(expected)
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe "ey environments" do
4
+
5
+ given "integration"
6
+
7
+ before(:all) do
8
+ api_scenario "one app, many environments"
9
+ end
10
+
11
+ it "outputs the status of the deployment" do
12
+ ey %w[status -e giblets]
13
+ @out.should =~ /Application:\s+rails232app/
14
+ @out.should =~ /Environment:\s+giblets/
15
+ @out.should =~ /Ref:\s+HEAD/
16
+ @out.should =~ /Resolved Ref:\s+HEAD/
17
+ @out.should =~ /Deployed by:\s+User/
18
+ @out.should =~ /Created at:/
19
+ @out.should =~ /Finished at:/
20
+ @out.should =~ /Deployment was successful/
21
+ end
22
+ end
@@ -100,6 +100,22 @@ class FakeAwsm < Sinatra::Base
100
100
  ""
101
101
  end
102
102
 
103
+ get "/api/v2/apps/:app_id/environments/:environment_id/deployments/last" do
104
+ {
105
+ "deployment" => {
106
+ "id" => 3,
107
+ "ref" => "HEAD",
108
+ "resolved_ref" => "HEAD",
109
+ "commit" => 'a'*40,
110
+ "user_name" => "User",
111
+ "migrate_command" => "rake db:migrate --trace",
112
+ "created_at" => Time.now.utc - 3600,
113
+ "finished_at" => Time.now.utc - 3400,
114
+ "successful" => true,
115
+ }
116
+ }.to_json
117
+ end
118
+
103
119
  post "/api/v2/apps/:app_id/environments/:environment_id/deployments" do
104
120
  {"deployment" => params[:deployment].merge({"id" => 2, "commit" => 'a'*40, "resolved_ref" => "resolved-#{params[:deployment][:ref]}"})}.to_json
105
121
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: engineyard
3
3
  version: !ruby/object:Gem::Version
4
- hash: 63
4
+ hash: 61
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 3
9
- - 18
10
- version: 1.3.18
9
+ - 19
10
+ version: 1.3.19
11
11
  platform: ruby
12
12
  authors:
13
13
  - EY Cloud Team
@@ -15,14 +15,11 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-05-08 00:00:00 -07:00
18
+ date: 2011-05-23 00:00:00 -07:00
19
19
  default_executable: ey
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: thor
23
- prerelease: false
24
- type: :runtime
25
- version_requirements: &id001 !ruby/object:Gem::Requirement
22
+ requirement: &id001 !ruby/object:Gem::Requirement
26
23
  none: false
27
24
  requirements:
28
25
  - - ~>
@@ -33,12 +30,12 @@ dependencies:
33
30
  - 14
34
31
  - 6
35
32
  version: 0.14.6
36
- requirement: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: rest-client
33
+ name: thor
39
34
  prerelease: false
40
35
  type: :runtime
41
- version_requirements: &id002 !ruby/object:Gem::Requirement
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ requirement: &id002 !ruby/object:Gem::Requirement
42
39
  none: false
43
40
  requirements:
44
41
  - - ~>
@@ -49,12 +46,12 @@ dependencies:
49
46
  - 6
50
47
  - 0
51
48
  version: 1.6.0
52
- requirement: *id002
53
- - !ruby/object:Gem::Dependency
54
- name: highline
49
+ name: rest-client
55
50
  prerelease: false
56
51
  type: :runtime
57
- version_requirements: &id003 !ruby/object:Gem::Requirement
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ requirement: &id003 !ruby/object:Gem::Requirement
58
55
  none: false
59
56
  requirements:
60
57
  - - ~>
@@ -65,12 +62,12 @@ dependencies:
65
62
  - 6
66
63
  - 1
67
64
  version: 1.6.1
68
- requirement: *id003
69
- - !ruby/object:Gem::Dependency
70
- name: json_pure
65
+ name: highline
71
66
  prerelease: false
72
67
  type: :runtime
73
- version_requirements: &id004 !ruby/object:Gem::Requirement
68
+ version_requirements: *id003
69
+ - !ruby/object:Gem::Dependency
70
+ requirement: &id004 !ruby/object:Gem::Requirement
74
71
  none: false
75
72
  requirements:
76
73
  - - ">="
@@ -79,12 +76,12 @@ dependencies:
79
76
  segments:
80
77
  - 0
81
78
  version: "0"
82
- requirement: *id004
83
- - !ruby/object:Gem::Dependency
84
- name: escape
79
+ name: json_pure
85
80
  prerelease: false
86
81
  type: :runtime
87
- version_requirements: &id005 !ruby/object:Gem::Requirement
82
+ version_requirements: *id004
83
+ - !ruby/object:Gem::Dependency
84
+ requirement: &id005 !ruby/object:Gem::Requirement
88
85
  none: false
89
86
  requirements:
90
87
  - - ~>
@@ -95,12 +92,12 @@ dependencies:
95
92
  - 0
96
93
  - 4
97
94
  version: 0.0.4
98
- requirement: *id005
99
- - !ruby/object:Gem::Dependency
100
- name: engineyard-serverside-adapter
95
+ name: escape
101
96
  prerelease: false
102
97
  type: :runtime
103
- version_requirements: &id006 !ruby/object:Gem::Requirement
98
+ version_requirements: *id005
99
+ - !ruby/object:Gem::Dependency
100
+ requirement: &id006 !ruby/object:Gem::Requirement
104
101
  none: false
105
102
  requirements:
106
103
  - - "="
@@ -111,12 +108,12 @@ dependencies:
111
108
  - 4
112
109
  - 1
113
110
  version: 1.4.1
114
- requirement: *id006
115
- - !ruby/object:Gem::Dependency
116
- name: net-ssh
111
+ name: engineyard-serverside-adapter
117
112
  prerelease: false
118
113
  type: :runtime
119
- version_requirements: &id007 !ruby/object:Gem::Requirement
114
+ version_requirements: *id006
115
+ - !ruby/object:Gem::Dependency
116
+ requirement: &id007 !ruby/object:Gem::Requirement
120
117
  none: false
121
118
  requirements:
122
119
  - - ~>
@@ -127,12 +124,12 @@ dependencies:
127
124
  - 1
128
125
  - 0
129
126
  version: 2.1.0
130
- requirement: *id007
131
- - !ruby/object:Gem::Dependency
132
- name: rspec
127
+ name: net-ssh
133
128
  prerelease: false
134
- type: :development
135
- version_requirements: &id008 !ruby/object:Gem::Requirement
129
+ type: :runtime
130
+ version_requirements: *id007
131
+ - !ruby/object:Gem::Dependency
132
+ requirement: &id008 !ruby/object:Gem::Requirement
136
133
  none: false
137
134
  requirements:
138
135
  - - "="
@@ -143,12 +140,12 @@ dependencies:
143
140
  - 3
144
141
  - 0
145
142
  version: 1.3.0
146
- requirement: *id008
147
- - !ruby/object:Gem::Dependency
148
- name: rake
143
+ name: rspec
149
144
  prerelease: false
150
145
  type: :development
151
- version_requirements: &id009 !ruby/object:Gem::Requirement
146
+ version_requirements: *id008
147
+ - !ruby/object:Gem::Dependency
148
+ requirement: &id009 !ruby/object:Gem::Requirement
152
149
  none: false
153
150
  requirements:
154
151
  - - ">="
@@ -157,12 +154,12 @@ dependencies:
157
154
  segments:
158
155
  - 0
159
156
  version: "0"
160
- requirement: *id009
161
- - !ruby/object:Gem::Dependency
162
- name: fakeweb
157
+ name: rake
163
158
  prerelease: false
164
159
  type: :development
165
- version_requirements: &id010 !ruby/object:Gem::Requirement
160
+ version_requirements: *id009
161
+ - !ruby/object:Gem::Dependency
162
+ requirement: &id010 !ruby/object:Gem::Requirement
166
163
  none: false
167
164
  requirements:
168
165
  - - ">="
@@ -171,12 +168,12 @@ dependencies:
171
168
  segments:
172
169
  - 0
173
170
  version: "0"
174
- requirement: *id010
175
- - !ruby/object:Gem::Dependency
176
- name: fakeweb-matcher
171
+ name: fakeweb
177
172
  prerelease: false
178
173
  type: :development
179
- version_requirements: &id011 !ruby/object:Gem::Requirement
174
+ version_requirements: *id010
175
+ - !ruby/object:Gem::Dependency
176
+ requirement: &id011 !ruby/object:Gem::Requirement
180
177
  none: false
181
178
  requirements:
182
179
  - - ">="
@@ -185,12 +182,12 @@ dependencies:
185
182
  segments:
186
183
  - 0
187
184
  version: "0"
188
- requirement: *id011
189
- - !ruby/object:Gem::Dependency
190
- name: fakefs
185
+ name: fakeweb-matcher
191
186
  prerelease: false
192
187
  type: :development
193
- version_requirements: &id012 !ruby/object:Gem::Requirement
188
+ version_requirements: *id011
189
+ - !ruby/object:Gem::Dependency
190
+ requirement: &id012 !ruby/object:Gem::Requirement
194
191
  none: false
195
192
  requirements:
196
193
  - - ">="
@@ -199,12 +196,12 @@ dependencies:
199
196
  segments:
200
197
  - 0
201
198
  version: "0"
202
- requirement: *id012
203
- - !ruby/object:Gem::Dependency
204
- name: bundler
199
+ name: fakefs
205
200
  prerelease: false
206
201
  type: :development
207
- version_requirements: &id013 !ruby/object:Gem::Requirement
202
+ version_requirements: *id012
203
+ - !ruby/object:Gem::Dependency
204
+ requirement: &id013 !ruby/object:Gem::Requirement
208
205
  none: false
209
206
  requirements:
210
207
  - - ~>
@@ -215,12 +212,12 @@ dependencies:
215
212
  - 0
216
213
  - 0
217
214
  version: 1.0.0
218
- requirement: *id013
219
- - !ruby/object:Gem::Dependency
220
- name: sinatra
215
+ name: bundler
221
216
  prerelease: false
222
217
  type: :development
223
- version_requirements: &id014 !ruby/object:Gem::Requirement
218
+ version_requirements: *id013
219
+ - !ruby/object:Gem::Dependency
220
+ requirement: &id014 !ruby/object:Gem::Requirement
224
221
  none: false
225
222
  requirements:
226
223
  - - ">="
@@ -229,12 +226,12 @@ dependencies:
229
226
  segments:
230
227
  - 0
231
228
  version: "0"
232
- requirement: *id014
233
- - !ruby/object:Gem::Dependency
234
- name: realweb
229
+ name: sinatra
235
230
  prerelease: false
236
231
  type: :development
237
- version_requirements: &id015 !ruby/object:Gem::Requirement
232
+ version_requirements: *id014
233
+ - !ruby/object:Gem::Dependency
234
+ requirement: &id015 !ruby/object:Gem::Requirement
238
235
  none: false
239
236
  requirements:
240
237
  - - ~>
@@ -245,12 +242,12 @@ dependencies:
245
242
  - 1
246
243
  - 6
247
244
  version: 0.1.6
248
- requirement: *id015
249
- - !ruby/object:Gem::Dependency
250
- name: open4
245
+ name: realweb
251
246
  prerelease: false
252
247
  type: :development
253
- version_requirements: &id016 !ruby/object:Gem::Requirement
248
+ version_requirements: *id015
249
+ - !ruby/object:Gem::Dependency
250
+ requirement: &id016 !ruby/object:Gem::Requirement
254
251
  none: false
255
252
  requirements:
256
253
  - - ~>
@@ -261,7 +258,10 @@ dependencies:
261
258
  - 0
262
259
  - 1
263
260
  version: 1.0.1
264
- requirement: *id016
261
+ name: open4
262
+ prerelease: false
263
+ type: :development
264
+ version_requirements: *id016
265
265
  description: This gem allows you to deploy your rails application to the Engine Yard cloud directly from the command line.
266
266
  email: cloud@engineyard.com
267
267
  executables:
@@ -322,6 +322,7 @@ files:
322
322
  - spec/ey/recipes/upload_spec.rb
323
323
  - spec/ey/rollback_spec.rb
324
324
  - spec/ey/ssh_spec.rb
325
+ - spec/ey/status_spec.rb
325
326
  - spec/ey/web/disable_spec.rb
326
327
  - spec/ey/web/enable_spec.rb
327
328
  - spec/spec_helper.rb
@@ -402,6 +403,7 @@ test_files:
402
403
  - spec/ey/recipes/upload_spec.rb
403
404
  - spec/ey/rollback_spec.rb
404
405
  - spec/ey/ssh_spec.rb
406
+ - spec/ey/status_spec.rb
405
407
  - spec/ey/web/disable_spec.rb
406
408
  - spec/ey/web/enable_spec.rb
407
409
  - spec/spec_helper.rb