gitpusshuten 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. data/.bundle/config +2 -0
  2. data/.gitignore +4 -0
  3. data/Gemfile +9 -0
  4. data/Gemfile.lock +53 -0
  5. data/README.md +7 -0
  6. data/bin/gitpusshuten +4 -0
  7. data/bin/heavenly +4 -0
  8. data/bin/ten +4 -0
  9. data/gitpusshuten.gemspec +26 -0
  10. data/lib/gitpusshuten/cli.rb +78 -0
  11. data/lib/gitpusshuten/command.rb +147 -0
  12. data/lib/gitpusshuten/commands/base.rb +246 -0
  13. data/lib/gitpusshuten/commands/delete.rb +27 -0
  14. data/lib/gitpusshuten/commands/help.rb +36 -0
  15. data/lib/gitpusshuten/commands/initialize.rb +61 -0
  16. data/lib/gitpusshuten/commands/push.rb +54 -0
  17. data/lib/gitpusshuten/commands/remote.rb +29 -0
  18. data/lib/gitpusshuten/commands/user.rb +252 -0
  19. data/lib/gitpusshuten/commands/version.rb +21 -0
  20. data/lib/gitpusshuten/configuration.rb +122 -0
  21. data/lib/gitpusshuten/environment.rb +70 -0
  22. data/lib/gitpusshuten/gem.rb +33 -0
  23. data/lib/gitpusshuten/git.rb +111 -0
  24. data/lib/gitpusshuten/helpers/environment/installers.rb +59 -0
  25. data/lib/gitpusshuten/helpers/environment/packages.rb +21 -0
  26. data/lib/gitpusshuten/helpers/environment/scp.rb +57 -0
  27. data/lib/gitpusshuten/helpers/environment/ssh.rb +77 -0
  28. data/lib/gitpusshuten/helpers/environment/ssh_key.rb +79 -0
  29. data/lib/gitpusshuten/helpers/environment/user.rb +70 -0
  30. data/lib/gitpusshuten/helpers/spinner.rb +98 -0
  31. data/lib/gitpusshuten/hook.rb +26 -0
  32. data/lib/gitpusshuten/hooks.rb +147 -0
  33. data/lib/gitpusshuten/initializer.rb +95 -0
  34. data/lib/gitpusshuten/local.rb +35 -0
  35. data/lib/gitpusshuten/log.rb +83 -0
  36. data/lib/gitpusshuten/modules/active_record/hooks.rb +19 -0
  37. data/lib/gitpusshuten/modules/apache/command.rb +354 -0
  38. data/lib/gitpusshuten/modules/bundler/command.rb +43 -0
  39. data/lib/gitpusshuten/modules/bundler/hooks.rb +8 -0
  40. data/lib/gitpusshuten/modules/mysql/command.rb +192 -0
  41. data/lib/gitpusshuten/modules/nanoc/hooks.rb +9 -0
  42. data/lib/gitpusshuten/modules/nginx/command.rb +447 -0
  43. data/lib/gitpusshuten/modules/passenger/command.rb +310 -0
  44. data/lib/gitpusshuten/modules/passenger/hooks.rb +4 -0
  45. data/lib/gitpusshuten/modules/rvm/command.rb +277 -0
  46. data/lib/gitpusshuten.rb +21 -0
  47. data/lib/templates/config.rb +37 -0
  48. data/lib/templates/hooks.rb +40 -0
  49. data/spec/cli_spec.rb +83 -0
  50. data/spec/command_spec.rb +76 -0
  51. data/spec/configuration_spec.rb +45 -0
  52. data/spec/environment_spec.rb +64 -0
  53. data/spec/fixtures/combined_hooks.rb +23 -0
  54. data/spec/fixtures/config.rb +23 -0
  55. data/spec/fixtures/hooks.rb +37 -0
  56. data/spec/fixtures/passenger.json +1 -0
  57. data/spec/gem_spec.rb +28 -0
  58. data/spec/git_spec.rb +59 -0
  59. data/spec/gitpusshuten_spec.rb +9 -0
  60. data/spec/hook_spec.rb +48 -0
  61. data/spec/hooks_spec.rb +150 -0
  62. data/spec/initializer_spec.rb +26 -0
  63. data/spec/log_spec.rb +20 -0
  64. data/spec/spec_helper.rb +43 -0
  65. metadata +220 -0
data/.bundle/config ADDED
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_DISABLE_SHARED_GEMS: "1"
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ .DS_Store
2
+ *.gem
3
+ .gitpusshuten/*
4
+ .gitpusshuten/**/*
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :test do
6
+ gem 'rspec'
7
+ gem 'mocha'
8
+ gem 'infinity_test'
9
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,53 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ gitpusshuten (0.0.1)
5
+ activesupport (~> 3.0.0)
6
+ highline (~> 1.6.0)
7
+ json (~> 1.4.0)
8
+ net-scp (~> 1.0.0)
9
+ net-ssh (~> 2.0.0)
10
+ rainbow (~> 1.1.0)
11
+
12
+ GEM
13
+ remote: http://rubygems.org/
14
+ specs:
15
+ activesupport (3.0.1)
16
+ diff-lcs (1.1.2)
17
+ highline (1.6.1)
18
+ infinity_test (0.2.0)
19
+ watchr (>= 0.7)
20
+ json (1.4.6)
21
+ mocha (0.9.8)
22
+ rake
23
+ net-scp (1.0.4)
24
+ net-ssh (>= 1.99.1)
25
+ net-ssh (2.0.23)
26
+ rainbow (1.1)
27
+ rake (0.8.7)
28
+ rspec (2.0.1)
29
+ rspec-core (~> 2.0.1)
30
+ rspec-expectations (~> 2.0.1)
31
+ rspec-mocks (~> 2.0.1)
32
+ rspec-core (2.0.1)
33
+ rspec-expectations (2.0.1)
34
+ diff-lcs (>= 1.1.2)
35
+ rspec-mocks (2.0.1)
36
+ rspec-core (~> 2.0.1)
37
+ rspec-expectations (~> 2.0.1)
38
+ watchr (0.7)
39
+
40
+ PLATFORMS
41
+ ruby
42
+
43
+ DEPENDENCIES
44
+ activesupport (~> 3.0.0)
45
+ gitpusshuten!
46
+ highline (~> 1.6.0)
47
+ infinity_test
48
+ json (~> 1.4.0)
49
+ mocha
50
+ net-scp (~> 1.0.0)
51
+ net-ssh (~> 2.0.0)
52
+ rainbow (~> 1.1.0)
53
+ rspec
data/README.md ADDED
@@ -0,0 +1,7 @@
1
+ Git Pusshuten ( プッシュ点 )
2
+
3
+ Heavenly Git-based (Application) Deployment!
4
+
5
+ Visit [Git Pusshuten's Official Website](http://gitpusshuten.com/) for documentation, guides and other information!
6
+
7
+ "Git Pusshuten's Official Website" is also [open source](https://github.com/meskyanichi/gitpusshuten-website)!
data/bin/gitpusshuten ADDED
@@ -0,0 +1,4 @@
1
+ #! /usr/bin/env ruby
2
+ @ignore_bundler = true
3
+ require 'gitpusshuten'
4
+ GitPusshuTen::Initializer.new(ARGV)
data/bin/heavenly ADDED
@@ -0,0 +1,4 @@
1
+ #! /usr/bin/env ruby
2
+ @ignore_bundler = true
3
+ require 'gitpusshuten'
4
+ GitPusshuTen::Initializer.new(ARGV)
data/bin/ten ADDED
@@ -0,0 +1,4 @@
1
+ #! /usr/bin/env ruby
2
+ @ignore_bundler = true
3
+ require 'gitpusshuten'
4
+ GitPusshuTen::Initializer.new(ARGV)
@@ -0,0 +1,26 @@
1
+ Gem::Specification.new do |gem|
2
+
3
+ gem.name = 'gitpusshuten'
4
+ gem.version = '0.0.1'
5
+ gem.platform = Gem::Platform::RUBY
6
+ gem.authors = 'Michael van Rooijen'
7
+ gem.email = 'meskyanichi@gmail.com'
8
+ gem.homepage = 'http://gitpusshuten.com/'
9
+ gem.summary = 'Heavenly Git-based Application Deployment.'
10
+ gem.description = 'A Git-based application deployment tool that allows you to define your environment
11
+ by utilizing modules and provision your server with basic deployment needs.'
12
+
13
+ gem.files = %x[git ls-files].split("\n")
14
+ gem.test_files = %x[git ls-files -- {spec}/*].split("\n")
15
+ gem.require_path = 'lib'
16
+
17
+ gem.executables = ['gitpusshuten', 'heavenly', 'ten']
18
+
19
+ gem.add_dependency 'rainbow', ['~> 1.1.0']
20
+ gem.add_dependency 'highline', ['~> 1.6.0']
21
+ gem.add_dependency 'net-ssh', ['~> 2.0.0']
22
+ gem.add_dependency 'net-scp', ['~> 1.0.0']
23
+ gem.add_dependency 'activesupport', ['~> 3.0.0']
24
+ gem.add_dependency 'json', ['~> 1.4.0']
25
+
26
+ end
@@ -0,0 +1,78 @@
1
+ module GitPusshuTen
2
+ class CLI
3
+
4
+ ##
5
+ # Arguments
6
+ attr_accessor :arguments
7
+
8
+ ##
9
+ # Environment
10
+ attr_accessor :environment
11
+
12
+ ##
13
+ # Command
14
+ attr_accessor :command
15
+
16
+ def initialize(*args)
17
+
18
+ ##
19
+ # Clean up arguments
20
+ @arguments = args.flatten.uniq.compact.map(&:strip)
21
+
22
+ ##
23
+ # If the arguments match the following pattern, it'll simply assign
24
+ # the variables accordingly
25
+ if @arguments.join(' ') =~ /(\w+\-?\w*) (.+) (for|to|from|on) (\w+)(.+)?/
26
+ @command = $1
27
+ @arguments = $2.split(' ')
28
+ @environment = $4.to_sym
29
+
30
+ ##
31
+ # Allows for more arguments to be passed in after the regular expression.
32
+ # These arguments will be converted to an array and apended to the "@arguments" array
33
+ if $5.is_a?(String)
34
+ @arguments += $5.split(' ')
35
+ end
36
+ return
37
+ end
38
+
39
+ ##
40
+ # If the arguments match the following pattern, it'll assign the variables
41
+ # and check check if the last argument in the array of @arguments is a
42
+ # "for", "to", "from" or "on" string value, and deletes it if it is
43
+ if @arguments.join(' ') =~ /(\w+\-?\w*) (.+) (\w+) environment/
44
+ @command = $1
45
+ @arguments = $2.split(' ')
46
+ @environment = $3.to_sym
47
+
48
+ ##
49
+ # Clean up any for/to/from/on if it's the last argument
50
+ # of the @arguments array since that'd be part of the CLI
51
+ if %w[for to from on].include? @arguments.last
52
+ @arguments.delete_at(@arguments.count - 1)
53
+ end
54
+ return
55
+ end
56
+
57
+ ##
58
+ # If no arguments are specified it'll just take the command,
59
+ # set the arguments to an empty array and set the environment
60
+ if @arguments.join(' ') =~ /(\w+\-?\w*) (.+) (\w+)$/
61
+ @command = $1
62
+ @arguments = []
63
+ @environment = $2.to_sym
64
+ return
65
+ end
66
+
67
+ ##
68
+ # If only a command and one or more arguments are specified,
69
+ # without an environment, the regular expression below is matched.
70
+ if @arguments.join(' ') =~ /(\w+\-?\w*) (.+)$/
71
+ @command = $1
72
+ @arguments = $2.split(' ')
73
+ return
74
+ end
75
+ end
76
+
77
+ end
78
+ end
@@ -0,0 +1,147 @@
1
+ # encoding: utf-8
2
+
3
+ module GitPusshuTen
4
+ class Command
5
+
6
+ ##
7
+ # Contains an array of blacklisted commands
8
+ # These are files that aren't actually CLI commands but just
9
+ # classes that are used by Git プ ッ シ ュ 天
10
+ BLACKLISTED = %w[base]
11
+
12
+ ##
13
+ # Command-line Interface
14
+ attr_accessor :cli
15
+
16
+ ##
17
+ # Configuration (Environment)
18
+ attr_accessor :configuration
19
+
20
+ ##
21
+ # Contains pre/post-deployment hooks
22
+ attr_accessor :hooks
23
+
24
+ ##
25
+ # Environment connection
26
+ attr_accessor :environment
27
+
28
+ ##
29
+ # Initializes the specified command if it exists or
30
+ # errors out when it does not exist in the commands/*.rb
31
+ def initialize(cli, configuration, hooks, environment)
32
+ @cli = cli
33
+ @configuration = configuration
34
+ @hooks = hooks
35
+ @environment = environment
36
+
37
+ if cli.command.nil?
38
+ display_commands
39
+ exit
40
+ end
41
+
42
+ unless available_commands.include?(cli.command)
43
+ GitPusshuTen::Log.error "Command <#{cli.command.color(:red)}> not found."
44
+ exit
45
+ end
46
+ end
47
+
48
+ ##
49
+ # Performs the target command, based on the CLI and Configuration
50
+ def perform!
51
+ %w[validate! pre_perform! perform! post_perform!].each do |action|
52
+ command.send(action)
53
+ end
54
+ end
55
+
56
+ ##
57
+ # Wrapper for the command instance
58
+ def command
59
+ @command ||= "GitPusshuTen::Commands::#{cli.command.classify}".constantize.new(cli, configuration, hooks, environment)
60
+ end
61
+
62
+ ##
63
+ # Returns an array of available commands
64
+ def available_commands
65
+ commands = commands_directory.map do |command|
66
+ unless blacklisted?(command)
67
+ find(command)
68
+ end
69
+ end
70
+
71
+ if configuration.respond_to?(:additional_modules)
72
+ module_directory.each do |command|
73
+ configuration.additional_modules.each do |additional_module|
74
+ if command =~ /\/modules\/(#{additional_module})\/command\.rb/
75
+ commands << $1
76
+ end
77
+ end
78
+ end
79
+ end
80
+
81
+ commands.flatten.compact.uniq
82
+ end
83
+
84
+ ##
85
+ # Returns the absolute path to each command (ruby file)
86
+ # insidethe commands directory and returns an array of each entry
87
+ def commands_directory
88
+ Dir[File.expand_path(File.join(File.dirname(__FILE__), 'commands/*.rb'))]
89
+ end
90
+
91
+ def module_directory
92
+ Dir[File.expand_path(File.join(File.dirname(__FILE__), 'modules', '*', 'command.rb'))]
93
+ end
94
+
95
+ ##
96
+ # Determines whether the provided command is blacklisted or not
97
+ def blacklisted?(command)
98
+ BLACKLISTED.include?(find(command))
99
+ end
100
+
101
+ ##
102
+ # Expects a (full) path to the command ruby file and returns
103
+ # only the file name without the .rb extension
104
+ def find(command)
105
+ command.gsub(/\.rb/, '').split('/').last
106
+ end
107
+
108
+ ##
109
+ # Displays a list of available commands in the CLI
110
+ def display_commands
111
+ puts "\nGit Pusshu Ten\n\s\s\s\sプッシュ点\n\n"
112
+ puts "[Aliases]\n\n"
113
+ puts "\s\s#{y('gitpusshuten')}, #{y('heavenly')}, #{y('ten')}\n\n"
114
+ puts "[Commands]\n\n"
115
+ available_commands.compact.sort.each do |command|
116
+ puts "\s\s" + y(command) + (command.length < 6 ? "\t" : "") + "\t" + get_constant_for(command).description
117
+ end
118
+ puts "\n[Command Specific Help]\n\n" + "\s\sheavenly help <command>\n".color(:yellow)
119
+ puts "For more information, visit: #{y 'http://gitpusshuten.com/'}"
120
+ end
121
+
122
+ ##
123
+ # Displays command specific details in the CLI
124
+ def display_usage(command)
125
+ puts "\nGit Pusshu Ten\n\s\s\s\sプッシュ点\n\n"
126
+ puts "[Command]\n\n\s\s#{y(command)}\n\n"
127
+ puts "[Description]\n\n\s\s#{get_constant_for(command).description}\n\n"
128
+ puts "[Usage]\n\n\s\s#{y get_constant_for(command).usage}\n\n"
129
+ puts "[Examples]\n#{get_constant_for(command).example}\n\n"
130
+ puts "For a list of all commands: #{y 'heavenly help'}"
131
+ puts "For more information, visit: #{y 'http://gitpusshuten.com/'}"
132
+ end
133
+
134
+ ##
135
+ # Returns the constant of a command
136
+ def get_constant_for(command)
137
+ "GitPusshuTen::Commands::#{command.classify}".constantize
138
+ end
139
+
140
+ ##
141
+ # Wrapper for coloring text yellow
142
+ def y(value)
143
+ value.to_s.color(:yellow)
144
+ end
145
+
146
+ end
147
+ end
@@ -0,0 +1,246 @@
1
+ module GitPusshuTen
2
+ module Commands
3
+ class Base
4
+
5
+ ##
6
+ # Command-line Interface
7
+ attr_accessor :cli
8
+
9
+ ##
10
+ # Configuration (Environment)
11
+ attr_accessor :configuration
12
+
13
+ ##
14
+ # Stores the pre and post deploy hooks
15
+ attr_accessor :hooks
16
+
17
+ ##
18
+ # Environment connection
19
+ attr_accessor :environment
20
+
21
+ ##
22
+ # Contains the invoked command
23
+ attr_accessor :command
24
+
25
+ ##
26
+ # This is a flag, that, when set to true, will invoke the
27
+ # potentially specified deployment hooks. When "perform_hooks"
28
+ # is set to false, deployment hooks will not be invoked. This is the default
29
+ # behavior. If hooks should be enabled for a specific command, invoke the
30
+ # "perform_hooks!" command from within the "initialize" method of that particular command
31
+ attr_accessor :perform_hooks
32
+ alias :perform_hooks? :perform_hooks
33
+
34
+ ##
35
+ # This is used by the "help" command to display the
36
+ # description of the command in the CLI
37
+ def self.description(value = nil)
38
+ if value.nil?
39
+ @description
40
+ else
41
+ @description = value
42
+ end
43
+ end
44
+
45
+ ##
46
+ # This is used by the "help" command to display the
47
+ # usage of the command in the CLI
48
+ def self.usage(value = nil)
49
+ if value.nil?
50
+ @usage
51
+ else
52
+ @usage = value
53
+ end
54
+ end
55
+
56
+ ##
57
+ # This is used by the "help" command to display an
58
+ # example of the command in the CLI
59
+ def self.example(value = nil)
60
+ if value.nil?
61
+ @example
62
+ else
63
+ @example ||= ""
64
+ @example << "\n\s\s#{value}"
65
+ end
66
+ end
67
+
68
+ ##
69
+ # Sets the "perform_hooks" flag to "true"
70
+ def perform_hooks!
71
+ @perform_hooks = true
72
+ end
73
+
74
+ ##
75
+ # Displays the help screen for the current command
76
+ def help
77
+ command_object.display_usage(cli.command)
78
+ exit
79
+ end
80
+
81
+ ##
82
+ # Contains an instance of the command object
83
+ def command_object
84
+ @command_object ||= GitPusshuTen::Command.new(cli, configuration, hooks, environment)
85
+ end
86
+
87
+ ##
88
+ # Git object wrapper
89
+ def git
90
+ @git ||= GitPusshuTen::Git.new
91
+ end
92
+
93
+ ##
94
+ # Local object wrapper
95
+ def local
96
+ @local ||= GitPusshuTen::Local.new
97
+ end
98
+
99
+ ##
100
+ # Wrapper for the configuration object
101
+ def c
102
+ configuration
103
+ end
104
+
105
+ ##
106
+ # Wrapper for the environment object
107
+ def e
108
+ environment
109
+ end
110
+
111
+ ##
112
+ # Wrapper for coloring ANSI/CLI Green
113
+ def g(value)
114
+ value.to_s.color(:green)
115
+ end
116
+
117
+ ##
118
+ # Wrapper for coloring ANSI/CLI Yellow
119
+ def y(value)
120
+ value.to_s.color(:yellow)
121
+ end
122
+
123
+ ##
124
+ # Wrapper for coloring ANSI/CLI Red
125
+ def r(value)
126
+ value.to_s.color(:red)
127
+ end
128
+
129
+ ##
130
+ # Helper method for prompting the user
131
+ def yes?
132
+ choose do |menu|
133
+ menu.prompt = ''
134
+ menu.choice('yes') { true }
135
+ menu.choice('no') { false }
136
+ end
137
+ end
138
+
139
+ ##
140
+ # Shorthand for creating standard messages
141
+ def standard(text)
142
+ GitPusshuTen::Log.standard(text)
143
+ end
144
+
145
+ ##
146
+ # Shorthand for creating normal messages
147
+ def message(text)
148
+ GitPusshuTen::Log.message(text)
149
+ end
150
+
151
+ ##
152
+ # Shorthand for creating warning messages
153
+ def warning(text)
154
+ GitPusshuTen::Log.warning(text)
155
+ end
156
+
157
+ ##
158
+ # Shorthand for creating error messages
159
+ def error(text)
160
+ GitPusshuTen::Log.error(text)
161
+ end
162
+
163
+ ##
164
+ # Shorthand for silently creating logs
165
+ def silent(text)
166
+ GitPusshuTen::Log.silent(text)
167
+ end
168
+
169
+ ##
170
+ # Initialize a new command
171
+ def initialize(cli, configuration, hooks, environment)
172
+ @cli = cli
173
+ @configuration = configuration
174
+ @hooks = hooks
175
+ @environment = environment
176
+ @perform_hooks = false
177
+ end
178
+
179
+ ##
180
+ # Performs one of the commands inside a command class
181
+ def perform!
182
+ send("perform_#{command}!")
183
+ end
184
+
185
+ ##
186
+ # Validates if the method that's about to be invoked actually exists
187
+ def validate!
188
+ if not respond_to?("perform_#{command}!")
189
+ type = self.class.to_s.split("::").last.downcase
190
+ error "Unknown #{y(type)} command: <#{r(command)}>"
191
+ error "Run #{y("gitpusshuten help #{type}")} for a list #{y(type)} commands."
192
+ exit
193
+ end
194
+ end
195
+
196
+ ##
197
+ # The Pre-perform command
198
+ # It should be invoked before the #perform! command
199
+ def pre_perform!
200
+ return unless perform_hooks?
201
+ unless hooks.pre_hooks.any?
202
+ GitPusshuTen::Log.message "No pre deploy hooks to perform."
203
+ return
204
+ end
205
+
206
+ ##
207
+ # Connect to the remote environment and perform the pre deploy hooks
208
+ hooks.render_commands(hooks.pre_hooks).each do |name, commands|
209
+ GitPusshuTen::Log.message("Performing pre deploy hook: #{y(name)}")
210
+ standard environment.execute_as_user("cd '#{e.app_dir}'; #{commands}")
211
+ end
212
+ end
213
+
214
+ ##
215
+ # The Post-perform command
216
+ # It should be invoked after the #perform! command
217
+ def post_perform!
218
+ return unless perform_hooks?
219
+ unless hooks.post_hooks.any?
220
+ GitPusshuTen::Log.message "No post deploy hooks to perform."
221
+ return
222
+ end
223
+
224
+ ##
225
+ # Connect to the remote environment and perform the post deploy hooks
226
+ hooks.render_commands(hooks.post_hooks).each do |name, commands|
227
+ GitPusshuTen::Log.message("Performing post deploy hook: #{y(name)}")
228
+ standard environment.execute_as_user("cd '#{e.app_dir}'; #{commands}")
229
+ end
230
+ end
231
+
232
+ ##
233
+ # Makes the user authenticate itself as root
234
+ def prompt_for_root_password!
235
+ e.execute_as_root('')
236
+ end
237
+
238
+ ##
239
+ # Makes the user authenticate itself as a user
240
+ def prompt_for_user_password!
241
+ e.execute_as_user('')
242
+ end
243
+
244
+ end
245
+ end
246
+ end
@@ -0,0 +1,27 @@
1
+ module GitPusshuTen
2
+ module Commands
3
+ class Delete < GitPusshuTen::Commands::Base
4
+ description "Deletes the application of the specified environment."
5
+ usage "delete <environment> environment"
6
+ example "heavenly delete staging environment # Deletes the application in the staging environment."
7
+ example "heavenly delete production environment # Deletes the application in the production environment."
8
+
9
+ def initialize(*objects)
10
+ super
11
+
12
+ help if e.name.nil?
13
+ end
14
+
15
+ ##
16
+ # Deletes the application directory from the remote server
17
+ def perform_!
18
+ message "Are you sure you wish to delete #{y(c.application)} from the #{y(e.name)} environment (#{y(c.ip)})?"
19
+ if yes?
20
+ message "Deleting #{y(c.application)}."
21
+ e.delete!
22
+ end
23
+ end
24
+
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,36 @@
1
+ module GitPusshuTen
2
+ module Commands
3
+ class Help < GitPusshuTen::Commands::Base
4
+ description "Displays the command list, or the help screen for a specific command."
5
+ usage "help | help <command>"
6
+ example "heavenly help # Displays the main help screen."
7
+ example "heavenly help initialize # Displays the help screen for the initialize command."
8
+ example "heavenly help setup # Displays the help screen for the setup command."
9
+ example "heavenly help tag # Displays the help screen for the tag command."
10
+
11
+ attr_accessor :command_name
12
+
13
+ def initialize(*objects)
14
+ super
15
+
16
+ @command_name = cli.arguments.shift
17
+ end
18
+
19
+ ##
20
+ # Displays the help screen if no arguments are specified
21
+ # Displays the help screen for a particular command if an argument is specified
22
+ def perform_!
23
+ if command_name.nil?
24
+ command_object.display_commands
25
+ else
26
+ if command_object.available_commands.include?(command_name)
27
+ command_object.display_usage(command_name)
28
+ else
29
+ error "Command <#{r(command_name)}> not found."
30
+ end
31
+ end
32
+ end
33
+
34
+ end
35
+ end
36
+ end