nucleon 0.2.2 → 0.2.3

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 (400) hide show
  1. checksums.yaml +7 -7
  2. data/.gitignore +50 -0
  3. data/ARCHITECTURE.rdoc +12 -11
  4. data/Gemfile +7 -11
  5. data/Gemfile.lock +47 -70
  6. data/Rakefile +22 -20
  7. data/TODO.rdoc +1 -1
  8. data/VERSION +1 -1
  9. data/bin/nucleon +16 -15
  10. data/lib/core/codes.rb +65 -38
  11. data/lib/core/config.rb +774 -153
  12. data/lib/core/config/collection.rb +134 -25
  13. data/lib/core/config/options.rb +160 -36
  14. data/lib/core/core.rb +207 -45
  15. data/lib/core/environment.rb +626 -206
  16. data/lib/core/facade.rb +211 -185
  17. data/lib/core/gems.rb +60 -44
  18. data/lib/core/manager.rb +587 -237
  19. data/lib/core/mixin/colors.rb +66 -36
  20. data/lib/core/mixin/config/collection.rb +58 -23
  21. data/lib/core/mixin/config/options.rb +67 -24
  22. data/lib/core/mixin/macro/object_interface.rb +129 -135
  23. data/lib/core/mixin/macro/plugin_interface.rb +118 -124
  24. data/lib/core/mixin/settings.rb +7 -13
  25. data/lib/core/mixin/sub_config.rb +37 -43
  26. data/lib/core/mod/hash.rb +31 -10
  27. data/lib/core/plugin/action.rb +274 -238
  28. data/lib/core/plugin/base.rb +140 -132
  29. data/lib/core/plugin/project.rb +316 -311
  30. data/lib/core/util/cli.rb +146 -146
  31. data/lib/core/util/console.rb +567 -124
  32. data/lib/core/util/data.rb +654 -139
  33. data/lib/core/util/logger.rb +255 -66
  34. data/lib/nucleon.rb +6 -8
  35. data/lib/nucleon_base.rb +364 -106
  36. data/nucleon.gemspec +40 -389
  37. data/spec/core/codes_spec.rb +209 -0
  38. data/spec/core/config_spec.rb +810 -0
  39. data/spec/core/core_spec.rb +185 -0
  40. data/spec/core/environment_spec.rb +148 -0
  41. data/spec/core/util/console_spec.rb +254 -446
  42. data/spec/nucleon/test.rb +59 -0
  43. data/spec/nucleon/test/first.rb +28 -0
  44. data/spec/nucleon/test/second.rb +28 -0
  45. data/spec/nucleon_codes.rb +98 -0
  46. data/spec/nucleon_config.rb +523 -0
  47. data/spec/nucleon_plugin.rb +439 -0
  48. data/spec/nucleon_test.rb +34 -0
  49. data/spec/spec_helper.rb +6 -4
  50. metadata +157 -615
  51. data/.document +0 -5
  52. data/rdoc/site/0.1.19/ARCHITECTURE_rdoc.html +0 -634
  53. data/rdoc/site/0.1.19/Hash.html +0 -347
  54. data/rdoc/site/0.1.19/Kernel.html +0 -413
  55. data/rdoc/site/0.1.19/Nucleon.html +0 -570
  56. data/rdoc/site/0.1.19/Nucleon/Action.html +0 -280
  57. data/rdoc/site/0.1.19/Nucleon/Action/Add.html +0 -458
  58. data/rdoc/site/0.1.19/Nucleon/Action/Create.html +0 -415
  59. data/rdoc/site/0.1.19/Nucleon/Action/Extract.html +0 -413
  60. data/rdoc/site/0.1.19/Nucleon/Action/Remove.html +0 -461
  61. data/rdoc/site/0.1.19/Nucleon/Action/Save.html +0 -434
  62. data/rdoc/site/0.1.19/Nucleon/Action/Update.html +0 -381
  63. data/rdoc/site/0.1.19/Nucleon/Codes.html +0 -563
  64. data/rdoc/site/0.1.19/Nucleon/Command.html +0 -275
  65. data/rdoc/site/0.1.19/Nucleon/Command/Bash.html +0 -544
  66. data/rdoc/site/0.1.19/Nucleon/Config.html +0 -1623
  67. data/rdoc/site/0.1.19/Nucleon/Config/Collection.html +0 -509
  68. data/rdoc/site/0.1.19/Nucleon/Config/Options.html +0 -489
  69. data/rdoc/site/0.1.19/Nucleon/Core.html +0 -635
  70. data/rdoc/site/0.1.19/Nucleon/Errors.html +0 -275
  71. data/rdoc/site/0.1.19/Nucleon/Errors/BatchError.html +0 -281
  72. data/rdoc/site/0.1.19/Nucleon/Errors/NucleonError.html +0 -657
  73. data/rdoc/site/0.1.19/Nucleon/Errors/SSHUnavailable.html +0 -281
  74. data/rdoc/site/0.1.19/Nucleon/Event.html +0 -275
  75. data/rdoc/site/0.1.19/Nucleon/Event/Regex.html +0 -467
  76. data/rdoc/site/0.1.19/Nucleon/Facade.html +0 -2336
  77. data/rdoc/site/0.1.19/Nucleon/Gems.html +0 -635
  78. data/rdoc/site/0.1.19/Nucleon/Manager.html +0 -1828
  79. data/rdoc/site/0.1.19/Nucleon/Mixin.html +0 -284
  80. data/rdoc/site/0.1.19/Nucleon/Mixin/Action.html +0 -277
  81. data/rdoc/site/0.1.19/Nucleon/Mixin/Action/Commit.html +0 -381
  82. data/rdoc/site/0.1.19/Nucleon/Mixin/Action/Project.html +0 -395
  83. data/rdoc/site/0.1.19/Nucleon/Mixin/Action/Push.html +0 -371
  84. data/rdoc/site/0.1.19/Nucleon/Mixin/Colors.html +0 -545
  85. data/rdoc/site/0.1.19/Nucleon/Mixin/ConfigCollection.html +0 -481
  86. data/rdoc/site/0.1.19/Nucleon/Mixin/ConfigOptions.html +0 -449
  87. data/rdoc/site/0.1.19/Nucleon/Mixin/Macro.html +0 -276
  88. data/rdoc/site/0.1.19/Nucleon/Mixin/Macro/ObjectInterface.html +0 -695
  89. data/rdoc/site/0.1.19/Nucleon/Mixin/Macro/PluginInterface.html +0 -682
  90. data/rdoc/site/0.1.19/Nucleon/Mixin/Settings.html +0 -481
  91. data/rdoc/site/0.1.19/Nucleon/Mixin/SubConfig.html +0 -887
  92. data/rdoc/site/0.1.19/Nucleon/Parallel.html +0 -325
  93. data/rdoc/site/0.1.19/Nucleon/Parallel/ClassMethods.html +0 -325
  94. data/rdoc/site/0.1.19/Nucleon/Parallel/InstanceMethods.html +0 -334
  95. data/rdoc/site/0.1.19/Nucleon/Plugin.html +0 -282
  96. data/rdoc/site/0.1.19/Nucleon/Plugin/Action.html +0 -1368
  97. data/rdoc/site/0.1.19/Nucleon/Plugin/Action/Option.html +0 -459
  98. data/rdoc/site/0.1.19/Nucleon/Plugin/Base.html +0 -1737
  99. data/rdoc/site/0.1.19/Nucleon/Plugin/Command.html +0 -721
  100. data/rdoc/site/0.1.19/Nucleon/Plugin/Event.html +0 -442
  101. data/rdoc/site/0.1.19/Nucleon/Plugin/Extension.html +0 -281
  102. data/rdoc/site/0.1.19/Nucleon/Plugin/Project.html +0 -2864
  103. data/rdoc/site/0.1.19/Nucleon/Plugin/Template.html +0 -476
  104. data/rdoc/site/0.1.19/Nucleon/Plugin/Translator.html +0 -371
  105. data/rdoc/site/0.1.19/Nucleon/Project.html +0 -276
  106. data/rdoc/site/0.1.19/Nucleon/Project/Git.html +0 -1801
  107. data/rdoc/site/0.1.19/Nucleon/Project/Github.html +0 -549
  108. data/rdoc/site/0.1.19/Nucleon/Template.html +0 -277
  109. data/rdoc/site/0.1.19/Nucleon/Template/Json.html +0 -329
  110. data/rdoc/site/0.1.19/Nucleon/Template/Wrapper.html +0 -329
  111. data/rdoc/site/0.1.19/Nucleon/Template/Yaml.html +0 -329
  112. data/rdoc/site/0.1.19/Nucleon/Translator.html +0 -276
  113. data/rdoc/site/0.1.19/Nucleon/Translator/Json.html +0 -366
  114. data/rdoc/site/0.1.19/Nucleon/Translator/Yaml.html +0 -366
  115. data/rdoc/site/0.1.19/Nucleon/Util.html +0 -285
  116. data/rdoc/site/0.1.19/Nucleon/Util/CLI.html +0 -388
  117. data/rdoc/site/0.1.19/Nucleon/Util/CLI/Parser.html +0 -1183
  118. data/rdoc/site/0.1.19/Nucleon/Util/Cache.html +0 -780
  119. data/rdoc/site/0.1.19/Nucleon/Util/Console.html +0 -1294
  120. data/rdoc/site/0.1.19/Nucleon/Util/Data.html +0 -1399
  121. data/rdoc/site/0.1.19/Nucleon/Util/Disk.html +0 -522
  122. data/rdoc/site/0.1.19/Nucleon/Util/Git.html +0 -361
  123. data/rdoc/site/0.1.19/Nucleon/Util/Liquid.html +0 -365
  124. data/rdoc/site/0.1.19/Nucleon/Util/Logger.html +0 -806
  125. data/rdoc/site/0.1.19/Nucleon/Util/Package.html +0 -558
  126. data/rdoc/site/0.1.19/Nucleon/Util/SSH.html +0 -910
  127. data/rdoc/site/0.1.19/Nucleon/Util/SSH/Keypair.html +0 -453
  128. data/rdoc/site/0.1.19/Nucleon/Util/Shell.html +0 -686
  129. data/rdoc/site/0.1.19/Nucleon/Util/Shell/Result.html +0 -497
  130. data/rdoc/site/0.1.19/README_rdoc.html +0 -312
  131. data/rdoc/site/0.1.19/TODO_rdoc.html +0 -267
  132. data/rdoc/site/0.1.19/created.rid +0 -60
  133. data/rdoc/site/0.1.19/images/add.png +0 -0
  134. data/rdoc/site/0.1.19/images/brick.png +0 -0
  135. data/rdoc/site/0.1.19/images/brick_link.png +0 -0
  136. data/rdoc/site/0.1.19/images/bug.png +0 -0
  137. data/rdoc/site/0.1.19/images/bullet_black.png +0 -0
  138. data/rdoc/site/0.1.19/images/bullet_toggle_minus.png +0 -0
  139. data/rdoc/site/0.1.19/images/bullet_toggle_plus.png +0 -0
  140. data/rdoc/site/0.1.19/images/date.png +0 -0
  141. data/rdoc/site/0.1.19/images/delete.png +0 -0
  142. data/rdoc/site/0.1.19/images/find.png +0 -0
  143. data/rdoc/site/0.1.19/images/loadingAnimation.gif +0 -0
  144. data/rdoc/site/0.1.19/images/macFFBgHack.png +0 -0
  145. data/rdoc/site/0.1.19/images/package.png +0 -0
  146. data/rdoc/site/0.1.19/images/page_green.png +0 -0
  147. data/rdoc/site/0.1.19/images/page_white_text.png +0 -0
  148. data/rdoc/site/0.1.19/images/page_white_width.png +0 -0
  149. data/rdoc/site/0.1.19/images/plugin.png +0 -0
  150. data/rdoc/site/0.1.19/images/ruby.png +0 -0
  151. data/rdoc/site/0.1.19/images/tag_blue.png +0 -0
  152. data/rdoc/site/0.1.19/images/tag_green.png +0 -0
  153. data/rdoc/site/0.1.19/images/transparent.png +0 -0
  154. data/rdoc/site/0.1.19/images/wrench.png +0 -0
  155. data/rdoc/site/0.1.19/images/wrench_orange.png +0 -0
  156. data/rdoc/site/0.1.19/images/zoom.png +0 -0
  157. data/rdoc/site/0.1.19/index.html +0 -311
  158. data/rdoc/site/0.1.19/js/darkfish.js +0 -155
  159. data/rdoc/site/0.1.19/js/jquery.js +0 -18
  160. data/rdoc/site/0.1.19/js/navigation.js +0 -142
  161. data/rdoc/site/0.1.19/js/search.js +0 -94
  162. data/rdoc/site/0.1.19/js/search_index.js +0 -1
  163. data/rdoc/site/0.1.19/js/searcher.js +0 -228
  164. data/rdoc/site/0.1.19/rdoc.css +0 -543
  165. data/rdoc/site/0.1.19/table_of_contents.html +0 -1541
  166. data/rdoc/site/0.2.0/ARCHITECTURE_rdoc.html +0 -638
  167. data/rdoc/site/0.2.0/Hash.html +0 -351
  168. data/rdoc/site/0.2.0/Kernel.html +0 -416
  169. data/rdoc/site/0.2.0/Nucleon.html +0 -607
  170. data/rdoc/site/0.2.0/Nucleon/Action.html +0 -284
  171. data/rdoc/site/0.2.0/Nucleon/Action/Extract.html +0 -455
  172. data/rdoc/site/0.2.0/Nucleon/Action/Project.html +0 -283
  173. data/rdoc/site/0.2.0/Nucleon/Action/Project/Add.html +0 -500
  174. data/rdoc/site/0.2.0/Nucleon/Action/Project/Create.html +0 -457
  175. data/rdoc/site/0.2.0/Nucleon/Action/Project/Remove.html +0 -503
  176. data/rdoc/site/0.2.0/Nucleon/Action/Project/Save.html +0 -476
  177. data/rdoc/site/0.2.0/Nucleon/Action/Project/Update.html +0 -423
  178. data/rdoc/site/0.2.0/Nucleon/Codes.html +0 -567
  179. data/rdoc/site/0.2.0/Nucleon/Command.html +0 -279
  180. data/rdoc/site/0.2.0/Nucleon/Command/Bash.html +0 -548
  181. data/rdoc/site/0.2.0/Nucleon/Config.html +0 -1631
  182. data/rdoc/site/0.2.0/Nucleon/Config/Collection.html +0 -513
  183. data/rdoc/site/0.2.0/Nucleon/Config/Options.html +0 -493
  184. data/rdoc/site/0.2.0/Nucleon/Core.html +0 -639
  185. data/rdoc/site/0.2.0/Nucleon/Environment.html +0 -1208
  186. data/rdoc/site/0.2.0/Nucleon/Errors.html +0 -279
  187. data/rdoc/site/0.2.0/Nucleon/Errors/BatchError.html +0 -285
  188. data/rdoc/site/0.2.0/Nucleon/Errors/NucleonError.html +0 -661
  189. data/rdoc/site/0.2.0/Nucleon/Errors/SSHUnavailable.html +0 -285
  190. data/rdoc/site/0.2.0/Nucleon/Event.html +0 -279
  191. data/rdoc/site/0.2.0/Nucleon/Event/Regex.html +0 -471
  192. data/rdoc/site/0.2.0/Nucleon/Facade.html +0 -2409
  193. data/rdoc/site/0.2.0/Nucleon/Gems.html +0 -639
  194. data/rdoc/site/0.2.0/Nucleon/Manager.html +0 -1860
  195. data/rdoc/site/0.2.0/Nucleon/Mixin.html +0 -288
  196. data/rdoc/site/0.2.0/Nucleon/Mixin/Action.html +0 -281
  197. data/rdoc/site/0.2.0/Nucleon/Mixin/Action/Commit.html +0 -385
  198. data/rdoc/site/0.2.0/Nucleon/Mixin/Action/Project.html +0 -399
  199. data/rdoc/site/0.2.0/Nucleon/Mixin/Action/Push.html +0 -375
  200. data/rdoc/site/0.2.0/Nucleon/Mixin/Colors.html +0 -549
  201. data/rdoc/site/0.2.0/Nucleon/Mixin/ConfigCollection.html +0 -485
  202. data/rdoc/site/0.2.0/Nucleon/Mixin/ConfigOptions.html +0 -453
  203. data/rdoc/site/0.2.0/Nucleon/Mixin/Macro.html +0 -280
  204. data/rdoc/site/0.2.0/Nucleon/Mixin/Macro/ObjectInterface.html +0 -699
  205. data/rdoc/site/0.2.0/Nucleon/Mixin/Macro/PluginInterface.html +0 -686
  206. data/rdoc/site/0.2.0/Nucleon/Mixin/Settings.html +0 -485
  207. data/rdoc/site/0.2.0/Nucleon/Mixin/SubConfig.html +0 -891
  208. data/rdoc/site/0.2.0/Nucleon/Parallel.html +0 -330
  209. data/rdoc/site/0.2.0/Nucleon/Parallel/ClassMethods.html +0 -329
  210. data/rdoc/site/0.2.0/Nucleon/Parallel/InstanceMethods.html +0 -456
  211. data/rdoc/site/0.2.0/Nucleon/Plugin.html +0 -286
  212. data/rdoc/site/0.2.0/Nucleon/Plugin/Action.html +0 -1829
  213. data/rdoc/site/0.2.0/Nucleon/Plugin/Action/Option.html +0 -463
  214. data/rdoc/site/0.2.0/Nucleon/Plugin/Base.html +0 -1803
  215. data/rdoc/site/0.2.0/Nucleon/Plugin/Command.html +0 -725
  216. data/rdoc/site/0.2.0/Nucleon/Plugin/Event.html +0 -446
  217. data/rdoc/site/0.2.0/Nucleon/Plugin/Extension.html +0 -285
  218. data/rdoc/site/0.2.0/Nucleon/Plugin/Project.html +0 -2898
  219. data/rdoc/site/0.2.0/Nucleon/Plugin/Template.html +0 -480
  220. data/rdoc/site/0.2.0/Nucleon/Plugin/Translator.html +0 -375
  221. data/rdoc/site/0.2.0/Nucleon/Project.html +0 -280
  222. data/rdoc/site/0.2.0/Nucleon/Project/Git.html +0 -1805
  223. data/rdoc/site/0.2.0/Nucleon/Project/Github.html +0 -553
  224. data/rdoc/site/0.2.0/Nucleon/Template.html +0 -281
  225. data/rdoc/site/0.2.0/Nucleon/Template/JSON.html +0 -333
  226. data/rdoc/site/0.2.0/Nucleon/Template/Wrapper.html +0 -333
  227. data/rdoc/site/0.2.0/Nucleon/Template/YAML.html +0 -333
  228. data/rdoc/site/0.2.0/Nucleon/Translator.html +0 -280
  229. data/rdoc/site/0.2.0/Nucleon/Translator/JSON.html +0 -370
  230. data/rdoc/site/0.2.0/Nucleon/Translator/YAML.html +0 -370
  231. data/rdoc/site/0.2.0/Nucleon/Util.html +0 -289
  232. data/rdoc/site/0.2.0/Nucleon/Util/CLI.html +0 -392
  233. data/rdoc/site/0.2.0/Nucleon/Util/CLI/Parser.html +0 -1250
  234. data/rdoc/site/0.2.0/Nucleon/Util/Cache.html +0 -784
  235. data/rdoc/site/0.2.0/Nucleon/Util/Console.html +0 -1318
  236. data/rdoc/site/0.2.0/Nucleon/Util/Data.html +0 -1411
  237. data/rdoc/site/0.2.0/Nucleon/Util/Disk.html +0 -526
  238. data/rdoc/site/0.2.0/Nucleon/Util/Git.html +0 -365
  239. data/rdoc/site/0.2.0/Nucleon/Util/Liquid.html +0 -369
  240. data/rdoc/site/0.2.0/Nucleon/Util/Logger.html +0 -810
  241. data/rdoc/site/0.2.0/Nucleon/Util/Package.html +0 -562
  242. data/rdoc/site/0.2.0/Nucleon/Util/SSH.html +0 -1033
  243. data/rdoc/site/0.2.0/Nucleon/Util/SSH/Keypair.html +0 -605
  244. data/rdoc/site/0.2.0/Nucleon/Util/Shell.html +0 -693
  245. data/rdoc/site/0.2.0/Nucleon/Util/Shell/Result.html +0 -501
  246. data/rdoc/site/0.2.0/README_rdoc.html +0 -316
  247. data/rdoc/site/0.2.0/TODO_rdoc.html +0 -265
  248. data/rdoc/site/0.2.0/created.rid +0 -61
  249. data/rdoc/site/0.2.0/images/add.png +0 -0
  250. data/rdoc/site/0.2.0/images/brick.png +0 -0
  251. data/rdoc/site/0.2.0/images/brick_link.png +0 -0
  252. data/rdoc/site/0.2.0/images/bug.png +0 -0
  253. data/rdoc/site/0.2.0/images/bullet_black.png +0 -0
  254. data/rdoc/site/0.2.0/images/bullet_toggle_minus.png +0 -0
  255. data/rdoc/site/0.2.0/images/bullet_toggle_plus.png +0 -0
  256. data/rdoc/site/0.2.0/images/date.png +0 -0
  257. data/rdoc/site/0.2.0/images/delete.png +0 -0
  258. data/rdoc/site/0.2.0/images/find.png +0 -0
  259. data/rdoc/site/0.2.0/images/loadingAnimation.gif +0 -0
  260. data/rdoc/site/0.2.0/images/macFFBgHack.png +0 -0
  261. data/rdoc/site/0.2.0/images/package.png +0 -0
  262. data/rdoc/site/0.2.0/images/page_green.png +0 -0
  263. data/rdoc/site/0.2.0/images/page_white_text.png +0 -0
  264. data/rdoc/site/0.2.0/images/page_white_width.png +0 -0
  265. data/rdoc/site/0.2.0/images/plugin.png +0 -0
  266. data/rdoc/site/0.2.0/images/ruby.png +0 -0
  267. data/rdoc/site/0.2.0/images/tag_blue.png +0 -0
  268. data/rdoc/site/0.2.0/images/tag_green.png +0 -0
  269. data/rdoc/site/0.2.0/images/transparent.png +0 -0
  270. data/rdoc/site/0.2.0/images/wrench.png +0 -0
  271. data/rdoc/site/0.2.0/images/wrench_orange.png +0 -0
  272. data/rdoc/site/0.2.0/images/zoom.png +0 -0
  273. data/rdoc/site/0.2.0/index.html +0 -315
  274. data/rdoc/site/0.2.0/js/darkfish.js +0 -155
  275. data/rdoc/site/0.2.0/js/jquery.js +0 -18
  276. data/rdoc/site/0.2.0/js/navigation.js +0 -142
  277. data/rdoc/site/0.2.0/js/search.js +0 -94
  278. data/rdoc/site/0.2.0/js/search_index.js +0 -1
  279. data/rdoc/site/0.2.0/js/searcher.js +0 -228
  280. data/rdoc/site/0.2.0/rdoc.css +0 -543
  281. data/rdoc/site/0.2.0/table_of_contents.html +0 -1657
  282. data/rdoc/site/0.2.1/ARCHITECTURE_rdoc.html +0 -640
  283. data/rdoc/site/0.2.1/Hash.html +0 -353
  284. data/rdoc/site/0.2.1/Kernel.html +0 -420
  285. data/rdoc/site/0.2.1/Nucleon.html +0 -674
  286. data/rdoc/site/0.2.1/Nucleon/Action.html +0 -286
  287. data/rdoc/site/0.2.1/Nucleon/Action/Extract.html +0 -457
  288. data/rdoc/site/0.2.1/Nucleon/Action/Project.html +0 -285
  289. data/rdoc/site/0.2.1/Nucleon/Action/Project/Add.html +0 -502
  290. data/rdoc/site/0.2.1/Nucleon/Action/Project/Create.html +0 -459
  291. data/rdoc/site/0.2.1/Nucleon/Action/Project/Remove.html +0 -505
  292. data/rdoc/site/0.2.1/Nucleon/Action/Project/Save.html +0 -478
  293. data/rdoc/site/0.2.1/Nucleon/Action/Project/Update.html +0 -425
  294. data/rdoc/site/0.2.1/Nucleon/Codes.html +0 -569
  295. data/rdoc/site/0.2.1/Nucleon/Command.html +0 -281
  296. data/rdoc/site/0.2.1/Nucleon/Command/Bash.html +0 -550
  297. data/rdoc/site/0.2.1/Nucleon/Config.html +0 -1634
  298. data/rdoc/site/0.2.1/Nucleon/Config/Collection.html +0 -515
  299. data/rdoc/site/0.2.1/Nucleon/Config/Options.html +0 -495
  300. data/rdoc/site/0.2.1/Nucleon/Core.html +0 -641
  301. data/rdoc/site/0.2.1/Nucleon/Environment.html +0 -1210
  302. data/rdoc/site/0.2.1/Nucleon/Errors.html +0 -281
  303. data/rdoc/site/0.2.1/Nucleon/Errors/BatchError.html +0 -287
  304. data/rdoc/site/0.2.1/Nucleon/Errors/NucleonError.html +0 -663
  305. data/rdoc/site/0.2.1/Nucleon/Errors/SSHUnavailable.html +0 -287
  306. data/rdoc/site/0.2.1/Nucleon/Event.html +0 -281
  307. data/rdoc/site/0.2.1/Nucleon/Event/Regex.html +0 -473
  308. data/rdoc/site/0.2.1/Nucleon/Facade.html +0 -2452
  309. data/rdoc/site/0.2.1/Nucleon/Gems.html +0 -641
  310. data/rdoc/site/0.2.1/Nucleon/Manager.html +0 -1862
  311. data/rdoc/site/0.2.1/Nucleon/Mixin.html +0 -291
  312. data/rdoc/site/0.2.1/Nucleon/Mixin/Action.html +0 -284
  313. data/rdoc/site/0.2.1/Nucleon/Mixin/Action/Commit.html +0 -387
  314. data/rdoc/site/0.2.1/Nucleon/Mixin/Action/Project.html +0 -401
  315. data/rdoc/site/0.2.1/Nucleon/Mixin/Action/Push.html +0 -377
  316. data/rdoc/site/0.2.1/Nucleon/Mixin/Action/Registration.html +0 -575
  317. data/rdoc/site/0.2.1/Nucleon/Mixin/Colors.html +0 -551
  318. data/rdoc/site/0.2.1/Nucleon/Mixin/ConfigCollection.html +0 -487
  319. data/rdoc/site/0.2.1/Nucleon/Mixin/ConfigOptions.html +0 -455
  320. data/rdoc/site/0.2.1/Nucleon/Mixin/Macro.html +0 -282
  321. data/rdoc/site/0.2.1/Nucleon/Mixin/Macro/ObjectInterface.html +0 -701
  322. data/rdoc/site/0.2.1/Nucleon/Mixin/Macro/PluginInterface.html +0 -688
  323. data/rdoc/site/0.2.1/Nucleon/Mixin/Settings.html +0 -487
  324. data/rdoc/site/0.2.1/Nucleon/Mixin/SubConfig.html +0 -893
  325. data/rdoc/site/0.2.1/Nucleon/Parallel.html +0 -332
  326. data/rdoc/site/0.2.1/Nucleon/Parallel/ClassMethods.html +0 -331
  327. data/rdoc/site/0.2.1/Nucleon/Parallel/InstanceMethods.html +0 -458
  328. data/rdoc/site/0.2.1/Nucleon/Plugin.html +0 -288
  329. data/rdoc/site/0.2.1/Nucleon/Plugin/Action.html +0 -2133
  330. data/rdoc/site/0.2.1/Nucleon/Plugin/Action/Option.html +0 -465
  331. data/rdoc/site/0.2.1/Nucleon/Plugin/Base.html +0 -1988
  332. data/rdoc/site/0.2.1/Nucleon/Plugin/Command.html +0 -765
  333. data/rdoc/site/0.2.1/Nucleon/Plugin/Event.html +0 -448
  334. data/rdoc/site/0.2.1/Nucleon/Plugin/Extension.html +0 -287
  335. data/rdoc/site/0.2.1/Nucleon/Plugin/Project.html +0 -2900
  336. data/rdoc/site/0.2.1/Nucleon/Plugin/Template.html +0 -482
  337. data/rdoc/site/0.2.1/Nucleon/Plugin/Translator.html +0 -377
  338. data/rdoc/site/0.2.1/Nucleon/Project.html +0 -282
  339. data/rdoc/site/0.2.1/Nucleon/Project/Git.html +0 -1807
  340. data/rdoc/site/0.2.1/Nucleon/Project/Github.html +0 -555
  341. data/rdoc/site/0.2.1/Nucleon/Template.html +0 -283
  342. data/rdoc/site/0.2.1/Nucleon/Template/JSON.html +0 -335
  343. data/rdoc/site/0.2.1/Nucleon/Template/Wrapper.html +0 -335
  344. data/rdoc/site/0.2.1/Nucleon/Template/YAML.html +0 -335
  345. data/rdoc/site/0.2.1/Nucleon/Translator.html +0 -282
  346. data/rdoc/site/0.2.1/Nucleon/Translator/JSON.html +0 -372
  347. data/rdoc/site/0.2.1/Nucleon/Translator/YAML.html +0 -372
  348. data/rdoc/site/0.2.1/Nucleon/Util.html +0 -291
  349. data/rdoc/site/0.2.1/Nucleon/Util/CLI.html +0 -394
  350. data/rdoc/site/0.2.1/Nucleon/Util/CLI/Parser.html +0 -1404
  351. data/rdoc/site/0.2.1/Nucleon/Util/Cache.html +0 -824
  352. data/rdoc/site/0.2.1/Nucleon/Util/Console.html +0 -1330
  353. data/rdoc/site/0.2.1/Nucleon/Util/Data.html +0 -1423
  354. data/rdoc/site/0.2.1/Nucleon/Util/Disk.html +0 -528
  355. data/rdoc/site/0.2.1/Nucleon/Util/Git.html +0 -367
  356. data/rdoc/site/0.2.1/Nucleon/Util/Liquid.html +0 -371
  357. data/rdoc/site/0.2.1/Nucleon/Util/Logger.html +0 -822
  358. data/rdoc/site/0.2.1/Nucleon/Util/Package.html +0 -564
  359. data/rdoc/site/0.2.1/Nucleon/Util/SSH.html +0 -1036
  360. data/rdoc/site/0.2.1/Nucleon/Util/SSH/Keypair.html +0 -607
  361. data/rdoc/site/0.2.1/Nucleon/Util/Shell.html +0 -697
  362. data/rdoc/site/0.2.1/Nucleon/Util/Shell/Result.html +0 -503
  363. data/rdoc/site/0.2.1/README_rdoc.html +0 -318
  364. data/rdoc/site/0.2.1/TODO_rdoc.html +0 -267
  365. data/rdoc/site/0.2.1/created.rid +0 -62
  366. data/rdoc/site/0.2.1/images/add.png +0 -0
  367. data/rdoc/site/0.2.1/images/brick.png +0 -0
  368. data/rdoc/site/0.2.1/images/brick_link.png +0 -0
  369. data/rdoc/site/0.2.1/images/bug.png +0 -0
  370. data/rdoc/site/0.2.1/images/bullet_black.png +0 -0
  371. data/rdoc/site/0.2.1/images/bullet_toggle_minus.png +0 -0
  372. data/rdoc/site/0.2.1/images/bullet_toggle_plus.png +0 -0
  373. data/rdoc/site/0.2.1/images/date.png +0 -0
  374. data/rdoc/site/0.2.1/images/delete.png +0 -0
  375. data/rdoc/site/0.2.1/images/find.png +0 -0
  376. data/rdoc/site/0.2.1/images/loadingAnimation.gif +0 -0
  377. data/rdoc/site/0.2.1/images/macFFBgHack.png +0 -0
  378. data/rdoc/site/0.2.1/images/package.png +0 -0
  379. data/rdoc/site/0.2.1/images/page_green.png +0 -0
  380. data/rdoc/site/0.2.1/images/page_white_text.png +0 -0
  381. data/rdoc/site/0.2.1/images/page_white_width.png +0 -0
  382. data/rdoc/site/0.2.1/images/plugin.png +0 -0
  383. data/rdoc/site/0.2.1/images/ruby.png +0 -0
  384. data/rdoc/site/0.2.1/images/tag_blue.png +0 -0
  385. data/rdoc/site/0.2.1/images/tag_green.png +0 -0
  386. data/rdoc/site/0.2.1/images/transparent.png +0 -0
  387. data/rdoc/site/0.2.1/images/wrench.png +0 -0
  388. data/rdoc/site/0.2.1/images/wrench_orange.png +0 -0
  389. data/rdoc/site/0.2.1/images/zoom.png +0 -0
  390. data/rdoc/site/0.2.1/index.html +0 -317
  391. data/rdoc/site/0.2.1/js/darkfish.js +0 -155
  392. data/rdoc/site/0.2.1/js/jquery.js +0 -18
  393. data/rdoc/site/0.2.1/js/navigation.js +0 -142
  394. data/rdoc/site/0.2.1/js/search.js +0 -94
  395. data/rdoc/site/0.2.1/js/search_index.js +0 -1
  396. data/rdoc/site/0.2.1/js/searcher.js +0 -228
  397. data/rdoc/site/0.2.1/rdoc.css +0 -543
  398. data/rdoc/site/0.2.1/table_of_contents.html +0 -1718
  399. data/spec/coral_mock_input.rb +0 -29
  400. data/spec/coral_test_kernel.rb +0 -22
@@ -1,640 +0,0 @@
1
- <!DOCTYPE html>
2
-
3
- <html>
4
- <head>
5
- <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
6
-
7
- <title>ARCHITECTURE - nucleon 0.2.1</title>
8
-
9
- <link type="text/css" media="screen" href="./rdoc.css" rel="stylesheet">
10
-
11
- <script type="text/javascript">
12
- var rdoc_rel_prefix = "./";
13
- </script>
14
-
15
- <script type="text/javascript" charset="utf-8" src="./js/jquery.js"></script>
16
- <script type="text/javascript" charset="utf-8" src="./js/navigation.js"></script>
17
- <script type="text/javascript" charset="utf-8" src="./js/search_index.js"></script>
18
- <script type="text/javascript" charset="utf-8" src="./js/search.js"></script>
19
- <script type="text/javascript" charset="utf-8" src="./js/searcher.js"></script>
20
- <script type="text/javascript" charset="utf-8" src="./js/darkfish.js"></script>
21
-
22
-
23
- <body class="file">
24
- <nav id="metadata">
25
- <nav id="home-section" class="section">
26
- <h3 class="section-header">
27
- <a href="./index.html">Home</a>
28
- <a href="./table_of_contents.html#classes">Classes</a>
29
- <a href="./table_of_contents.html#methods">Methods</a>
30
- </h3>
31
- </nav>
32
-
33
-
34
- <nav id="search-section" class="section project-section" class="initially-hidden">
35
- <form action="#" method="get" accept-charset="utf-8">
36
- <h3 class="section-header">
37
- <input type="text" name="search" placeholder="Search" id="search-field"
38
- title="Type to search, Up and Down to navigate, Enter to load">
39
- </h3>
40
- </form>
41
-
42
- <ul id="search-results" class="initially-hidden"></ul>
43
- </nav>
44
-
45
-
46
- <div id="project-metadata">
47
- <nav id="fileindex-section" class="section project-section">
48
- <h3 class="section-header">Pages</h3>
49
-
50
- <ul>
51
-
52
- <li class="file"><a href="./ARCHITECTURE_rdoc.html">ARCHITECTURE</a>
53
-
54
- <li class="file"><a href="./README_rdoc.html">README</a>
55
-
56
- <li class="file"><a href="./TODO_rdoc.html">TODO</a>
57
-
58
- </ul>
59
- </nav>
60
-
61
- <nav id="classindex-section" class="section project-section">
62
- <h3 class="section-header">Class and Module Index</h3>
63
-
64
- <ul class="link-list">
65
-
66
- <li><a href="./Nucleon.html">Nucleon</a>
67
-
68
- <li><a href="./Nucleon/Action.html">Nucleon::Action</a>
69
-
70
- <li><a href="./Nucleon/Action/Extract.html">Nucleon::Action::Extract</a>
71
-
72
- <li><a href="./Nucleon/Action/Project.html">Nucleon::Action::Project</a>
73
-
74
- <li><a href="./Nucleon/Action/Project/Add.html">Nucleon::Action::Project::Add</a>
75
-
76
- <li><a href="./Nucleon/Action/Project/Create.html">Nucleon::Action::Project::Create</a>
77
-
78
- <li><a href="./Nucleon/Action/Project/Remove.html">Nucleon::Action::Project::Remove</a>
79
-
80
- <li><a href="./Nucleon/Action/Project/Save.html">Nucleon::Action::Project::Save</a>
81
-
82
- <li><a href="./Nucleon/Action/Project/Update.html">Nucleon::Action::Project::Update</a>
83
-
84
- <li><a href="./Nucleon/Codes.html">Nucleon::Codes</a>
85
-
86
- <li><a href="./Nucleon/Command.html">Nucleon::Command</a>
87
-
88
- <li><a href="./Nucleon/Command/Bash.html">Nucleon::Command::Bash</a>
89
-
90
- <li><a href="./Nucleon/Config.html">Nucleon::Config</a>
91
-
92
- <li><a href="./Nucleon/Config/Collection.html">Nucleon::Config::Collection</a>
93
-
94
- <li><a href="./Nucleon/Config/Options.html">Nucleon::Config::Options</a>
95
-
96
- <li><a href="./Nucleon/Core.html">Nucleon::Core</a>
97
-
98
- <li><a href="./Nucleon/Environment.html">Nucleon::Environment</a>
99
-
100
- <li><a href="./Nucleon/Errors.html">Nucleon::Errors</a>
101
-
102
- <li><a href="./Nucleon/Errors/BatchError.html">Nucleon::Errors::BatchError</a>
103
-
104
- <li><a href="./Nucleon/Errors/NucleonError.html">Nucleon::Errors::NucleonError</a>
105
-
106
- <li><a href="./Nucleon/Errors/SSHUnavailable.html">Nucleon::Errors::SSHUnavailable</a>
107
-
108
- <li><a href="./Nucleon/Event.html">Nucleon::Event</a>
109
-
110
- <li><a href="./Nucleon/Event/Regex.html">Nucleon::Event::Regex</a>
111
-
112
- <li><a href="./Nucleon/Facade.html">Nucleon::Facade</a>
113
-
114
- <li><a href="./Nucleon/Gems.html">Nucleon::Gems</a>
115
-
116
- <li><a href="./Nucleon/Manager.html">Nucleon::Manager</a>
117
-
118
- <li><a href="./Nucleon/Mixin.html">Nucleon::Mixin</a>
119
-
120
- <li><a href="./Nucleon/Mixin/Action.html">Nucleon::Mixin::Action</a>
121
-
122
- <li><a href="./Nucleon/Mixin/Action/Commit.html">Nucleon::Mixin::Action::Commit</a>
123
-
124
- <li><a href="./Nucleon/Mixin/Action/Project.html">Nucleon::Mixin::Action::Project</a>
125
-
126
- <li><a href="./Nucleon/Mixin/Action/Push.html">Nucleon::Mixin::Action::Push</a>
127
-
128
- <li><a href="./Nucleon/Mixin/Action/Registration.html">Nucleon::Mixin::Action::Registration</a>
129
-
130
- <li><a href="./Nucleon/Mixin/Colors.html">Nucleon::Mixin::Colors</a>
131
-
132
- <li><a href="./Nucleon/Mixin/ConfigCollection.html">Nucleon::Mixin::ConfigCollection</a>
133
-
134
- <li><a href="./Nucleon/Mixin/ConfigOptions.html">Nucleon::Mixin::ConfigOptions</a>
135
-
136
- <li><a href="./Nucleon/Mixin/Macro.html">Nucleon::Mixin::Macro</a>
137
-
138
- <li><a href="./Nucleon/Mixin/Macro/ObjectInterface.html">Nucleon::Mixin::Macro::ObjectInterface</a>
139
-
140
- <li><a href="./Nucleon/Mixin/Macro/PluginInterface.html">Nucleon::Mixin::Macro::PluginInterface</a>
141
-
142
- <li><a href="./Nucleon/Mixin/Settings.html">Nucleon::Mixin::Settings</a>
143
-
144
- <li><a href="./Nucleon/Mixin/SubConfig.html">Nucleon::Mixin::SubConfig</a>
145
-
146
- <li><a href="./Nucleon/Parallel.html">Nucleon::Parallel</a>
147
-
148
- <li><a href="./Nucleon/Parallel/ClassMethods.html">Nucleon::Parallel::ClassMethods</a>
149
-
150
- <li><a href="./Nucleon/Parallel/InstanceMethods.html">Nucleon::Parallel::InstanceMethods</a>
151
-
152
- <li><a href="./Nucleon/Plugin.html">Nucleon::Plugin</a>
153
-
154
- <li><a href="./Nucleon/Plugin/Action.html">Nucleon::Plugin::Action</a>
155
-
156
- <li><a href="./Nucleon/Plugin/Action/Option.html">Nucleon::Plugin::Action::Option</a>
157
-
158
- <li><a href="./Nucleon/Plugin/Base.html">Nucleon::Plugin::Base</a>
159
-
160
- <li><a href="./Nucleon/Plugin/Command.html">Nucleon::Plugin::Command</a>
161
-
162
- <li><a href="./Nucleon/Plugin/Event.html">Nucleon::Plugin::Event</a>
163
-
164
- <li><a href="./Nucleon/Plugin/Extension.html">Nucleon::Plugin::Extension</a>
165
-
166
- <li><a href="./Nucleon/Plugin/Project.html">Nucleon::Plugin::Project</a>
167
-
168
- <li><a href="./Nucleon/Plugin/Template.html">Nucleon::Plugin::Template</a>
169
-
170
- <li><a href="./Nucleon/Plugin/Translator.html">Nucleon::Plugin::Translator</a>
171
-
172
- <li><a href="./Nucleon/Project.html">Nucleon::Project</a>
173
-
174
- <li><a href="./Nucleon/Project/Git.html">Nucleon::Project::Git</a>
175
-
176
- <li><a href="./Nucleon/Project/Github.html">Nucleon::Project::Github</a>
177
-
178
- <li><a href="./Nucleon/Template.html">Nucleon::Template</a>
179
-
180
- <li><a href="./Nucleon/Template/JSON.html">Nucleon::Template::JSON</a>
181
-
182
- <li><a href="./Nucleon/Template/Wrapper.html">Nucleon::Template::Wrapper</a>
183
-
184
- <li><a href="./Nucleon/Template/YAML.html">Nucleon::Template::YAML</a>
185
-
186
- <li><a href="./Nucleon/Translator.html">Nucleon::Translator</a>
187
-
188
- <li><a href="./Nucleon/Translator/JSON.html">Nucleon::Translator::JSON</a>
189
-
190
- <li><a href="./Nucleon/Translator/YAML.html">Nucleon::Translator::YAML</a>
191
-
192
- <li><a href="./Nucleon/Util.html">Nucleon::Util</a>
193
-
194
- <li><a href="./Nucleon/Util/CLI.html">Nucleon::Util::CLI</a>
195
-
196
- <li><a href="./Nucleon/Util/CLI/Parser.html">Nucleon::Util::CLI::Parser</a>
197
-
198
- <li><a href="./Nucleon/Util/Cache.html">Nucleon::Util::Cache</a>
199
-
200
- <li><a href="./Nucleon/Util/Console.html">Nucleon::Util::Console</a>
201
-
202
- <li><a href="./Nucleon/Util/Data.html">Nucleon::Util::Data</a>
203
-
204
- <li><a href="./Nucleon/Util/Disk.html">Nucleon::Util::Disk</a>
205
-
206
- <li><a href="./Nucleon/Util/Git.html">Nucleon::Util::Git</a>
207
-
208
- <li><a href="./Nucleon/Util/Liquid.html">Nucleon::Util::Liquid</a>
209
-
210
- <li><a href="./Nucleon/Util/Logger.html">Nucleon::Util::Logger</a>
211
-
212
- <li><a href="./Nucleon/Util/Package.html">Nucleon::Util::Package</a>
213
-
214
- <li><a href="./Nucleon/Util/SSH.html">Nucleon::Util::SSH</a>
215
-
216
- <li><a href="./Nucleon/Util/SSH/Keypair.html">Nucleon::Util::SSH::Keypair</a>
217
-
218
- <li><a href="./Nucleon/Util/Shell.html">Nucleon::Util::Shell</a>
219
-
220
- <li><a href="./Nucleon/Util/Shell/Result.html">Nucleon::Util::Shell::Result</a>
221
-
222
- <li><a href="./Hash.html">Hash</a>
223
-
224
- <li><a href="./Kernel.html">Kernel</a>
225
-
226
- </ul>
227
- </nav>
228
-
229
- </div>
230
- </nav>
231
-
232
- <div id="documentation" class="description">
233
-
234
- <h2 id="label-Nucleon+architecture+guide"><a href="Nucleon.html">Nucleon</a> architecture guide</h2>
235
-
236
- <p><a href="Nucleon.html">Nucleon</a> is built to provide an easy and minimal,
237
- yet extremely powerful, framework for building applications that are
238
- highly distributable in nature.</p>
239
-
240
- <p>This project should be applicable to any Ruby application that needs to be
241
- built in a pluggable, concurrent, and configurable fashion. It is capable
242
- of being used as pieces in existing programming models and it provides an
243
- extremely simple core programming model that you can build on.</p>
244
-
245
- <p>There are five major architectural goals of the project:</p>
246
-
247
- <h3 id="label-Persistent+and+mergeable+objects">Persistent and mergeable objects</h3>
248
-
249
- <h4 id="label-Important+concept%3A++Objects+%3D%3D+Property+trees">Important concept: Objects == Property trees</h4>
250
-
251
- <p>At the core of the <a href="Nucleon.html">Nucleon</a> framework is the
252
- configuration. The configuration is used for allowing us to store,
253
- lookup, and perform other operations (such as merge) on our class data by
254
- treating a subset of class properties as a tree based data structure.</p>
255
-
256
- <p>Examples of <a href="Nucleon.html">Nucleon</a> configurations:</p>
257
-
258
- <pre class="ruby"><span class="ruby-identifier">first_config</span> = <span class="ruby-constant">Nucleon</span><span class="ruby-operator">::</span><span class="ruby-constant">Config</span>.<span class="ruby-identifier">new</span>
259
- <span class="ruby-identifier">first_config</span>.<span class="ruby-identifier">set</span>([ :<span class="ruby-identifier">my</span> <span class="ruby-operator">:</span><span class="ruby-identifier">nested</span>, :<span class="ruby-identifier">property</span> ], <span class="ruby-string">&#39;hello&#39;</span>)
260
- <span class="ruby-identifier">first_config</span>.<span class="ruby-identifier">set</span>([ :<span class="ruby-identifier">my</span>, :<span class="ruby-identifier">other</span> ], { :<span class="ruby-identifier">ok</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">true</span> })
261
-
262
- <span class="ruby-identifier">tree_data</span> = <span class="ruby-identifier">first_config</span>.<span class="ruby-identifier">export</span>
263
- <span class="ruby-comment"># tree_data = { </span>
264
- <span class="ruby-comment"># :my =&gt; {</span>
265
- <span class="ruby-comment"># :nested =&gt; { :property =&gt; &#39;hello&#39; },</span>
266
- <span class="ruby-comment"># :other =&gt; { :ok =&gt; true }</span>
267
- <span class="ruby-comment"># }</span>
268
- <span class="ruby-comment"># }</span>
269
-
270
- <span class="ruby-identifier">second_config</span> = <span class="ruby-constant">Nucleon</span><span class="ruby-operator">::</span><span class="ruby-constant">Config</span>.<span class="ruby-identifier">new</span>
271
- <span class="ruby-identifier">second_config</span>.<span class="ruby-identifier">set</span>([ :<span class="ruby-identifier">my</span>, :<span class="ruby-identifier">other</span>, :<span class="ruby-identifier">ok</span> ], <span class="ruby-keyword">false</span>)
272
- <span class="ruby-identifier">second_config</span>.<span class="ruby-identifier">set</span>(:<span class="ruby-identifier">property</span>, <span class="ruby-keyword">true</span>)
273
- <span class="ruby-identifier">second_config</span>.<span class="ruby-identifier">set</span>([ :<span class="ruby-identifier">something</span>, :<span class="ruby-keyword">else</span> ], <span class="ruby-keyword">true</span>)
274
-
275
- <span class="ruby-identifier">third_config</span> = <span class="ruby-constant">Nucleon</span><span class="ruby-operator">::</span><span class="ruby-constant">Config</span>.<span class="ruby-identifier">new</span>({ :<span class="ruby-identifier">property</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span> })
276
- <span class="ruby-identifier">third_config</span>.<span class="ruby-identifier">import</span>(<span class="ruby-identifier">first_config</span>)
277
- <span class="ruby-identifier">third_config</span>.<span class="ruby-identifier">defaults</span>(<span class="ruby-identifier">second_config</span>)
278
-
279
- <span class="ruby-identifier">tree_data</span> = <span class="ruby-identifier">third_config</span>.<span class="ruby-identifier">export</span>
280
- <span class="ruby-comment"># tree_data = { </span>
281
- <span class="ruby-comment"># :my =&gt; {</span>
282
- <span class="ruby-comment"># :nested =&gt; { :property =&gt; &#39;hello&#39; },</span>
283
- <span class="ruby-comment"># :other =&gt; { :ok =&gt; true }</span>
284
- <span class="ruby-comment"># },</span>
285
- <span class="ruby-comment"># :property =&gt; false,</span>
286
- <span class="ruby-comment"># :something =&gt; { :else =&gt; true }</span>
287
- <span class="ruby-comment"># }</span>
288
- </pre>
289
-
290
- <p>As you can see the concept is pretty simple. In <a
291
- href="Nucleon.html">Nucleon</a> most classes extend the configuration so
292
- they have the above elastic and persistable qualities. Upon the
293
- configuration primitives are built specialized accessors / modifiers in sub
294
- classes. This creates a very dynamic and flexible object model upon which
295
- we can build effective distributed systems.</p>
296
-
297
- <h3 id="label-Extremely+pluggable+and+extensible">Extremely pluggable and extensible</h3>
298
-
299
- <p>In the future application programming will focus much more on plugins and
300
- extensions to existing systems than crafting a bunch of standalone systems.
301
- This trend has already begun. But it can be harder to start an application
302
- with a capable plugin and extensibility model unless already building on an
303
- extensible framework (at which point you are most likely creating plugins).</p>
304
-
305
- <p>One of the driving goals behind the <a href="Nucleon.html">Nucleon</a>
306
- project is to deliver a cutting edge plugin and extensibility model that
307
- other applications or frameworks can build on to provide their parallel
308
- capable pluggable architecture. In order to do this effectively we need
309
- to bridge different extensible systems to create an integrated hybrid.</p>
310
-
311
- <p><a href="Nucleon.html">Nucleon</a> provides (and will provide) quite a few
312
- means of extension:</p>
313
-
314
- <h4 id="label-Plugin+%2F+providers+architecture">Plugin / providers architecture</h4>
315
-
316
- <p><a href="Nucleon.html">Nucleon</a> implements a model where we define a
317
- base API interface/implementation as a base plugin, which can be extended
318
- by specialized providers loaded from a myriad of locations (that you can
319
- define). This allows us to utilize base capabilities that can be easily
320
- extended by developers with a single Ruby file provider implementation.
321
- These plugin instances are usually created via a facade that makes
322
- referencing them very easy. The facade is layered like an onion so it is
323
- very easy to extend as needed.</p>
324
-
325
- <p>For example:</p>
326
-
327
- <pre class="ruby"><span class="ruby-identifier">translator</span> = <span class="ruby-constant">Nucleon</span>.<span class="ruby-identifier">translator</span>({ :<span class="ruby-identifier">provider</span> =<span class="ruby-operator">&gt;</span> :<span class="ruby-identifier">json</span> })
328
- <span class="ruby-identifier">obj_string</span> = <span class="ruby-identifier">translator</span>.<span class="ruby-identifier">generate</span>(<span class="ruby-identifier">properties</span>)
329
- <span class="ruby-identifier">properties</span> = <span class="ruby-identifier">translator</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">obj_string</span>)
330
- </pre>
331
-
332
- <p>It should be noted that ALL <a href="Nucleon.html">Nucleon</a> plugins are
333
- at their core, configurations.</p>
334
-
335
- <h4 id="label-Method+block+extension">Method block extension</h4>
336
-
337
- <p>Sometimes it is nice to have a base implementation handle mundane details
338
- of a task and leave the juicy bits to the child implementation. Normally,
339
- in most OOP languages, we do this by simply extending parent methods
340
- through inheritance. This leaves us with a problem though. How can we
341
- get the parent to process before, after, or even in between the execution
342
- of the child implementation?</p>
343
-
344
- <p>Ruby makes thie very easy! To fulfill this goal we often use code blocks
345
- passed to the parent that the parent then executes on behalf of the child.</p>
346
-
347
- <p>For example:</p>
348
-
349
- <pre class="ruby"><span class="ruby-keyword">class</span> <span class="ruby-constant">ParentClass</span>
350
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>
351
- <span class="ruby-ivar">@logger</span> = <span class="ruby-constant">Log4r</span><span class="ruby-operator">::</span><span class="ruby-constant">Logger</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&#39;over-engineered greeting class&#39;</span>)
352
- <span class="ruby-keyword">end</span>
353
-
354
- <span class="ruby-comment">#---</span>
355
-
356
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">say_hello</span>(<span class="ruby-identifier">to</span>, &amp;<span class="ruby-identifier">code</span>)
357
- <span class="ruby-identifier">result</span> = <span class="ruby-keyword">false</span>
358
- <span class="ruby-ivar">@logger</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Invoking say_hello with #{to}&quot;</span>)
359
-
360
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">code</span>.<span class="ruby-identifier">call</span>(:<span class="ruby-identifier">validate</span>)
361
- <span class="ruby-ivar">@logger</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-string">&quot;We&#39;re all good&quot;</span>)
362
- <span class="ruby-identifier">result</span> = <span class="ruby-identifier">code</span>.<span class="ruby-identifier">call</span>(:<span class="ruby-identifier">run</span>)
363
- <span class="ruby-keyword">end</span>
364
-
365
- <span class="ruby-ivar">@logger</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Finishing say_hello with #{to}&quot;</span>)
366
- <span class="ruby-identifier">result</span>
367
- <span class="ruby-keyword">end</span>
368
- <span class="ruby-keyword">end</span>
369
-
370
- <span class="ruby-comment">#---</span>
371
-
372
- <span class="ruby-keyword">class</span> <span class="ruby-constant">ChildClass</span> <span class="ruby-operator">&lt;</span> <span class="ruby-constant">ParentClass</span>
373
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">say_hello</span>(<span class="ruby-identifier">to</span>)
374
- <span class="ruby-keyword">super</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">op</span><span class="ruby-operator">|</span>
375
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">op</span> <span class="ruby-operator">==</span> :<span class="ruby-identifier">validate</span>
376
- <span class="ruby-operator">!</span><span class="ruby-identifier">to</span>.<span class="ruby-identifier">nil?</span>
377
- <span class="ruby-keyword">else</span>
378
- <span class="ruby-comment"># This code only gets executed if &lt;to&gt; is not nil</span>
379
- <span class="ruby-comment"># And we don&#39;t have to worry about logging</span>
380
- <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;hello #{to}!&quot;</span>
381
- <span class="ruby-keyword">true</span>
382
- <span class="ruby-keyword">end</span>
383
- <span class="ruby-keyword">end</span>
384
- <span class="ruby-keyword">end</span>
385
- <span class="ruby-keyword">end</span>
386
-
387
- <span class="ruby-comment">#---</span>
388
-
389
- <span class="ruby-identifier">obj</span> = <span class="ruby-constant">ChildClass</span>.<span class="ruby-identifier">new</span>
390
- <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">say_hello</span>(<span class="ruby-string">&#39;world&#39;</span>)
391
- <span class="ruby-comment"># hello world!</span>
392
- </pre>
393
-
394
- <p>As you can see we executed the child method statements multiple times from
395
- the parent method so that we could abstract out some of the operations in
396
- the sub class, thus making the provider easier to develop and the parent
397
- abstract enough to support various providers.</p>
398
-
399
- <p>Also notice that we did not expose the external block execution to the
400
- users of the class or to child classes of ChildClass. In this case we
401
- chose to stop the block execution propogation because the implementation
402
- was very simple; say hello. If it had been more complex we could propogate
403
- the block execution on down the line.</p>
404
-
405
- <h4 id="label-Event+based+plugin+extensions">Event based plugin extensions</h4>
406
-
407
- <p>It is extremely useful to be able to tap into the execution flow of
408
- existing objects and methods. This allows the flow to change based on
409
- actions that are defined by plugins that hook into other plugins
410
- operations.</p>
411
-
412
- <p><a href="Nucleon.html">Nucleon</a> implements a plugin type called the
413
- Extension. It&#39;s sole purpose is to extend other plugins (including
414
- Extensions). The base extension plugin has no special methods, leaving
415
- the method interface pretty clean. These extensions are instantiated (only
416
- one per defined extension) and they act on events as the application
417
- execution flows. The are true class instances so they can manage state
418
- between registered events.</p>
419
-
420
- <p>Events are triggered by named method calls run by a central plugin manager.
421
- They look just like regular methods but call out to other extensions to
422
- help configure, get/set values, or otherwise act on the state of the
423
- application at the time triggered. Extensions register for events by
424
- defining an instance method that matches the name of the event. Every
425
- event method (hook) takes one parameter (you guessed it); a configuration.
426
- This makes the process quick and painless and code for events remains
427
- easily localized and separated.</p>
428
-
429
- <p>For example:</p>
430
-
431
- <pre class="ruby"><span class="ruby-comment">#</span>
432
- <span class="ruby-comment"># This would be defined within a namespaced load path.</span>
433
- <span class="ruby-comment"># More on that in the usage section.</span>
434
- <span class="ruby-comment"># </span>
435
- <span class="ruby-keyword">class</span> <span class="ruby-constant">MyExtension</span> <span class="ruby-operator">&lt;</span> <span class="ruby-constant">Nucleon</span>.<span class="ruby-identifier">plugin_class</span>(:<span class="ruby-identifier">extension</span>)
436
-
437
- <span class="ruby-ivar">@objs</span> = []
438
-
439
- <span class="ruby-comment">#---</span>
440
-
441
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">myobj_config</span>(<span class="ruby-identifier">config</span>)
442
- <span class="ruby-keyword">if</span> <span class="ruby-constant">Nucleon</span>.<span class="ruby-identifier">check</span>(:<span class="ruby-identifier">is_nucleon_awesome</span>, <span class="ruby-identifier">config</span>)
443
- <span class="ruby-comment"># I&#39;m going to be nice and let other extensions help me decide.</span>
444
- <span class="ruby-identifier">config</span>[:<span class="ruby-identifier">awesome</span>] = <span class="ruby-keyword">true</span>
445
- <span class="ruby-keyword">end</span>
446
- <span class="ruby-keyword">end</span>
447
-
448
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">is_nucleon_awesome</span>(<span class="ruby-identifier">config</span>)
449
- <span class="ruby-keyword">true</span> <span class="ruby-comment"># Of course I&#39;m a little biased</span>
450
- <span class="ruby-keyword">end</span>
451
-
452
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">record_object</span>(<span class="ruby-identifier">config</span>)
453
- <span class="ruby-ivar">@objs</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">config</span>)
454
- <span class="ruby-keyword">end</span>
455
- <span class="ruby-keyword">end</span>
456
-
457
- <span class="ruby-comment">#---</span>
458
-
459
- <span class="ruby-comment"># Extension would normally be loaded via Nucleon.register(load_path)</span>
460
- <span class="ruby-comment"># No one overruled me, Whew!</span>
461
-
462
- <span class="ruby-identifier">myobj</span> = <span class="ruby-constant">Nucleon</span>.<span class="ruby-identifier">config</span>(:<span class="ruby-identifier">myobj</span>, { :<span class="ruby-identifier">nucleon</span> =<span class="ruby-operator">&gt;</span> :<span class="ruby-identifier">is</span> })
463
- <span class="ruby-comment"># myobj = {</span>
464
- <span class="ruby-comment"># :nucleon =&gt; :is,</span>
465
- <span class="ruby-comment"># :awesome =&gt; true</span>
466
- <span class="ruby-comment"># }</span>
467
-
468
- <span class="ruby-constant">Nucleon</span>.<span class="ruby-identifier">exec</span>(:<span class="ruby-identifier">record_object</span>, <span class="ruby-identifier">myobj</span>)
469
- </pre>
470
-
471
- <h4 id="label-Middleware+sequences+%28NOT+YET+IMPLEMENTED%29">Middleware sequences (NOT YET IMPLEMENTED)</h4>
472
-
473
- <p>We are evaluating the implementation of stacked actions or some form of
474
- composite plugin execution model. Mitchell Hashimoto has created an
475
- extremely useful solution for Vagrant and a separate middleware gem that
476
- provides standalone middleware sequencing capabilities.</p>
477
-
478
- <p>In the future we might integrate this system to stack our action plugins so
479
- we can derive action lists. This would most likely be a framework that was
480
- primarily used by the action plugin system and derivative projects.</p>
481
-
482
- <p>Your thoughts are welcome? Contact the maintainers or file an issue.</p>
483
-
484
- <h4 id="label-Execution+plans+%28NOT+YET+MIGRATED%29">Execution plans (NOT YET MIGRATED)</h4>
485
-
486
- <p>In the early days of this project (or it&#39;s predecessor), I created and
487
- utilized a system of executing JSON based CLI execution plans that could
488
- respond to and trigger events, resulting in a responsive CLI sequence that
489
- was programmed entirely in JSON as configurations. This fits our “make
490
- everything a configuration” philosophy.</p>
491
-
492
- <p>This system will be brought up to the current architecture before version
493
- 1.0 (first production release). It will be very powerful, allowing for the
494
- creation of new CLI commands and event driven programmatic actions purely
495
- by working with JSON, YAML, or any other defined translator in the
496
- application.</p>
497
-
498
- <p>The goal is to allow for the ultimate in high level scriptable programming;
499
- configuring data objects that execute programs.</p>
500
-
501
- <p>This might eventually be integrated with the middleware sequences discussed
502
- above.</p>
503
-
504
- <h3 id="label-Easily+parallel">Easily parallel</h3>
505
-
506
- <p>Concurrency is the backbone of scalability and fault tolerance. With <a
507
- href="Nucleon.html">Nucleon</a> we seek to create a system that can utilize
508
- the whole of the resources available to us in the most flexible way
509
- possible. We should be able to write parallel capable objects without even
510
- thinking about it (ok, maybe a litle). It should also be capable of
511
- completely disabling the parallel execution and library inclusion to make
512
- it easier to troubleshoot and debug.</p>
513
-
514
- <p>There are two main popular concurrency methodologies currently being
515
- promoted today. Erlang has popularized the actor based concurrency model
516
- which has been widely discussed and adopted across the enterprise.
517
- Another popular model is channel based communication between workers
518
- popularized by the Go programming language. We would eventually like to
519
- support both.</p>
520
-
521
- <p>Currently we utilize and build on a super awesome Actor based parallel
522
- framework for Ruby called Celluloid (<a
523
- href="http://celluloid.io">celluloid.io</a>). This library is designed
524
- around principles gleaned from Erlang&#39;s concurrency mechanism and is
525
- built around an object oriented message passing architecture. It is very
526
- well written.</p>
527
-
528
- <p><a href="Nucleon.html">Nucleon</a> provides an interface to wrap and load
529
- Celluloid actor proxies into your object&#39;s but allows for the parallel
530
- abilities to be completely disabled, reducing the complexity of the code
531
- (good for stack traces) and allowing for sequentially based debugging
532
- tools (trapping through the code) to function correctly.</p>
533
-
534
- <p>How easy is it to create a parallel object?</p>
535
-
536
- <pre class="ruby"><span class="ruby-keyword">class</span> <span class="ruby-constant">MyClass</span>
537
- <span class="ruby-identifier">include</span> <span class="ruby-constant">Nucleon</span><span class="ruby-operator">::</span><span class="ruby-constant">Parallel</span> <span class="ruby-comment"># Uses Celluloid under the hood!</span>
538
-
539
- <span class="ruby-ivar">@order</span> = []
540
-
541
- <span class="ruby-identifier">attr_reader</span> :<span class="ruby-identifier">order</span>
542
-
543
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">print_number</span>(<span class="ruby-identifier">num</span>)
544
- <span class="ruby-identifier">sleep</span>(<span class="ruby-constant">Random</span>.<span class="ruby-identifier">rand</span>(<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">5</span>))
545
- <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Printing: #{num}&quot;</span>
546
- <span class="ruby-ivar">@order</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">num</span>
547
- <span class="ruby-keyword">end</span>
548
- <span class="ruby-keyword">end</span>
549
-
550
- <span class="ruby-comment">#---</span>
551
-
552
- <span class="ruby-identifier">printer</span> = <span class="ruby-constant">MyClass</span>.<span class="ruby-identifier">new</span>
553
- <span class="ruby-identifier">printer</span>.<span class="ruby-identifier">parallel</span>(:<span class="ruby-identifier">print_number</span>, <span class="ruby-constant">Array</span>(<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-value">100</span>))
554
- <span class="ruby-comment"># prints sequence out of sequence</span>
555
- <span class="ruby-comment"># unless (ENV[&#39;NUCLEON_DEBUG&#39;] or ENV[&#39;NUCLEON_NO_PARALLEL&#39;] defined)</span>
556
-
557
- <span class="ruby-identifier">printer</span>.<span class="ruby-identifier">order</span> <span class="ruby-comment"># Whatever order they were executed in</span>
558
- </pre>
559
-
560
- <p>In the future we will put research into the channel based communication
561
- concurrency model used by Go.</p>
562
-
563
- <h3 id="label-Automatable+project+workflows">Automatable project workflows</h3>
564
-
565
- <p>Configurations are great, but if they can&#39;t persist and be recalled
566
- later by the application or framework they have limited effectiveness.
567
- Since we want projects that are distributed in nature the configurations
568
- need to be, not just persistent, but remotely available. With this in mind
569
- the Project plugin was born.</p>
570
-
571
- <p>The project is a revisionable data store with a local directory. It could
572
- be a file repository or an active database some where (or even a service
573
- like Dropbox). The idea is we provide a basic implementation of the
574
- project in abstract operations and specialized providers fill in the
575
- details.</p>
576
-
577
- <p>So far we have implemented Git, and an extension to Git, GitHub. We use a
578
- lot of text based files in our projects and Git is great for compressing
579
- and storing versions of them, so Git was the first project integration.
580
- Git is also a highly popular distributed mission critical capable version
581
- control system, which is also a contributing factor in its prioritization.</p>
582
-
583
- <p>In the future we plan on integrating more project providers and reworking
584
- the Git provider to utilize more of the performance oriented Rugged
585
- (LibGit2) libraries.</p>
586
-
587
- <p>What a project looks like as a programming construct:</p>
588
-
589
- <pre class="ruby"><span class="ruby-identifier">project</span> = <span class="ruby-constant">Nucleon</span>.<span class="ruby-identifier">project</span>({
590
- :<span class="ruby-identifier">provider</span> =<span class="ruby-operator">&gt;</span> :<span class="ruby-identifier">github</span>, <span class="ruby-comment"># Project resides at Github (use special API sauce)</span>
591
- :<span class="ruby-identifier">reference</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&#39;coralnexus/nucleon&#39;</span>, <span class="ruby-comment"># GitHub identifier</span>
592
- :<span class="ruby-identifier">revision</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&#39;0.1&#39;</span>, <span class="ruby-comment"># Revision to ensure checked out for project</span>
593
- :<span class="ruby-identifier">directory</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&#39;/tmp/nucleon&#39;</span>, <span class="ruby-comment"># Directory to setup project</span>
594
- :<span class="ruby-identifier">create</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">true</span>, <span class="ruby-comment"># Create project if does not exist yet</span>
595
- :<span class="ruby-identifier">pull</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">true</span> <span class="ruby-comment"># Go ahead and pull updates</span>
596
- })
597
-
598
- <span class="ruby-comment"># If you have a .netrc file with auth credentials in your home directory</span>
599
- <span class="ruby-comment"># the plugin will manage deploy keys for private projects.</span>
600
-
601
- <span class="ruby-identifier">origin</span> = <span class="ruby-identifier">project</span>.<span class="ruby-identifier">remote</span>(:<span class="ruby-identifier">origin</span>)
602
- <span class="ruby-comment"># http://github.com/coralnexus/nucleon.git</span>
603
-
604
- <span class="ruby-identifier">edit</span> = <span class="ruby-identifier">project</span>.<span class="ruby-identifier">remote</span>(:<span class="ruby-identifier">edit</span>)
605
- <span class="ruby-comment"># git@github.com:coralnexus/nucleon.git</span>
606
-
607
- <span class="ruby-identifier">project</span>.<span class="ruby-identifier">checkout</span>(<span class="ruby-string">&#39;0.1&#39;</span>)
608
- <span class="ruby-identifier">project</span>.<span class="ruby-identifier">pull</span>(:<span class="ruby-identifier">edit</span>)
609
-
610
- <span class="ruby-identifier">project</span>.<span class="ruby-identifier">ignore</span>(<span class="ruby-string">&#39;my-tmp-file.txt&#39;</span>)
611
-
612
- <span class="ruby-identifier">project</span>.<span class="ruby-identifier">commit</span>(<span class="ruby-string">&#39;some-file.txt, { :message =&gt; &#39;</span><span class="ruby-constant">Changing</span> <span class="ruby-identifier">some</span> <span class="ruby-identifier">file</span> <span class="ruby-identifier">text</span>.<span class="ruby-string">&#39; })
613
-
614
- project.add_subproject(&#39;</span><span class="ruby-identifier">other</span><span class="ruby-operator">/</span><span class="ruby-identifier">nucleon</span><span class="ruby-string">&#39;, &#39;</span><span class="ruby-identifier">http</span><span class="ruby-operator">:</span><span class="ruby-regexp">//</span><span class="ruby-identifier">github</span>.<span class="ruby-identifier">com</span><span class="ruby-operator">/</span><span class="ruby-identifier">coralnexus</span><span class="ruby-operator">/</span><span class="ruby-identifier">nucleon</span>.<span class="ruby-identifier">git</span>, <span class="ruby-string">&#39;0.1&#39;</span>)
615
- <span class="ruby-identifier">project</span>.<span class="ruby-identifier">delete_subproject</span>(<span class="ruby-string">&#39;other/nucleon&#39;</span>)
616
- </pre>
617
-
618
- <p>There are more methods and options for the above methods, but the above
619
- should give you an idea of what you can expect. The interface API is
620
- definitely skewed towards the Git idioms, such as remotes, checkout,
621
- commit, but the implementation can vary so if the data store can map to
622
- most of the typical distributed version control ablities then it should be
623
- fairly easy to integrate.</p>
624
-
625
- <h3 id="label-Flexible+action+execution+model">Flexible action execution model</h3>
626
-
627
- <p>One of the goals of the project is to create a very flexible action
628
- execution system that can be used from the CLI, internally as method calls,
629
- and eventually as service API endpoints.</p>
630
-
631
- </div>
632
-
633
-
634
-
635
- <footer id="validator-badges">
636
- <p><a href="http://validator.w3.org/check/referer">[Validate]</a>
637
- <p>Generated by <a href="https://github.com/rdoc/rdoc">RDoc</a> 3.12.2.
638
- <p>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish Rdoc Generator</a> 3.
639
- </footer>
640
-