engineyard-serverside 1.5.21 → 1.5.23.ruby19

Sign up to get free protection for your applications and to get access to all the features.
Files changed (184) hide show
  1. data/lib/engineyard-serverside/cli.rb +39 -45
  2. data/lib/engineyard-serverside/configuration.rb +28 -4
  3. data/lib/engineyard-serverside/deploy.rb +5 -4
  4. data/lib/engineyard-serverside/logged_output.rb +3 -5
  5. data/lib/engineyard-serverside/server.rb +26 -2
  6. data/lib/engineyard-serverside/task.rb +2 -4
  7. data/lib/engineyard-serverside/version.rb +1 -1
  8. data/lib/engineyard-serverside.rb +8 -20
  9. data/spec/basic_deploy_spec.rb +1 -1
  10. data/spec/bundler_deploy_spec.rb +1 -1
  11. data/spec/nodejs_deploy_spec.rb +1 -1
  12. data/spec/rails31_deploy_spec.rb +1 -1
  13. data/spec/services_deploy_spec.rb +1 -1
  14. metadata +80 -233
  15. data/lib/vendor/dataflow/HISTORY +0 -52
  16. data/lib/vendor/dataflow/LICENSE +0 -19
  17. data/lib/vendor/dataflow/README.textile +0 -290
  18. data/lib/vendor/dataflow/Rakefile +0 -36
  19. data/lib/vendor/dataflow/dataflow/actor.rb +0 -22
  20. data/lib/vendor/dataflow/dataflow/equality.rb +0 -44
  21. data/lib/vendor/dataflow/dataflow/future_queue.rb +0 -24
  22. data/lib/vendor/dataflow/dataflow/port.rb +0 -54
  23. data/lib/vendor/dataflow/dataflow.rb +0 -124
  24. data/lib/vendor/dataflow/examples/barrier.rb +0 -9
  25. data/lib/vendor/dataflow/examples/data_driven.rb +0 -17
  26. data/lib/vendor/dataflow/examples/dataflow_http_gets.rb +0 -13
  27. data/lib/vendor/dataflow/examples/flow.rb +0 -20
  28. data/lib/vendor/dataflow/examples/future_http_gets.rb +0 -12
  29. data/lib/vendor/dataflow/examples/future_queue.rb +0 -11
  30. data/lib/vendor/dataflow/examples/instance_variables.rb +0 -15
  31. data/lib/vendor/dataflow/examples/laziness.rb +0 -9
  32. data/lib/vendor/dataflow/examples/local_variables.rb +0 -11
  33. data/lib/vendor/dataflow/examples/messages.rb +0 -26
  34. data/lib/vendor/dataflow/examples/port_http_gets.rb +0 -13
  35. data/lib/vendor/dataflow/examples/port_send.rb +0 -10
  36. data/lib/vendor/dataflow/examples/ring.rb +0 -21
  37. data/lib/vendor/dataflow/spec/actor_spec.rb +0 -28
  38. data/lib/vendor/dataflow/spec/anonymous_variables_spec.rb +0 -21
  39. data/lib/vendor/dataflow/spec/barrier_spec.rb +0 -25
  40. data/lib/vendor/dataflow/spec/by_need_spec.rb +0 -55
  41. data/lib/vendor/dataflow/spec/dataflow_spec.rb +0 -151
  42. data/lib/vendor/dataflow/spec/equality_spec.rb +0 -40
  43. data/lib/vendor/dataflow/spec/flow_spec.rb +0 -25
  44. data/lib/vendor/dataflow/spec/forker_spec.rb +0 -28
  45. data/lib/vendor/dataflow/spec/future_queue_spec.rb +0 -31
  46. data/lib/vendor/dataflow/spec/inspect_spec.rb +0 -19
  47. data/lib/vendor/dataflow/spec/need_later_spec.rb +0 -12
  48. data/lib/vendor/dataflow/spec/port_spec.rb +0 -26
  49. data/lib/vendor/dataflow/spec/spec.opts +0 -1
  50. data/lib/vendor/dataflow/spec/spec_helper.rb +0 -10
  51. data/lib/vendor/escape/Readme +0 -21
  52. data/lib/vendor/escape/doc_include/template/qualitysmith.rb +0 -631
  53. data/lib/vendor/json_pure/CHANGES +0 -166
  54. data/lib/vendor/json_pure/COPYING +0 -58
  55. data/lib/vendor/json_pure/GPL +0 -340
  56. data/lib/vendor/json_pure/README +0 -358
  57. data/lib/vendor/json_pure/Rakefile +0 -292
  58. data/lib/vendor/json_pure/TODO +0 -1
  59. data/lib/vendor/json_pure/VERSION +0 -1
  60. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log +0 -52
  61. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat +0 -1000
  62. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat +0 -1001
  63. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat +0 -900
  64. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat +0 -901
  65. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat +0 -1000
  66. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat +0 -1001
  67. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log +0 -261
  68. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat +0 -1000
  69. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat +0 -1001
  70. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat +0 -1000
  71. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat +0 -1001
  72. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat +0 -1000
  73. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat +0 -1001
  74. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log +0 -262
  75. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat +0 -1000
  76. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat +0 -1001
  77. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log +0 -82
  78. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log +0 -34
  79. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat +0 -900
  80. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat +0 -901
  81. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log +0 -81
  82. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat +0 -1000
  83. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat +0 -1001
  84. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log +0 -82
  85. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat +0 -1000
  86. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat +0 -1001
  87. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log +0 -82
  88. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat +0 -1000
  89. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat +0 -1001
  90. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log +0 -82
  91. data/lib/vendor/json_pure/benchmarks/generator2_benchmark.rb +0 -222
  92. data/lib/vendor/json_pure/benchmarks/generator_benchmark.rb +0 -224
  93. data/lib/vendor/json_pure/benchmarks/ohai.json +0 -1216
  94. data/lib/vendor/json_pure/benchmarks/ohai.ruby +0 -1
  95. data/lib/vendor/json_pure/benchmarks/parser2_benchmark.rb +0 -251
  96. data/lib/vendor/json_pure/benchmarks/parser_benchmark.rb +0 -259
  97. data/lib/vendor/json_pure/bin/edit_json.rb +0 -9
  98. data/lib/vendor/json_pure/bin/prettify_json.rb +0 -75
  99. data/lib/vendor/json_pure/data/example.json +0 -1
  100. data/lib/vendor/json_pure/data/index.html +0 -38
  101. data/lib/vendor/json_pure/data/prototype.js +0 -4184
  102. data/lib/vendor/json_pure/ext/json/ext/generator/extconf.rb +0 -16
  103. data/lib/vendor/json_pure/ext/json/ext/generator/generator.c +0 -1323
  104. data/lib/vendor/json_pure/ext/json/ext/generator/generator.h +0 -170
  105. data/lib/vendor/json_pure/ext/json/ext/parser/extconf.rb +0 -15
  106. data/lib/vendor/json_pure/ext/json/ext/parser/parser.c +0 -1935
  107. data/lib/vendor/json_pure/ext/json/ext/parser/parser.h +0 -71
  108. data/lib/vendor/json_pure/ext/json/ext/parser/parser.rl +0 -792
  109. data/lib/vendor/json_pure/install.rb +0 -26
  110. data/lib/vendor/json_pure/tests/fixtures/fail1.json +0 -1
  111. data/lib/vendor/json_pure/tests/fixtures/fail10.json +0 -1
  112. data/lib/vendor/json_pure/tests/fixtures/fail11.json +0 -1
  113. data/lib/vendor/json_pure/tests/fixtures/fail12.json +0 -1
  114. data/lib/vendor/json_pure/tests/fixtures/fail13.json +0 -1
  115. data/lib/vendor/json_pure/tests/fixtures/fail14.json +0 -1
  116. data/lib/vendor/json_pure/tests/fixtures/fail18.json +0 -1
  117. data/lib/vendor/json_pure/tests/fixtures/fail19.json +0 -1
  118. data/lib/vendor/json_pure/tests/fixtures/fail2.json +0 -1
  119. data/lib/vendor/json_pure/tests/fixtures/fail20.json +0 -1
  120. data/lib/vendor/json_pure/tests/fixtures/fail21.json +0 -1
  121. data/lib/vendor/json_pure/tests/fixtures/fail22.json +0 -1
  122. data/lib/vendor/json_pure/tests/fixtures/fail23.json +0 -1
  123. data/lib/vendor/json_pure/tests/fixtures/fail24.json +0 -1
  124. data/lib/vendor/json_pure/tests/fixtures/fail25.json +0 -1
  125. data/lib/vendor/json_pure/tests/fixtures/fail27.json +0 -2
  126. data/lib/vendor/json_pure/tests/fixtures/fail28.json +0 -2
  127. data/lib/vendor/json_pure/tests/fixtures/fail3.json +0 -1
  128. data/lib/vendor/json_pure/tests/fixtures/fail4.json +0 -1
  129. data/lib/vendor/json_pure/tests/fixtures/fail5.json +0 -1
  130. data/lib/vendor/json_pure/tests/fixtures/fail6.json +0 -1
  131. data/lib/vendor/json_pure/tests/fixtures/fail7.json +0 -1
  132. data/lib/vendor/json_pure/tests/fixtures/fail8.json +0 -1
  133. data/lib/vendor/json_pure/tests/fixtures/fail9.json +0 -1
  134. data/lib/vendor/json_pure/tests/fixtures/pass1.json +0 -56
  135. data/lib/vendor/json_pure/tests/fixtures/pass15.json +0 -1
  136. data/lib/vendor/json_pure/tests/fixtures/pass16.json +0 -1
  137. data/lib/vendor/json_pure/tests/fixtures/pass17.json +0 -1
  138. data/lib/vendor/json_pure/tests/fixtures/pass2.json +0 -1
  139. data/lib/vendor/json_pure/tests/fixtures/pass26.json +0 -1
  140. data/lib/vendor/json_pure/tests/fixtures/pass3.json +0 -6
  141. data/lib/vendor/json_pure/tests/test_json.rb +0 -361
  142. data/lib/vendor/json_pure/tests/test_json_addition.rb +0 -162
  143. data/lib/vendor/json_pure/tests/test_json_encoding.rb +0 -68
  144. data/lib/vendor/json_pure/tests/test_json_fixtures.rb +0 -34
  145. data/lib/vendor/json_pure/tests/test_json_generate.rb +0 -122
  146. data/lib/vendor/json_pure/tests/test_json_rails.rb +0 -144
  147. data/lib/vendor/json_pure/tests/test_json_unicode.rb +0 -76
  148. data/lib/vendor/json_pure/tools/fuzz.rb +0 -139
  149. data/lib/vendor/json_pure/tools/server.rb +0 -61
  150. data/lib/vendor/open4/lib/open4.rb +0 -403
  151. data/lib/vendor/thor/CHANGELOG.rdoc +0 -89
  152. data/lib/vendor/thor/LICENSE +0 -20
  153. data/lib/vendor/thor/README.rdoc +0 -297
  154. data/lib/vendor/thor/Thorfile +0 -69
  155. data/lib/vendor/thor/bin/rake2thor +0 -86
  156. data/lib/vendor/thor/bin/thor +0 -6
  157. data/lib/vendor/thor/lib/thor/actions/create_file.rb +0 -103
  158. data/lib/vendor/thor/lib/thor/actions/directory.rb +0 -91
  159. data/lib/vendor/thor/lib/thor/actions/empty_directory.rb +0 -134
  160. data/lib/vendor/thor/lib/thor/actions/file_manipulation.rb +0 -223
  161. data/lib/vendor/thor/lib/thor/actions/inject_into_file.rb +0 -104
  162. data/lib/vendor/thor/lib/thor/actions.rb +0 -275
  163. data/lib/vendor/thor/lib/thor/base.rb +0 -540
  164. data/lib/vendor/thor/lib/thor/core_ext/file_binary_read.rb +0 -9
  165. data/lib/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +0 -75
  166. data/lib/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -100
  167. data/lib/vendor/thor/lib/thor/error.rb +0 -30
  168. data/lib/vendor/thor/lib/thor/group.rb +0 -271
  169. data/lib/vendor/thor/lib/thor/invocation.rb +0 -180
  170. data/lib/vendor/thor/lib/thor/parser/argument.rb +0 -67
  171. data/lib/vendor/thor/lib/thor/parser/arguments.rb +0 -150
  172. data/lib/vendor/thor/lib/thor/parser/option.rb +0 -128
  173. data/lib/vendor/thor/lib/thor/parser/options.rb +0 -169
  174. data/lib/vendor/thor/lib/thor/parser.rb +0 -4
  175. data/lib/vendor/thor/lib/thor/rake_compat.rb +0 -66
  176. data/lib/vendor/thor/lib/thor/runner.rb +0 -314
  177. data/lib/vendor/thor/lib/thor/shell/basic.rb +0 -239
  178. data/lib/vendor/thor/lib/thor/shell/color.rb +0 -108
  179. data/lib/vendor/thor/lib/thor/shell.rb +0 -83
  180. data/lib/vendor/thor/lib/thor/task.rb +0 -102
  181. data/lib/vendor/thor/lib/thor/util.rb +0 -230
  182. data/lib/vendor/thor/lib/thor/version.rb +0 -3
  183. data/lib/vendor/thor/lib/thor.rb +0 -244
  184. data/lib/vendor/thor/thor.gemspec +0 -120
@@ -1,314 +0,0 @@
1
- require 'thor'
2
- require 'thor/group'
3
- require 'thor/core_ext/file_binary_read'
4
-
5
- require 'fileutils'
6
- require 'open-uri'
7
- require 'yaml'
8
- require 'digest/md5'
9
- require 'pathname'
10
-
11
- class Thor::Runner < Thor #:nodoc:
12
- map "-T" => :list, "-i" => :install, "-u" => :update, "-v" => :version
13
-
14
- # Override Thor#help so it can give information about any class and any method.
15
- #
16
- def help(meth=nil)
17
- if meth && !self.respond_to?(meth)
18
- initialize_thorfiles(meth)
19
- klass, task = Thor::Util.find_class_and_task_by_namespace!(meth)
20
- klass.start(["-h", task].compact, :shell => self.shell)
21
- else
22
- super
23
- end
24
- end
25
-
26
- # If a task is not found on Thor::Runner, method missing is invoked and
27
- # Thor::Runner is then responsable for finding the task in all classes.
28
- #
29
- def method_missing(meth, *args)
30
- meth = meth.to_s
31
- initialize_thorfiles(meth)
32
- klass, task = Thor::Util.find_class_and_task_by_namespace!(meth)
33
- args.unshift(task) if task
34
- klass.start(args, :shell => self.shell)
35
- end
36
-
37
- desc "install NAME", "Install an optionally named Thor file into your system tasks"
38
- method_options :as => :string, :relative => :boolean, :force => :boolean
39
- def install(name)
40
- initialize_thorfiles
41
-
42
- # If a directory name is provided as the argument, look for a 'main.thor'
43
- # task in said directory.
44
- begin
45
- if File.directory?(File.expand_path(name))
46
- base, package = File.join(name, "main.thor"), :directory
47
- contents = open(base).read
48
- else
49
- base, package = name, :file
50
- contents = open(name).read
51
- end
52
- rescue OpenURI::HTTPError
53
- raise Error, "Error opening URI '#{name}'"
54
- rescue Errno::ENOENT
55
- raise Error, "Error opening file '#{name}'"
56
- end
57
-
58
- say "Your Thorfile contains:"
59
- say contents
60
-
61
- unless options["force"]
62
- return false if no?("Do you wish to continue [y/N]?")
63
- end
64
-
65
- as = options["as"] || begin
66
- first_line = contents.split("\n")[0]
67
- (match = first_line.match(/\s*#\s*module:\s*([^\n]*)/)) ? match[1].strip : nil
68
- end
69
-
70
- unless as
71
- basename = File.basename(name)
72
- as = ask("Please specify a name for #{name} in the system repository [#{basename}]:")
73
- as = basename if as.empty?
74
- end
75
-
76
- location = if options[:relative] || name =~ /^http:\/\//
77
- name
78
- else
79
- File.expand_path(name)
80
- end
81
-
82
- thor_yaml[as] = {
83
- :filename => Digest::MD5.hexdigest(name + as),
84
- :location => location,
85
- :namespaces => Thor::Util.namespaces_in_content(contents, base)
86
- }
87
-
88
- save_yaml(thor_yaml)
89
- say "Storing thor file in your system repository"
90
- destination = File.join(thor_root, thor_yaml[as][:filename])
91
-
92
- if package == :file
93
- File.open(destination, "w") { |f| f.puts contents }
94
- else
95
- FileUtils.cp_r(name, destination)
96
- end
97
-
98
- thor_yaml[as][:filename] # Indicate success
99
- end
100
-
101
- desc "version", "Show Thor version"
102
- def version
103
- require 'thor/version'
104
- say "Thor #{Thor::VERSION}"
105
- end
106
-
107
- desc "uninstall NAME", "Uninstall a named Thor module"
108
- def uninstall(name)
109
- raise Error, "Can't find module '#{name}'" unless thor_yaml[name]
110
- say "Uninstalling #{name}."
111
- FileUtils.rm_rf(File.join(thor_root, "#{thor_yaml[name][:filename]}"))
112
-
113
- thor_yaml.delete(name)
114
- save_yaml(thor_yaml)
115
-
116
- puts "Done."
117
- end
118
-
119
- desc "update NAME", "Update a Thor file from its original location"
120
- def update(name)
121
- raise Error, "Can't find module '#{name}'" if !thor_yaml[name] || !thor_yaml[name][:location]
122
-
123
- say "Updating '#{name}' from #{thor_yaml[name][:location]}"
124
-
125
- old_filename = thor_yaml[name][:filename]
126
- self.options = self.options.merge("as" => name)
127
- filename = install(thor_yaml[name][:location])
128
-
129
- unless filename == old_filename
130
- File.delete(File.join(thor_root, old_filename))
131
- end
132
- end
133
-
134
- desc "installed", "List the installed Thor modules and tasks"
135
- method_options :internal => :boolean
136
- def installed
137
- initialize_thorfiles(nil, true)
138
- display_klasses(true, options["internal"])
139
- end
140
-
141
- desc "list [SEARCH]", "List the available thor tasks (--substring means .*SEARCH)"
142
- method_options :substring => :boolean, :group => :string, :all => :boolean
143
- def list(search="")
144
- initialize_thorfiles
145
-
146
- search = ".*#{search}" if options["substring"]
147
- search = /^#{search}.*/i
148
- group = options[:group] || "standard"
149
-
150
- klasses = Thor::Base.subclasses.select do |k|
151
- (options[:all] || k.group == group) && k.namespace =~ search
152
- end
153
-
154
- display_klasses(false, false, klasses)
155
- end
156
-
157
- private
158
-
159
- def self.banner(task)
160
- "thor " + task.formatted_usage(self, false)
161
- end
162
-
163
- def thor_root
164
- Thor::Util.thor_root
165
- end
166
-
167
- def thor_yaml
168
- @thor_yaml ||= begin
169
- yaml_file = File.join(thor_root, "thor.yml")
170
- yaml = YAML.load_file(yaml_file) if File.exists?(yaml_file)
171
- yaml || {}
172
- end
173
- end
174
-
175
- # Save the yaml file. If none exists in thor root, creates one.
176
- #
177
- def save_yaml(yaml)
178
- yaml_file = File.join(thor_root, "thor.yml")
179
-
180
- unless File.exists?(yaml_file)
181
- FileUtils.mkdir_p(thor_root)
182
- yaml_file = File.join(thor_root, "thor.yml")
183
- FileUtils.touch(yaml_file)
184
- end
185
-
186
- File.open(yaml_file, "w") { |f| f.puts yaml.to_yaml }
187
- end
188
-
189
- def self.exit_on_failure?
190
- true
191
- end
192
-
193
- # Load the thorfiles. If relevant_to is supplied, looks for specific files
194
- # in the thor_root instead of loading them all.
195
- #
196
- # By default, it also traverses the current path until find Thor files, as
197
- # described in thorfiles. This look up can be skipped by suppliying
198
- # skip_lookup true.
199
- #
200
- def initialize_thorfiles(relevant_to=nil, skip_lookup=false)
201
- thorfiles(relevant_to, skip_lookup).each do |f|
202
- Thor::Util.load_thorfile(f) unless Thor::Base.subclass_files.keys.include?(File.expand_path(f))
203
- end
204
- end
205
-
206
- # Finds Thorfiles by traversing from your current directory down to the root
207
- # directory of your system. If at any time we find a Thor file, we stop.
208
- #
209
- # We also ensure that system-wide Thorfiles are loaded first, so local
210
- # Thorfiles can override them.
211
- #
212
- # ==== Example
213
- #
214
- # If we start at /Users/wycats/dev/thor ...
215
- #
216
- # 1. /Users/wycats/dev/thor
217
- # 2. /Users/wycats/dev
218
- # 3. /Users/wycats <-- we find a Thorfile here, so we stop
219
- #
220
- # Suppose we start at c:\Documents and Settings\james\dev\thor ...
221
- #
222
- # 1. c:\Documents and Settings\james\dev\thor
223
- # 2. c:\Documents and Settings\james\dev
224
- # 3. c:\Documents and Settings\james
225
- # 4. c:\Documents and Settings
226
- # 5. c:\ <-- no Thorfiles found!
227
- #
228
- def thorfiles(relevant_to=nil, skip_lookup=false)
229
- thorfiles = []
230
-
231
- unless skip_lookup
232
- Pathname.pwd.ascend do |path|
233
- thorfiles = Thor::Util.globs_for(path).map { |g| Dir[g] }.flatten
234
- break unless thorfiles.empty?
235
- end
236
- end
237
-
238
- files = (relevant_to ? thorfiles_relevant_to(relevant_to) : Thor::Util.thor_root_glob)
239
- files += thorfiles
240
- files -= ["#{thor_root}/thor.yml"]
241
-
242
- files.map! do |file|
243
- File.directory?(file) ? File.join(file, "main.thor") : file
244
- end
245
- end
246
-
247
- # Load thorfiles relevant to the given method. If you provide "foo:bar" it
248
- # will load all thor files in the thor.yaml that has "foo" e "foo:bar"
249
- # namespaces registered.
250
- #
251
- def thorfiles_relevant_to(meth)
252
- lookup = [ meth, meth.split(":")[0...-1].join(":") ]
253
-
254
- files = thor_yaml.select do |k, v|
255
- v[:namespaces] && !(v[:namespaces] & lookup).empty?
256
- end
257
-
258
- files.map { |k, v| File.join(thor_root, "#{v[:filename]}") }
259
- end
260
-
261
- # Display information about the given klasses. If with_module is given,
262
- # it shows a table with information extracted from the yaml file.
263
- #
264
- def display_klasses(with_modules=false, show_internal=false, klasses=Thor::Base.subclasses)
265
- klasses -= [Thor, Thor::Runner, Thor::Group] unless show_internal
266
-
267
- raise Error, "No Thor tasks available" if klasses.empty?
268
- show_modules if with_modules && !thor_yaml.empty?
269
-
270
- # Remove subclasses
271
- klasses.dup.each do |klass|
272
- klasses -= Thor::Util.thor_classes_in(klass)
273
- end
274
-
275
- list = Hash.new { |h,k| h[k] = [] }
276
- groups = klasses.select { |k| k.ancestors.include?(Thor::Group) }
277
-
278
- # Get classes which inherit from Thor
279
- (klasses - groups).each { |k| list[k.namespace] += k.printable_tasks(false) }
280
-
281
- # Get classes which inherit from Thor::Base
282
- groups.map! { |k| k.printable_tasks(false).first }
283
- list["root"] = groups
284
-
285
- # Order namespaces with default coming first
286
- list = list.sort{ |a,b| a[0].sub(/^default/, '') <=> b[0].sub(/^default/, '') }
287
- list.each { |n, tasks| display_tasks(n, tasks) unless tasks.empty? }
288
- end
289
-
290
- def display_tasks(namespace, list) #:nodoc:
291
- list.sort!{ |a,b| a[0] <=> b[0] }
292
-
293
- say shell.set_color(namespace, :blue, true)
294
- say "-" * namespace.size
295
-
296
- print_table(list, :truncate => true)
297
- say
298
- end
299
-
300
- def show_modules #:nodoc:
301
- info = []
302
- labels = ["Modules", "Namespaces"]
303
-
304
- info << labels
305
- info << [ "-" * labels[0].size, "-" * labels[1].size ]
306
-
307
- thor_yaml.each do |name, hash|
308
- info << [ name, hash[:namespaces].join(", ") ]
309
- end
310
-
311
- print_table info
312
- say ""
313
- end
314
- end
@@ -1,239 +0,0 @@
1
- require 'tempfile'
2
-
3
- class Thor
4
- module Shell
5
- class Basic
6
- attr_accessor :base, :padding
7
-
8
- # Initialize base and padding to nil.
9
- #
10
- def initialize #:nodoc:
11
- @base, @padding = nil, 0
12
- end
13
-
14
- # Sets the output padding, not allowing less than zero values.
15
- #
16
- def padding=(value)
17
- @padding = [0, value].max
18
- end
19
-
20
- # Ask something to the user and receives a response.
21
- #
22
- # ==== Example
23
- # ask("What is your name?")
24
- #
25
- def ask(statement, color=nil)
26
- say("#{statement} ", color)
27
- $stdin.gets.strip
28
- end
29
-
30
- # Say (print) something to the user. If the sentence ends with a whitespace
31
- # or tab character, a new line is not appended (print + flush). Otherwise
32
- # are passed straight to puts (behavior got from Highline).
33
- #
34
- # ==== Example
35
- # say("I know you knew that.")
36
- #
37
- def say(message="", color=nil, force_new_line=(message.to_s !~ /( |\t)$/))
38
- message = message.to_s
39
- message = set_color(message, color) if color
40
-
41
- if force_new_line
42
- $stdout.puts(message)
43
- else
44
- $stdout.print(message)
45
- $stdout.flush
46
- end
47
- end
48
-
49
- # Say a status with the given color and appends the message. Since this
50
- # method is used frequently by actions, it allows nil or false to be given
51
- # in log_status, avoiding the message from being shown. If a Symbol is
52
- # given in log_status, it's used as the color.
53
- #
54
- def say_status(status, message, log_status=true)
55
- return if quiet? || log_status == false
56
- spaces = " " * (padding + 1)
57
- color = log_status.is_a?(Symbol) ? log_status : :green
58
-
59
- status = status.to_s.rjust(12)
60
- status = set_color status, color, true if color
61
- say "#{status}#{spaces}#{message}", nil, true
62
- end
63
-
64
- # Make a question the to user and returns true if the user replies "y" or
65
- # "yes".
66
- #
67
- def yes?(statement, color=nil)
68
- ask(statement, color) =~ is?(:yes)
69
- end
70
-
71
- # Make a question the to user and returns true if the user replies "n" or
72
- # "no".
73
- #
74
- def no?(statement, color=nil)
75
- !yes?(statement, color)
76
- end
77
-
78
- # Prints a table.
79
- #
80
- # ==== Parameters
81
- # Array[Array[String, String, ...]]
82
- #
83
- # ==== Options
84
- # ident<Integer>:: Ident the first column by ident value.
85
- #
86
- def print_table(table, options={})
87
- return if table.empty?
88
-
89
- formats, ident = [], options[:ident].to_i
90
- options[:truncate] = terminal_width if options[:truncate] == true
91
-
92
- 0.upto(table.first.length - 2) do |i|
93
- maxima = table.max{ |a,b| a[i].size <=> b[i].size }[i].size
94
- formats << "%-#{maxima + 2}s"
95
- end
96
-
97
- formats[0] = formats[0].insert(0, " " * ident)
98
- formats << "%s"
99
-
100
- table.each do |row|
101
- sentence = ""
102
-
103
- row.each_with_index do |column, i|
104
- sentence << formats[i] % column.to_s
105
- end
106
-
107
- sentence = truncate(sentence, options[:truncate]) if options[:truncate]
108
- $stdout.puts sentence
109
- end
110
- end
111
-
112
- # Deals with file collision and returns true if the file should be
113
- # overwriten and false otherwise. If a block is given, it uses the block
114
- # response as the content for the diff.
115
- #
116
- # ==== Parameters
117
- # destination<String>:: the destination file to solve conflicts
118
- # block<Proc>:: an optional block that returns the value to be used in diff
119
- #
120
- def file_collision(destination)
121
- return true if @always_force
122
- options = block_given? ? "[Ynaqdh]" : "[Ynaqh]"
123
-
124
- while true
125
- answer = ask %[Overwrite #{destination}? (enter "h" for help) #{options}]
126
-
127
- case answer
128
- when is?(:yes), is?(:force), ""
129
- return true
130
- when is?(:no), is?(:skip)
131
- return false
132
- when is?(:always)
133
- return @always_force = true
134
- when is?(:quit)
135
- say 'Aborting...'
136
- raise SystemExit
137
- when is?(:diff)
138
- show_diff(destination, yield) if block_given?
139
- say 'Retrying...'
140
- else
141
- say file_collision_help
142
- end
143
- end
144
- end
145
-
146
- # Called if something goes wrong during the execution. This is used by Thor
147
- # internally and should not be used inside your scripts. If someone went
148
- # wrong, you can always raise an exception. If you raise a Thor::Error, it
149
- # will be rescued and wrapped in the method below.
150
- #
151
- def error(statement)
152
- $stderr.puts statement
153
- end
154
-
155
- # Apply color to the given string with optional bold. Disabled in the
156
- # Thor::Shell::Basic class.
157
- #
158
- def set_color(string, color, bold=false) #:nodoc:
159
- string
160
- end
161
-
162
- protected
163
-
164
- def is?(value) #:nodoc:
165
- value = value.to_s
166
-
167
- if value.size == 1
168
- /\A#{value}\z/i
169
- else
170
- /\A(#{value}|#{value[0,1]})\z/i
171
- end
172
- end
173
-
174
- def file_collision_help #:nodoc:
175
- <<HELP
176
- Y - yes, overwrite
177
- n - no, do not overwrite
178
- a - all, overwrite this and all others
179
- q - quit, abort
180
- d - diff, show the differences between the old and the new
181
- h - help, show this help
182
- HELP
183
- end
184
-
185
- def show_diff(destination, content) #:nodoc:
186
- diff_cmd = ENV['THOR_DIFF'] || ENV['RAILS_DIFF'] || 'diff -u'
187
-
188
- Tempfile.open(File.basename(destination), File.dirname(destination)) do |temp|
189
- temp.write content
190
- temp.rewind
191
- system %(#{diff_cmd} "#{destination}" "#{temp.path}")
192
- end
193
- end
194
-
195
- def quiet? #:nodoc:
196
- base && base.options[:quiet]
197
- end
198
-
199
- # This code was copied from Rake, available under MIT-LICENSE
200
- # Copyright (c) 2003, 2004 Jim Weirich
201
- def terminal_width
202
- if ENV['THOR_COLUMNS']
203
- result = ENV['THOR_COLUMNS'].to_i
204
- else
205
- result = unix? ? dynamic_width : 80
206
- end
207
- (result < 10) ? 80 : result
208
- rescue
209
- 80
210
- end
211
-
212
- # Calculate the dynamic width of the terminal
213
- def dynamic_width
214
- @dynamic_width ||= (dynamic_width_stty.nonzero? || dynamic_width_tput)
215
- end
216
-
217
- def dynamic_width_stty
218
- %x{stty size 2>/dev/null}.split[1].to_i
219
- end
220
-
221
- def dynamic_width_tput
222
- %x{tput cols 2>/dev/null}.to_i
223
- end
224
-
225
- def unix?
226
- RUBY_PLATFORM =~ /(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris|irix|hpux)/i
227
- end
228
-
229
- def truncate(string, width)
230
- if string.length <= width
231
- string
232
- else
233
- ( string[0, width-3] || "" ) + "..."
234
- end
235
- end
236
-
237
- end
238
- end
239
- end
@@ -1,108 +0,0 @@
1
- require 'thor/shell/basic'
2
-
3
- class Thor
4
- module Shell
5
- # Inherit from Thor::Shell::Basic and add set_color behavior. Check
6
- # Thor::Shell::Basic to see all available methods.
7
- #
8
- class Color < Basic
9
- # Embed in a String to clear all previous ANSI sequences.
10
- CLEAR = "\e[0m"
11
- # The start of an ANSI bold sequence.
12
- BOLD = "\e[1m"
13
-
14
- # Set the terminal's foreground ANSI color to black.
15
- BLACK = "\e[30m"
16
- # Set the terminal's foreground ANSI color to red.
17
- RED = "\e[31m"
18
- # Set the terminal's foreground ANSI color to green.
19
- GREEN = "\e[32m"
20
- # Set the terminal's foreground ANSI color to yellow.
21
- YELLOW = "\e[33m"
22
- # Set the terminal's foreground ANSI color to blue.
23
- BLUE = "\e[34m"
24
- # Set the terminal's foreground ANSI color to magenta.
25
- MAGENTA = "\e[35m"
26
- # Set the terminal's foreground ANSI color to cyan.
27
- CYAN = "\e[36m"
28
- # Set the terminal's foreground ANSI color to white.
29
- WHITE = "\e[37m"
30
-
31
- # Set the terminal's background ANSI color to black.
32
- ON_BLACK = "\e[40m"
33
- # Set the terminal's background ANSI color to red.
34
- ON_RED = "\e[41m"
35
- # Set the terminal's background ANSI color to green.
36
- ON_GREEN = "\e[42m"
37
- # Set the terminal's background ANSI color to yellow.
38
- ON_YELLOW = "\e[43m"
39
- # Set the terminal's background ANSI color to blue.
40
- ON_BLUE = "\e[44m"
41
- # Set the terminal's background ANSI color to magenta.
42
- ON_MAGENTA = "\e[45m"
43
- # Set the terminal's background ANSI color to cyan.
44
- ON_CYAN = "\e[46m"
45
- # Set the terminal's background ANSI color to white.
46
- ON_WHITE = "\e[47m"
47
-
48
- # Set color by using a string or one of the defined constants. If a third
49
- # option is set to true, it also adds bold to the string. This is based
50
- # on Highline implementation and it automatically appends CLEAR to the end
51
- # of the returned String.
52
- #
53
- def set_color(string, color, bold=false)
54
- color = self.class.const_get(color.to_s.upcase) if color.is_a?(Symbol)
55
- bold = bold ? BOLD : ""
56
- "#{bold}#{color}#{string}#{CLEAR}"
57
- end
58
-
59
- protected
60
-
61
- # Overwrite show_diff to show diff with colors if Diff::LCS is
62
- # available.
63
- #
64
- def show_diff(destination, content) #:nodoc:
65
- if diff_lcs_loaded? && ENV['THOR_DIFF'].nil? && ENV['RAILS_DIFF'].nil?
66
- actual = File.binread(destination).to_s.split("\n")
67
- content = content.to_s.split("\n")
68
-
69
- Diff::LCS.sdiff(actual, content).each do |diff|
70
- output_diff_line(diff)
71
- end
72
- else
73
- super
74
- end
75
- end
76
-
77
- def output_diff_line(diff) #:nodoc:
78
- case diff.action
79
- when '-'
80
- say "- #{diff.old_element.chomp}", :red, true
81
- when '+'
82
- say "+ #{diff.new_element.chomp}", :green, true
83
- when '!'
84
- say "- #{diff.old_element.chomp}", :red, true
85
- say "+ #{diff.new_element.chomp}", :green, true
86
- else
87
- say " #{diff.old_element.chomp}", nil, true
88
- end
89
- end
90
-
91
- # Check if Diff::LCS is loaded. If it is, use it to create pretty output
92
- # for diff.
93
- #
94
- def diff_lcs_loaded? #:nodoc:
95
- return true if defined?(Diff::LCS)
96
- return @diff_lcs_loaded unless @diff_lcs_loaded.nil?
97
-
98
- @diff_lcs_loaded = begin
99
- require 'diff/lcs'
100
- true
101
- rescue LoadError
102
- false
103
- end
104
- end
105
-
106
- end
107
- end
108
- end