sproutit-sproutcore 1.0.0.20090407205609

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 (382) hide show
  1. data/Buildfile +115 -0
  2. data/History.txt +7 -0
  3. data/README.txt +102 -0
  4. data/Rakefile +54 -0
  5. data/Todo.txt +1 -0
  6. data/bin/sc-build +13 -0
  7. data/bin/sc-build-number +13 -0
  8. data/bin/sc-gen +13 -0
  9. data/bin/sc-init +13 -0
  10. data/bin/sc-manifest +13 -0
  11. data/bin/sc-server +13 -0
  12. data/bin/sproutcore +14 -0
  13. data/buildtasks/build.rake +73 -0
  14. data/buildtasks/entry.rake +59 -0
  15. data/buildtasks/manifest.rake +469 -0
  16. data/buildtasks/render.rake +21 -0
  17. data/buildtasks/target.rake +42 -0
  18. data/gen/Buildfile +16 -0
  19. data/gen/app/Buildfile +36 -0
  20. data/gen/app/README +1 -0
  21. data/gen/app/USAGE +13 -0
  22. data/gen/app/templates/apps/{target_name}/core.js +27 -0
  23. data/gen/app/templates/apps/{target_name}/english.lproj/loading.rhtml +9 -0
  24. data/gen/app/templates/apps/{target_name}/english.lproj/main_page.js +22 -0
  25. data/gen/app/templates/apps/{target_name}/english.lproj/strings.js +15 -0
  26. data/gen/app/templates/apps/{target_name}/main.js +30 -0
  27. data/gen/controller/Buildfile +18 -0
  28. data/gen/controller/README +1 -0
  29. data/gen/controller/USAGE +13 -0
  30. data/gen/controller/templates/controllers/{filename}.js +18 -0
  31. data/gen/controller/templates/tests/controllers/{filename}.js +15 -0
  32. data/gen/framework/Buildfile +36 -0
  33. data/gen/framework/README +1 -0
  34. data/gen/framework/USAGE +13 -0
  35. data/gen/framework/templates/frameworks/{target_name}/core.js +21 -0
  36. data/gen/framework/templates/frameworks/{target_name}/english.lproj/strings.js +15 -0
  37. data/gen/language/Buildfile +26 -0
  38. data/gen/language/README +1 -0
  39. data/gen/language/USAGE +13 -0
  40. data/gen/language/templates/{filename}/strings.js +14 -0
  41. data/gen/model/Buildfile +16 -0
  42. data/gen/model/README +1 -0
  43. data/gen/model/USAGE +15 -0
  44. data/gen/model/templates/fixtures/{filename}.js +35 -0
  45. data/gen/model/templates/models/{filename}.js +19 -0
  46. data/gen/model/templates/tests/models/{filename}.js +15 -0
  47. data/gen/project/Buildfile +45 -0
  48. data/gen/project/INIT +3 -0
  49. data/gen/project/README +1 -0
  50. data/gen/project/USAGE +2 -0
  51. data/gen/project/templates/{filename}/Buildfile +7 -0
  52. data/gen/project/templates/{filename}/README +7 -0
  53. data/gen/test/Buildfile +25 -0
  54. data/gen/test/README +1 -0
  55. data/gen/test/USAGE +12 -0
  56. data/gen/test/templates/tests/{filename}.js +15 -0
  57. data/gen/theme/Buildfile +36 -0
  58. data/gen/theme/README +1 -0
  59. data/gen/theme/USAGE +13 -0
  60. data/gen/theme/templates/themes/{target_name}/english.lproj/strings.js +15 -0
  61. data/gen/view/Buildfile +18 -0
  62. data/gen/view/README +1 -0
  63. data/gen/view/USAGE +13 -0
  64. data/gen/view/templates/tests/views/{filename}.js +15 -0
  65. data/gen/view/templates/views/{filename}.js +18 -0
  66. data/lib/sproutcore.rb +130 -0
  67. data/lib/sproutcore/builders/base.rb +79 -0
  68. data/lib/sproutcore/builders/combine.rb +37 -0
  69. data/lib/sproutcore/builders/html.rb +177 -0
  70. data/lib/sproutcore/builders/javascript.rb +55 -0
  71. data/lib/sproutcore/builders/minify.rb +67 -0
  72. data/lib/sproutcore/builders/sass.rb +55 -0
  73. data/lib/sproutcore/builders/strings.rb +44 -0
  74. data/lib/sproutcore/builders/stylesheet.rb +40 -0
  75. data/lib/sproutcore/builders/test.rb +58 -0
  76. data/lib/sproutcore/builders/test_index.rb +26 -0
  77. data/lib/sproutcore/buildfile.rb +483 -0
  78. data/lib/sproutcore/buildfile/build_task.rb +33 -0
  79. data/lib/sproutcore/buildfile/buildfile_dsl.rb +162 -0
  80. data/lib/sproutcore/buildfile/cloneable.rb +34 -0
  81. data/lib/sproutcore/buildfile/early_time.rb +29 -0
  82. data/lib/sproutcore/buildfile/invocation_chain.rb +64 -0
  83. data/lib/sproutcore/buildfile/namespace.rb +33 -0
  84. data/lib/sproutcore/buildfile/string_ext.rb +198 -0
  85. data/lib/sproutcore/buildfile/task.rb +304 -0
  86. data/lib/sproutcore/buildfile/task_arguments.rb +86 -0
  87. data/lib/sproutcore/buildfile/task_manager.rb +193 -0
  88. data/lib/sproutcore/deprecated/view_helper.rb +662 -0
  89. data/lib/sproutcore/helpers/capture_helper.rb +30 -0
  90. data/lib/sproutcore/helpers/cssmin.rb +202 -0
  91. data/lib/sproutcore/helpers/dom_id_helper.rb +21 -0
  92. data/lib/sproutcore/helpers/entry_sorter.rb +105 -0
  93. data/lib/sproutcore/helpers/packed_optimizer.rb +102 -0
  94. data/lib/sproutcore/helpers/static_helper.rb +268 -0
  95. data/lib/sproutcore/helpers/tag_helper.rb +117 -0
  96. data/lib/sproutcore/helpers/text_helper.rb +303 -0
  97. data/lib/sproutcore/models/generator.rb +493 -0
  98. data/lib/sproutcore/models/hash_struct.rb +109 -0
  99. data/lib/sproutcore/models/manifest.rb +342 -0
  100. data/lib/sproutcore/models/manifest_entry.rb +232 -0
  101. data/lib/sproutcore/models/project.rb +270 -0
  102. data/lib/sproutcore/models/target.rb +403 -0
  103. data/lib/sproutcore/rack/builder.rb +269 -0
  104. data/lib/sproutcore/rack/dev.rb +51 -0
  105. data/lib/sproutcore/rack/docs.rb +24 -0
  106. data/lib/sproutcore/rack/proxy.rb +92 -0
  107. data/lib/sproutcore/rack/service.rb +141 -0
  108. data/lib/sproutcore/rack/test_runner.rb +24 -0
  109. data/lib/sproutcore/render_engines/erubis.rb +55 -0
  110. data/lib/sproutcore/render_engines/haml.rb +39 -0
  111. data/lib/sproutcore/tools.rb +311 -0
  112. data/lib/sproutcore/tools/build.rb +80 -0
  113. data/lib/sproutcore/tools/build_number.rb +23 -0
  114. data/lib/sproutcore/tools/gen.rb +99 -0
  115. data/lib/sproutcore/tools/init.rb +40 -0
  116. data/lib/sproutcore/tools/manifest.rb +84 -0
  117. data/lib/sproutcore/tools/server.rb +45 -0
  118. data/spec/buildtasks/build/copy_spec.rb +60 -0
  119. data/spec/buildtasks/build/spec_helper.rb +36 -0
  120. data/spec/buildtasks/manifest/catalog_spec.rb +48 -0
  121. data/spec/buildtasks/manifest/hide_buildfiles_spec.rb +125 -0
  122. data/spec/buildtasks/manifest/localize_spec.rb +97 -0
  123. data/spec/buildtasks/manifest/prepare_build_tasks/combine_spec.rb +246 -0
  124. data/spec/buildtasks/manifest/prepare_build_tasks/css_spec.rb +87 -0
  125. data/spec/buildtasks/manifest/prepare_build_tasks/html_spec.rb +175 -0
  126. data/spec/buildtasks/manifest/prepare_build_tasks/javascript_spec.rb +65 -0
  127. data/spec/buildtasks/manifest/prepare_build_tasks/minify_spec.rb +70 -0
  128. data/spec/buildtasks/manifest/prepare_build_tasks/packed_spec.rb +152 -0
  129. data/spec/buildtasks/manifest/prepare_build_tasks/sass_spec.rb +98 -0
  130. data/spec/buildtasks/manifest/prepare_build_tasks/strings_spec.rb +64 -0
  131. data/spec/buildtasks/manifest/prepare_build_tasks/tests_spec.rb +163 -0
  132. data/spec/buildtasks/manifest/prepare_spec.rb +43 -0
  133. data/spec/buildtasks/manifest/spec_helper.rb +35 -0
  134. data/spec/buildtasks/target_spec.rb +214 -0
  135. data/spec/fixtures/builder_tests/Buildfile +15 -0
  136. data/spec/fixtures/builder_tests/apps/combine_test/a.js +1 -0
  137. data/spec/fixtures/builder_tests/apps/combine_test/b.js +1 -0
  138. data/spec/fixtures/builder_tests/apps/combine_test/c.js +1 -0
  139. data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/a.css +1 -0
  140. data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/b.css +1 -0
  141. data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/c.css +1 -0
  142. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/bar1_sample.rhtml +2 -0
  143. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/erb_sample.html.erb +1 -0
  144. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/icons/image.png +0 -0
  145. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/image.jpg +0 -0
  146. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/rhtml_sample.rhtml +1 -0
  147. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/strings.js +4 -0
  148. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/style.css +0 -0
  149. data/spec/fixtures/builder_tests/apps/html_test/french.lproj/french-icons/fr.png +0 -0
  150. data/spec/fixtures/builder_tests/apps/html_test/french.lproj/strings.js +4 -0
  151. data/spec/fixtures/builder_tests/apps/html_test/lib/layout_template.rhtml +1 -0
  152. data/spec/fixtures/builder_tests/apps/html_test/scripts.js +0 -0
  153. data/spec/fixtures/builder_tests/apps/javascript_test/sc_static.js +15 -0
  154. data/spec/fixtures/builder_tests/apps/javascript_test/sc_super.js +4 -0
  155. data/spec/fixtures/builder_tests/apps/javascript_test/strings.js +7 -0
  156. data/spec/fixtures/builder_tests/apps/sass_test/sample.sass +3 -0
  157. data/spec/fixtures/builder_tests/apps/strings_test/lproj/strings.js +8 -0
  158. data/spec/fixtures/builder_tests/apps/stylesheet_test/build_directives.css +9 -0
  159. data/spec/fixtures/builder_tests/apps/stylesheet_test/sc_static.css +12 -0
  160. data/spec/fixtures/builder_tests/apps/test_test/lib/alt_layout.rhtml +1 -0
  161. data/spec/fixtures/builder_tests/apps/test_test/lib/test_layout.rhtml +3 -0
  162. data/spec/fixtures/builder_tests/apps/test_test/tests/qunit_test.js +1 -0
  163. data/spec/fixtures/builder_tests/apps/test_test/tests/qunit_test2.js +1 -0
  164. data/spec/fixtures/builder_tests/apps/test_test/tests/rhtml_test.rhtml +4 -0
  165. data/spec/fixtures/builder_tests/frameworks/debug/core.js +0 -0
  166. data/spec/fixtures/builder_tests/frameworks/debug/english.lproj/dummy.css +0 -0
  167. data/spec/fixtures/builder_tests/frameworks/qunit/core.js +0 -0
  168. data/spec/fixtures/builder_tests/frameworks/qunit/english.lproj/dummy.css +0 -0
  169. data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/req_style_1.css +0 -0
  170. data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/strings.js +4 -0
  171. data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/test.rhtml +1 -0
  172. data/spec/fixtures/builder_tests/frameworks/req_target_1/req_js_1.js +0 -0
  173. data/spec/fixtures/builder_tests/frameworks/req_target_2/english.lproj/req_style_2.css +0 -0
  174. data/spec/fixtures/builder_tests/frameworks/req_target_2/english.lproj/test.rhtml +1 -0
  175. data/spec/fixtures/builder_tests/frameworks/req_target_2/javascript.js +1 -0
  176. data/spec/fixtures/builder_tests/frameworks/req_target_2/lib/alt_layout.rhtml +0 -0
  177. data/spec/fixtures/builder_tests/frameworks/req_target_2/req_js_2.js +0 -0
  178. data/spec/fixtures/builder_tests/themes/sample_theme/Buildfile +1 -0
  179. data/spec/fixtures/buildfiles/basic/Buildfile +16 -0
  180. data/spec/fixtures/buildfiles/basic/task_module.rake +6 -0
  181. data/spec/fixtures/buildfiles/installed/Buildfile +7 -0
  182. data/spec/fixtures/buildfiles/installed/Buildfile2 +5 -0
  183. data/spec/fixtures/buildfiles/project_test/Buildfile +4 -0
  184. data/spec/fixtures/buildfiles/project_test/not_project/Buildfile +2 -0
  185. data/spec/fixtures/buildfiles/project_test/not_project/child/PLACEHOLDER +0 -0
  186. data/spec/fixtures/entry_for_project/Buildfile +1 -0
  187. data/spec/fixtures/entry_for_project/apps/test_app/entry.txt +0 -0
  188. data/spec/fixtures/entry_for_project/apps/test_app/frameworks/nested/PLACEHOLDER +0 -0
  189. data/spec/fixtures/entry_for_project/frameworks/shared/PLACEHOLDER +0 -0
  190. data/spec/fixtures/find_targets/custom/Buildfile +8 -0
  191. data/spec/fixtures/find_targets/custom/bars/bar1/bars/bar1/PLACEHOLDER +0 -0
  192. data/spec/fixtures/find_targets/custom/bars/bar1/bars/bar2/PLACEHOLDER +0 -0
  193. data/spec/fixtures/find_targets/custom/bars/bar1/foos/foo1/PLACEHOLDER +0 -0
  194. data/spec/fixtures/find_targets/custom/bars/bar1/foos/foo2/PLACEHOLDER +0 -0
  195. data/spec/fixtures/find_targets/custom/foos/custom_foos/Buildfile +5 -0
  196. data/spec/fixtures/find_targets/custom/foos/custom_foos/custom_foodir/foo1/PLACEHOLDER +0 -0
  197. data/spec/fixtures/find_targets/custom/foos/custom_foos/custom_foodir/foo2/PLACEHOLDER +0 -0
  198. data/spec/fixtures/find_targets/custom/foos/custom_foos/foos/not_foo1/PLACEHOLDER +0 -0
  199. data/spec/fixtures/find_targets/custom/foos/foo1/bars/bar1/PLACEHOLDER +0 -0
  200. data/spec/fixtures/find_targets/custom/foos/foo1/bars/bar2/PLACEHOLDER +0 -0
  201. data/spec/fixtures/find_targets/nested/Buildfile +8 -0
  202. data/spec/fixtures/find_targets/nested/apps/app1/Buildfile +1 -0
  203. data/spec/fixtures/find_targets/nested/apps/app1/apps/nested_app/PLACEHOLDER +0 -0
  204. data/spec/fixtures/find_targets/standard/Apps/app1/frameworks/framework1/PLACEHOLDER +0 -0
  205. data/spec/fixtures/find_targets/standard/Apps/app1/frameworks/framework2/PLACEHOLDER +0 -0
  206. data/spec/fixtures/find_targets/standard/clients/client1/PLACEHOLDER +0 -0
  207. data/spec/fixtures/find_targets/standard/frameworks/framework1/frameworks/framework1/PLACEHOLDER +0 -0
  208. data/spec/fixtures/find_targets/standard/frameworks/framework2/PLACEHOLDER +0 -0
  209. data/spec/fixtures/find_targets/standard/themes/theme1/PLACEHOLDER +0 -0
  210. data/spec/fixtures/find_targets/standard/themes/theme2/PLACEHOLDER +0 -0
  211. data/spec/fixtures/languages/apps/caps_long_names/English.lproj/PLACEHOLDER +0 -0
  212. data/spec/fixtures/languages/apps/caps_long_names/FreNCH.lproj/PLACEHOLDER +0 -0
  213. data/spec/fixtures/languages/apps/caps_long_names/UnknOWN.lproj/PLACEHOLDER +0 -0
  214. data/spec/fixtures/languages/apps/long_names/english.lproj/PLACEHOLDER +0 -0
  215. data/spec/fixtures/languages/apps/long_names/french.lproj/PLACEHOLDER +0 -0
  216. data/spec/fixtures/languages/apps/long_names/german.lproj/PLACEHOLDER +0 -0
  217. data/spec/fixtures/languages/apps/long_names/italian.lproj/PLACEHOLDER +0 -0
  218. data/spec/fixtures/languages/apps/long_names/japanese.lproj/PLACEHOLDER +0 -0
  219. data/spec/fixtures/languages/apps/long_names/spanish.lproj/PLACEHOLDER +0 -0
  220. data/spec/fixtures/languages/apps/long_names/unknown.lproj/PLACEHOLDER +0 -0
  221. data/spec/fixtures/languages/apps/no_names/PLACEHOLDER +0 -0
  222. data/spec/fixtures/languages/apps/short_names/de.lproj/PLACEHOLDER +0 -0
  223. data/spec/fixtures/languages/apps/short_names/en-CA.lproj/PLACEHOLDER +0 -0
  224. data/spec/fixtures/languages/apps/short_names/en-GB.lproj/PLACEHOLDER +0 -0
  225. data/spec/fixtures/languages/apps/short_names/en-US.lproj/PLACEHOLDER +0 -0
  226. data/spec/fixtures/languages/apps/short_names/en.lproj/PLACEHOLDER +0 -0
  227. data/spec/fixtures/languages/apps/short_names/es.lproj/PLACEHOLDER +0 -0
  228. data/spec/fixtures/languages/apps/short_names/foo.lproj/PLACEHOLDER +0 -0
  229. data/spec/fixtures/languages/apps/short_names/fr.lproj/PLACEHOLDER +0 -0
  230. data/spec/fixtures/languages/apps/short_names/it.lproj/PLACEHOLDER +0 -0
  231. data/spec/fixtures/languages/apps/short_names/ja.lproj/PLACEHOLDER +0 -0
  232. data/spec/fixtures/ordered_entries/apps/no_requires/1.js +1 -0
  233. data/spec/fixtures/ordered_entries/apps/no_requires/B.js +1 -0
  234. data/spec/fixtures/ordered_entries/apps/no_requires/a.js +1 -0
  235. data/spec/fixtures/ordered_entries/apps/no_requires/a/a.js +1 -0
  236. data/spec/fixtures/ordered_entries/apps/no_requires/a/b.js +1 -0
  237. data/spec/fixtures/ordered_entries/apps/no_requires/b/a.js +1 -0
  238. data/spec/fixtures/ordered_entries/apps/no_requires/c.js +1 -0
  239. data/spec/fixtures/ordered_entries/apps/no_requires/core.js +1 -0
  240. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/B.css +0 -0
  241. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a.css +0 -0
  242. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a/a.css +0 -0
  243. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a/b.css +0 -0
  244. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/b/a.css +0 -0
  245. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/c.css +0 -0
  246. data/spec/fixtures/ordered_entries/apps/no_requires/lproj/strings.js +1 -0
  247. data/spec/fixtures/ordered_entries/apps/no_requires/utils.js +1 -0
  248. data/spec/fixtures/ordered_entries/apps/with_requires/a.js +2 -0
  249. data/spec/fixtures/ordered_entries/apps/with_requires/b.js +3 -0
  250. data/spec/fixtures/ordered_entries/apps/with_requires/c.js +2 -0
  251. data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/a.css +2 -0
  252. data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/b.css +2 -0
  253. data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/c.css +2 -0
  254. data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/d.js +1 -0
  255. data/spec/fixtures/real_world/Buildfile +12 -0
  256. data/spec/fixtures/real_world/apps/account/README +1 -0
  257. data/spec/fixtures/real_world/apps/calendar/README +1 -0
  258. data/spec/fixtures/real_world/apps/contacts/README_BEFORE_EDITING +1 -0
  259. data/spec/fixtures/real_world/apps/files/README +1 -0
  260. data/spec/fixtures/real_world/apps/mail/README +1 -0
  261. data/spec/fixtures/real_world/apps/mobile_photos/README +1 -0
  262. data/spec/fixtures/real_world/apps/photos/README +1 -0
  263. data/spec/fixtures/real_world/apps/uploader/README +1 -0
  264. data/spec/fixtures/real_world/frameworks/core_files/PLACEHOLDER +0 -0
  265. data/spec/fixtures/real_world/frameworks/core_photos/PLACEHOLDER +0 -0
  266. data/spec/fixtures/real_world/frameworks/shared/PLACEHOLDER +0 -0
  267. data/spec/fixtures/real_world/frameworks/sproutcore/Buildfile +26 -0
  268. data/spec/fixtures/real_world/frameworks/sproutcore/README +1 -0
  269. data/spec/fixtures/real_world/frameworks/sproutcore/apps/docs/PLACEHOLDER +0 -0
  270. data/spec/fixtures/real_world/frameworks/sproutcore/apps/test_runner/PLACEHOLDER +0 -0
  271. data/spec/fixtures/real_world/frameworks/sproutcore/core.js +0 -0
  272. data/spec/fixtures/real_world/frameworks/sproutcore/debug/debug-resource.html +0 -0
  273. data/spec/fixtures/real_world/frameworks/sproutcore/debug/sample_debug.js +0 -0
  274. data/spec/fixtures/real_world/frameworks/sproutcore/demo2.js +0 -0
  275. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/debug/sample_debug-loc.js +0 -0
  276. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo.css +4 -0
  277. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo.html +1 -0
  278. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo2.sass +0 -0
  279. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.haml +0 -0
  280. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.html.erb +1 -0
  281. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.rhtml +0 -0
  282. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/fixtures/sample_fixtures-loc.js +0 -0
  283. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/has_require.css +4 -0
  284. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/no_require.css +1 -0
  285. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/no_sc_resource.rhtml +1 -0
  286. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/protocols/sample-loc.js +0 -0
  287. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/sc_resource.css +6 -0
  288. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/sc_resource.rhtml +3 -0
  289. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/strings.js +1 -0
  290. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/tests/sample-loc.js +0 -0
  291. data/spec/fixtures/real_world/frameworks/sproutcore/fixtures/sample-json-fixture.json +1 -0
  292. data/spec/fixtures/real_world/frameworks/sproutcore/fixtures/sample_fixtures.js +0 -0
  293. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/application/PLACEHOLDER +0 -0
  294. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/costello/core.js +0 -0
  295. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/data_store/PLACEHOLDER +0 -0
  296. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/debug/PLACEHOLDER +0 -0
  297. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/desktop/PLACEHOLDER +0 -0
  298. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/empty_theme/PLACEHOLDER +0 -0
  299. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/foundation/PLACEHOLDER +0 -0
  300. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/mobile/PLACEHOLDER +0 -0
  301. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/qunit/PLACEHOLDER +0 -0
  302. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/uploader/PLACEHOLDER +0 -0
  303. data/spec/fixtures/real_world/frameworks/sproutcore/french.lproj/french-resource.js +0 -0
  304. data/spec/fixtures/real_world/frameworks/sproutcore/french.lproj/strings.js +1 -0
  305. data/spec/fixtures/real_world/frameworks/sproutcore/german.lproj/german-resource.js +0 -0
  306. data/spec/fixtures/real_world/frameworks/sproutcore/german.lproj/strings.js +0 -0
  307. data/spec/fixtures/real_world/frameworks/sproutcore/has_require.js +4 -0
  308. data/spec/fixtures/real_world/frameworks/sproutcore/lib/index.html +1 -0
  309. data/spec/fixtures/real_world/frameworks/sproutcore/no_require.js +1 -0
  310. data/spec/fixtures/real_world/frameworks/sproutcore/protocols/sample.js +0 -0
  311. data/spec/fixtures/real_world/frameworks/sproutcore/sc_resource.js +6 -0
  312. data/spec/fixtures/real_world/frameworks/sproutcore/tests/nested/sample1.js +0 -0
  313. data/spec/fixtures/real_world/frameworks/sproutcore/tests/nested/sample2.js +0 -0
  314. data/spec/fixtures/real_world/frameworks/sproutcore/tests/sample.js +0 -0
  315. data/spec/fixtures/real_world/frameworks/sproutcore/tests/sample.rhtml +1 -0
  316. data/spec/fixtures/real_world/frameworks/sproutcore/themes/standard_theme/README +0 -0
  317. data/spec/fixtures/real_world/frameworks/sproutcore/views/view.js +1 -0
  318. data/spec/fixtures/real_world/generators/sample_custom/Buildfile +0 -0
  319. data/spec/fixtures/real_world/generators/sample_custom/templates/{filename}.js +1 -0
  320. data/spec/fixtures/recursive_project/Buildfile +8 -0
  321. data/spec/fixtures/recursive_project/frameworks/sproutcore/frameworks/costello/PLACEHOLDER +0 -0
  322. data/spec/lib/builders/combine_spec.rb +67 -0
  323. data/spec/lib/builders/html_spec.rb +577 -0
  324. data/spec/lib/builders/javascript_spec.rb +81 -0
  325. data/spec/lib/builders/sass_spec.rb +43 -0
  326. data/spec/lib/builders/spec_helper.rb +30 -0
  327. data/spec/lib/builders/strings_spec.rb +52 -0
  328. data/spec/lib/builders/stylesheet_spec.rb +63 -0
  329. data/spec/lib/builders/test_index_spec.rb +44 -0
  330. data/spec/lib/builders/test_spec.rb +135 -0
  331. data/spec/lib/buildfile/config_for_spec.rb +81 -0
  332. data/spec/lib/buildfile/define_spec.rb +59 -0
  333. data/spec/lib/buildfile/dup_spec.rb +65 -0
  334. data/spec/lib/buildfile/invoke_spec.rb +130 -0
  335. data/spec/lib/buildfile/load_spec.rb +49 -0
  336. data/spec/lib/buildfile/task/dup_spec.rb +55 -0
  337. data/spec/lib/buildfile/task_defined_spec.rb +17 -0
  338. data/spec/lib/buildfile_commands/build_task_spec.rb +19 -0
  339. data/spec/lib/buildfile_commands/config_spec.rb +97 -0
  340. data/spec/lib/buildfile_commands/import_spec.rb +17 -0
  341. data/spec/lib/buildfile_commands/namespace_spec.rb +18 -0
  342. data/spec/lib/buildfile_commands/proxies_spec.rb +38 -0
  343. data/spec/lib/buildfile_commands/replace_task_spec.rb +29 -0
  344. data/spec/lib/buildfile_commands/task_spec.rb +36 -0
  345. data/spec/lib/helpers/packing_optimizer/optimize_spec.rb +26 -0
  346. data/spec/lib/models/hash_struct/deep_clone_spec.rb +27 -0
  347. data/spec/lib/models/hash_struct/has_options_spec.rb +32 -0
  348. data/spec/lib/models/hash_struct/hash_spec.rb +64 -0
  349. data/spec/lib/models/hash_struct/merge_spec.rb +26 -0
  350. data/spec/lib/models/hash_struct/method_missing.rb +41 -0
  351. data/spec/lib/models/manifest/add_entry_spec.rb +36 -0
  352. data/spec/lib/models/manifest/add_transform_spec.rb +90 -0
  353. data/spec/lib/models/manifest/build_spec.rb +78 -0
  354. data/spec/lib/models/manifest/entry_for_spec.rb +94 -0
  355. data/spec/lib/models/manifest/find_entry.rb +84 -0
  356. data/spec/lib/models/manifest/prepare_spec.rb +62 -0
  357. data/spec/lib/models/manifest_entry/cacheable_url_spec.rb +31 -0
  358. data/spec/lib/models/manifest_entry/prepare_spec.rb +54 -0
  359. data/spec/lib/models/project/add_target_spec.rb +44 -0
  360. data/spec/lib/models/project/buildfile_spec.rb +35 -0
  361. data/spec/lib/models/project/find_targets_for_spec.rb +77 -0
  362. data/spec/lib/models/project/load_nearest_project_spec.rb +23 -0
  363. data/spec/lib/models/project/target_for_spec.rb +33 -0
  364. data/spec/lib/models/project/targets_spec.rb +62 -0
  365. data/spec/lib/models/target/compute_build_number_spec.rb +125 -0
  366. data/spec/lib/models/target/config_spec.rb +30 -0
  367. data/spec/lib/models/target/expand_required_targets_spec.rb +48 -0
  368. data/spec/lib/models/target/installed_languages_spec.rb +47 -0
  369. data/spec/lib/models/target/lproj_for_spec.rb +38 -0
  370. data/spec/lib/models/target/manifest_for_spec.rb +42 -0
  371. data/spec/lib/models/target/parent_target_spec.rb +21 -0
  372. data/spec/lib/models/target/prepare_spec.rb +53 -0
  373. data/spec/lib/models/target/required_targets_spec.rb +119 -0
  374. data/spec/lib/models/target/target_for_spec.rb +56 -0
  375. data/spec/lib/tools/build_number_spec.rb +28 -0
  376. data/spec/lib/tools/gen_spec.rb +207 -0
  377. data/spec/lib/tools/tools_spec.rb +78 -0
  378. data/spec/spec_helper.rb +138 -0
  379. data/sproutcore.gemspec +47 -0
  380. data/vendor/github_gem_lint.rb +22 -0
  381. data/vendor/yui-compressor/yuicompressor-2.4.2.jar +0 -0
  382. metadata +1084 -0
@@ -0,0 +1,28 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
2
+
3
+ describe SC::Tools, 'build-number' do
4
+
5
+ include SC::SpecHelpers
6
+
7
+ before do
8
+ @tool = SC::Tools.new('build_number')
9
+ end
10
+
11
+ it "should raise error if no target is passed" do
12
+ lambda { @tool.build_number }.should raise_error
13
+ end
14
+
15
+ it "should raise error if more than one target is passed" do
16
+ lambda { @tool.build_number('target1','target2') }.should raise_error
17
+ end
18
+
19
+ it "should write build number when passed target" do
20
+ @tool.project = fixture_project(:real_world) # req...
21
+ bn = capture('stdout') { @tool.build_number('sproutcore') }
22
+
23
+ expected_target = fixture_project(:real_world).target_for(:sproutcore)
24
+ expected = expected_target.prepare!.compute_build_number
25
+ bn.should eql(expected)
26
+ end
27
+
28
+ end
@@ -0,0 +1,207 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
2
+ require 'tempfile'
3
+
4
+ # Add dummy task we can use to test general option processing
5
+ class SC::Tools
6
+ def dummy; end
7
+ end
8
+
9
+ describe SC::Tools do
10
+
11
+ include SC::SpecHelpers
12
+
13
+ # executes once
14
+ before(:all) do
15
+ @tmpfile = Tempfile.new('foo')
16
+ @tmpdir = File.join(File.dirname(@tmpfile.path), 'foo')
17
+ # only really need the dir
18
+ @tmpfile.close
19
+ end
20
+
21
+ # executes before each 'it'
22
+ before(:each) do
23
+ FileUtils.mkdir_p @tmpdir
24
+ @options = { :target => @tmpdir, :'very-verbose' => true }
25
+ @tool = SC::Tools.new({})
26
+ @tool.options = @options
27
+ end
28
+
29
+ describe "gen command line options parser" do
30
+
31
+ # it "project generator camel case" do
32
+ # @tool.gen('project', 'MyTestProject')
33
+ # # instance variables
34
+ # @tool.namespace.should == ''
35
+ # @tool.class_name.should == 'MyTestProject'
36
+ # @tool.namespace_with_class_name.should == 'MyTestProject'
37
+ # @tool.method_name.should == nil
38
+ # @tool.class_nesting_depth.should == 0
39
+ # @tool.file_path.should == 'my_test_project'
40
+ #
41
+ # @tool.files_generated.should == 1
42
+ # end
43
+ #
44
+ # it "project generator lower case" do
45
+ # @tool.gen('project', 'my_test_project')
46
+ # # instance variables
47
+ # @tool.namespace.should == ''
48
+ # @tool.class_name.should == 'MyTestProject'
49
+ # @tool.namespace_with_class_name.should == 'MyTestProject'
50
+ # @tool.method_name.should == nil
51
+ # @tool.class_nesting_depth.should == 0
52
+ # @tool.file_path.should == 'my_test_project'
53
+ #
54
+ # @tool.files_generated.should == 1
55
+ # end
56
+ #
57
+ # it "app generator camel case" do
58
+ # @tool.gen('app', 'MyTestApp')
59
+ # # instance variables
60
+ # @tool.namespace.should == ''
61
+ # @tool.class_name.should == 'MyTestApp'
62
+ # @tool.namespace_with_class_name.should == 'MyTestApp'
63
+ # @tool.method_name.should == nil
64
+ # @tool.class_nesting_depth.should == 0
65
+ # @tool.file_path.should == 'my_test_app'
66
+ #
67
+ # @tool.files_generated.should == 5
68
+ # end
69
+ #
70
+ # it "app generator lower case" do
71
+ # @tool.gen('app', 'my_test_app')
72
+ # # instance variables
73
+ # @tool.namespace.should == ''
74
+ # @tool.class_name.should == 'MyTestApp'
75
+ # @tool.namespace_with_class_name.should == 'MyTestApp'
76
+ # @tool.method_name.should == nil
77
+ # @tool.class_nesting_depth.should == 0
78
+ # @tool.file_path.should == 'my_test_app'
79
+ #
80
+ # @tool.files_generated.should == 5
81
+ # end
82
+ #
83
+ # it "model generator camel case" do
84
+ # @tool.gen('model', 'MyTestApp.App')
85
+ # # instance variables
86
+ # @tool.namespace.should == 'MyTestApp'
87
+ # @tool.class_name.should == 'App'
88
+ # @tool.namespace_with_class_name.should == 'MyTestApp.App'
89
+ # @tool.method_name.should == nil
90
+ # @tool.class_nesting_depth.should == 1
91
+ # @tool.file_path.should == 'my_test_app'
92
+ #
93
+ # @tool.files_generated.should == 3
94
+ # end
95
+ #
96
+ # it "model generator lower case" do
97
+ # @tool.gen('model', 'my_test_app/app')
98
+ # # instance variables
99
+ # @tool.namespace.should == 'MyTestApp'
100
+ # @tool.class_name.should == 'App'
101
+ # @tool.namespace_with_class_name.should == 'MyTestApp.App'
102
+ # @tool.method_name.should == nil
103
+ # @tool.class_nesting_depth.should == 1
104
+ # @tool.file_path.should == 'my_test_app'
105
+ #
106
+ # @tool.files_generated.should == 3
107
+ # end
108
+ #
109
+ # it "view generator camel case" do
110
+ # @tool.gen('view', 'MyTestApp.MyAppView')
111
+ # # instance variables
112
+ # @tool.namespace.should == 'MyTestApp'
113
+ # @tool.class_name.should == 'MyApp'
114
+ # @tool.namespace_with_class_name.should == 'MyTestApp.MyAppView'
115
+ # @tool.method_name.should == nil
116
+ # @tool.class_nesting_depth.should == 1
117
+ # @tool.file_path.should == 'my_test_app'
118
+ #
119
+ # @tool.files_generated.should == 2
120
+ # end
121
+ #
122
+ # it "view generator lower case" do
123
+ # @tool.gen('view', 'my_test_app/my_app_view')
124
+ # # instance variables
125
+ # @tool.namespace.should == 'MyTestApp'
126
+ # @tool.class_name.should == 'MyApp'
127
+ # @tool.namespace_with_class_name.should == 'MyTestApp.MyAppView'
128
+ # @tool.method_name.should == nil
129
+ # @tool.class_nesting_depth.should == 1
130
+ # @tool.file_path.should == 'my_test_app'
131
+ #
132
+ # @tool.files_generated.should == 2
133
+ # end
134
+ #
135
+ # it "controller generator camel case" do
136
+ # @tool.gen('controller', 'MyTestApp.MyAppController')
137
+ # # instance variables
138
+ # @tool.namespace.should == 'MyTestApp'
139
+ # @tool.class_name.should == 'MyApp'
140
+ # @tool.namespace_with_class_name.should == 'MyTestApp.MyAppController'
141
+ # @tool.method_name.should == nil
142
+ # @tool.class_nesting_depth.should == 1
143
+ # @tool.file_path.should == 'my_test_app'
144
+ #
145
+ # @tool.files_generated.should == 2
146
+ # end
147
+ #
148
+ # it "controller generator lower case" do
149
+ # @tool.gen('controller', 'my_test_app/my_app_controller')
150
+ # # instance variables
151
+ # @tool.namespace.should == 'MyTestApp'
152
+ # @tool.class_name.should == 'MyApp'
153
+ # @tool.namespace_with_class_name.should == 'MyTestApp.MyAppController'
154
+ # @tool.method_name.should == nil
155
+ # @tool.class_nesting_depth.should == 1
156
+ # @tool.file_path.should == 'my_test_app'
157
+ #
158
+ # @tool.files_generated.should == 2
159
+ # end
160
+ #
161
+ # it "test generator camel case" do
162
+ # @tool.gen('test', 'MyTestApp.MyTest')
163
+ # # instance variables
164
+ # @tool.namespace.should == 'MyTestApp'
165
+ # @tool.class_name.should == 'MyTest'
166
+ # @tool.namespace_with_class_name.should == 'MyTestApp.MyTest'
167
+ # @tool.method_name.should == nil
168
+ # @tool.class_nesting_depth.should == 1
169
+ # @tool.file_path.should == 'my_test_app'
170
+ #
171
+ # @tool.files_generated.should == 1
172
+ # end
173
+ #
174
+ # it "test generator camel case with method" do
175
+ # @tool.gen('test', 'MyTestApp.MyTest.MyMethod')
176
+ # # instance variables
177
+ # @tool.namespace.should == 'MyTestApp.MyTest'
178
+ # @tool.class_name.should == 'MyTest'
179
+ # @tool.namespace_with_class_name.should == 'MyTestApp.MyTest.MyTest'
180
+ # @tool.method_name.should == 'myMethod'
181
+ # @tool.class_nesting_depth.should == 2
182
+ # @tool.file_path.should == 'my_test_app'
183
+ #
184
+ # @tool.files_generated.should == 1
185
+ # end
186
+ #
187
+ # it "language generator camel case" do
188
+ # @tool.gen('language', 'English')
189
+ # # instance variables
190
+ # @tool.namespace.should == ''
191
+ # @tool.class_name.should == 'English'
192
+ # @tool.namespace_with_class_name.should == 'English'
193
+ # @tool.method_name.should == nil
194
+ # @tool.class_nesting_depth.should == 0
195
+ # @tool.file_path.should == 'english.lproj'
196
+ #
197
+ # @tool.files_generated.should == 1
198
+ # end
199
+
200
+ end
201
+
202
+ # executes after each example is run
203
+ after(:each) do
204
+ FileUtils.remove_dir @tmpdir
205
+ end
206
+
207
+ end
@@ -0,0 +1,78 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
2
+ require 'tempfile'
3
+
4
+ # Add dummy task we can use to test general option processing
5
+ class SC::Tools
6
+ def dummy; end
7
+ end
8
+
9
+ describe SC::Tools do
10
+
11
+ include SC::SpecHelpers
12
+
13
+ describe "logger options" do
14
+
15
+ it "should default to warn log level" do
16
+ SC::Tools.start %w(dummy)
17
+ SC.env.log_level.should == :warn
18
+ end
19
+
20
+ it "should set log level to :info on --verbose" do
21
+ SC::Tools.start %w(dummy --verbose)
22
+ SC.env.log_level.should == :info
23
+ end
24
+
25
+ it "should set log level to :info on -v" do
26
+ SC::Tools.start %w(dummy -v)
27
+ SC.env.log_level.should == :info
28
+ end
29
+
30
+ it "should set log level to :debug on --very-verbose" do
31
+ SC::Tools.start %w(dummy --very-verbose)
32
+ SC.env.log_level.should == :debug
33
+ end
34
+
35
+ it "should set log level to :debug on -V" do
36
+ SC::Tools.start %w(dummy -V)
37
+ SC.env.log_level.should == :debug
38
+ end
39
+
40
+ it "takes -V in preference to -v" do
41
+ SC::Tools.start %w(dummy -vV)
42
+ SC.env.log_level.should == :debug
43
+ end
44
+
45
+ it "takes --logfile option to specify output" do
46
+ tmpfile = Tempfile.new('foo')
47
+ SC::Tools.start %(dummy --logfile=#{tmpfile.path}).split(' ')
48
+ SC.env.logfile.should eql(tmpfile.path)
49
+ tmpfile.close
50
+ end
51
+
52
+ end
53
+
54
+ describe "build mode options" do
55
+
56
+ it "should default to :production build mode" do
57
+ SC::Tools.start %w(dummy)
58
+ SC.build_mode.should eql(:production)
59
+ end
60
+
61
+ it "should accept --mode=foo option" do
62
+ SC::Tools.start %w(dummy --mode=foo)
63
+ SC.build_mode.should eql(:foo)
64
+ end
65
+
66
+ it "should accept deprecated --environment=foo option" do
67
+ SC::Tools.start %w(dummy --environment=foo)
68
+ SC.build_mode.should eql(:foo)
69
+ end
70
+
71
+ it "should always downcase mode name" do
72
+ SC::Tools.start %w(dummy --mode=FOO)
73
+ SC.build_mode.should eql(:foo)
74
+ end
75
+
76
+ end
77
+
78
+ end
@@ -0,0 +1,138 @@
1
+ require 'fileutils'
2
+ require 'tempfile'
3
+
4
+ require File.expand_path(
5
+ File.join(File.dirname(__FILE__), %w[.. lib sproutcore]))
6
+
7
+ Spec::Runner.configure do |config|
8
+ # == Mock Framework
9
+ #
10
+ # RSpec uses it's own mocking framework by default. If you prefer to
11
+ # use mocha, flexmock or RR, uncomment the appropriate line:
12
+ #
13
+ # config.mock_with :mocha
14
+ # config.mock_with :flexmock
15
+ # config.mock_with :rr
16
+ end
17
+
18
+ module SC
19
+
20
+ # A Temporary project will clone the project_root before instantiating.
21
+ # You can call cleanup when you are finished to remove the cloned project.
22
+ # This way you can make changes to the project - perform builds, etc,
23
+ # and easily reset for another test.
24
+ class TemporaryTestProject < Project
25
+
26
+ attr_reader :real_project_root
27
+
28
+ def initialize(proot, opts ={})
29
+
30
+ @tempfile = Tempfile.new(File.basename(proot)) # keep placeholder
31
+ @real_project_root = proot
32
+ proot = "#{@tempfile.path}-project"
33
+ FileUtils.cp_r(@real_project_root, proot) # clone real_world
34
+ super(proot, opts)
35
+ end
36
+
37
+ def cleanup
38
+ # delete the project root. Double check this is stored in a tmp loc
39
+ # just to avoid problems.
40
+ if project_root =~ /^#{Regexp.escape Dir.tmpdir}/
41
+ FileUtils.rm_r(project_root)
42
+ else
43
+ puts "WARNING: Not deleting project_root: #{project_root}"
44
+ end
45
+ end
46
+
47
+ end
48
+
49
+ module SpecHelpers
50
+
51
+ def fixture_path(*path_items)
52
+ (path_items = path_items.flatten).unshift 'fixtures'
53
+ path_items.map! { |pi| pi.to_s }
54
+ File.expand_path File.join(File.dirname(__FILE__), path_items)
55
+ end
56
+
57
+ def empty_project
58
+ SC::Project.new fixture_path('buildfiles', 'empty_project')
59
+ end
60
+
61
+ # The builtin project (i.e. default Buildfile)
62
+ def builtin_project
63
+ SC::Project.new fixture_path('..','..')
64
+ end
65
+
66
+ # Loads a project from fixtures, including the builtin project as
67
+ # parent
68
+ def fixture_project(*paths)
69
+ SC::Project.new fixture_path(*paths), :parent => builtin_project
70
+ end
71
+
72
+ #####################################################
73
+ # BUILD TESTING
74
+ #
75
+
76
+ def temp_project(*paths)
77
+ SC::TemporaryTestProject.new fixture_path(*paths), :parent => builtin_project
78
+ end
79
+
80
+ def files_eql(path_a, path_b)
81
+ return false if File.exist?(path_a) != File.exist?(path_b)
82
+ if File.exist?(path_a)
83
+ file_a = File.read(path_a)
84
+ file_b = File.read(path_b)
85
+ return file_a == file_b
86
+ end
87
+ return true # neither paths exist
88
+ end
89
+
90
+ # Writes a dummy file at the specified path.
91
+ def write_dummy(at_path, string = "DUMMY")
92
+ FileUtils.mkdir_p(File.dirname(at_path))
93
+ f = File.open(at_path, 'w')
94
+ f.write(string)
95
+ f.close
96
+ return string
97
+ end
98
+
99
+ # Tests to see if the file at_path matches the dummy file or not.
100
+ def is_dummy(at_path, string = "DUMMY")
101
+ return false if !File.exist?(at_path)
102
+ File.read(at_path) == string
103
+ end
104
+
105
+ # Make the a newer than b. touch then sleep until it works...
106
+ def make_newer(path_a, path_b)
107
+ FileUtils.touch(path_a)
108
+ while File.mtime(path_a) <= File.mtime(path_b)
109
+ sleep(0.1)
110
+ FileUtils.touch(path_a)
111
+ end
112
+ end
113
+
114
+ #####################################################
115
+ # TOOL TESTING
116
+ #
117
+
118
+ # Captures a stdout/stdin/stderr stream for evaluation
119
+ def capture(stream)
120
+ SC.instance_variable_set('@logger', nil) # reset
121
+ begin
122
+ stream = stream.to_s
123
+ eval "$#{stream} = StringIO.new"
124
+ yield
125
+ result = eval("$#{stream}").string
126
+ ensure
127
+ eval("$#{stream} = #{stream.upcase}")
128
+ end
129
+ SC.instance_variable_set('@logger', nil) # reset again..
130
+ result
131
+ end
132
+
133
+ alias silence capture
134
+
135
+ end
136
+ end
137
+
138
+ # EOF