nucleon 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -0
  3. data/Gemfile.lock +2 -0
  4. data/VERSION +1 -1
  5. data/lib/core/config.rb +21 -20
  6. data/lib/core/environment.rb +2 -2
  7. data/lib/core/facade.rb +15 -0
  8. data/lib/core/mixin/action/registration.rb +84 -0
  9. data/lib/core/mixin/sub_config.rb +5 -5
  10. data/lib/core/plugin/action.rb +66 -10
  11. data/lib/core/plugin/base.rb +100 -19
  12. data/lib/core/plugin/command.rb +4 -0
  13. data/lib/core/util/cache.rb +13 -1
  14. data/lib/core/util/cli.rb +77 -11
  15. data/lib/core/util/console.rb +55 -72
  16. data/lib/core/util/data.rb +19 -9
  17. data/lib/core/util/logger.rb +16 -6
  18. data/lib/core/util/shell.rb +3 -1
  19. data/lib/core/util/ssh.rb +28 -25
  20. data/lib/nucleon/translator/JSON.rb +2 -2
  21. data/lib/nucleon/translator/YAML.rb +2 -2
  22. data/lib/nucleon_base.rb +22 -8
  23. data/nucleon.gemspec +122 -2
  24. data/rdoc/site/0.2.0/ARCHITECTURE_rdoc.html +638 -0
  25. data/rdoc/site/0.2.0/Hash.html +351 -0
  26. data/rdoc/site/0.2.0/Kernel.html +416 -0
  27. data/rdoc/site/0.2.0/Nucleon.html +607 -0
  28. data/rdoc/site/0.2.0/Nucleon/Action.html +284 -0
  29. data/rdoc/site/0.2.0/Nucleon/Action/Extract.html +455 -0
  30. data/rdoc/site/0.2.0/Nucleon/Action/Project.html +283 -0
  31. data/rdoc/site/0.2.0/Nucleon/Action/Project/Add.html +500 -0
  32. data/rdoc/site/0.2.0/Nucleon/Action/Project/Create.html +457 -0
  33. data/rdoc/site/0.2.0/Nucleon/Action/Project/Remove.html +503 -0
  34. data/rdoc/site/0.2.0/Nucleon/Action/Project/Save.html +476 -0
  35. data/rdoc/site/0.2.0/Nucleon/Action/Project/Update.html +423 -0
  36. data/rdoc/site/0.2.0/Nucleon/Codes.html +567 -0
  37. data/rdoc/site/0.2.0/Nucleon/Command.html +279 -0
  38. data/rdoc/site/0.2.0/Nucleon/Command/Bash.html +548 -0
  39. data/rdoc/site/0.2.0/Nucleon/Config.html +1631 -0
  40. data/rdoc/site/0.2.0/Nucleon/Config/Collection.html +513 -0
  41. data/rdoc/site/0.2.0/Nucleon/Config/Options.html +493 -0
  42. data/rdoc/site/0.2.0/Nucleon/Core.html +639 -0
  43. data/rdoc/site/0.2.0/Nucleon/Environment.html +1208 -0
  44. data/rdoc/site/0.2.0/Nucleon/Errors.html +279 -0
  45. data/rdoc/site/0.2.0/Nucleon/Errors/BatchError.html +285 -0
  46. data/rdoc/site/0.2.0/Nucleon/Errors/NucleonError.html +661 -0
  47. data/rdoc/site/0.2.0/Nucleon/Errors/SSHUnavailable.html +285 -0
  48. data/rdoc/site/0.2.0/Nucleon/Event.html +279 -0
  49. data/rdoc/site/0.2.0/Nucleon/Event/Regex.html +471 -0
  50. data/rdoc/site/0.2.0/Nucleon/Facade.html +2409 -0
  51. data/rdoc/site/0.2.0/Nucleon/Gems.html +639 -0
  52. data/rdoc/site/0.2.0/Nucleon/Manager.html +1860 -0
  53. data/rdoc/site/0.2.0/Nucleon/Mixin.html +288 -0
  54. data/rdoc/site/0.2.0/Nucleon/Mixin/Action.html +281 -0
  55. data/rdoc/site/0.2.0/Nucleon/Mixin/Action/Commit.html +385 -0
  56. data/rdoc/site/0.2.0/Nucleon/Mixin/Action/Project.html +399 -0
  57. data/rdoc/site/0.2.0/Nucleon/Mixin/Action/Push.html +375 -0
  58. data/rdoc/site/0.2.0/Nucleon/Mixin/Colors.html +549 -0
  59. data/rdoc/site/0.2.0/Nucleon/Mixin/ConfigCollection.html +485 -0
  60. data/rdoc/site/0.2.0/Nucleon/Mixin/ConfigOptions.html +453 -0
  61. data/rdoc/site/0.2.0/Nucleon/Mixin/Macro.html +280 -0
  62. data/rdoc/site/0.2.0/Nucleon/Mixin/Macro/ObjectInterface.html +699 -0
  63. data/rdoc/site/0.2.0/Nucleon/Mixin/Macro/PluginInterface.html +686 -0
  64. data/rdoc/site/0.2.0/Nucleon/Mixin/Settings.html +485 -0
  65. data/rdoc/site/0.2.0/Nucleon/Mixin/SubConfig.html +891 -0
  66. data/rdoc/site/0.2.0/Nucleon/Parallel.html +330 -0
  67. data/rdoc/site/0.2.0/Nucleon/Parallel/ClassMethods.html +329 -0
  68. data/rdoc/site/0.2.0/Nucleon/Parallel/InstanceMethods.html +456 -0
  69. data/rdoc/site/0.2.0/Nucleon/Plugin.html +286 -0
  70. data/rdoc/site/0.2.0/Nucleon/Plugin/Action.html +1829 -0
  71. data/rdoc/site/0.2.0/Nucleon/Plugin/Action/Option.html +463 -0
  72. data/rdoc/site/0.2.0/Nucleon/Plugin/Base.html +1803 -0
  73. data/rdoc/site/0.2.0/Nucleon/Plugin/Command.html +725 -0
  74. data/rdoc/site/0.2.0/Nucleon/Plugin/Event.html +446 -0
  75. data/rdoc/site/0.2.0/Nucleon/Plugin/Extension.html +285 -0
  76. data/rdoc/site/0.2.0/Nucleon/Plugin/Project.html +2898 -0
  77. data/rdoc/site/0.2.0/Nucleon/Plugin/Template.html +480 -0
  78. data/rdoc/site/0.2.0/Nucleon/Plugin/Translator.html +375 -0
  79. data/rdoc/site/0.2.0/Nucleon/Project.html +280 -0
  80. data/rdoc/site/0.2.0/Nucleon/Project/Git.html +1805 -0
  81. data/rdoc/site/0.2.0/Nucleon/Project/Github.html +553 -0
  82. data/rdoc/site/0.2.0/Nucleon/Template.html +281 -0
  83. data/rdoc/site/0.2.0/Nucleon/Template/JSON.html +333 -0
  84. data/rdoc/site/0.2.0/Nucleon/Template/Wrapper.html +333 -0
  85. data/rdoc/site/0.2.0/Nucleon/Template/YAML.html +333 -0
  86. data/rdoc/site/0.2.0/Nucleon/Translator.html +280 -0
  87. data/rdoc/site/0.2.0/Nucleon/Translator/JSON.html +370 -0
  88. data/rdoc/site/0.2.0/Nucleon/Translator/YAML.html +370 -0
  89. data/rdoc/site/0.2.0/Nucleon/Util.html +289 -0
  90. data/rdoc/site/0.2.0/Nucleon/Util/CLI.html +392 -0
  91. data/rdoc/site/0.2.0/Nucleon/Util/CLI/Parser.html +1250 -0
  92. data/rdoc/site/0.2.0/Nucleon/Util/Cache.html +784 -0
  93. data/rdoc/site/0.2.0/Nucleon/Util/Console.html +1318 -0
  94. data/rdoc/site/0.2.0/Nucleon/Util/Data.html +1411 -0
  95. data/rdoc/site/0.2.0/Nucleon/Util/Disk.html +526 -0
  96. data/rdoc/site/0.2.0/Nucleon/Util/Git.html +365 -0
  97. data/rdoc/site/0.2.0/Nucleon/Util/Liquid.html +369 -0
  98. data/rdoc/site/0.2.0/Nucleon/Util/Logger.html +810 -0
  99. data/rdoc/site/0.2.0/Nucleon/Util/Package.html +562 -0
  100. data/rdoc/site/0.2.0/Nucleon/Util/SSH.html +1033 -0
  101. data/rdoc/site/0.2.0/Nucleon/Util/SSH/Keypair.html +605 -0
  102. data/rdoc/site/0.2.0/Nucleon/Util/Shell.html +693 -0
  103. data/rdoc/site/0.2.0/Nucleon/Util/Shell/Result.html +501 -0
  104. data/rdoc/site/0.2.0/README_rdoc.html +316 -0
  105. data/rdoc/site/0.2.0/TODO_rdoc.html +265 -0
  106. data/rdoc/site/0.2.0/created.rid +61 -0
  107. data/rdoc/site/0.2.0/images/add.png +0 -0
  108. data/rdoc/site/0.2.0/images/brick.png +0 -0
  109. data/rdoc/site/0.2.0/images/brick_link.png +0 -0
  110. data/rdoc/site/0.2.0/images/bug.png +0 -0
  111. data/rdoc/site/0.2.0/images/bullet_black.png +0 -0
  112. data/rdoc/site/0.2.0/images/bullet_toggle_minus.png +0 -0
  113. data/rdoc/site/0.2.0/images/bullet_toggle_plus.png +0 -0
  114. data/rdoc/site/0.2.0/images/date.png +0 -0
  115. data/rdoc/site/0.2.0/images/delete.png +0 -0
  116. data/rdoc/site/0.2.0/images/find.png +0 -0
  117. data/rdoc/site/0.2.0/images/loadingAnimation.gif +0 -0
  118. data/rdoc/site/0.2.0/images/macFFBgHack.png +0 -0
  119. data/rdoc/site/0.2.0/images/package.png +0 -0
  120. data/rdoc/site/0.2.0/images/page_green.png +0 -0
  121. data/rdoc/site/0.2.0/images/page_white_text.png +0 -0
  122. data/rdoc/site/0.2.0/images/page_white_width.png +0 -0
  123. data/rdoc/site/0.2.0/images/plugin.png +0 -0
  124. data/rdoc/site/0.2.0/images/ruby.png +0 -0
  125. data/rdoc/site/0.2.0/images/tag_blue.png +0 -0
  126. data/rdoc/site/0.2.0/images/tag_green.png +0 -0
  127. data/rdoc/site/0.2.0/images/transparent.png +0 -0
  128. data/rdoc/site/0.2.0/images/wrench.png +0 -0
  129. data/rdoc/site/0.2.0/images/wrench_orange.png +0 -0
  130. data/rdoc/site/0.2.0/images/zoom.png +0 -0
  131. data/rdoc/site/0.2.0/index.html +315 -0
  132. data/rdoc/site/0.2.0/js/darkfish.js +155 -0
  133. data/rdoc/site/0.2.0/js/jquery.js +18 -0
  134. data/rdoc/site/0.2.0/js/navigation.js +142 -0
  135. data/rdoc/site/0.2.0/js/search.js +94 -0
  136. data/rdoc/site/0.2.0/js/search_index.js +1 -0
  137. data/rdoc/site/0.2.0/js/searcher.js +228 -0
  138. data/rdoc/site/0.2.0/rdoc.css +543 -0
  139. data/rdoc/site/0.2.0/table_of_contents.html +1657 -0
  140. data/spec/core/util/console_spec.rb +50 -18
  141. metadata +133 -2
@@ -260,12 +260,15 @@ class Data
260
260
 
261
261
  #---
262
262
 
263
- def self.merge(data, force = true)
263
+ def self.merge(data, force = true, basic = true)
264
264
  value = data
265
265
 
266
266
  # Special case because this method is called from within Config.new so we
267
267
  # can not use Config.ensure, as that would cause an infinite loop.
268
- force = force.is_a?(Nucleon::Config) ? force.get(:force, true) : force
268
+ if force.is_a?(Nucleon::Config)
269
+ basic = force.get(:basic, true)
270
+ force = force.get(:force, true)
271
+ end
269
272
 
270
273
  if data.is_a?(Array)
271
274
  value = undef?(data[0]) ? nil : data.shift.clone
@@ -275,15 +278,23 @@ class Data
275
278
 
276
279
  case value
277
280
  when Hash
278
- begin
279
- require 'deep_merge'
280
- value = force ? value.deep_merge!(item) : value.deep_merge(item)
281
-
282
- rescue LoadError
283
- if item.is_a?(Hash) # Non recursive top level by default.
281
+ if basic
282
+ if item.is_a?(Hash)
284
283
  value = value.merge(item)
285
284
  elsif force
286
285
  value = item
286
+ end
287
+ else
288
+ begin
289
+ require 'deep_merge'
290
+ value = force ? value.deep_merge!(item) : value.deep_merge(item)
291
+
292
+ rescue LoadError
293
+ if item.is_a?(Hash) # Non recursive top level by default.
294
+ value = value.merge(item)
295
+ elsif force
296
+ value = item
297
+ end
287
298
  end
288
299
  end
289
300
  when Array
@@ -298,7 +309,6 @@ class Data
298
309
  end
299
310
  end
300
311
  end
301
-
302
312
  return value
303
313
  end
304
314
 
@@ -116,32 +116,42 @@ class Logger
116
116
  # Log statements
117
117
 
118
118
  def debug(message)
119
- @logger.debug(message)
119
+ unless Util::Console.quiet
120
+ @logger.debug(message)
121
+ end
120
122
  end
121
123
 
122
124
  #---
123
125
 
124
126
  def info(message)
125
- @logger.info(message)
127
+ unless Util::Console.quiet
128
+ @logger.info(message)
129
+ end
126
130
  end
127
131
 
128
132
  #---
129
133
 
130
134
  def warn(message)
131
- @logger.warn(message)
135
+ unless Util::Console.quiet
136
+ @logger.warn(message)
137
+ end
132
138
  end
133
139
 
134
140
  #---
135
141
 
136
142
  def error(message)
137
- @logger.error(message)
143
+ unless Util::Console.quiet
144
+ @logger.error(message)
145
+ end
138
146
  end
139
147
 
140
148
  #---
141
149
 
142
150
  def hook(message)
143
- @logger.hook(message)
144
- end
151
+ unless Util::Console.quiet
152
+ @logger.hook(message)
153
+ end
154
+ end
145
155
  end
146
156
  end
147
157
  end
@@ -111,7 +111,9 @@ class Shell < Core
111
111
  error_success = close_exec_pipe(t2, $stderr, error_orig, error_new, 'error')
112
112
  end
113
113
 
114
- logger.warn("`#{command}` messages: #{system_result.errors}") if system_result.errors.length > 0
114
+ unless config.get(:quiet, false)
115
+ logger.warn("`#{command}` messages: #{system_result.errors}") if system_result.errors.length > 0
116
+ end
115
117
  logger.warn("`#{command}` status: #{system_result.status}") unless system_result.status == 0
116
118
 
117
119
  success = ( system_success && output_success && error_success )
@@ -140,6 +140,8 @@ class SSH < Core
140
140
  @@sessions = {}
141
141
  @@auth = {}
142
142
 
143
+ @@session_lock = Mutex.new
144
+
143
145
  #---
144
146
 
145
147
  def self.session_id(hostname, user)
@@ -152,37 +154,40 @@ class SSH < Core
152
154
  require 'net/ssh'
153
155
 
154
156
  session_id = session_id(hostname, user)
155
- config = Config.ensure(options)
156
157
 
157
- ssh_options = Config.new({
158
- :user_known_hosts_file => [ File.join(key_path, 'known_hosts'), File.join(key_path, 'known_hosts2') ],
159
- :auth_methods => [ 'publickey' ],
160
- :paranoid => :very
161
- }).import(Util::Data.subset(config, config.keys - [ :keypair, :key_dir, :key_name ]))
158
+ @@session_lock.synchronize do
159
+ config = Config.ensure(options)
162
160
 
163
- if private_key
164
- auth_id = [ session_id, private_key ].join('_')
161
+ ssh_options = Config.new({
162
+ :user_known_hosts_file => [ File.join(key_path, 'known_hosts'), File.join(key_path, 'known_hosts2') ],
163
+ :auth_methods => [ 'publickey' ],
164
+ :paranoid => :very
165
+ }).import(Util::Data.subset(config, config.keys - [ :keypair, :key_dir, :key_name ]))
166
+
167
+ if private_key
168
+ auth_id = [ session_id, private_key ].join('_')
165
169
 
166
- if ! @@auth[auth_id] && keypair = unlock_private_key(private_key, config)
167
- @@auth[auth_id] = keypair
168
- end
169
- config[:keypair] = @@auth[auth_id] # Reset so caller can access updated keypair
170
+ if ! @@auth[auth_id] && keypair = unlock_private_key(private_key, config)
171
+ @@auth[auth_id] = keypair
172
+ end
173
+ config[:keypair] = @@auth[auth_id] # Reset so caller can access updated keypair
170
174
 
171
- if @@auth[auth_id].is_a?(String)
172
- ssh_options[:keys_only] = false
173
- ssh_options[:keys] = [ @@auth[auth_id] ]
174
- else
175
- ssh_options[:keys_only] = true
176
- ssh_options[:key_data] = [ @@auth[auth_id].private_key ]
175
+ if @@auth[auth_id].is_a?(String)
176
+ ssh_options[:keys_only] = false
177
+ ssh_options[:keys] = [ @@auth[auth_id] ]
178
+ else
179
+ ssh_options[:keys_only] = true
180
+ ssh_options[:key_data] = [ @@auth[auth_id].private_key ]
181
+ end
177
182
  end
178
- end
179
183
 
180
- ssh_options[:port] = port
184
+ ssh_options[:port] = port
181
185
 
182
- if reset || ! @@sessions.has_key?(session_id)
183
- @@sessions[session_id] = Net::SSH.start(hostname, user, ssh_options.export)
186
+ if reset || ! @@sessions.has_key?(session_id)
187
+ @@sessions[session_id] = Net::SSH.start(hostname, user, ssh_options.export)
188
+ end
184
189
  end
185
- yield(@@sessions[session_id]) if block_given? && @@sessions[session_id]
190
+ yield(@@sessions[session_id]) if block_given? && @@sessions[session_id]
186
191
  @@sessions[session_id]
187
192
  end
188
193
 
@@ -244,7 +249,6 @@ class SSH < Core
244
249
  logger.info(">> running SSH: #{command}")
245
250
 
246
251
  ssh.open_channel do |ssh_channel|
247
- ssh_channel.request_pty
248
252
  ssh_channel.exec(command) do |channel, success|
249
253
  unless success
250
254
  raise "Could not execute command: #{command.inspect}"
@@ -256,7 +260,6 @@ class SSH < Core
256
260
  end
257
261
 
258
262
  channel.on_extended_data do |ch, type, data|
259
- next unless type == 1
260
263
  result.append_errors(data)
261
264
  yield(:error, command, data) if block_given?
262
265
  end
@@ -9,7 +9,7 @@ class JSON < Nucleon.plugin_class(:nucleon, :translator)
9
9
  def parse(json_text)
10
10
  return super do |properties|
11
11
  if json_text && ! json_text.empty?
12
- properties = Util::Data.parse_json(json_text)
12
+ properties = Util::Data.symbol_map(Util::Data.parse_json(json_text))
13
13
  end
14
14
  properties
15
15
  end
@@ -19,7 +19,7 @@ class JSON < Nucleon.plugin_class(:nucleon, :translator)
19
19
 
20
20
  def generate(properties)
21
21
  return super do
22
- Util::Data.to_json(properties, get(:pretty, true))
22
+ Util::Data.to_json(Util::Data.string_map(properties), get(:pretty, true))
23
23
  end
24
24
  end
25
25
  end
@@ -9,7 +9,7 @@ class YAML < Nucleon.plugin_class(:nucleon, :translator)
9
9
  def parse(yaml_text)
10
10
  return super do |properties|
11
11
  if yaml_text && ! yaml_text.empty?
12
- properties = Util::Data.parse_yaml(yaml_text)
12
+ properties = Util::Data.symbol_map(Util::Data.parse_yaml(yaml_text))
13
13
  end
14
14
  properties
15
15
  end
@@ -19,7 +19,7 @@ class YAML < Nucleon.plugin_class(:nucleon, :translator)
19
19
 
20
20
  def generate(properties)
21
21
  return super do
22
- Util::Data.to_yaml(properties)
22
+ Util::Data.to_yaml(Util::Data.string_map(properties))
23
23
  end
24
24
  end
25
25
  end
@@ -64,6 +64,18 @@ module Nucleon
64
64
  def self.VERSION
65
65
  File.read(File.join(File.dirname(__FILE__), '..', 'VERSION'))
66
66
  end
67
+
68
+ #-----------------------------------------------------------------------------
69
+
70
+ @@dump_enabled = false
71
+
72
+ def self.dump_enabled=dump
73
+ @@dump_enabled = dump
74
+ end
75
+
76
+ def self.dump_enabled
77
+ @@dump_enabled
78
+ end
67
79
 
68
80
  #-----------------------------------------------------------------------------
69
81
 
@@ -170,16 +182,18 @@ end
170
182
 
171
183
  module Kernel
172
184
 
173
- def dbg(data, label = '')
185
+ def dbg(data, label = '', override_enabled = false)
174
186
  # Invocations of this function should NOT be committed to the project
175
- require 'pp'
176
- puts '>>----------------------'
177
- unless ! label || label.empty?
178
- puts label
179
- puts '---'
187
+ if Nucleon.dump_enabled || override_enabled
188
+ require 'pp'
189
+ puts '>>----------------------'
190
+ unless ! label || label.empty?
191
+ puts label
192
+ puts '---'
193
+ end
194
+ pp data
195
+ puts '<<'
180
196
  end
181
- pp data
182
- puts '<<'
183
197
  end
184
198
  end
185
199
 
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "nucleon"
8
- s.version = "0.2.0"
8
+ s.version = "0.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Adrian Webb"]
12
- s.date = "2014-07-01"
12
+ s.date = "2014-07-10"
13
13
  s.description = "\nA framework that provides a simple foundation for building Ruby applications that are:\n\n* Highly configurable (with both distributed and persistent configurations)\n* Extremely pluggable and extendable\n* Easily parallel\n\nNote: This framework is still very early in development!\n"
14
14
  s.email = "adrian.webb@coralnexus.com"
15
15
  s.executables = ["nucleon"]
@@ -42,6 +42,7 @@ Gem::Specification.new do |s|
42
42
  "lib/core/mixin/action/commit.rb",
43
43
  "lib/core/mixin/action/project.rb",
44
44
  "lib/core/mixin/action/push.rb",
45
+ "lib/core/mixin/action/registration.rb",
45
46
  "lib/core/mixin/colors.rb",
46
47
  "lib/core/mixin/config/collection.rb",
47
48
  "lib/core/mixin/config/options.rb",
@@ -202,6 +203,122 @@ Gem::Specification.new do |s|
202
203
  "rdoc/site/0.1.19/js/searcher.js",
203
204
  "rdoc/site/0.1.19/rdoc.css",
204
205
  "rdoc/site/0.1.19/table_of_contents.html",
206
+ "rdoc/site/0.2.0/ARCHITECTURE_rdoc.html",
207
+ "rdoc/site/0.2.0/Hash.html",
208
+ "rdoc/site/0.2.0/Kernel.html",
209
+ "rdoc/site/0.2.0/Nucleon.html",
210
+ "rdoc/site/0.2.0/Nucleon/Action.html",
211
+ "rdoc/site/0.2.0/Nucleon/Action/Extract.html",
212
+ "rdoc/site/0.2.0/Nucleon/Action/Project.html",
213
+ "rdoc/site/0.2.0/Nucleon/Action/Project/Add.html",
214
+ "rdoc/site/0.2.0/Nucleon/Action/Project/Create.html",
215
+ "rdoc/site/0.2.0/Nucleon/Action/Project/Remove.html",
216
+ "rdoc/site/0.2.0/Nucleon/Action/Project/Save.html",
217
+ "rdoc/site/0.2.0/Nucleon/Action/Project/Update.html",
218
+ "rdoc/site/0.2.0/Nucleon/Codes.html",
219
+ "rdoc/site/0.2.0/Nucleon/Command.html",
220
+ "rdoc/site/0.2.0/Nucleon/Command/Bash.html",
221
+ "rdoc/site/0.2.0/Nucleon/Config.html",
222
+ "rdoc/site/0.2.0/Nucleon/Config/Collection.html",
223
+ "rdoc/site/0.2.0/Nucleon/Config/Options.html",
224
+ "rdoc/site/0.2.0/Nucleon/Core.html",
225
+ "rdoc/site/0.2.0/Nucleon/Environment.html",
226
+ "rdoc/site/0.2.0/Nucleon/Errors.html",
227
+ "rdoc/site/0.2.0/Nucleon/Errors/BatchError.html",
228
+ "rdoc/site/0.2.0/Nucleon/Errors/NucleonError.html",
229
+ "rdoc/site/0.2.0/Nucleon/Errors/SSHUnavailable.html",
230
+ "rdoc/site/0.2.0/Nucleon/Event.html",
231
+ "rdoc/site/0.2.0/Nucleon/Event/Regex.html",
232
+ "rdoc/site/0.2.0/Nucleon/Facade.html",
233
+ "rdoc/site/0.2.0/Nucleon/Gems.html",
234
+ "rdoc/site/0.2.0/Nucleon/Manager.html",
235
+ "rdoc/site/0.2.0/Nucleon/Mixin.html",
236
+ "rdoc/site/0.2.0/Nucleon/Mixin/Action.html",
237
+ "rdoc/site/0.2.0/Nucleon/Mixin/Action/Commit.html",
238
+ "rdoc/site/0.2.0/Nucleon/Mixin/Action/Project.html",
239
+ "rdoc/site/0.2.0/Nucleon/Mixin/Action/Push.html",
240
+ "rdoc/site/0.2.0/Nucleon/Mixin/Colors.html",
241
+ "rdoc/site/0.2.0/Nucleon/Mixin/ConfigCollection.html",
242
+ "rdoc/site/0.2.0/Nucleon/Mixin/ConfigOptions.html",
243
+ "rdoc/site/0.2.0/Nucleon/Mixin/Macro.html",
244
+ "rdoc/site/0.2.0/Nucleon/Mixin/Macro/ObjectInterface.html",
245
+ "rdoc/site/0.2.0/Nucleon/Mixin/Macro/PluginInterface.html",
246
+ "rdoc/site/0.2.0/Nucleon/Mixin/Settings.html",
247
+ "rdoc/site/0.2.0/Nucleon/Mixin/SubConfig.html",
248
+ "rdoc/site/0.2.0/Nucleon/Parallel.html",
249
+ "rdoc/site/0.2.0/Nucleon/Parallel/ClassMethods.html",
250
+ "rdoc/site/0.2.0/Nucleon/Parallel/InstanceMethods.html",
251
+ "rdoc/site/0.2.0/Nucleon/Plugin.html",
252
+ "rdoc/site/0.2.0/Nucleon/Plugin/Action.html",
253
+ "rdoc/site/0.2.0/Nucleon/Plugin/Action/Option.html",
254
+ "rdoc/site/0.2.0/Nucleon/Plugin/Base.html",
255
+ "rdoc/site/0.2.0/Nucleon/Plugin/Command.html",
256
+ "rdoc/site/0.2.0/Nucleon/Plugin/Event.html",
257
+ "rdoc/site/0.2.0/Nucleon/Plugin/Extension.html",
258
+ "rdoc/site/0.2.0/Nucleon/Plugin/Project.html",
259
+ "rdoc/site/0.2.0/Nucleon/Plugin/Template.html",
260
+ "rdoc/site/0.2.0/Nucleon/Plugin/Translator.html",
261
+ "rdoc/site/0.2.0/Nucleon/Project.html",
262
+ "rdoc/site/0.2.0/Nucleon/Project/Git.html",
263
+ "rdoc/site/0.2.0/Nucleon/Project/Github.html",
264
+ "rdoc/site/0.2.0/Nucleon/Template.html",
265
+ "rdoc/site/0.2.0/Nucleon/Template/JSON.html",
266
+ "rdoc/site/0.2.0/Nucleon/Template/Wrapper.html",
267
+ "rdoc/site/0.2.0/Nucleon/Template/YAML.html",
268
+ "rdoc/site/0.2.0/Nucleon/Translator.html",
269
+ "rdoc/site/0.2.0/Nucleon/Translator/JSON.html",
270
+ "rdoc/site/0.2.0/Nucleon/Translator/YAML.html",
271
+ "rdoc/site/0.2.0/Nucleon/Util.html",
272
+ "rdoc/site/0.2.0/Nucleon/Util/CLI.html",
273
+ "rdoc/site/0.2.0/Nucleon/Util/CLI/Parser.html",
274
+ "rdoc/site/0.2.0/Nucleon/Util/Cache.html",
275
+ "rdoc/site/0.2.0/Nucleon/Util/Console.html",
276
+ "rdoc/site/0.2.0/Nucleon/Util/Data.html",
277
+ "rdoc/site/0.2.0/Nucleon/Util/Disk.html",
278
+ "rdoc/site/0.2.0/Nucleon/Util/Git.html",
279
+ "rdoc/site/0.2.0/Nucleon/Util/Liquid.html",
280
+ "rdoc/site/0.2.0/Nucleon/Util/Logger.html",
281
+ "rdoc/site/0.2.0/Nucleon/Util/Package.html",
282
+ "rdoc/site/0.2.0/Nucleon/Util/SSH.html",
283
+ "rdoc/site/0.2.0/Nucleon/Util/SSH/Keypair.html",
284
+ "rdoc/site/0.2.0/Nucleon/Util/Shell.html",
285
+ "rdoc/site/0.2.0/Nucleon/Util/Shell/Result.html",
286
+ "rdoc/site/0.2.0/README_rdoc.html",
287
+ "rdoc/site/0.2.0/TODO_rdoc.html",
288
+ "rdoc/site/0.2.0/created.rid",
289
+ "rdoc/site/0.2.0/images/add.png",
290
+ "rdoc/site/0.2.0/images/brick.png",
291
+ "rdoc/site/0.2.0/images/brick_link.png",
292
+ "rdoc/site/0.2.0/images/bug.png",
293
+ "rdoc/site/0.2.0/images/bullet_black.png",
294
+ "rdoc/site/0.2.0/images/bullet_toggle_minus.png",
295
+ "rdoc/site/0.2.0/images/bullet_toggle_plus.png",
296
+ "rdoc/site/0.2.0/images/date.png",
297
+ "rdoc/site/0.2.0/images/delete.png",
298
+ "rdoc/site/0.2.0/images/find.png",
299
+ "rdoc/site/0.2.0/images/loadingAnimation.gif",
300
+ "rdoc/site/0.2.0/images/macFFBgHack.png",
301
+ "rdoc/site/0.2.0/images/package.png",
302
+ "rdoc/site/0.2.0/images/page_green.png",
303
+ "rdoc/site/0.2.0/images/page_white_text.png",
304
+ "rdoc/site/0.2.0/images/page_white_width.png",
305
+ "rdoc/site/0.2.0/images/plugin.png",
306
+ "rdoc/site/0.2.0/images/ruby.png",
307
+ "rdoc/site/0.2.0/images/tag_blue.png",
308
+ "rdoc/site/0.2.0/images/tag_green.png",
309
+ "rdoc/site/0.2.0/images/transparent.png",
310
+ "rdoc/site/0.2.0/images/wrench.png",
311
+ "rdoc/site/0.2.0/images/wrench_orange.png",
312
+ "rdoc/site/0.2.0/images/zoom.png",
313
+ "rdoc/site/0.2.0/index.html",
314
+ "rdoc/site/0.2.0/js/darkfish.js",
315
+ "rdoc/site/0.2.0/js/jquery.js",
316
+ "rdoc/site/0.2.0/js/navigation.js",
317
+ "rdoc/site/0.2.0/js/search.js",
318
+ "rdoc/site/0.2.0/js/search_index.js",
319
+ "rdoc/site/0.2.0/js/searcher.js",
320
+ "rdoc/site/0.2.0/rdoc.css",
321
+ "rdoc/site/0.2.0/table_of_contents.html",
205
322
  "spec/coral_mock_input.rb",
206
323
  "spec/coral_test_kernel.rb",
207
324
  "spec/core/util/console_spec.rb",
@@ -224,6 +341,7 @@ Gem::Specification.new do |s|
224
341
  s.add_runtime_dependency(%q<i18n>, ["~> 0.6"])
225
342
  s.add_runtime_dependency(%q<netrc>, ["~> 0.7"])
226
343
  s.add_runtime_dependency(%q<highline>, ["~> 1.6"])
344
+ s.add_runtime_dependency(%q<erubis>, ["~> 2.7"])
227
345
  s.add_runtime_dependency(%q<deep_merge>, ["~> 1.0"])
228
346
  s.add_runtime_dependency(%q<multi_json>, ["~> 1.7"])
229
347
  s.add_runtime_dependency(%q<sshkey>, ["~> 1.6"])
@@ -244,6 +362,7 @@ Gem::Specification.new do |s|
244
362
  s.add_dependency(%q<i18n>, ["~> 0.6"])
245
363
  s.add_dependency(%q<netrc>, ["~> 0.7"])
246
364
  s.add_dependency(%q<highline>, ["~> 1.6"])
365
+ s.add_dependency(%q<erubis>, ["~> 2.7"])
247
366
  s.add_dependency(%q<deep_merge>, ["~> 1.0"])
248
367
  s.add_dependency(%q<multi_json>, ["~> 1.7"])
249
368
  s.add_dependency(%q<sshkey>, ["~> 1.6"])
@@ -265,6 +384,7 @@ Gem::Specification.new do |s|
265
384
  s.add_dependency(%q<i18n>, ["~> 0.6"])
266
385
  s.add_dependency(%q<netrc>, ["~> 0.7"])
267
386
  s.add_dependency(%q<highline>, ["~> 1.6"])
387
+ s.add_dependency(%q<erubis>, ["~> 2.7"])
268
388
  s.add_dependency(%q<deep_merge>, ["~> 1.0"])
269
389
  s.add_dependency(%q<multi_json>, ["~> 1.7"])
270
390
  s.add_dependency(%q<sshkey>, ["~> 1.6"])