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.
- data/Buildfile +115 -0
- data/History.txt +7 -0
- data/README.txt +102 -0
- data/Rakefile +54 -0
- data/Todo.txt +1 -0
- data/bin/sc-build +13 -0
- data/bin/sc-build-number +13 -0
- data/bin/sc-gen +13 -0
- data/bin/sc-init +13 -0
- data/bin/sc-manifest +13 -0
- data/bin/sc-server +13 -0
- data/bin/sproutcore +14 -0
- data/buildtasks/build.rake +73 -0
- data/buildtasks/entry.rake +59 -0
- data/buildtasks/manifest.rake +469 -0
- data/buildtasks/render.rake +21 -0
- data/buildtasks/target.rake +42 -0
- data/gen/Buildfile +16 -0
- data/gen/app/Buildfile +36 -0
- data/gen/app/README +1 -0
- data/gen/app/USAGE +13 -0
- data/gen/app/templates/apps/{target_name}/core.js +27 -0
- data/gen/app/templates/apps/{target_name}/english.lproj/loading.rhtml +9 -0
- data/gen/app/templates/apps/{target_name}/english.lproj/main_page.js +22 -0
- data/gen/app/templates/apps/{target_name}/english.lproj/strings.js +15 -0
- data/gen/app/templates/apps/{target_name}/main.js +30 -0
- data/gen/controller/Buildfile +18 -0
- data/gen/controller/README +1 -0
- data/gen/controller/USAGE +13 -0
- data/gen/controller/templates/controllers/{filename}.js +18 -0
- data/gen/controller/templates/tests/controllers/{filename}.js +15 -0
- data/gen/framework/Buildfile +36 -0
- data/gen/framework/README +1 -0
- data/gen/framework/USAGE +13 -0
- data/gen/framework/templates/frameworks/{target_name}/core.js +21 -0
- data/gen/framework/templates/frameworks/{target_name}/english.lproj/strings.js +15 -0
- data/gen/language/Buildfile +26 -0
- data/gen/language/README +1 -0
- data/gen/language/USAGE +13 -0
- data/gen/language/templates/{filename}/strings.js +14 -0
- data/gen/model/Buildfile +16 -0
- data/gen/model/README +1 -0
- data/gen/model/USAGE +15 -0
- data/gen/model/templates/fixtures/{filename}.js +35 -0
- data/gen/model/templates/models/{filename}.js +19 -0
- data/gen/model/templates/tests/models/{filename}.js +15 -0
- data/gen/project/Buildfile +45 -0
- data/gen/project/INIT +3 -0
- data/gen/project/README +1 -0
- data/gen/project/USAGE +2 -0
- data/gen/project/templates/{filename}/Buildfile +7 -0
- data/gen/project/templates/{filename}/README +7 -0
- data/gen/test/Buildfile +25 -0
- data/gen/test/README +1 -0
- data/gen/test/USAGE +12 -0
- data/gen/test/templates/tests/{filename}.js +15 -0
- data/gen/theme/Buildfile +36 -0
- data/gen/theme/README +1 -0
- data/gen/theme/USAGE +13 -0
- data/gen/theme/templates/themes/{target_name}/english.lproj/strings.js +15 -0
- data/gen/view/Buildfile +18 -0
- data/gen/view/README +1 -0
- data/gen/view/USAGE +13 -0
- data/gen/view/templates/tests/views/{filename}.js +15 -0
- data/gen/view/templates/views/{filename}.js +18 -0
- data/lib/sproutcore.rb +130 -0
- data/lib/sproutcore/builders/base.rb +79 -0
- data/lib/sproutcore/builders/combine.rb +37 -0
- data/lib/sproutcore/builders/html.rb +177 -0
- data/lib/sproutcore/builders/javascript.rb +55 -0
- data/lib/sproutcore/builders/minify.rb +67 -0
- data/lib/sproutcore/builders/sass.rb +55 -0
- data/lib/sproutcore/builders/strings.rb +44 -0
- data/lib/sproutcore/builders/stylesheet.rb +40 -0
- data/lib/sproutcore/builders/test.rb +58 -0
- data/lib/sproutcore/builders/test_index.rb +26 -0
- data/lib/sproutcore/buildfile.rb +483 -0
- data/lib/sproutcore/buildfile/build_task.rb +33 -0
- data/lib/sproutcore/buildfile/buildfile_dsl.rb +162 -0
- data/lib/sproutcore/buildfile/cloneable.rb +34 -0
- data/lib/sproutcore/buildfile/early_time.rb +29 -0
- data/lib/sproutcore/buildfile/invocation_chain.rb +64 -0
- data/lib/sproutcore/buildfile/namespace.rb +33 -0
- data/lib/sproutcore/buildfile/string_ext.rb +198 -0
- data/lib/sproutcore/buildfile/task.rb +304 -0
- data/lib/sproutcore/buildfile/task_arguments.rb +86 -0
- data/lib/sproutcore/buildfile/task_manager.rb +193 -0
- data/lib/sproutcore/deprecated/view_helper.rb +662 -0
- data/lib/sproutcore/helpers/capture_helper.rb +30 -0
- data/lib/sproutcore/helpers/cssmin.rb +202 -0
- data/lib/sproutcore/helpers/dom_id_helper.rb +21 -0
- data/lib/sproutcore/helpers/entry_sorter.rb +105 -0
- data/lib/sproutcore/helpers/packed_optimizer.rb +102 -0
- data/lib/sproutcore/helpers/static_helper.rb +268 -0
- data/lib/sproutcore/helpers/tag_helper.rb +117 -0
- data/lib/sproutcore/helpers/text_helper.rb +303 -0
- data/lib/sproutcore/models/generator.rb +493 -0
- data/lib/sproutcore/models/hash_struct.rb +109 -0
- data/lib/sproutcore/models/manifest.rb +342 -0
- data/lib/sproutcore/models/manifest_entry.rb +232 -0
- data/lib/sproutcore/models/project.rb +270 -0
- data/lib/sproutcore/models/target.rb +403 -0
- data/lib/sproutcore/rack/builder.rb +269 -0
- data/lib/sproutcore/rack/dev.rb +51 -0
- data/lib/sproutcore/rack/docs.rb +24 -0
- data/lib/sproutcore/rack/proxy.rb +92 -0
- data/lib/sproutcore/rack/service.rb +141 -0
- data/lib/sproutcore/rack/test_runner.rb +24 -0
- data/lib/sproutcore/render_engines/erubis.rb +55 -0
- data/lib/sproutcore/render_engines/haml.rb +39 -0
- data/lib/sproutcore/tools.rb +311 -0
- data/lib/sproutcore/tools/build.rb +80 -0
- data/lib/sproutcore/tools/build_number.rb +23 -0
- data/lib/sproutcore/tools/gen.rb +99 -0
- data/lib/sproutcore/tools/init.rb +40 -0
- data/lib/sproutcore/tools/manifest.rb +84 -0
- data/lib/sproutcore/tools/server.rb +45 -0
- data/spec/buildtasks/build/copy_spec.rb +60 -0
- data/spec/buildtasks/build/spec_helper.rb +36 -0
- data/spec/buildtasks/manifest/catalog_spec.rb +48 -0
- data/spec/buildtasks/manifest/hide_buildfiles_spec.rb +125 -0
- data/spec/buildtasks/manifest/localize_spec.rb +97 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/combine_spec.rb +246 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/css_spec.rb +87 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/html_spec.rb +175 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/javascript_spec.rb +65 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/minify_spec.rb +70 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/packed_spec.rb +152 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/sass_spec.rb +98 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/strings_spec.rb +64 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/tests_spec.rb +163 -0
- data/spec/buildtasks/manifest/prepare_spec.rb +43 -0
- data/spec/buildtasks/manifest/spec_helper.rb +35 -0
- data/spec/buildtasks/target_spec.rb +214 -0
- data/spec/fixtures/builder_tests/Buildfile +15 -0
- data/spec/fixtures/builder_tests/apps/combine_test/a.js +1 -0
- data/spec/fixtures/builder_tests/apps/combine_test/b.js +1 -0
- data/spec/fixtures/builder_tests/apps/combine_test/c.js +1 -0
- data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/a.css +1 -0
- data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/b.css +1 -0
- data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/c.css +1 -0
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/bar1_sample.rhtml +2 -0
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/erb_sample.html.erb +1 -0
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/icons/image.png +0 -0
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/image.jpg +0 -0
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/rhtml_sample.rhtml +1 -0
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/strings.js +4 -0
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/style.css +0 -0
- data/spec/fixtures/builder_tests/apps/html_test/french.lproj/french-icons/fr.png +0 -0
- data/spec/fixtures/builder_tests/apps/html_test/french.lproj/strings.js +4 -0
- data/spec/fixtures/builder_tests/apps/html_test/lib/layout_template.rhtml +1 -0
- data/spec/fixtures/builder_tests/apps/html_test/scripts.js +0 -0
- data/spec/fixtures/builder_tests/apps/javascript_test/sc_static.js +15 -0
- data/spec/fixtures/builder_tests/apps/javascript_test/sc_super.js +4 -0
- data/spec/fixtures/builder_tests/apps/javascript_test/strings.js +7 -0
- data/spec/fixtures/builder_tests/apps/sass_test/sample.sass +3 -0
- data/spec/fixtures/builder_tests/apps/strings_test/lproj/strings.js +8 -0
- data/spec/fixtures/builder_tests/apps/stylesheet_test/build_directives.css +9 -0
- data/spec/fixtures/builder_tests/apps/stylesheet_test/sc_static.css +12 -0
- data/spec/fixtures/builder_tests/apps/test_test/lib/alt_layout.rhtml +1 -0
- data/spec/fixtures/builder_tests/apps/test_test/lib/test_layout.rhtml +3 -0
- data/spec/fixtures/builder_tests/apps/test_test/tests/qunit_test.js +1 -0
- data/spec/fixtures/builder_tests/apps/test_test/tests/qunit_test2.js +1 -0
- data/spec/fixtures/builder_tests/apps/test_test/tests/rhtml_test.rhtml +4 -0
- data/spec/fixtures/builder_tests/frameworks/debug/core.js +0 -0
- data/spec/fixtures/builder_tests/frameworks/debug/english.lproj/dummy.css +0 -0
- data/spec/fixtures/builder_tests/frameworks/qunit/core.js +0 -0
- data/spec/fixtures/builder_tests/frameworks/qunit/english.lproj/dummy.css +0 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/req_style_1.css +0 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/strings.js +4 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/test.rhtml +1 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_1/req_js_1.js +0 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_2/english.lproj/req_style_2.css +0 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_2/english.lproj/test.rhtml +1 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_2/javascript.js +1 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_2/lib/alt_layout.rhtml +0 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_2/req_js_2.js +0 -0
- data/spec/fixtures/builder_tests/themes/sample_theme/Buildfile +1 -0
- data/spec/fixtures/buildfiles/basic/Buildfile +16 -0
- data/spec/fixtures/buildfiles/basic/task_module.rake +6 -0
- data/spec/fixtures/buildfiles/installed/Buildfile +7 -0
- data/spec/fixtures/buildfiles/installed/Buildfile2 +5 -0
- data/spec/fixtures/buildfiles/project_test/Buildfile +4 -0
- data/spec/fixtures/buildfiles/project_test/not_project/Buildfile +2 -0
- data/spec/fixtures/buildfiles/project_test/not_project/child/PLACEHOLDER +0 -0
- data/spec/fixtures/entry_for_project/Buildfile +1 -0
- data/spec/fixtures/entry_for_project/apps/test_app/entry.txt +0 -0
- data/spec/fixtures/entry_for_project/apps/test_app/frameworks/nested/PLACEHOLDER +0 -0
- data/spec/fixtures/entry_for_project/frameworks/shared/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/Buildfile +8 -0
- data/spec/fixtures/find_targets/custom/bars/bar1/bars/bar1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/bars/bar1/bars/bar2/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/bars/bar1/foos/foo1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/bars/bar1/foos/foo2/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/foos/custom_foos/Buildfile +5 -0
- data/spec/fixtures/find_targets/custom/foos/custom_foos/custom_foodir/foo1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/foos/custom_foos/custom_foodir/foo2/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/foos/custom_foos/foos/not_foo1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/foos/foo1/bars/bar1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/foos/foo1/bars/bar2/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/nested/Buildfile +8 -0
- data/spec/fixtures/find_targets/nested/apps/app1/Buildfile +1 -0
- data/spec/fixtures/find_targets/nested/apps/app1/apps/nested_app/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/Apps/app1/frameworks/framework1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/Apps/app1/frameworks/framework2/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/clients/client1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/frameworks/framework1/frameworks/framework1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/frameworks/framework2/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/themes/theme1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/themes/theme2/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/caps_long_names/English.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/caps_long_names/FreNCH.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/caps_long_names/UnknOWN.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/english.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/french.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/german.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/italian.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/japanese.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/spanish.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/unknown.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/no_names/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/de.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/en-CA.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/en-GB.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/en-US.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/en.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/es.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/foo.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/fr.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/it.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/ja.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/1.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/B.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/a.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/a/a.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/a/b.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/b/a.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/c.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/core.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/B.css +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a.css +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a/a.css +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a/b.css +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/b/a.css +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/c.css +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/lproj/strings.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/utils.js +1 -0
- data/spec/fixtures/ordered_entries/apps/with_requires/a.js +2 -0
- data/spec/fixtures/ordered_entries/apps/with_requires/b.js +3 -0
- data/spec/fixtures/ordered_entries/apps/with_requires/c.js +2 -0
- data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/a.css +2 -0
- data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/b.css +2 -0
- data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/c.css +2 -0
- data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/d.js +1 -0
- data/spec/fixtures/real_world/Buildfile +12 -0
- data/spec/fixtures/real_world/apps/account/README +1 -0
- data/spec/fixtures/real_world/apps/calendar/README +1 -0
- data/spec/fixtures/real_world/apps/contacts/README_BEFORE_EDITING +1 -0
- data/spec/fixtures/real_world/apps/files/README +1 -0
- data/spec/fixtures/real_world/apps/mail/README +1 -0
- data/spec/fixtures/real_world/apps/mobile_photos/README +1 -0
- data/spec/fixtures/real_world/apps/photos/README +1 -0
- data/spec/fixtures/real_world/apps/uploader/README +1 -0
- data/spec/fixtures/real_world/frameworks/core_files/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/core_photos/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/shared/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/Buildfile +26 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/README +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/apps/docs/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/apps/test_runner/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/core.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/debug/debug-resource.html +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/debug/sample_debug.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/demo2.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/debug/sample_debug-loc.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo.css +4 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo.html +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo2.sass +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.haml +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.html.erb +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.rhtml +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/fixtures/sample_fixtures-loc.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/has_require.css +4 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/no_require.css +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/no_sc_resource.rhtml +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/protocols/sample-loc.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/sc_resource.css +6 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/sc_resource.rhtml +3 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/strings.js +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/tests/sample-loc.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/fixtures/sample-json-fixture.json +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/fixtures/sample_fixtures.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/application/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/costello/core.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/data_store/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/debug/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/desktop/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/empty_theme/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/foundation/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/mobile/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/qunit/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/uploader/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/french.lproj/french-resource.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/french.lproj/strings.js +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/german.lproj/german-resource.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/german.lproj/strings.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/has_require.js +4 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/lib/index.html +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/no_require.js +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/protocols/sample.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/sc_resource.js +6 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/tests/nested/sample1.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/tests/nested/sample2.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/tests/sample.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/tests/sample.rhtml +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/themes/standard_theme/README +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/views/view.js +1 -0
- data/spec/fixtures/real_world/generators/sample_custom/Buildfile +0 -0
- data/spec/fixtures/real_world/generators/sample_custom/templates/{filename}.js +1 -0
- data/spec/fixtures/recursive_project/Buildfile +8 -0
- data/spec/fixtures/recursive_project/frameworks/sproutcore/frameworks/costello/PLACEHOLDER +0 -0
- data/spec/lib/builders/combine_spec.rb +67 -0
- data/spec/lib/builders/html_spec.rb +577 -0
- data/spec/lib/builders/javascript_spec.rb +81 -0
- data/spec/lib/builders/sass_spec.rb +43 -0
- data/spec/lib/builders/spec_helper.rb +30 -0
- data/spec/lib/builders/strings_spec.rb +52 -0
- data/spec/lib/builders/stylesheet_spec.rb +63 -0
- data/spec/lib/builders/test_index_spec.rb +44 -0
- data/spec/lib/builders/test_spec.rb +135 -0
- data/spec/lib/buildfile/config_for_spec.rb +81 -0
- data/spec/lib/buildfile/define_spec.rb +59 -0
- data/spec/lib/buildfile/dup_spec.rb +65 -0
- data/spec/lib/buildfile/invoke_spec.rb +130 -0
- data/spec/lib/buildfile/load_spec.rb +49 -0
- data/spec/lib/buildfile/task/dup_spec.rb +55 -0
- data/spec/lib/buildfile/task_defined_spec.rb +17 -0
- data/spec/lib/buildfile_commands/build_task_spec.rb +19 -0
- data/spec/lib/buildfile_commands/config_spec.rb +97 -0
- data/spec/lib/buildfile_commands/import_spec.rb +17 -0
- data/spec/lib/buildfile_commands/namespace_spec.rb +18 -0
- data/spec/lib/buildfile_commands/proxies_spec.rb +38 -0
- data/spec/lib/buildfile_commands/replace_task_spec.rb +29 -0
- data/spec/lib/buildfile_commands/task_spec.rb +36 -0
- data/spec/lib/helpers/packing_optimizer/optimize_spec.rb +26 -0
- data/spec/lib/models/hash_struct/deep_clone_spec.rb +27 -0
- data/spec/lib/models/hash_struct/has_options_spec.rb +32 -0
- data/spec/lib/models/hash_struct/hash_spec.rb +64 -0
- data/spec/lib/models/hash_struct/merge_spec.rb +26 -0
- data/spec/lib/models/hash_struct/method_missing.rb +41 -0
- data/spec/lib/models/manifest/add_entry_spec.rb +36 -0
- data/spec/lib/models/manifest/add_transform_spec.rb +90 -0
- data/spec/lib/models/manifest/build_spec.rb +78 -0
- data/spec/lib/models/manifest/entry_for_spec.rb +94 -0
- data/spec/lib/models/manifest/find_entry.rb +84 -0
- data/spec/lib/models/manifest/prepare_spec.rb +62 -0
- data/spec/lib/models/manifest_entry/cacheable_url_spec.rb +31 -0
- data/spec/lib/models/manifest_entry/prepare_spec.rb +54 -0
- data/spec/lib/models/project/add_target_spec.rb +44 -0
- data/spec/lib/models/project/buildfile_spec.rb +35 -0
- data/spec/lib/models/project/find_targets_for_spec.rb +77 -0
- data/spec/lib/models/project/load_nearest_project_spec.rb +23 -0
- data/spec/lib/models/project/target_for_spec.rb +33 -0
- data/spec/lib/models/project/targets_spec.rb +62 -0
- data/spec/lib/models/target/compute_build_number_spec.rb +125 -0
- data/spec/lib/models/target/config_spec.rb +30 -0
- data/spec/lib/models/target/expand_required_targets_spec.rb +48 -0
- data/spec/lib/models/target/installed_languages_spec.rb +47 -0
- data/spec/lib/models/target/lproj_for_spec.rb +38 -0
- data/spec/lib/models/target/manifest_for_spec.rb +42 -0
- data/spec/lib/models/target/parent_target_spec.rb +21 -0
- data/spec/lib/models/target/prepare_spec.rb +53 -0
- data/spec/lib/models/target/required_targets_spec.rb +119 -0
- data/spec/lib/models/target/target_for_spec.rb +56 -0
- data/spec/lib/tools/build_number_spec.rb +28 -0
- data/spec/lib/tools/gen_spec.rb +207 -0
- data/spec/lib/tools/tools_spec.rb +78 -0
- data/spec/spec_helper.rb +138 -0
- data/sproutcore.gemspec +47 -0
- data/vendor/github_gem_lint.rb +22 -0
- data/vendor/yui-compressor/yuicompressor-2.4.2.jar +0 -0
- metadata +1084 -0
@@ -0,0 +1,30 @@
|
|
1
|
+
# ===========================================================================
|
2
|
+
# Project: Abbot - SproutCore Build Tools
|
3
|
+
# Copyright: ©2009 Apple, Inc.
|
4
|
+
# portions copyright @2006-2009 Sprout Systems, Inc.
|
5
|
+
# and contributors
|
6
|
+
# ===========================================================================
|
7
|
+
|
8
|
+
module SC
|
9
|
+
|
10
|
+
module Helpers
|
11
|
+
|
12
|
+
module CaptureHelper
|
13
|
+
|
14
|
+
# Captures the resulting value of the block and returns it
|
15
|
+
def capture(*args, &block)
|
16
|
+
self.renderer ? self.renderer.capture(args, &block) : block.call(*args).to_s
|
17
|
+
end
|
18
|
+
|
19
|
+
# executes the passed block, placing the resulting content into a variable called
|
20
|
+
# @content_for_area_name. You can insert this content later by including this
|
21
|
+
# variable or by calling yield(:area_name)
|
22
|
+
#
|
23
|
+
def content_for(name, &block)
|
24
|
+
eval "@content_for_#{name} = (@content_for_#{name} || '') + (capture(&block) || '')"
|
25
|
+
return '' # incase user does <%= content_for ... %>
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,202 @@
|
|
1
|
+
# ===========================================================================
|
2
|
+
# Project: Abbot - SproutCore Build Tools
|
3
|
+
# Copyright: ©2009 Apple, Inc.
|
4
|
+
# portions copyright @2006-2009 Sprout Systems, Inc.
|
5
|
+
# and contributors
|
6
|
+
# ===========================================================================
|
7
|
+
|
8
|
+
# module and class name have been modified
|
9
|
+
#
|
10
|
+
# == MIT License
|
11
|
+
# See http://code.google.com/p/rainpress/
|
12
|
+
#
|
13
|
+
# == About
|
14
|
+
#
|
15
|
+
# Rainpress is a compressor for CSS. It's written in ruby, but should not be
|
16
|
+
# limited to ruby projects.
|
17
|
+
#
|
18
|
+
# Rainpress does not apply common compression algorithms like gzip, it removes
|
19
|
+
# unnecessary characters and replaces some attributes with a shorter equivalent
|
20
|
+
# name.
|
21
|
+
#
|
22
|
+
# == Links
|
23
|
+
#
|
24
|
+
# * {Rainpress Website}[http://rainpress.xhochy.com/]
|
25
|
+
# * {SVN repository}[http://code.google.com/p/rainpress/source]
|
26
|
+
# * {Bugtracker}[https://bugs.launchpad.net/rainpress/]
|
27
|
+
# * {Wiki}[http://code.google.com/p/rainpress/w/list]
|
28
|
+
# * {Translations}[https://translations.launchpad.net/rainpress/]
|
29
|
+
# * {XhochY Weblog (for Announcements about Rainpress)}[http://xhochy.org/en/]
|
30
|
+
# * {Mailinglist}[http://groups.google.com/group/xy-oss-projects-discussion]
|
31
|
+
# * {Continous Integration Builds and Tests}[http://cruisecontrol-rb.xhochy.com/builds/rainpress]
|
32
|
+
# * {Freshmeat Record}[http://freshmeat.net/projects/rainpress]
|
33
|
+
module SC::Helpers
|
34
|
+
|
35
|
+
# == Information
|
36
|
+
#
|
37
|
+
# This is the main class of Rainpress, create an instance of it to compress
|
38
|
+
# your CSS-styles.
|
39
|
+
#
|
40
|
+
# == Simple Usage
|
41
|
+
#
|
42
|
+
# packer = SproutCore::CSSPacker.new
|
43
|
+
# compressed_style = packer.compress(style)
|
44
|
+
class CSSPacker
|
45
|
+
|
46
|
+
# Use always this functions if you want to compress your CSS-style
|
47
|
+
#
|
48
|
+
# <b>Options:</b>
|
49
|
+
#
|
50
|
+
# * <tt>:preserveComments</tt> - if set to true, comments will not be
|
51
|
+
# removed
|
52
|
+
# * <tt>:preserveNewline</tt> - if set to true, newlines will not be removed
|
53
|
+
# * <tt>:preserveSpaces</tt> - if set to true, spaces will not be removed
|
54
|
+
# * <tt>:preserveColors</tt> - if set to true, colors will not be modified
|
55
|
+
# * <tt>:skipMisc</tt> - if set to true, miscellaneous compression parts
|
56
|
+
# will be skipped
|
57
|
+
def compress(style, options = {})
|
58
|
+
# remove comments
|
59
|
+
style = remove_comments(style) unless options[:preserveComments]
|
60
|
+
|
61
|
+
# remove newlines
|
62
|
+
style = remove_newlines(style) unless options[:preserveNewlines]
|
63
|
+
|
64
|
+
# remove unneeded spaces
|
65
|
+
style = remove_spaces(style) unless options[:preserveSpaces]
|
66
|
+
|
67
|
+
# replace colours with shorter names
|
68
|
+
style = shorten_colors(style) unless options[:preserveColors]
|
69
|
+
|
70
|
+
# make all other things
|
71
|
+
style = do_misc(style) unless options[:skipMisc]
|
72
|
+
|
73
|
+
style
|
74
|
+
end
|
75
|
+
|
76
|
+
# Remove all comments out of the CSS-Document
|
77
|
+
def remove_comments(script)
|
78
|
+
input = script
|
79
|
+
script = ''
|
80
|
+
|
81
|
+
while input.length > 0 do
|
82
|
+
pos = input.index("/*");
|
83
|
+
|
84
|
+
# No more comments
|
85
|
+
if pos == nil
|
86
|
+
script += input
|
87
|
+
input = '';
|
88
|
+
else # Comment beginning at pos
|
89
|
+
script += input[0..(pos-1)] if pos > 0 # only append text if there is some
|
90
|
+
input = input[(pos+2)..-1]
|
91
|
+
# Comment ending at pos
|
92
|
+
pos = input.index("*/")
|
93
|
+
input = input[(pos+2)..-1]
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
# return
|
98
|
+
script
|
99
|
+
end
|
100
|
+
|
101
|
+
# Remove all newline characters
|
102
|
+
def remove_newlines(script)
|
103
|
+
script.gsub(/\n|\r/,'')
|
104
|
+
end
|
105
|
+
|
106
|
+
# 1. Turn mutiple spaces into a single
|
107
|
+
# 2. Remove spaces around ;:{},
|
108
|
+
# 3. Remove tabs
|
109
|
+
def remove_spaces(script)
|
110
|
+
script = script.gsub(/(\s(\s)+)/, ' ')
|
111
|
+
script = script.gsub(/\s*;\s*/,';')
|
112
|
+
script = script.gsub(/\s*:\s*/,':')
|
113
|
+
script = script.gsub(/\s*\{\s*/,'{')
|
114
|
+
script = script.gsub(/\s*\}\s*/,'}')
|
115
|
+
script = script.gsub(/\s*,\s*/,',')
|
116
|
+
script.gsub("\t",'');
|
117
|
+
end
|
118
|
+
|
119
|
+
# Replace color values with their shorter equivalent
|
120
|
+
#
|
121
|
+
# 1. Turn rgb(,,)-colors into #-values
|
122
|
+
# 2. Shorten #AABBCC down to #ABC
|
123
|
+
# 3. Replace names with their shorter hex-equivalent
|
124
|
+
# * white -> #fff
|
125
|
+
# * black -> #000
|
126
|
+
# 4. Replace #-values with their shorter name
|
127
|
+
# * #f00 -> red
|
128
|
+
def shorten_colors(style)
|
129
|
+
# rgb(50,101,152) to #326598
|
130
|
+
style = style.gsub(/rgb\s*\(\s*([0-9,\s]+)\s*\)/) do |match|
|
131
|
+
out = '#'
|
132
|
+
$1.split(',').each do |num|
|
133
|
+
if num.to_i < 16
|
134
|
+
out += '0'
|
135
|
+
end
|
136
|
+
out += num.to_i.to_s(16) # convert to hex
|
137
|
+
end
|
138
|
+
out
|
139
|
+
end
|
140
|
+
# #AABBCC to #ABC, keep if preceed by a '='
|
141
|
+
style = style.gsub(/([^\"'=\s])(\s*)#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])/) do |match|
|
142
|
+
out = match
|
143
|
+
if ($3.downcase == $4.downcase) and ($5.downcase == $6.downcase) and ($7.downcase == $8.downcase)
|
144
|
+
out = $1 + '#' + $3.downcase + $5.downcase + $7.downcase
|
145
|
+
end
|
146
|
+
out
|
147
|
+
end
|
148
|
+
# shorten several names to numbers
|
149
|
+
style = style.gsub(/:[\s]*white[\s]*;/, ':#fff;')
|
150
|
+
style = style.gsub(/:[\s]*white[\s]*\}/, ':#fff}')
|
151
|
+
style = style.gsub(/:[\s]*black[\s]*;/, ':#000;')
|
152
|
+
style = style.gsub(/:[\s]*black[\s]*\}/, ':#000}')
|
153
|
+
# shotern several numbers to names
|
154
|
+
style = style.gsub(/:[\s]*#([fF]00|[fF]{2}0000);/, ':red;')
|
155
|
+
style = style.gsub(/:[\s]*#([fF]00|[fF]{2}0000)\}/, ':red}')
|
156
|
+
|
157
|
+
style
|
158
|
+
end
|
159
|
+
|
160
|
+
# Do miscellaneous compression methods on the style
|
161
|
+
def do_misc(script)
|
162
|
+
# Replace 0(pt,px,em,%) with 0 but only when preceded by : or a white-space
|
163
|
+
script = script.gsub(/([\s:]+)(0)(px|em|%|in|cm|mm|pc|pt|ex)/) do |match|
|
164
|
+
match.gsub(/(px|em|%|in|cm|mm|pc|pt|ex)/,'')
|
165
|
+
end
|
166
|
+
# Replace 0 0 0 0; with 0.
|
167
|
+
script = script.gsub(':0 0 0 0;', ':0;')
|
168
|
+
script = script.gsub(':0 0 0 0}', ':0}')
|
169
|
+
script = script.gsub(':0 0 0;', ':0;')
|
170
|
+
script = script.gsub(':0 0 0}', ':0}')
|
171
|
+
script = script.gsub(':0 0}', ':0}')
|
172
|
+
script = script.gsub(':0 0;', ':0;')
|
173
|
+
# Replace background-position:0; with background-position:0 0;
|
174
|
+
script = script.gsub('background-position:0;', 'background-position:0 0;');
|
175
|
+
# Replace 0.6 to .6, but only when preceded by : or a white-space
|
176
|
+
script = script.gsub(/[:\s]0+\.(\d+)/) do |match|
|
177
|
+
match.sub('0', '') # only first '0' !!
|
178
|
+
end
|
179
|
+
# Replace ;;;; with ;
|
180
|
+
script = script.gsub(/[;]+/, ';')
|
181
|
+
# Replace ;} with }
|
182
|
+
script = script.gsub(';}', '}')
|
183
|
+
# Replace background-color: with background:
|
184
|
+
script = script.gsub('background-color:', 'background:')
|
185
|
+
# Replace font-weight:normal; with 400, bold with 700
|
186
|
+
script = script.gsub(/font-weight[\s]*:[\s]*normal[\s]*;/,'font-weight:400;')
|
187
|
+
script = script.gsub(/font-weight[\s]*:[\s]*normal[\s]*\}/,'font-weight:400}')
|
188
|
+
script = script.gsub(/font[\s]*:[\s]*normal[\s;\}]*/) do |match|
|
189
|
+
match.sub('normal', '400')
|
190
|
+
end
|
191
|
+
script = script.gsub(/font-weight[\s]*:[\s]*bold[\s]*;/,'font-weight:700;')
|
192
|
+
script = script.gsub(/font-weight[\s]*:[\s]*bold[\s]*\}/,'font-weight:700}')
|
193
|
+
script = script.gsub(/font[\s]*:[\s]*bold[\s;\}]*/) do |match|
|
194
|
+
match.sub('bold', '700')
|
195
|
+
end
|
196
|
+
|
197
|
+
script
|
198
|
+
end
|
199
|
+
|
200
|
+
end
|
201
|
+
|
202
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# ===========================================================================
|
2
|
+
# Project: Abbot - SproutCore Build Tools
|
3
|
+
# Copyright: ©2009 Apple, Inc.
|
4
|
+
# portions copyright @2006-2009 Sprout Systems, Inc.
|
5
|
+
# and contributors
|
6
|
+
# ===========================================================================
|
7
|
+
|
8
|
+
module SC
|
9
|
+
module Helpers
|
10
|
+
|
11
|
+
module DomIdHelper
|
12
|
+
@@tick = 0
|
13
|
+
|
14
|
+
def dom_id!(type="id")
|
15
|
+
@@tick += 1
|
16
|
+
return "#{type}_#{(Time.now.to_i + @@tick)}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
# ===========================================================================
|
2
|
+
# Project: Abbot - SproutCore Build Tools
|
3
|
+
# Copyright: ©2009 Apple, Inc.
|
4
|
+
# portions copyright @2006-2009 Sprout Systems, Inc.
|
5
|
+
# and contributors
|
6
|
+
# ===========================================================================
|
7
|
+
|
8
|
+
module SC
|
9
|
+
|
10
|
+
module Helpers
|
11
|
+
|
12
|
+
# Sorts a set of entries, respecting any "requires" found in the entries.
|
13
|
+
# To use the sorter, just call the class method EntrySorter.sort() passing
|
14
|
+
# the entries to sort along with any filenames you prefer to have added to
|
15
|
+
# the top. If you don't specify any filenames, then the entries will be
|
16
|
+
# sorted alphabetically except for requires.
|
17
|
+
class EntrySorter
|
18
|
+
|
19
|
+
def self.sort(entries, preferred_filenames = [])
|
20
|
+
self.new(preferred_filenames).sort(entries)
|
21
|
+
end
|
22
|
+
|
23
|
+
def initialize(preferred_filenames = [])
|
24
|
+
@preferred_filenames = preferred_filenames
|
25
|
+
end
|
26
|
+
|
27
|
+
attr_reader :preferred_filenames
|
28
|
+
|
29
|
+
def sort(entries)
|
30
|
+
# first sort entries by filename - ignoring case
|
31
|
+
entries = entries.sort do |a,b|
|
32
|
+
(a.filename || '').to_s.downcase <=> (b.filename || '').to_s.downcase
|
33
|
+
end
|
34
|
+
all_entries = entries.dup # needed for sort...
|
35
|
+
|
36
|
+
# now process each entry to handle requires
|
37
|
+
seen = []
|
38
|
+
ret = []
|
39
|
+
while cur = next_entry(entries)
|
40
|
+
add_entry_to_set(cur, ret, seen, entries, all_entries)
|
41
|
+
end
|
42
|
+
|
43
|
+
return ret
|
44
|
+
end
|
45
|
+
|
46
|
+
protected
|
47
|
+
|
48
|
+
# Converts a passed set of requires into entries
|
49
|
+
def required_entries(required, entries, requiring_entry, all_entries)
|
50
|
+
return [] if required.nil?
|
51
|
+
required.map do |filename|
|
52
|
+
filename = filename.to_s.downcase.ext('')
|
53
|
+
source_filename = "source/#{filename}"
|
54
|
+
entry = all_entries.find do |e|
|
55
|
+
e.filename.to_s.downcase.ext('') == source_filename
|
56
|
+
end
|
57
|
+
|
58
|
+
# try localized version...
|
59
|
+
if entry.nil? && !(filename =~ /^lproj\//)
|
60
|
+
source_filename = "source/lproj/#{filename}"
|
61
|
+
entry = all_entries.find do |e|
|
62
|
+
e.filename.to_s.downcase.ext('') == source_filename
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
if entry.nil?
|
67
|
+
SC.logger.warn "Could not find entry '#{filename}' required in #{requiring_entry.target.target_name.to_s.sub(/^\//,'')}:#{requiring_entry.filename}"
|
68
|
+
end
|
69
|
+
|
70
|
+
entry
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
# Returns the next entry from the set of entries based on required order.
|
75
|
+
# Removed entry from array.
|
76
|
+
def next_entry(entries)
|
77
|
+
ret = nil
|
78
|
+
|
79
|
+
# look for preferred entries first...
|
80
|
+
@preferred_filenames.each do |filename|
|
81
|
+
ret = entries.find { |e| e.filename.to_s.downcase == filename }
|
82
|
+
break if ret
|
83
|
+
end
|
84
|
+
|
85
|
+
ret ||= entries.first # else fallback to first entry in set
|
86
|
+
entries.delete(ret) if ret
|
87
|
+
return ret
|
88
|
+
end
|
89
|
+
|
90
|
+
# Adds the specified entry to the ordered array, adding required first
|
91
|
+
def add_entry_to_set(entry, ret, seen, entries, all_entries)
|
92
|
+
return if seen.include?(entry)
|
93
|
+
|
94
|
+
seen << entry
|
95
|
+
req = required_entries(entry.required, entries, entry, all_entries)
|
96
|
+
req.each do |required|
|
97
|
+
next if required.nil?
|
98
|
+
add_entry_to_set(required, ret, seen, entries, all_entries)
|
99
|
+
end
|
100
|
+
ret << entry
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# ===========================================================================
|
2
|
+
# Project: Abbot - SproutCore Build Tools
|
3
|
+
# Copyright: ©2009 Apple, Inc.
|
4
|
+
# portions copyright @2006-2009 Sprout Systems, Inc.
|
5
|
+
# and contributors
|
6
|
+
# ===========================================================================
|
7
|
+
|
8
|
+
module SC::Helpers
|
9
|
+
|
10
|
+
# Given a set of targets, this can determine the optimial mix of loading
|
11
|
+
# packed targets vs individual targets to yield the smaller number of
|
12
|
+
# assets. To use this optimizer, just call the optimize() method.
|
13
|
+
class PackedOptimizer
|
14
|
+
|
15
|
+
# Returns two arrays: the first array are targets that should be loaded
|
16
|
+
# packed. The array of targets that should be loaded, but not packed.
|
17
|
+
# And optional third array is also returned that includes targets which
|
18
|
+
# were passed in but are no longer needed because they are included in
|
19
|
+
# a packed target.
|
20
|
+
def self.optimize(targets)
|
21
|
+
packed = []
|
22
|
+
unpacked = targets
|
23
|
+
cnt = packed.size + unpacked.size
|
24
|
+
|
25
|
+
# for each target, try to use the packed version and see how many
|
26
|
+
# total items we come back with. If the total number of targets is
|
27
|
+
# less than the current best option, use that instead.
|
28
|
+
targets.each do |target|
|
29
|
+
cur_packed, cur_unpacked = self.new.process(target, targets)
|
30
|
+
cur_cnt = cur_packed.size + cur_unpacked.size
|
31
|
+
if cur_cnt < cnt
|
32
|
+
packed = cur_packed
|
33
|
+
unpacked = cur_unpacked
|
34
|
+
cnt = cur_cnt
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# return best!
|
39
|
+
return [packed, unpacked]
|
40
|
+
end
|
41
|
+
|
42
|
+
attr_reader :packed
|
43
|
+
attr_reader :unpacked
|
44
|
+
|
45
|
+
def initialize
|
46
|
+
@seen = []
|
47
|
+
@packed = []
|
48
|
+
@unpacked = []
|
49
|
+
end
|
50
|
+
|
51
|
+
# Sorts the passed array of targets into packed and unpacked, starting
|
52
|
+
# with the passed target as the packed target.
|
53
|
+
def process(packed_target, targets)
|
54
|
+
# manually add in packed target...
|
55
|
+
@seen << packed_target
|
56
|
+
@packed << packed_target
|
57
|
+
packed_target.expand_required_targets.each { |t| @seen << t }
|
58
|
+
|
59
|
+
# then handle the rest of the targets
|
60
|
+
targets.each { |t| process_target(t) }
|
61
|
+
|
62
|
+
return [packed, unpacked]
|
63
|
+
end
|
64
|
+
|
65
|
+
# Sorts a single target into the correct bucket based on whether it is
|
66
|
+
# seen or not. If you also pass true to the second param, the required
|
67
|
+
# targets will also be sorted.
|
68
|
+
def process_target(target)
|
69
|
+
# if target was seen already, nothing to do
|
70
|
+
return if @seen.include?(target)
|
71
|
+
|
72
|
+
# add to seen
|
73
|
+
@seen << target
|
74
|
+
|
75
|
+
# have we already seen any of the required targets?
|
76
|
+
req_targets = target.expand_required_targets
|
77
|
+
if req_targets.size > 0
|
78
|
+
already_seen = req_targets.find do |t|
|
79
|
+
@seen.include?(t)
|
80
|
+
end
|
81
|
+
else
|
82
|
+
already_seen = true
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
# if we have seen one, then we can't use the packed version so put it
|
87
|
+
# in the unpacked set.
|
88
|
+
if already_seen
|
89
|
+
req_targets.each { |t| process_target(t) }
|
90
|
+
@unpacked << target # add last to keep order intact
|
91
|
+
|
92
|
+
# if we have not seen any required, then we can mark this as packed.
|
93
|
+
# yeah! mark the required targets as seen also
|
94
|
+
else
|
95
|
+
req_targets.each { |t| @seen << t }
|
96
|
+
@packed << target
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|