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,59 @@
1
+ # ===========================================================================
2
+ # SC::ManifestEntry Buildtasks
3
+ # copyright 2008, Sprout Systems, Inc. and Apple, Inc. all rights reserved
4
+ # ===========================================================================
5
+
6
+ # Tasks invoked while building ManifestEntry objects. You can override these
7
+ # tasks in your buildfiles.
8
+ namespace :entry do
9
+
10
+ # Invoked whenever a new entry is added. Gives you a chance to fill in any
11
+ # standard properties. The default implementation ensures that the entry
12
+ # has at least a source_path, build_path, staging_path, url and build_task
13
+ #
14
+ # With this task in place, you can build an entry by simply providing a
15
+ # filename and, optionally a source_path or source_entries.
16
+ task_options :log => :none # no logging -- too much detail
17
+ task :prepare do
18
+ filename = ENTRY.filename
19
+ raise "All entries must have a filename!" if filename.nil?
20
+
21
+ filename_parts = filename.split('/')
22
+
23
+ # If this is a composite entry, then the source_paths array should
24
+ # contain the staging_path from the source_entries. The source_path
25
+ # is simply the first source_paths.
26
+ if ENTRY.composite?
27
+ ENTRY.source_entries ||= [ENTRY.source_entry].compact
28
+ ENTRY.source_paths ||= ENTRY.source_entries.map { |e| e.staging_path }
29
+ ENTRY.source_path ||= ENTRY.source_paths.first
30
+ ENTRY.source_entry ||= ENTRY.source_entries.first
31
+
32
+ # Otherwise, the source_path is where we will pull from and source_paths
33
+ # is simply the source_path in an array.
34
+ else
35
+ ENTRY.source_path ||= File.join(MANIFEST.source_root, filename_parts)
36
+ ENTRY.source_paths ||= [ENTRY.source_path]
37
+ end
38
+
39
+ # Construct some easier paths if needed
40
+ ENTRY.build_path ||= File.join(MANIFEST.build_root, filename_parts)
41
+ ENTRY.url ||= [MANIFEST.url_root, filename_parts].join('/')
42
+
43
+ # Fill in a default build task
44
+ ENTRY.build_task ||= 'build:copy'
45
+
46
+ ENTRY.ext = File.extname(filename)[1..-1]
47
+
48
+ # If the build_task is build:copy, make the staging path equal the
49
+ # source_root. This is an optimization that will avoid unnecessary
50
+ # copying. All other build_tasks we build a staging path from the root.
51
+ if ENTRY.build_task.to_s == 'build:copy'
52
+ ENTRY.staging_path ||= ENTRY.source_path
53
+ else
54
+ ENTRY.staging_path ||= MANIFEST.unique_staging_path(File.join(MANIFEST.staging_root, filename_parts))
55
+ end
56
+ end
57
+
58
+ end
59
+
@@ -0,0 +1,469 @@
1
+ # ===========================================================================
2
+ # SC::Manifest Buildtasks
3
+ # copyright 2008, Sprout Systems, Inc. and Apple, Inc. all rights reserved
4
+ # ===========================================================================
5
+
6
+ # Tasks invoked while building Manifest objects. You can override these
7
+ # tasks in your buildfiles.
8
+ namespace :manifest do
9
+
10
+ desc "Invoked just before a manifest object is built to setup standard properties"
11
+ task :prepare do
12
+ require 'tempfile'
13
+
14
+ # make sure a language was set
15
+ MANIFEST.language ||= :en
16
+
17
+ # build_root is target.build_root + language + build_number
18
+ MANIFEST.build_root = File.join(TARGET.build_root,
19
+ MANIFEST.language.to_s, TARGET.build_number.to_s)
20
+
21
+ # staging_root is target.staging_root + language + build_number
22
+ MANIFEST.staging_root = File.join(TARGET.staging_root,
23
+ MANIFEST.language.to_s, TARGET.build_number.to_s)
24
+
25
+ # url_root
26
+ MANIFEST.url_root =
27
+ [TARGET.url_root, MANIFEST.language, TARGET.build_number].join('/')
28
+
29
+ # index_root
30
+ MANIFEST.index_root =
31
+ [TARGET.index_root, MANIFEST.language, TARGET.build_number].join('/')
32
+
33
+ # source_root
34
+ MANIFEST.source_root = TARGET.source_root
35
+ end
36
+
37
+ desc "Actually builds a manifest. This will catalog all entries and then filter them"
38
+ task :build => %w(catalog hide_buildfiles localize prepare_build_tasks:all)
39
+
40
+ desc "first step in building a manifest, this adds a simple copy file entry for every file in the source"
41
+ task :catalog do |t|
42
+ source_root = TARGET.source_root
43
+ Dir.glob(File.join(source_root, '**', '*')).each do |path|
44
+ next if !File.exist?(path) || File.directory?(path)
45
+ next if TARGET.target_directory?(path)
46
+
47
+ # cut source root out to make filename. make sure path separators are /
48
+ filename = path.sub /^#{Regexp.escape source_root}\//, ''
49
+ filename = filename.split(::File::SEPARATOR).join('/')
50
+ MANIFEST.add_entry filename, :original => true # entry:prepare will fill in the rest
51
+ end
52
+ end
53
+
54
+ desc "hides structural files that do not belong in build include Buildfiles and debug or fixtures if turned off"
55
+ task :hide_buildfiles => :catalog do
56
+ # these directories are to be excluded unless CONFIG.load_"dirname" = true
57
+ dirnames = %w(debug tests fixtures protocols).reject do |k|
58
+ CONFIG["load_#{k}"]
59
+ end
60
+
61
+ # loop through entries and hide those that do not below...
62
+ MANIFEST.entries.each do |entry|
63
+
64
+ # if in /dirname or /foo.lproj/dirname -- hide it!
65
+ dirnames.each do |dirname|
66
+ if entry.filename =~ /^(([^\/]+)\.lproj\/)?#{dirname}\/.+$/
67
+ entry.hide!
68
+ next
69
+ end
70
+ end
71
+
72
+ # otherwise, allow if inside lproj
73
+ next if entry.localized? || entry.filename =~ /^.+\.lproj\/.+$/
74
+
75
+ # allow if in tests, fixtures or debug as well...
76
+ next if entry.filename =~ /^(tests|fixtures|debug|protocols)\/.+$/
77
+
78
+ # or skip if ext not js
79
+ entry.hide! if entry.ext != 'js'
80
+ end
81
+ end
82
+
83
+ desc "localizes files. reject any files from other languages"
84
+ task :localize => [:catalog, :hide_buildfiles] do
85
+ seen = {} # already seen entries...
86
+ preferred_language = TARGET.config.preferred_language || :en
87
+
88
+ MANIFEST.entries.each do |entry|
89
+
90
+ # Is a localized resource!
91
+ if entry.filename =~ /^([^\/]+)\.lproj\/(.+)$/
92
+ entry.language = (SC::Target::LONG_LANGUAGE_MAP[$1.to_s.downcase.to_sym]) || $1.to_sym
93
+ entry.localized = true
94
+
95
+ # remove .lproj dir from build paths as well..
96
+ lang_dir = "#{$1}.lproj/"
97
+ sub_str = (entry.ext == 'js') ? 'lproj/' : ''
98
+ entry.filename = entry.filename.sub(lang_dir, sub_str)
99
+ entry.build_path = entry.build_path.sub(lang_dir, sub_str)
100
+ entry.url = entry.url.sub(lang_dir, sub_str)
101
+
102
+ # if this is part of the current language, always include...
103
+ # hide any preferred_language entry...
104
+ if entry.language == MANIFEST.language
105
+ seen[entry.filename].hide! if seen[entry.filename]
106
+
107
+ # if this is a preferred_language, hide unless we've seen one
108
+ elsif entry.language == preferred_language
109
+ if seen[entry.filename]
110
+ entry.hide!
111
+ else
112
+ seen[entry.filename] = entry
113
+ end
114
+
115
+ # Otherwise, hide it...
116
+ else
117
+ entry.hide!
118
+ end
119
+
120
+ # Not a localized resource
121
+ else
122
+ entry.language = MANIFEST.language
123
+ entry.localized = false
124
+ end
125
+ end
126
+ end
127
+
128
+ namespace :prepare_build_tasks do
129
+
130
+ desc "main entrypoint for preparing all build tasks. This should invoke all needed tasks"
131
+ task :all => %w(css javascript sass combine minify html strings tests packed)
132
+
133
+ desc "executes prerequisites needed before one of the subtasks can be invoked. All subtasks that have this as a prereq"
134
+ task :setup => %w(manifest:catalog manifest:hide_buildfiles manifest:localize)
135
+
136
+ desc "create builder tasks for all unit tests based on file extension."
137
+ task :tests => :setup do
138
+
139
+ # Generate test entries
140
+ test_entries = []
141
+ entries_by_dirname = {} # for building composites...
142
+ MANIFEST.entries.each do |entry|
143
+ next unless entry.filename =~ /^tests\//
144
+
145
+ # if this is a js file, add js transform first to handle sc_static()
146
+ # etc.
147
+ if entry.ext == 'js'
148
+ entry = MANIFEST.add_transform entry,
149
+ :build_task => 'build:javascript'
150
+ end
151
+
152
+ # Add transform to build into test.
153
+ test_entries << MANIFEST.add_transform(entry,
154
+ :build_task => "build:test",
155
+ :entry_type => :test,
156
+ :ext => :html)
157
+
158
+ # Strip off dirnames, saving each by dirname...
159
+ dirname = entry.filename
160
+ while (dirname = dirname.sub(/\/?[^\/]+$/,'')).size > 0
161
+ (entries_by_dirname[dirname] ||= []) << entry
162
+ end
163
+ end
164
+
165
+ # Generate composite entries for each directory...
166
+ entries_by_dirname.each do |dirname, entries|
167
+ filename = "#{dirname}.html"
168
+ MANIFEST.add_composite filename,
169
+ :build_task => "build:test",
170
+ :entry_type => :test,
171
+ :ext => :html,
172
+ :source_entries => entries,
173
+ :hide_entries => false
174
+ end
175
+
176
+ # Add summary entry
177
+ if CONFIG.load_tests
178
+ MANIFEST.add_entry 'tests/-index.json',
179
+ :composite => true,
180
+ :source_entries => test_entries,
181
+ :build_task => 'build:test_index',
182
+ :entry_type => :resource
183
+ end
184
+ end
185
+ task :javascript => :tests # IMPORTANT! to avoid JS including unit tests.
186
+ task :html => :tests # IMPORTANT! to avoid HTML including tests
187
+
188
+ desc "scans for javascript files, annotates them and prepares combined entries for each output target"
189
+ task :javascript => :setup do
190
+ # select all original entries with with ext of css
191
+ entries = MANIFEST.entries.select do |e|
192
+ e.original? && e.ext == 'js'
193
+ end
194
+
195
+ # add transform & tag with build directives.
196
+ entries.each do |entry|
197
+ entry = MANIFEST.add_transform entry,
198
+ :filename => ['source', entry.filename].join('/'),
199
+ :build_path => File.join(MANIFEST.build_root, 'source', entry.filename),
200
+ :url => [MANIFEST.url_root, 'source', entry.filename].join("/"),
201
+ :build_task => 'build:javascript',
202
+ :resource => 'javascript',
203
+ :entry_type => :javascript
204
+ entry.discover_build_directives!
205
+ end
206
+
207
+ end
208
+
209
+ desc "scans for css files, creates a transform and annotates them"
210
+ task :css => :setup do
211
+
212
+ # select all original entries with with ext of css
213
+ entries = MANIFEST.entries.select do |e|
214
+ e.original? && e.ext == 'css'
215
+ end
216
+
217
+ # add transform & tag with build directives.
218
+ entries.each do |entry|
219
+ entry = MANIFEST.add_transform entry,
220
+ :filename => ['source', entry.filename].join('/'),
221
+ :build_path => File.join(MANIFEST.build_root, 'source', entry.filename),
222
+ :url => [MANIFEST.url_root, 'source', entry.filename].join("/"),
223
+ :build_task => 'build:css',
224
+ :resource => 'stylesheet',
225
+ :entry_type => :css
226
+ entry.discover_build_directives!
227
+ end
228
+ end
229
+
230
+ desc "generates combined entries for javascript and css"
231
+ task :combine => %w(setup css javascript sass) do
232
+
233
+ # sort entries...
234
+ css_entries = {}
235
+ javascript_entries = {}
236
+ MANIFEST.entries.each do |entry|
237
+ # we can only combine entries with a resource property.
238
+ next if entry.resource.nil?
239
+
240
+ # look for CSS or JS type entries
241
+ case entry.entry_type
242
+ when :css
243
+ (css_entries[entry.resource] ||= []) << entry
244
+ when :javascript
245
+ (javascript_entries[entry.resource] ||= []) << entry
246
+ end
247
+ end
248
+
249
+ # build combined CSS entry
250
+ css_entries.each do |resource_name, entries|
251
+ MANIFEST.add_composite resource_name.ext('css'),
252
+ :build_task => 'build:combine',
253
+ :source_entries => entries,
254
+ :hide_entries => CONFIG.combine_stylesheets,
255
+ :ordered_entries => SC::Helpers::EntrySorter.sort(entries),
256
+ :entry_type => :css,
257
+ :combined => true
258
+ end
259
+
260
+ # build combined JS entry
261
+ javascript_entries.each do |resource_name, entries|
262
+ resource_name = resource_name.ext('js')
263
+ pf = (resource_name == 'javascript.js') ? %w(source/lproj/strings.js source/core.js source/utils.js) : []
264
+ MANIFEST.add_composite resource_name,
265
+ :build_task => 'build:combine',
266
+ :source_entries => entries,
267
+ :hide_entries => CONFIG.combine_javascript,
268
+ :ordered_entries => SC::Helpers::EntrySorter.sort(entries, pf),
269
+ :entry_type => :javascript,
270
+ :combined => true
271
+ end
272
+
273
+ end
274
+
275
+ desc "adds a packed entry including javascript.js from required targets"
276
+ task :packed => %w(setup combine) do
277
+
278
+ # don't add packed entries for apps.
279
+ if TARGET.target_type != :app
280
+ # Handle JavaScript version. get all required targets and find their
281
+ # javascript.js. Build packed js from that.
282
+ targets = TARGET.expand_required_targets + [TARGET]
283
+ entries = targets.map do |target|
284
+ m = target.manifest_for(MANIFEST.variation).build!
285
+
286
+ # need to find the version that is not minified
287
+ entry = m.entry_for('javascript.js')
288
+ entry = entry.source_entry while entry && entry.minified?
289
+ entry
290
+ end
291
+
292
+ entries.compact!
293
+ MANIFEST.add_composite 'javascript-packed.js',
294
+ :build_task => 'build:combine',
295
+ :source_entries => entries,
296
+ :hide_entries => false,
297
+ :entry_type => :javascript,
298
+ :combined => true,
299
+ :ordered_entries => entries, # orderd by load order
300
+ :targets => targets,
301
+ :packed => true
302
+
303
+ end
304
+ end
305
+ task :minify => :packed # IMPORTANT: don't want minified version
306
+
307
+ desc "adds a packed entry including stylesheet.css from required targets"
308
+ task :packed => %w(setup combine) do
309
+
310
+ # don't add packed entries for apps.
311
+ if TARGET.target_type != :app
312
+ # Handle CSS version. get all required targets and find their
313
+ # stylesheet.css. Build packed css from that.
314
+ targets = TARGET.expand_required_targets + [TARGET]
315
+ entries = targets.map do |target|
316
+ m = target.manifest_for(MANIFEST.variation).build!
317
+
318
+ # need to find the version that is not minified
319
+ entry = m.entry_for('stylesheet.css')
320
+ entry = entry.source_entry while entry && entry.minified?
321
+ entry
322
+ end
323
+
324
+ entries.compact!
325
+ MANIFEST.add_composite 'stylesheet-packed.css',
326
+ :build_task => 'build:combine',
327
+ :source_entries => entries,
328
+ :hide_entries => false,
329
+ :entry_type => :css,
330
+ :combined => true,
331
+ :ordered_entries => entries, # orderd by load order
332
+ :targets => targets,
333
+ :packed => true
334
+
335
+ end
336
+ end
337
+ task :minify => :packed # IMPORTANT: don't want minified version
338
+
339
+
340
+ desc "create a builder task for all sass files to create css files"
341
+ task :sass => :setup do
342
+ MANIFEST.entries.each do |entry|
343
+ next unless entry.ext == "sass"
344
+
345
+
346
+ MANIFEST.add_transform entry,
347
+ :filename => ['source', entry.filename].join('/'),
348
+ :build_path => File.join(MANIFEST.build_root, 'source', entry.filename),
349
+ :url => [MANIFEST.url_root, 'source', entry.filename].join("/"),
350
+ :build_task => 'build:sass',
351
+ :entry_type => :css,
352
+ :ext => 'css',
353
+ :resource => 'stylesheet',
354
+ :required => []
355
+ end
356
+ end
357
+
358
+ desc "find all html-generating files, annotate and combine them"
359
+ task :html => :setup do
360
+
361
+ # select all entries with proper extensions
362
+ known_ext = %w(rhtml erb haml)
363
+ entries = MANIFEST.entries.select do |e|
364
+ (e.entry_type == :html) || (e.entry_type.nil? && known_ext.include?(e.ext))
365
+ end
366
+
367
+ # tag entry with build directives and sort by resource
368
+ entries_by_resource = {}
369
+ entries.each do |entry|
370
+ entry.entry_type = :html
371
+ entry.resource = 'index'
372
+
373
+ entry.render_task = case entry.ext
374
+ when 'rhtml':
375
+ 'render:erubis'
376
+ when 'erb':
377
+ "render:erubis"
378
+ when 'haml':
379
+ 'render:haml'
380
+ end
381
+
382
+ # use a custom scan method since discover_build_directives! is too
383
+ # general...
384
+
385
+ entry.scan_source(/<%\s*sc_resource\(?\s*['"](.+)['"]\s*\)?/) do |m|
386
+ entry.resource = m[0].ext ''
387
+ end
388
+ (entries_by_resource[entry.resource] ||= []) << entry
389
+ end
390
+
391
+ # even if no resource was found for the index.html, add one anyway if
392
+ # the target is loadable
393
+ if TARGET.loadable? && entries_by_resource['index'].nil?
394
+ entries_by_resource['index'] = []
395
+ end
396
+
397
+ # Now, build combined entry for each resource
398
+ entries_by_resource.each do |resource_name, entries|
399
+ resource_name = resource_name.ext('html')
400
+ is_index = resource_name == 'index.html'
401
+ MANIFEST.add_composite resource_name,
402
+ :entry_type => :html,
403
+ :combined => true,
404
+ :build_task => 'build:html',
405
+ :source_entries => entries,
406
+ :hidden => !TARGET.loadable? && is_index,
407
+ :include_required_targets => TARGET.loadable? && is_index
408
+ end
409
+ end
410
+
411
+ desc "creates transform entries for all css and Js entries to minify them if needed"
412
+ task :minify => %w(setup javascript css combine sass) do
413
+
414
+ minify_css = CONFIG.minify_css
415
+ minify_css = CONFIG.minify if minify_css.nil?
416
+
417
+ minify_javascript = CONFIG.minify_javascript
418
+ minify_javascript = CONFIG.minify if minify_javascript.nil?
419
+
420
+ MANIFEST.entries.dup.each do |entry|
421
+ case entry.entry_type
422
+ when :css
423
+ if minify_css
424
+ MANIFEST.add_transform entry,
425
+ :build_task => 'build:minify:css',
426
+ :entry_type => :css,
427
+ :minified => true,
428
+ :packed => entry.packed? # carry forward
429
+ end
430
+
431
+ when :javascript
432
+ if minify_javascript
433
+ MANIFEST.add_transform entry,
434
+ :build_task => 'build:minify:javascript',
435
+ :entry_type => :javascript,
436
+ :minified => true,
437
+ :packed => entry.packed? # carry forward
438
+ end
439
+ end
440
+ end
441
+
442
+ end
443
+
444
+ desc "adds a loc strings entry that generates a yaml file server-side functions can use"
445
+ task :strings => %w(setup javascript) do
446
+ # find the lproj/strings.js file...
447
+ if entry = MANIFEST.entry_for('source/lproj/strings.js')
448
+ MANIFEST.add_transform entry,
449
+ :filename => 'strings.yaml',
450
+ :build_path => File.join(MANIFEST.build_root, 'strings.yaml'),
451
+ :staging_path => File.join(MANIFEST.staging_root, 'strings.yaml'),
452
+ :url => [MANIFEST.url_root, 'strings.yaml'].join('/'),
453
+ :build_task => 'build:strings',
454
+ :ext => 'yaml',
455
+ :entry_type => :strings,
456
+ :hide_entry => false,
457
+ :hidden => true
458
+ end
459
+ end
460
+
461
+ desc "..."
462
+ task :image => :setup do
463
+ end
464
+
465
+
466
+ end
467
+
468
+
469
+ end