ey-pro-cli 0.0.11 → 0.0.12

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: defe6750674ddd946f92182eee60783585e8e50d
4
- data.tar.gz: 968dab5bdcc881322578fc950f3dfe47769af676
3
+ metadata.gz: 841e1fb0799d11050a57db10216ad8f5484cc8df
4
+ data.tar.gz: dba860a5a097f51a11d1b8473e587accea28bb57
5
5
  SHA512:
6
- metadata.gz: 400884f9613419bccb16c1c03296eaaee46817a1ef9971af11af12d288bb4999661bfc8322841b17cb54ec898e604d713ab9e30d52fbe5498b67945a25276c5a
7
- data.tar.gz: e456158c4115f0f56ac3ec2a98956e0ac852b9967c21d737fd7f69e736a84c62158c62eafb9def4af1a5bb0bb0e21f1c56025c4569378051bd624eaaadde46ec
6
+ metadata.gz: 004130ef00609c951ec86ffd4385717c671636b1d20f8daebb99f130e6dbdc655f7a33c3d9ffdeee6efb9a309fefc1d55bda696c29ff934a43f8e6fe6c3785a5
7
+ data.tar.gz: dbde671dc822a8b27ed660fc7d9d34afc8265faaf3b1dc6736c9c8344040af733dc2ada960925466642dcba926ad4c07d9b570984708b8d68a1adef83c7e0f12
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ey-pro-cli (0.0.10)
4
+ ey-pro-cli (0.0.11)
5
5
  addressable (~> 2.2)
6
6
  cistern (~> 0.11, >= 0.11.1)
7
7
  colorize
@@ -20,13 +20,39 @@ class EyProCli < Thor
20
20
  end
21
21
  end
22
22
 
23
- desc "accounts", "Retrieve a list of Engine Yard PRO accounts that you have access to"
23
+ desc "accounts", "Retrieve a list of Engine Yard PRO accounts that you have access to."
24
24
 
25
25
  def accounts
26
- accounts = core_client.users.current.accounts
27
- width = longest_account_name_length(accounts)
26
+ table_data = TablePrint::Printer.new(current_accounts, [{id: {width: 36}}, :name])
27
+ puts table_data.table_print
28
+ end
29
+
30
+ desc "environments", "Retrieve a list of Engine Yard PRO environments that you have access to."
31
+ option :account, desc: "Name or ID of the account to list environments for."
32
+
33
+ def environments
34
+ environments = if options[:account]
35
+ core_account_for(options).environments.all
36
+ else
37
+ current_accounts.map(&:environments).flatten.sort_by(&:id)
38
+ end
39
+
40
+
41
+ table_data = TablePrint::Printer.new(environments, [{id: {width: 10}}, :name])
42
+ puts table_data.table_print
43
+ end
44
+
45
+ desc "applications", "Retrieve a list of Engine Yard PRO applications that you have access to."
46
+ option :account, desc: "Name or ID of the account to list applications for."
47
+
48
+ def applications
49
+ applications = if options[:account]
50
+ core_account_for(options).applications.all
51
+ else
52
+ current_accounts.map(&:applications).flatten.sort_by(&:id)
53
+ end
28
54
 
29
- table_data = TablePrint::Printer.new(accounts, [{id: {width: 36}}, :name])
55
+ table_data = TablePrint::Printer.new(applications, [{id: {width: 10}}, :name])
30
56
  puts table_data.table_print
31
57
  end
32
58
 
@@ -77,9 +103,10 @@ class EyProCli < Thor
77
103
  option "no-update-check", desc: "Do not check for updates."
78
104
 
79
105
  def deploy
106
+ options = self.options.dup # Thor has a weird bug in it that seems to occassionally wipe out the class options
80
107
  check_for_updates unless options["no-update-check"]
81
108
  operator, environment = core_operator_and_environment_for(options)
82
- unless operator.is_a?(Ey::Core::Client)
109
+ if operator.is_a?(Ey::Core::Client::Account)
83
110
  abort <<-EOF
84
111
  Found account #{operator.name} but requested account #{options[:account]}.
85
112
  Use the ID of the account instead of the name.
@@ -91,6 +118,11 @@ This can be retrieved by running "ey-pro accounts".
91
118
  unless environment
92
119
  abort "Unable to locate environment #{options[:environment]} in #{operator.name}".red
93
120
  end
121
+
122
+ unless options[:account]
123
+ options = self.options.dup.merge(environment: environment)
124
+ end
125
+
94
126
  app = core_application_for(options)
95
127
 
96
128
  deploy_options = {}
@@ -136,24 +168,30 @@ This can be retrieved by running "ey-pro accounts".
136
168
 
137
169
  private
138
170
 
139
- def longest_account_name_length(accounts)
140
- accounts.map(&:name).group_by(&:size).max.last.length
171
+ def current_accounts
172
+ core_client.users.current.accounts
173
+ end
174
+
175
+ def longest_length_by_name(collection)
176
+ collection.map(&:name).group_by(&:size).max.last.length
141
177
  end
142
178
 
143
179
  def check_for_updates
144
- gem = core_client.gems.get("ey-pro-cli")
145
- unless gem
146
- puts "Unable to find current version of CLI utility".yellow
147
- return
148
- end
149
- current_version = gem.current_version
150
- if Gem::Version.new(EyProCliVersion::VERSION) < Gem::Version.new(current_version)
180
+ return nil if ENV["MOCK_CLI"]
181
+
182
+ source = Gem::Source.new("https://rubygems.org")
183
+ sources = Gem::SourceList.from([source])
184
+ fetcher = Gem::SpecFetcher.new(sources)
185
+ current_version = fetcher.available_specs(:latest).first.values.first.detect { |g| g.name == 'ey-pro-cli' }.version
186
+ if Gem::Version.new(EyProCliVersion::VERSION) < current_version
151
187
  print <<-EOF
152
188
  ey-pro-cli gem outdated, consider updating!
153
189
  Installed version: #{EyProCliVersion::VERSION}
154
- Current Version: #{current_version}
190
+ Current Version: #{current_version.to_s}
155
191
  EOF
156
192
  .yellow
193
+ else
194
+ puts "ey-pro-cli is up to date".green
157
195
  end
158
196
  end
159
197
 
@@ -168,7 +206,7 @@ Current Version: #{current_version}
168
206
 
169
207
  def core_account_for(options={})
170
208
  @core_account ||= core_client.accounts.get(options[:account])
171
- @core_account ||= core_client.accounts.first(name: options[:account])
209
+ @core_account ||= core_client.users.current.accounts.first(name: options[:account])
172
210
  end
173
211
 
174
212
  def operator(options)
@@ -187,10 +225,13 @@ Current Version: #{current_version}
187
225
  rescue
188
226
  options[:app]
189
227
  end
228
+
229
+ actor = options[:environment].is_a?(Ey::Core::Client::Environment) ? options[:environment].account : operator(options)
230
+
190
231
  if app.is_a?(Integer)
191
- operator(options).applications.get(app)
232
+ actor.applications.get(app)
192
233
  else
193
- operator(options).applications.first(name: app)
234
+ actor.applications.first(name: app)
194
235
  end
195
236
  end
196
237
  end
@@ -1,3 +1,3 @@
1
1
  module EyProCliVersion
2
- VERSION = "0.0.11"
2
+ VERSION = "0.0.12"
3
3
  end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe EyProCli do
4
+ describe "applications" do
5
+ context "with a token" do
6
+ context "with multiple accounts" do
7
+ before(:each) do
8
+ create_core_credentials
9
+ @accounts = create_accounts(subject.core_client, quantity: 2)
10
+ @applications = @accounts.map { |a| boot_environment(subject.core_client, account: a)[2] }
11
+ end
12
+
13
+ it "returns a list of applications" do
14
+ output = capture(:stdout) { subject.applications }
15
+
16
+ expect(output).to match(/#{@applications.first.name}/)
17
+ expect(output).to match(/#{@applications.last.name}/)
18
+ end
19
+
20
+ it "returns the list of applications for the specified account" do
21
+ subject.options = {account: @accounts.first.id}
22
+
23
+ output = capture(:stdout) { subject.applications }
24
+ expect(output).to match(/#{@accounts.first.applications.first.name}/)
25
+ expect(output).not_to match(/#{@accounts.last.applications.first.name}/)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -33,19 +33,20 @@ describe EyProCli do
33
33
  end
34
34
  end
35
35
 
36
- context "--no-update-check" do
37
- before(:each) { subject.options = options }
36
+ # @TODO: Moved the updater to rubygems, need to figure out how to test these
37
+ #context "--no-update-check" do
38
+ #before(:each) { subject.options = options }
38
39
 
39
- it "has the updater message without the flag" do
40
- expect(capture(:stdout) { subject.deploy }).to match(/gem outdated, consider updating/i)
41
- end
40
+ #it "has the updater message without the flag" do
41
+ #expect(capture(:stdout) { subject.deploy }).to match(/gem outdated, consider updating/i)
42
+ #end
42
43
 
43
- it "does not have the message with the flag" do
44
- options.merge!("no-update-check" => true)
44
+ #it "does not have the message with the flag" do
45
+ #options.merge!("no-update-check" => true)
45
46
 
46
- expect(capture(:stdout) { subject.deploy }).not_to match(/gem outdated, consider updating/i)
47
- end
48
- end
47
+ #expect(capture(:stdout) { subject.deploy }).not_to match(/gem outdated, consider updating/i)
48
+ #end
49
+ #end
49
50
  end
50
51
  end
51
52
  end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe EyProCli do
4
+ describe "environments" do
5
+ context "with a token" do
6
+ context "with multiple accounts" do
7
+ before(:each) do
8
+ create_core_credentials
9
+ @accounts = create_accounts(subject.core_client, quantity: 2)
10
+ @environments = @accounts.map { |a| boot_environment(subject.core_client, account: a)[1] }
11
+ end
12
+
13
+ it "returns a list of environments" do
14
+ output = capture(:stdout) { subject.environments }
15
+
16
+ expect(output).to match(/#{@environments.first.name}/)
17
+ expect(output).to match(/#{@environments.last.name}/)
18
+ end
19
+
20
+ it "returns the list of environments for the specified account" do
21
+ subject.options = {account: @accounts.first.id}
22
+
23
+ output = capture(:stdout) { subject.environments }
24
+ expect(output).to match(/#{@accounts.first.environments.first.name}/)
25
+ expect(output).not_to match(/#{@accounts.last.environments.first.name}/)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,6 +1,6 @@
1
1
  module CoreHelper
2
- def boot_environment(core_client)
3
- account = create_accounts(core_client).first
2
+ def boot_environment(core_client, account: nil)
3
+ account ||= create_accounts(core_client).first
4
4
  environment = account.environments.create(name: SecureRandom.hex(4))
5
5
  application = account.applications.create(name: SecureRandom.hex(4))
6
6
  provider = create_provider(account)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ey-pro-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Engine Yard Cloud Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-29 00:00:00.000000000 Z
11
+ date: 2015-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -613,7 +613,9 @@ files:
613
613
  - lib/vendor/core/ey-core/token_authentication.rb
614
614
  - lib/vendor/core/ey-core/version.rb
615
615
  - spec/accounts_spec.rb
616
+ - spec/applications_spec.rb
616
617
  - spec/deploy_spec.rb
618
+ - spec/environments_spec.rb
617
619
  - spec/login_spec.rb
618
620
  - spec/logout_spec.rb
619
621
  - spec/spec_helper.rb
@@ -644,7 +646,9 @@ specification_version: 4
644
646
  summary: Command-line deployment for Engine Yard pro
645
647
  test_files:
646
648
  - spec/accounts_spec.rb
649
+ - spec/applications_spec.rb
647
650
  - spec/deploy_spec.rb
651
+ - spec/environments_spec.rb
648
652
  - spec/login_spec.rb
649
653
  - spec/logout_spec.rb
650
654
  - spec/spec_helper.rb