vmc 0.4.7 → 0.5.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. data/lib/vmc.rb +1 -2
  2. data/lib/vmc/cli.rb +33 -31
  3. data/lib/vmc/cli/app/app.rb +2 -2
  4. data/lib/vmc/cli/app/apps.rb +4 -5
  5. data/lib/vmc/cli/app/crashes.rb +2 -3
  6. data/lib/vmc/cli/app/delete.rb +28 -25
  7. data/lib/vmc/cli/app/env.rb +11 -19
  8. data/lib/vmc/cli/app/files.rb +11 -15
  9. data/lib/vmc/cli/app/health.rb +2 -3
  10. data/lib/vmc/cli/app/instances.rb +3 -3
  11. data/lib/vmc/cli/app/logs.rb +7 -10
  12. data/lib/vmc/cli/app/push.rb +17 -89
  13. data/lib/vmc/cli/app/push/create.rb +2 -0
  14. data/lib/vmc/cli/app/rename.rb +17 -13
  15. data/lib/vmc/cli/app/restart.rb +4 -7
  16. data/lib/vmc/cli/app/routes.rb +14 -11
  17. data/lib/vmc/cli/app/scale.rb +17 -15
  18. data/lib/vmc/cli/app/start.rb +4 -7
  19. data/lib/vmc/cli/app/stats.rb +2 -3
  20. data/lib/vmc/cli/app/stop.rb +3 -5
  21. data/lib/vmc/cli/domain/add_domain.rb +3 -5
  22. data/lib/vmc/cli/domain/create_domain.rb +5 -8
  23. data/lib/vmc/cli/domain/delete_domain.rb +23 -18
  24. data/lib/vmc/cli/domain/domains.rb +4 -7
  25. data/lib/vmc/cli/domain/remove_domain.rb +12 -10
  26. data/lib/vmc/cli/organization/org.rb +6 -7
  27. data/lib/vmc/cli/organization/orgs.rb +19 -19
  28. data/lib/vmc/cli/organization/rename.rb +18 -14
  29. data/lib/vmc/cli/route/create_route.rb +20 -13
  30. data/lib/vmc/cli/route/{delete_route.rb → delete.rb} +22 -17
  31. data/lib/vmc/cli/service/bind.rb +2 -2
  32. data/lib/vmc/cli/service/create.rb +57 -53
  33. data/lib/vmc/cli/service/delete.rb +33 -31
  34. data/lib/vmc/cli/service/rename.rb +17 -14
  35. data/lib/vmc/cli/service/service.rb +5 -8
  36. data/lib/vmc/cli/service/services.rb +14 -18
  37. data/lib/vmc/cli/service/unbind.rb +4 -4
  38. data/lib/vmc/cli/space/create.rb +16 -17
  39. data/lib/vmc/cli/space/delete.rb +34 -31
  40. data/lib/vmc/cli/space/rename.rb +20 -17
  41. data/lib/vmc/cli/space/space.rb +11 -14
  42. data/lib/vmc/cli/space/spaces.rb +14 -16
  43. data/lib/vmc/cli/space/take.rb +1 -3
  44. data/lib/vmc/cli/start/base.rb +2 -0
  45. data/lib/vmc/cli/start/colors.rb +0 -1
  46. data/lib/vmc/cli/start/info.rb +8 -10
  47. data/lib/vmc/cli/start/login.rb +11 -40
  48. data/lib/vmc/cli/start/logout.rb +0 -1
  49. data/lib/vmc/cli/start/register.rb +18 -12
  50. data/lib/vmc/cli/start/target.rb +7 -36
  51. data/lib/vmc/cli/start/target_interactions.rb +3 -1
  52. data/lib/vmc/cli/start/targets.rb +0 -1
  53. data/lib/vmc/cli/user/create.rb +4 -2
  54. data/lib/vmc/version.rb +1 -1
  55. data/spec/factories/organization_factory.rb +5 -0
  56. data/spec/factories/space_factory.rb +15 -0
  57. data/spec/spec_helper.rb +16 -0
  58. data/spec/vmc/cli/app/push/create_spec.rb +2 -1
  59. data/spec/vmc/cli/app/push_spec.rb +1 -1
  60. data/spec/vmc/cli/organization/orgs_spec.rb +119 -0
  61. data/spec/vmc/cli/route/delete_route_spec.rb +3 -3
  62. data/spec/vmc/cli/service/bind_spec.rb +34 -0
  63. data/spec/vmc/cli/service/delete_spec.rb +32 -0
  64. data/spec/vmc/cli/service/service_spec.rb +32 -0
  65. data/spec/vmc/cli/service/unbind_spec.rb +34 -0
  66. data/spec/vmc/cli/space/spaces_spec.rb +120 -0
  67. data/spec/vmc/cli/start/info_spec.rb +38 -0
  68. data/spec/vmc/cli/start/login_spec.rb +40 -0
  69. metadata +127 -113
  70. data/lib/vmc/cli/organization/create_org.rb +0 -28
  71. data/lib/vmc/cli/organization/delete_org.rb +0 -65
  72. data/lib/vmc/cli/service/binding.rb +0 -66
  73. data/lib/vmc/cli/user.rb +0 -118
@@ -1,3 +1,5 @@
1
+ require "vmc/detect"
2
+
1
3
  module VMC::App
2
4
  module Create
3
5
  attr_accessor :input
@@ -1,22 +1,12 @@
1
- require "vmc/detect"
2
-
3
1
  require "vmc/cli/app/base"
4
2
 
5
3
  module VMC::App
6
4
  class Rename < Base
7
5
  desc "Rename an application"
8
6
  group :apps, :manage, :hidden => true
9
- input(:app, :argument => :optional, :desc => "Application to rename",
10
- :from_given => by_name("app")) {
11
- apps = client.apps
12
- fail "No applications." if apps.empty?
13
-
14
- ask("Rename which application?", :choices => apps.sort_by(&:name),
15
- :display => proc(&:name))
16
- }
17
- input(:name, :argument => :optional, :desc => "New application name") {
18
- ask("New name")
19
- }
7
+ input :app, :desc => "Application to rename", :argument => :optional,
8
+ :from_given => by_name(:app)
9
+ input :name, :desc => "New application name", :argument => :optional
20
10
  def rename
21
11
  app = input[:app]
22
12
  name = input[:name]
@@ -27,5 +17,19 @@ module VMC::App
27
17
  app.update!
28
18
  end
29
19
  end
20
+
21
+ private
22
+
23
+ def ask_app
24
+ apps = client.apps
25
+ fail "No applications." if apps.empty?
26
+
27
+ ask("Rename which application?", :choices => apps.sort_by(&:name),
28
+ :display => proc(&:name))
29
+ end
30
+
31
+ def ask_name
32
+ ask("New name")
33
+ end
30
34
  end
31
35
  end
@@ -4,13 +4,10 @@ module VMC::App
4
4
  class Restart < Base
5
5
  desc "Stop and start an application"
6
6
  group :apps, :manage
7
- input :apps, :argument => :splat, :singular => :app,
8
- :desc => "Applications to start",
9
- :from_given => by_name("app")
10
- input :debug_mode, :aliases => "-d",
11
- :desc => "Debug mode to start in"
12
- input :all, :type => :boolean, :default => false,
13
- :desc => "Restart all applications"
7
+ input :apps, :desc => "Applications to start", :argument => :splat,
8
+ :singular => :app, :from_given => by_name(:app)
9
+ input :debug_mode, :desc => "Debug mode to start in", :aliases => "-d"
10
+ input :all, :desc => "Restart all applications", :default => false
14
11
  def restart
15
12
  invoke :stop, :all => input[:all], :apps => input[:apps]
16
13
 
@@ -1,14 +1,14 @@
1
1
  require "vmc/cli/app/base"
2
2
 
3
+ # TODO: split up, as the URL interaction will differ (see other TODO)
3
4
  module VMC::App
4
5
  class Routes < Base
5
6
  desc "Add a URL mapping for an app"
6
7
  group :apps, :info, :hidden => true
7
- input :app, :argument => true,
8
- :desc => "Application to add the URL to",
9
- :from_given => by_name("app")
10
- input :url, :argument => true,
11
- :desc => "URL to map to the application"
8
+ input :app, :desc => "Application to add the URL to", :argument => true,
9
+ :from_given => by_name(:app)
10
+ input :url, :desc => "URL to map to the application", :argument => true
11
+ # TODO: move push's URL interaction here, and have it just invoke
12
12
  def map
13
13
  app = input[:app]
14
14
 
@@ -51,12 +51,9 @@ module VMC::App
51
51
 
52
52
  desc "Remove a URL mapping from an app"
53
53
  group :apps, :info, :hidden => true
54
- input :app, :argument => true,
55
- :desc => "Application to remove the URL from",
56
- :from_given => by_name("app")
57
- input(:url, :argument => true, :desc => "URL to unmap") { |choices|
58
- ask("Which URL?", :choices => choices)
59
- }
54
+ input :app, :desc => "Application to remove the URL from",
55
+ :argument => true, :from_given => by_name(:app)
56
+ input :url, :desc => "URL to unmap", :argument => :optional
60
57
  def unmap
61
58
  app = input[:app]
62
59
  url = input[:url, app.urls]
@@ -93,5 +90,11 @@ module VMC::App
93
90
  end
94
91
  end
95
92
  end
93
+
94
+ private
95
+
96
+ def ask_url(choices)
97
+ ask("Which URL?", :choices => choices)
98
+ end
96
99
  end
97
100
  end
@@ -4,21 +4,12 @@ module VMC::App
4
4
  class Scale < Base
5
5
  desc "Update the instances/memory limit for an application"
6
6
  group :apps, :info, :hidden => true
7
- input :app, :argument => true, :desc => "Application to update",
8
- :from_given => by_name("app")
9
- input(:instances, :type => :numeric,
10
- :desc => "Number of instances to run") { |default|
11
- ask("Instances", :default => default)
12
- }
13
- input(:memory, :desc => "Memory limit") { |default|
14
- ask("Memory Limit", :choices => memory_choices(default),
15
- :allow_other => true,
16
- :default => human_mb(default))
17
- }
18
- input :plan, :default => "D100",
19
- :desc => "Application plan (e.g. D100, P200)"
20
- input :restart, :type => :boolean, :default => true,
21
- :desc => "Restart app after updating?"
7
+ input :app, :desc => "Application to update", :argument => true,
8
+ :from_given => by_name(:app)
9
+ input :instances, :desc => "Number of instances to run", :type => :numeric
10
+ input :memory, :desc => "Memory limit"
11
+ input :plan, :desc => "Application plan", :default => "D100"
12
+ input :restart, :desc => "Restart app after updating?", :default => true
22
13
  def scale
23
14
  app = input[:app]
24
15
 
@@ -63,5 +54,16 @@ module VMC::App
63
54
  invoke :restart, :app => app
64
55
  end
65
56
  end
57
+
58
+ private
59
+
60
+ def ask_instances(default)
61
+ ask("Instances", :default => default)
62
+ end
63
+
64
+ def ask_memory(default)
65
+ ask("Memory Limit", :choices => memory_choices(default),
66
+ :default => human_mb(default), :allow_other => true)
67
+ end
66
68
  end
67
69
  end
@@ -6,13 +6,10 @@ module VMC::App
6
6
 
7
7
  desc "Start an application"
8
8
  group :apps, :manage
9
- input :apps, :argument => :splat, :singular => :app,
10
- :desc => "Applications to start",
11
- :from_given => by_name("app")
12
- input :debug_mode, :aliases => "-d",
13
- :desc => "Debug mode to start in"
14
- input :all, :type => :boolean, :default => false,
15
- :desc => "Start all applications"
9
+ input :apps, :desc => "Applications to start", :argument => :splat,
10
+ :singular => :app, :from_given => by_name(:app)
11
+ input :debug_mode, :desc => "Debug mode to start in", :aliases => "-d"
12
+ input :all, :desc => "Start all applications", :default => false
16
13
  def start
17
14
  apps = input[:all] ? client.apps : input[:apps]
18
15
  fail "No applications given." if apps.empty?
@@ -4,9 +4,8 @@ module VMC::App
4
4
  class Stats < Base
5
5
  desc "Display application instance status"
6
6
  group :apps, :info, :hidden => true
7
- input :app, :argument => true,
8
- :desc => "Application to get the stats for",
9
- :from_given => by_name("app")
7
+ input :app, :desc => "Application to get the stats for",
8
+ :argument => true, :from_given => by_name(:app)
10
9
  def stats
11
10
  app = input[:app]
12
11
 
@@ -4,11 +4,9 @@ module VMC::App
4
4
  class Stop < Base
5
5
  desc "Stop an application"
6
6
  group :apps, :manage
7
- input :apps, :argument => :splat, :singular => :app,
8
- :desc => "Applications to start",
9
- :from_given => by_name("app")
10
- input :all, :type => :boolean, :default => false,
11
- :desc => "Stop all applications"
7
+ input :apps, :desc => "Applications to start", :argument => :splat,
8
+ :singular => :app, :from_given => by_name(:app)
9
+ input :all, :desc => "Stop all applications", :default => false
12
10
  def stop
13
11
  apps = input[:all] ? client.apps : input[:apps]
14
12
  fail "No applications given." if apps.empty?
@@ -4,12 +4,10 @@ module VMC::Domain
4
4
  class AddDomain < Base
5
5
  desc "Add a domain to a space"
6
6
  group :domains
7
- input :name, :argument => :required,
8
- :desc => "Domain to add"
9
- input :space, :from_given => by_name("space"),
7
+ input :name, :desc => "Domain to add", :argument => :required
8
+ input :space, :desc => "Space to add the domain to",
10
9
  :default => proc { client.current_space },
11
- :desc => "Space to add the domain to"
12
-
10
+ :from_given => by_name(:space)
13
11
  def add_domain
14
12
  space = input[:space]
15
13
  name = input[:name].sub(/^\*\./, "")
@@ -4,15 +4,12 @@ module VMC::Domain
4
4
  class CreateDomain < Base
5
5
  desc "Create a domain"
6
6
  group :domains
7
- input :name, :argument => :required,
8
- :desc => "Domain name to create"
9
- input :organization, :aliases => ["--org", "-o"],
10
- :from_given => by_name("organization"),
7
+ input :name, :desc => "Domain name to create", :argument => :required
8
+ input :organization, :desc => "Organization to add the domain to",
9
+ :aliases => %w{--org -o},
11
10
  :default => proc { client.current_organization },
12
- :desc => "Organization to add the domain to"
13
- input :shared, :type => :boolean, :default => false,
14
- :desc => "Create a shared domain (admin-only)"
15
-
11
+ :from_given => by_name(:organization)
12
+ input :shared, :desc => "Create a shared domain", :default => false
16
13
  def create_domain
17
14
  org = input[:organization]
18
15
  name = input[:name].sub(/^\*\./, "")
@@ -2,26 +2,18 @@ require "vmc/cli/domain/base"
2
2
 
3
3
  module VMC::Domain
4
4
  class DeleteDomain < Base
5
+ # TODO: refactor; using find_by_name, and target cycling between
6
+ # org/client, is awkward
7
+
5
8
  desc "Delete a domain"
6
9
  group :domains
7
- input(:domain, :argument => :optional,
8
- :from_given => find_by_name("domain"),
9
- :desc => "URL to map to the application") { |domains|
10
- fail "No domains." if domains.empty?
11
-
12
- ask "Which domain?", :choices => domains.sort_by(&:name),
13
- :display => proc(&:name)
14
- }
15
- input :organization, :aliases => ["--org", "-o"],
16
- :from_given => by_name("organization"),
17
- :desc => "Organization to delete the domain from"
18
- input(:really, :type => :boolean, :forget => true,
19
- :default => proc { force? || interact }) { |name, color|
20
- ask("Really delete #{c(name, color)}?", :default => false)
21
- }
22
- input :all, :type => :boolean, :default => false,
23
- :desc => "Delete all domains"
24
-
10
+ input :domain, :desc => "URL to map to the application",
11
+ :argument => :optional, :from_given => find_by_name("domain")
12
+ input :organization, :desc => "Organization to delete the domain from",
13
+ :aliases => %w{--org -o}, :from_given => by_name(:organization)
14
+ input :all, :desc => "Delete all domains", :default => false
15
+ input :really, :type => :boolean, :forget => true, :hidden => true,
16
+ :default => proc { force? || interact }
25
17
  def delete_domain
26
18
  target = input[:organization] || client
27
19
 
@@ -47,5 +39,18 @@ module VMC::Domain
47
39
  domain.delete!
48
40
  end
49
41
  end
42
+
43
+ private
44
+
45
+ def ask_domain(domains)
46
+ fail "No domains." if domains.empty?
47
+
48
+ ask "Which domain?", :choices => domains.sort_by(&:name),
49
+ :display => proc(&:name)
50
+ end
51
+
52
+ def ask_really(name, color)
53
+ ask("Really delete #{c(name, color)}?", :default => false)
54
+ end
50
55
  end
51
56
  end
@@ -4,13 +4,10 @@ module VMC::Domain
4
4
  class Domains < Base
5
5
  desc "List domains in a space"
6
6
  group :domains
7
- input :space, :argument => :optional,
8
- :default => proc { client.current_space },
9
- :from_given => by_name("space"),
10
- :desc => "Space to list the domains from"
11
- input :all, :type => :boolean, :default => false,
12
- :desc => "List all domains"
13
-
7
+ input :space, :desc => "Space to list the domains from",
8
+ :argument => :optional, :default => proc { client.current_space },
9
+ :from_given => by_name(:space)
10
+ input :all, :desc => "List all domains", :default => false
14
11
  def domains
15
12
  space = input[:space]
16
13
 
@@ -4,16 +4,11 @@ module VMC::Domain
4
4
  class RemoveDomain < Base
5
5
  desc "Remove a domain from a space"
6
6
  group :domains
7
- input(:domain, :argument => :optional,
8
- :from_given => by_name("domain"),
9
- :desc => "Domain to add") { |space|
10
- ask "Which domain?", :choices => space.domains,
11
- :display => proc(&:name)
12
- }
13
- input :space, :from_given => by_name("space"),
14
- :default => proc { client.current_space },
15
- :desc => "Space to add the domain to"
16
-
7
+ input :domain, :desc => "Domain to add", :argument => :optional,
8
+ :from_given => by_name(:domain)
9
+ input :space, :desc => "Space to add the domain to",
10
+ :from_given => by_name(:space),
11
+ :default => proc { client.current_space }
17
12
  def remove_domain
18
13
  space = input[:space]
19
14
  domain = input[:domain, space]
@@ -22,5 +17,12 @@ module VMC::Domain
22
17
  space.remove_domain(domain)
23
18
  end
24
19
  end
20
+
21
+ private
22
+
23
+ def ask_domain(space)
24
+ ask "Which domain?", :choices => space.domains,
25
+ :display => proc(&:name)
26
+ end
25
27
  end
26
28
  end
@@ -4,13 +4,12 @@ module VMC::Organization
4
4
  class Org < Base
5
5
  desc "Show organization information"
6
6
  group :organizations
7
- input :organization, :aliases => ["--org", "-o"],
8
- :argument => :optional,
9
- :from_given => by_name("organization"),
10
- :default => proc { client.current_organization },
11
- :desc => "Organization to show"
12
- input :full, :type => :boolean,
13
- :desc => "Show full information for spaces, domains, etc."
7
+ input :organization, :desc => "Organization to show",
8
+ :aliases => %w{--org -o}, :argument => :optional,
9
+ :from_given => by_name(:organization),
10
+ :default => proc { client.current_organization }
11
+ input :full, :desc => "Show full information for spaces, domains, etc.",
12
+ :default => false
14
13
  def org
15
14
  org = input[:organization]
16
15
 
@@ -4,32 +4,32 @@ module VMC::Organization
4
4
  class Orgs < Base
5
5
  desc "List available organizations"
6
6
  group :organizations
7
- input :one_line, :alias => "-l", :type => :boolean, :default => false,
8
- :desc => "Single-line tabular format"
9
- input :full, :type => :boolean, :default => false,
10
- :desc => "Show full information for apps, service instances, etc."
7
+ input :full, :desc => "Show full information for apps, services, etc.",
8
+ :default => false
11
9
  def orgs
12
10
  orgs =
13
- with_progress("Getting organizations") do
14
- client.organizations
15
- end
11
+ with_progress("Getting organizations") do
12
+ client.organizations.sort_by(&:name)
13
+ end
14
+
15
+ return if orgs.empty?
16
16
 
17
17
  line unless quiet?
18
18
 
19
- if input[:one_line]
20
- table(
21
- %w{name spaces domains},
22
- orgs.collect { |o|
23
- [ c(o.name, :name),
24
- name_list(o.spaces),
25
- name_list(o.domains)
26
- ]
27
- })
28
- else
19
+ if input[:full]
29
20
  orgs.each do |o|
30
- invoke :org, :organization => o, :full => input[:full]
21
+ invoke :org, :organization => o, :full => true
31
22
  end
23
+ else
24
+ table(
25
+ %w{name spaces domains},
26
+ orgs.collect { |o|
27
+ [ c(o.name, :name),
28
+ name_list(o.spaces),
29
+ name_list(o.domains)
30
+ ]
31
+ })
32
32
  end
33
33
  end
34
34
  end
35
- end
35
+ end
@@ -1,23 +1,13 @@
1
- require "vmc/detect"
2
-
3
1
  require "vmc/cli/organization/base"
4
2
 
5
3
  module VMC::Organization
6
4
  class Rename < Base
7
5
  desc "Rename an organization"
8
6
  group :organizations, :hidden => true
9
- input(:organization, :aliases => ["--org", "-o"],
10
- :argument => :optional, :desc => "Organization to rename",
11
- :from_given => by_name("organization")) {
12
- organizations = client.organizations
13
- fail "No organizations." if organizations.empty?
14
-
15
- ask("Rename which organization?", :choices => organizations.sort_by(&:name),
16
- :display => proc(&:name))
17
- }
18
- input(:name, :argument => :optional, :desc => "New organization name") {
19
- ask("New name")
20
- }
7
+ input :organization, :desc => "Organization to rename",
8
+ :aliases => ["--org", "-o"], :argument => :optional,
9
+ :from_given => by_name(:organization)
10
+ input :name, :desc => "New organization name", :argument => :optional
21
11
  def rename_org
22
12
  organization = input[:organization]
23
13
  name = input[:name]
@@ -28,5 +18,19 @@ module VMC::Organization
28
18
  organization.update!
29
19
  end
30
20
  end
21
+
22
+ private
23
+
24
+ def ask_name
25
+ ask("New name")
26
+ end
27
+
28
+ def ask_organization
29
+ organizations = client.organizations
30
+ fail "No organizations." if organizations.empty?
31
+
32
+ ask("Rename which organization?", :choices => organizations.sort_by(&:name),
33
+ :display => proc(&:name))
34
+ end
31
35
  end
32
36
  end