nucleon 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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"])