engineyard 2.0.7 → 2.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/lib/engineyard/cli.rb +3 -0
  2. data/lib/engineyard/thor.rb +1 -0
  3. data/lib/engineyard/version.rb +1 -1
  4. data/lib/vendor/thor/Gemfile +15 -0
  5. data/lib/vendor/thor/LICENSE.md +20 -0
  6. data/lib/vendor/thor/README.md +28 -0
  7. data/lib/vendor/thor/lib/thor.rb +379 -0
  8. data/lib/vendor/thor/lib/thor/actions.rb +318 -0
  9. data/lib/vendor/thor/lib/thor/actions/create_file.rb +105 -0
  10. data/lib/vendor/thor/lib/thor/actions/create_link.rb +57 -0
  11. data/lib/vendor/thor/lib/thor/actions/directory.rb +98 -0
  12. data/lib/vendor/thor/lib/thor/actions/empty_directory.rb +153 -0
  13. data/lib/vendor/thor/lib/thor/actions/file_manipulation.rb +308 -0
  14. data/lib/vendor/thor/lib/thor/actions/inject_into_file.rb +109 -0
  15. data/lib/vendor/thor/lib/thor/base.rb +641 -0
  16. data/lib/vendor/thor/lib/thor/core_ext/dir_escape.rb +0 -0
  17. data/lib/vendor/thor/lib/thor/core_ext/file_binary_read.rb +9 -0
  18. data/lib/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +75 -0
  19. data/lib/vendor/thor/lib/thor/core_ext/ordered_hash.rb +100 -0
  20. data/lib/vendor/thor/lib/thor/error.rb +35 -0
  21. data/lib/vendor/thor/lib/thor/group.rb +285 -0
  22. data/lib/vendor/thor/lib/thor/invocation.rb +170 -0
  23. data/lib/vendor/thor/lib/thor/parser.rb +4 -0
  24. data/lib/vendor/thor/lib/thor/parser/argument.rb +74 -0
  25. data/lib/vendor/thor/lib/thor/parser/arguments.rb +171 -0
  26. data/lib/vendor/thor/lib/thor/parser/option.rb +121 -0
  27. data/lib/vendor/thor/lib/thor/parser/options.rb +178 -0
  28. data/lib/vendor/thor/lib/thor/rake_compat.rb +71 -0
  29. data/lib/vendor/thor/lib/thor/runner.rb +321 -0
  30. data/lib/vendor/thor/lib/thor/shell.rb +88 -0
  31. data/lib/vendor/thor/lib/thor/shell/basic.rb +389 -0
  32. data/lib/vendor/thor/lib/thor/shell/color.rb +144 -0
  33. data/lib/vendor/thor/lib/thor/shell/html.rb +123 -0
  34. data/lib/vendor/thor/lib/thor/task.rb +132 -0
  35. data/lib/vendor/thor/lib/thor/util.rb +266 -0
  36. data/lib/vendor/thor/lib/thor/version.rb +3 -0
  37. data/lib/vendor/thor/thor.gemspec +26 -0
  38. metadata +38 -21
  39. data/bin/ey_perftools +0 -12
@@ -27,6 +27,9 @@ module EY
27
27
  ui.print_exception(e)
28
28
  ui.say("Quitting...")
29
29
  raise
30
+ rescue SystemExit
31
+ # don't print a message for exit
32
+ raise
30
33
  rescue Exception => e
31
34
  ui.print_exception(e)
32
35
  raise
@@ -1,3 +1,4 @@
1
+ $:.unshift(File.expand_path('../vendor/thor/lib/', File.dirname(__FILE__)))
1
2
  require 'thor'
2
3
 
3
4
  module EY
@@ -1,4 +1,4 @@
1
1
  module EY
2
- VERSION = '2.0.7'
2
+ VERSION = '2.0.8'
3
3
  ENGINEYARD_SERVERSIDE_VERSION = ENV['ENGINEYARD_SERVERSIDE_VERSION'] || '2.0.3'
4
4
  end
@@ -0,0 +1,15 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ platforms :mri_18 do
6
+ gem 'ruby-debug', '>= 0.10.3'
7
+ end
8
+
9
+ platforms :mri_19 do
10
+ gem 'ruby-debug19'
11
+ end
12
+
13
+ group :development do
14
+ gem 'pry'
15
+ end
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 Yehuda Katz, Eric Hodel, et al.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,28 @@
1
+ [![Build Status](https://secure.travis-ci.org/wycats/thor.png?branch=master)](http://travis-ci.org/wycats/thor)
2
+
3
+ Thor
4
+ ====
5
+
6
+ Description
7
+ -----------
8
+ Thor is a simple and efficient tool for building self-documenting command line
9
+ utilities. It removes the pain of parsing command line options, writing
10
+ "USAGE:" banners, and can also be used as an alternative to the [Rake][rake]
11
+ build tool. The syntax is Rake-like, so it should be familiar to most Rake
12
+ users.
13
+
14
+ [rake]: https://github.com/jimweirich/rake
15
+
16
+ Installation
17
+ ------------
18
+ gem install thor
19
+
20
+ Usage and documentation
21
+ -----------------------
22
+ Please see [the wiki](https://github.com/wycats/thor/wiki) for basic usage and other documentation on using Thor.
23
+
24
+ License
25
+ -------
26
+ Released under the MIT License. See the [LICENSE][license] file for further details.
27
+
28
+ [license]: https://github.com/wycats/thor/blob/master/LICENSE.md
@@ -0,0 +1,379 @@
1
+ require 'thor/base'
2
+
3
+ class Thor
4
+ class << self
5
+ # Sets the default task when thor is executed without an explicit task to be called.
6
+ #
7
+ # ==== Parameters
8
+ # meth<Symbol>:: name of the default task
9
+ #
10
+ def default_task(meth=nil)
11
+ case meth
12
+ when :none
13
+ @default_task = 'help'
14
+ when nil
15
+ @default_task ||= from_superclass(:default_task, 'help')
16
+ else
17
+ @default_task = meth.to_s
18
+ end
19
+ end
20
+
21
+ # Registers another Thor subclass as a command.
22
+ #
23
+ # ==== Parameters
24
+ # klass<Class>:: Thor subclass to register
25
+ # command<String>:: Subcommand name to use
26
+ # usage<String>:: Short usage for the subcommand
27
+ # description<String>:: Description for the subcommand
28
+ def register(klass, subcommand_name, usage, description, options={})
29
+ if klass <= Thor::Group
30
+ desc usage, description, options
31
+ define_method(subcommand_name) { |*args| invoke(klass, args) }
32
+ else
33
+ desc usage, description, options
34
+ subcommand subcommand_name, klass
35
+ end
36
+ end
37
+
38
+ # Defines the usage and the description of the next task.
39
+ #
40
+ # ==== Parameters
41
+ # usage<String>
42
+ # description<String>
43
+ # options<String>
44
+ #
45
+ def desc(usage, description, options={})
46
+ if options[:for]
47
+ task = find_and_refresh_task(options[:for])
48
+ task.usage = usage if usage
49
+ task.description = description if description
50
+ else
51
+ @usage, @desc, @hide = usage, description, options[:hide] || false
52
+ end
53
+ end
54
+
55
+ # Defines the long description of the next task.
56
+ #
57
+ # ==== Parameters
58
+ # long description<String>
59
+ #
60
+ def long_desc(long_description, options={})
61
+ if options[:for]
62
+ task = find_and_refresh_task(options[:for])
63
+ task.long_description = long_description if long_description
64
+ else
65
+ @long_desc = long_description
66
+ end
67
+ end
68
+
69
+ # Maps an input to a task. If you define:
70
+ #
71
+ # map "-T" => "list"
72
+ #
73
+ # Running:
74
+ #
75
+ # thor -T
76
+ #
77
+ # Will invoke the list task.
78
+ #
79
+ # ==== Parameters
80
+ # Hash[String|Array => Symbol]:: Maps the string or the strings in the array to the given task.
81
+ #
82
+ def map(mappings=nil)
83
+ @map ||= from_superclass(:map, {})
84
+
85
+ if mappings
86
+ mappings.each do |key, value|
87
+ if key.respond_to?(:each)
88
+ key.each {|subkey| @map[subkey] = value}
89
+ else
90
+ @map[key] = value
91
+ end
92
+ end
93
+ end
94
+
95
+ @map
96
+ end
97
+
98
+ # Declares the options for the next task to be declared.
99
+ #
100
+ # ==== Parameters
101
+ # Hash[Symbol => Object]:: The hash key is the name of the option and the value
102
+ # is the type of the option. Can be :string, :array, :hash, :boolean, :numeric
103
+ # or :required (string). If you give a value, the type of the value is used.
104
+ #
105
+ def method_options(options=nil)
106
+ @method_options ||= {}
107
+ build_options(options, @method_options) if options
108
+ @method_options
109
+ end
110
+
111
+ alias options method_options
112
+
113
+ # Adds an option to the set of method options. If :for is given as option,
114
+ # it allows you to change the options from a previous defined task.
115
+ #
116
+ # def previous_task
117
+ # # magic
118
+ # end
119
+ #
120
+ # method_option :foo => :bar, :for => :previous_task
121
+ #
122
+ # def next_task
123
+ # # magic
124
+ # end
125
+ #
126
+ # ==== Parameters
127
+ # name<Symbol>:: The name of the argument.
128
+ # options<Hash>:: Described below.
129
+ #
130
+ # ==== Options
131
+ # :desc - Description for the argument.
132
+ # :required - If the argument is required or not.
133
+ # :default - Default value for this argument. It cannot be required and have default values.
134
+ # :aliases - Aliases for this option.
135
+ # :type - The type of the argument, can be :string, :hash, :array, :numeric or :boolean.
136
+ # :banner - String to show on usage notes.
137
+ # :hide - If you want to hide this option from the help.
138
+ #
139
+ def method_option(name, options={})
140
+ scope = if options[:for]
141
+ find_and_refresh_task(options[:for]).options
142
+ else
143
+ method_options
144
+ end
145
+
146
+ build_option(name, options, scope)
147
+ end
148
+
149
+ alias option method_option
150
+
151
+ # Prints help information for the given task.
152
+ #
153
+ # ==== Parameters
154
+ # shell<Thor::Shell>
155
+ # task_name<String>
156
+ #
157
+ def task_help(shell, task_name)
158
+ meth = normalize_task_name(task_name)
159
+ task = all_tasks[meth]
160
+ handle_no_task_error(meth) unless task
161
+
162
+ shell.say "Usage:"
163
+ shell.say " #{banner(task)}"
164
+ shell.say
165
+ class_options_help(shell, nil => task.options.map { |_, o| o })
166
+ if task.long_description
167
+ shell.say "Description:"
168
+ shell.print_wrapped(task.long_description, :indent => 2)
169
+ else
170
+ shell.say task.description
171
+ end
172
+ end
173
+
174
+ # Prints help information for this class.
175
+ #
176
+ # ==== Parameters
177
+ # shell<Thor::Shell>
178
+ #
179
+ def help(shell, subcommand = false)
180
+ list = printable_tasks(true, subcommand)
181
+ Thor::Util.thor_classes_in(self).each do |klass|
182
+ list += klass.printable_tasks(false)
183
+ end
184
+ list.sort!{ |a,b| a[0] <=> b[0] }
185
+
186
+ shell.say "Tasks:"
187
+ shell.print_table(list, :indent => 2, :truncate => true)
188
+ shell.say
189
+ class_options_help(shell)
190
+ end
191
+
192
+ # Returns tasks ready to be printed.
193
+ def printable_tasks(all = true, subcommand = false)
194
+ (all ? all_tasks : tasks).map do |_, task|
195
+ next if task.hidden?
196
+ item = []
197
+ item << banner(task, false, subcommand)
198
+ item << (task.description ? "# #{task.description.gsub(/\s+/m,' ')}" : "")
199
+ item
200
+ end.compact
201
+ end
202
+
203
+ def subcommands
204
+ @subcommands ||= from_superclass(:subcommands, [])
205
+ end
206
+
207
+ def subcommand(subcommand, subcommand_class)
208
+ self.subcommands << subcommand.to_s
209
+ subcommand_class.subcommand_help subcommand
210
+
211
+ define_method(subcommand) do |*args|
212
+ args, opts = Thor::Arguments.split(args)
213
+ invoke subcommand_class, args, opts
214
+ end
215
+ end
216
+
217
+ # Extend check unknown options to accept a hash of conditions.
218
+ #
219
+ # === Parameters
220
+ # options<Hash>: A hash containing :only and/or :except keys
221
+ def check_unknown_options!(options={})
222
+ @check_unknown_options ||= Hash.new
223
+ options.each do |key, value|
224
+ if value
225
+ @check_unknown_options[key] = Array(value)
226
+ else
227
+ @check_unknown_options.delete(key)
228
+ end
229
+ end
230
+ @check_unknown_options
231
+ end
232
+
233
+ # Overwrite check_unknown_options? to take subcommands and options into account.
234
+ def check_unknown_options?(config) #:nodoc:
235
+ options = check_unknown_options
236
+ return false unless options
237
+
238
+ task = config[:current_task]
239
+ return true unless task
240
+
241
+ name = task.name
242
+
243
+ if subcommands.include?(name)
244
+ false
245
+ elsif options[:except]
246
+ !options[:except].include?(name.to_sym)
247
+ elsif options[:only]
248
+ options[:only].include?(name.to_sym)
249
+ else
250
+ true
251
+ end
252
+ end
253
+
254
+ protected
255
+
256
+ # The method responsible for dispatching given the args.
257
+ def dispatch(meth, given_args, given_opts, config) #:nodoc:
258
+ meth ||= retrieve_task_name(given_args)
259
+ task = all_tasks[normalize_task_name(meth)]
260
+
261
+ if task
262
+ args, opts = Thor::Options.split(given_args)
263
+ else
264
+ args, opts = given_args, nil
265
+ task = Thor::DynamicTask.new(meth)
266
+ end
267
+
268
+ opts = given_opts || opts || []
269
+ config.merge!(:current_task => task, :task_options => task.options)
270
+
271
+ instance = new(args, opts, config)
272
+ yield instance if block_given?
273
+ args = instance.args
274
+ trailing = args[Range.new(arguments.size, -1)]
275
+ instance.invoke_task(task, trailing || [])
276
+ end
277
+
278
+ # The banner for this class. You can customize it if you are invoking the
279
+ # thor class by another ways which is not the Thor::Runner. It receives
280
+ # the task that is going to be invoked and a boolean which indicates if
281
+ # the namespace should be displayed as arguments.
282
+ #
283
+ def banner(task, namespace = nil, subcommand = false)
284
+ "#{basename} #{task.formatted_usage(self, $thor_runner, subcommand)}"
285
+ end
286
+
287
+ def baseclass #:nodoc:
288
+ Thor
289
+ end
290
+
291
+ def create_task(meth) #:nodoc:
292
+ if @usage && @desc
293
+ base_class = @hide ? Thor::HiddenTask : Thor::Task
294
+ tasks[meth] = base_class.new(meth, @desc, @long_desc, @usage, method_options)
295
+ @usage, @desc, @long_desc, @method_options, @hide = nil
296
+ true
297
+ elsif self.all_tasks[meth] || meth == "method_missing"
298
+ true
299
+ else
300
+ puts "[WARNING] Attempted to create task #{meth.inspect} without usage or description. " <<
301
+ "Call desc if you want this method to be available as task or declare it inside a " <<
302
+ "no_tasks{} block. Invoked from #{caller[1].inspect}."
303
+ false
304
+ end
305
+ end
306
+
307
+ def initialize_added #:nodoc:
308
+ class_options.merge!(method_options)
309
+ @method_options = nil
310
+ end
311
+
312
+ # Retrieve the task name from given args.
313
+ def retrieve_task_name(args) #:nodoc:
314
+ meth = args.first.to_s unless args.empty?
315
+ if meth && (map[meth] || meth !~ /^\-/)
316
+ args.shift
317
+ else
318
+ nil
319
+ end
320
+ end
321
+
322
+ # receives a (possibly nil) task name and returns a name that is in
323
+ # the tasks hash. In addition to normalizing aliases, this logic
324
+ # will determine if a shortened command is an unambiguous substring of
325
+ # a task or alias.
326
+ #
327
+ # +normalize_task_name+ also converts names like +animal-prison+
328
+ # into +animal_prison+.
329
+ def normalize_task_name(meth) #:nodoc:
330
+ return default_task.to_s.gsub('-', '_') unless meth
331
+
332
+ possibilities = find_task_possibilities(meth)
333
+ if possibilities.size > 1
334
+ raise ArgumentError, "Ambiguous task #{meth} matches [#{possibilities.join(', ')}]"
335
+ elsif possibilities.size < 1
336
+ meth = meth || default_task
337
+ elsif map[meth]
338
+ meth = map[meth]
339
+ else
340
+ meth = possibilities.first
341
+ end
342
+
343
+ meth.to_s.gsub('-','_') # treat foo-bar as foo_bar
344
+ end
345
+
346
+ # this is the logic that takes the task name passed in by the user
347
+ # and determines whether it is an unambiguous substrings of a task or
348
+ # alias name.
349
+ def find_task_possibilities(meth)
350
+ len = meth.to_s.length
351
+ possibilities = all_tasks.merge(map).keys.select { |n| meth == n[0, len] }.sort
352
+ unique_possibilities = possibilities.map { |k| map[k] || k }.uniq
353
+
354
+ if possibilities.include?(meth)
355
+ [meth]
356
+ elsif unique_possibilities.size == 1
357
+ unique_possibilities
358
+ else
359
+ possibilities
360
+ end
361
+ end
362
+
363
+ def subcommand_help(cmd)
364
+ desc "help [COMMAND]", "Describe subcommands or one specific subcommand"
365
+ class_eval <<-RUBY
366
+ def help(task = nil, subcommand = true); super; end
367
+ RUBY
368
+ end
369
+ end
370
+
371
+ include Thor::Base
372
+
373
+ map HELP_MAPPINGS => :help
374
+
375
+ desc "help [TASK]", "Describe available tasks or one specific task"
376
+ def help(task = nil, subcommand = false)
377
+ task ? self.class.task_help(shell, task) : self.class.help(shell, subcommand)
378
+ end
379
+ end