vmc 0.4.7 → 0.5.0.beta.1

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.
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