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,109 @@
|
|
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
|
+
# A HashStruct is a type of hash that can also be accessed as a structed
|
11
|
+
# (like an OpenStruct). It also treats strings and symbols as the same
|
12
|
+
# for keys.
|
13
|
+
class HashStruct < Hash
|
14
|
+
|
15
|
+
# This method will provide a deep clone of the hash and its contents.
|
16
|
+
# If any member methods also respond to deep_clone, that method will be
|
17
|
+
# used.
|
18
|
+
def deep_clone
|
19
|
+
sibling = self.class.new
|
20
|
+
self.each do | key, value |
|
21
|
+
if value.respond_to? :deep_clone
|
22
|
+
value = value.deep_clone
|
23
|
+
else
|
24
|
+
value = value.clone rescue value
|
25
|
+
end
|
26
|
+
sibling[key] = value
|
27
|
+
end
|
28
|
+
sibling
|
29
|
+
end
|
30
|
+
|
31
|
+
# Returns true if the receiver has all of the options set
|
32
|
+
def has_options?(opts = {})
|
33
|
+
opts.each do |key, value|
|
34
|
+
return false if self[key] != value
|
35
|
+
end
|
36
|
+
return true
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_hash
|
40
|
+
ret = {}
|
41
|
+
each { |key, value| ret[key] = value }
|
42
|
+
return ret
|
43
|
+
end
|
44
|
+
|
45
|
+
######################################################
|
46
|
+
# INTERNAL SUPPORT
|
47
|
+
#
|
48
|
+
|
49
|
+
# Pass in any options you want set initially on the manifest entry.
|
50
|
+
def initialize(opts = {})
|
51
|
+
super
|
52
|
+
self.merge!(opts)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Allow for method-like access to hash also...
|
56
|
+
def method_missing(method_name, *args)
|
57
|
+
method_name = method_name.to_s
|
58
|
+
if method_name =~ /=$/
|
59
|
+
# suppoert property? = true
|
60
|
+
if method_name =~ /\?=$/
|
61
|
+
method_name = method_name[0..-3]
|
62
|
+
value = !!args[0]
|
63
|
+
else
|
64
|
+
method_name = method_name[0..-2]
|
65
|
+
value = args[0]
|
66
|
+
end
|
67
|
+
self[method_name] = value
|
68
|
+
|
69
|
+
# convert property? => !!self[:property]
|
70
|
+
elsif method_name =~ /\?$/
|
71
|
+
!!self[method_name[0..-2]]
|
72
|
+
else
|
73
|
+
self[method_name]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Treat all keys like symbols
|
78
|
+
def [](key)
|
79
|
+
sym_key = key.to_sym rescue nil
|
80
|
+
raise "HashStruct cannot convert #{key} to symbol" if sym_key.nil?
|
81
|
+
fetch(sym_key, nil)
|
82
|
+
end
|
83
|
+
|
84
|
+
def []=(key, value)
|
85
|
+
sym_key = key.to_sym rescue nil
|
86
|
+
raise "HashStruct cannot convert #{key} to symbol" if sym_key.nil?
|
87
|
+
store(sym_key, value)
|
88
|
+
end
|
89
|
+
|
90
|
+
# Reimplement merge! to go through the []=() method so that keys can be
|
91
|
+
# symbolized
|
92
|
+
def merge!(other_hash)
|
93
|
+
return self if other_hash == self
|
94
|
+
unless other_hash.nil?
|
95
|
+
other_hash.each { |k,v| self[k] = v }
|
96
|
+
end
|
97
|
+
return self
|
98
|
+
end
|
99
|
+
|
100
|
+
# Reimplement to return a new HashStruct
|
101
|
+
def merge(other_hash)
|
102
|
+
ret = self.class.new.merge!(self)
|
103
|
+
ret.merge!(other_hash) if other_hash != self
|
104
|
+
return ret
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
@@ -0,0 +1,342 @@
|
|
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
|
+
require 'set'
|
9
|
+
|
10
|
+
module SC
|
11
|
+
|
12
|
+
# A Manifest describes all of the files that should be found inside of a
|
13
|
+
# single bundle/language. A Manifest can have global properties assigned to
|
14
|
+
# it which will be used by the manifest entries themselves. This is largly
|
15
|
+
# defined by the manifest build tasks.
|
16
|
+
#
|
17
|
+
class Manifest < HashStruct
|
18
|
+
|
19
|
+
attr_reader :target
|
20
|
+
|
21
|
+
def entries(opts={})
|
22
|
+
include_hidden = opts[:hidden] || false
|
23
|
+
return @entries if include_hidden
|
24
|
+
@entries.reject { |e| e.hidden? }
|
25
|
+
end
|
26
|
+
|
27
|
+
def initialize(target, opts)
|
28
|
+
super(opts)
|
29
|
+
@target = target
|
30
|
+
@entries = []
|
31
|
+
end
|
32
|
+
|
33
|
+
def inspect
|
34
|
+
opts = variation.dup
|
35
|
+
opts[:target] = target.target_name
|
36
|
+
desc = opts.keys.sort { |a,b| a.to_s <=> b.to_s }.map { |k| [k, opts[k]].join("=") }.join(" ")
|
37
|
+
"SC::Manifest(#{desc})"
|
38
|
+
end
|
39
|
+
|
40
|
+
# Invoked just before a manifest is built. If you load a manifest file
|
41
|
+
# this method will not be invoked.
|
42
|
+
# === Returns
|
43
|
+
# self
|
44
|
+
def prepare!
|
45
|
+
if !@is_prepared
|
46
|
+
@is_prepared = true
|
47
|
+
target.prepare!
|
48
|
+
if target.buildfile.task_defined? 'manifest:prepare'
|
49
|
+
target.buildfile.invoke 'manifest:prepare',
|
50
|
+
:manifest => self,
|
51
|
+
:target => self.target,
|
52
|
+
:config => self.target.config,
|
53
|
+
:project => self.target.project
|
54
|
+
end
|
55
|
+
end
|
56
|
+
return self
|
57
|
+
end
|
58
|
+
|
59
|
+
def prepared?; @is_prepared || false; end
|
60
|
+
|
61
|
+
# Returns the options that select the current variation. The current
|
62
|
+
# implementation is hardcoded to return the language, but this may be
|
63
|
+
# generalized in the future.
|
64
|
+
#
|
65
|
+
# You can use this method to select the same manifest in other targets.
|
66
|
+
#
|
67
|
+
# === Examples
|
68
|
+
#
|
69
|
+
# other_manifest = other_target.manifest_for(my_manifest.variation)
|
70
|
+
#
|
71
|
+
def variation
|
72
|
+
return { :language => self.language }
|
73
|
+
end
|
74
|
+
|
75
|
+
# Builds the manifest if it has not been built yet.
|
76
|
+
def build!
|
77
|
+
prepare!
|
78
|
+
if !@is_built
|
79
|
+
@is_built = true
|
80
|
+
if target.buildfile.task_defined? 'manifest:build'
|
81
|
+
target.buildfile.invoke 'manifest:build',
|
82
|
+
:manifest => self,
|
83
|
+
:target => self.target,
|
84
|
+
:config => self.target.config,
|
85
|
+
:project => self.target.project
|
86
|
+
end
|
87
|
+
end
|
88
|
+
return self
|
89
|
+
end
|
90
|
+
|
91
|
+
# Resets the manifest entries. this is called before a build is
|
92
|
+
# performed. This will reset only the entries, none of the other props.
|
93
|
+
#
|
94
|
+
# === Returns
|
95
|
+
# Manifest (self)
|
96
|
+
#
|
97
|
+
def reset_entries!
|
98
|
+
@is_built = false
|
99
|
+
@entries = []
|
100
|
+
return self
|
101
|
+
end
|
102
|
+
|
103
|
+
# Returns the manifest as a hash that can be serialized to json or yaml
|
104
|
+
def to_hash(opts={})
|
105
|
+
ret = super()
|
106
|
+
|
107
|
+
if only_keys = opts[:only]
|
108
|
+
filtered = {}
|
109
|
+
ret.each do |key, value|
|
110
|
+
filtered[key] = value if only_keys.include?(key)
|
111
|
+
end
|
112
|
+
ret = filtered
|
113
|
+
end
|
114
|
+
|
115
|
+
# Always include entries unless they are explicitly excluded
|
116
|
+
ret[:entries] = entries(opts).map { |e| e.to_hash(opts) }
|
117
|
+
|
118
|
+
if except_keys = opts[:except]
|
119
|
+
filtered = {}
|
120
|
+
ret.each do |key, value|
|
121
|
+
filtered[key] = value unless except_keys.include?(key)
|
122
|
+
end
|
123
|
+
ret = filtered
|
124
|
+
end
|
125
|
+
|
126
|
+
# always add target name. needed to reload
|
127
|
+
ret[:target_name] = target.target_name
|
128
|
+
return ret
|
129
|
+
end
|
130
|
+
|
131
|
+
# Loads a hash into the manifest, replacing whatever contents are
|
132
|
+
# already here.
|
133
|
+
#
|
134
|
+
# === Params
|
135
|
+
# hash:: the hash loaded from disk
|
136
|
+
#
|
137
|
+
# === Returns
|
138
|
+
# Manifest (self)
|
139
|
+
#
|
140
|
+
def load(hash)
|
141
|
+
merge!(hash)
|
142
|
+
entry_hashes = self.delete(:entries) || []
|
143
|
+
@entries = entry_hashes.map do |opts|
|
144
|
+
ManifestEntry.new(self, opts)
|
145
|
+
end
|
146
|
+
return self
|
147
|
+
end
|
148
|
+
|
149
|
+
# Creates a new manifest entry with the passed options. Will setup extra
|
150
|
+
# tracking needed by entry.
|
151
|
+
#
|
152
|
+
# ==== Params
|
153
|
+
# opts:: the options you want to set on the entry
|
154
|
+
#
|
155
|
+
# ==== Returns
|
156
|
+
# the new manifest entry
|
157
|
+
#
|
158
|
+
def add_entry(filename, opts = {})
|
159
|
+
opts[:filename] = filename
|
160
|
+
@entries << (ret = ManifestEntry.new(self, opts)).prepare!
|
161
|
+
return ret
|
162
|
+
end
|
163
|
+
|
164
|
+
# Creates a composite entry with the passed filename. Expects you to
|
165
|
+
# a source_entries option. This automatically hides the source entries
|
166
|
+
# unless you pass the :hide_entries => false option.
|
167
|
+
def add_composite(filename, opts = {})
|
168
|
+
should_hide_entries = opts.delete(:hide_entries)
|
169
|
+
should_hide_entries = true if should_hide_entries.nil?
|
170
|
+
|
171
|
+
opts[:filename] = filename
|
172
|
+
opts[:source_entries] ||= []
|
173
|
+
opts[:composite] = true
|
174
|
+
@entries << (ret = ManifestEntry.new(self, opts)).prepare!
|
175
|
+
|
176
|
+
ret.source_entries.each { |entry| entry.hide! } if should_hide_entries
|
177
|
+
return ret
|
178
|
+
end
|
179
|
+
|
180
|
+
# Creates an entry with will apply a build task to the source entry. Use
|
181
|
+
# this method when you need to apply a build task to an entry to convert
|
182
|
+
# it into another format or to perform some kind of incremental build.
|
183
|
+
#
|
184
|
+
# === Params
|
185
|
+
# entry:: the entry that should be the source of the transform
|
186
|
+
#
|
187
|
+
# === Options
|
188
|
+
# You can assign any options you like and they will be copied onto the
|
189
|
+
# new entry. The following options, however, have special meaning:
|
190
|
+
#
|
191
|
+
# :build_task:: name the new build task you use. otherwise uses copy
|
192
|
+
# :ext:: the new file extension. if you don't override, the build_path
|
193
|
+
# staging_path and filename will all be adjusted to have this ext.
|
194
|
+
# :hide_entry:: the source entry will be hidden unless set to false
|
195
|
+
# === Returns
|
196
|
+
# the new ManifestEntry
|
197
|
+
#
|
198
|
+
def add_transform(entry, opts ={})
|
199
|
+
should_hide_entries = opts.delete(:hide_entries) || opts.delete(:hide_entry)
|
200
|
+
should_hide_entries = true if should_hide_entries.nil?
|
201
|
+
|
202
|
+
# Clone important properties to new transform...
|
203
|
+
opts = HashStruct.new(opts)
|
204
|
+
%w(filename build_path url).each do |key|
|
205
|
+
opts[key] ||= entry[key]
|
206
|
+
end
|
207
|
+
|
208
|
+
# generate a unique staging path. If the original entry has its
|
209
|
+
# staging_path set == to source_root (optimization for build:copy), then
|
210
|
+
# first rebase staging path against the staging root.
|
211
|
+
if (staging_path = entry.staging_path) == entry.source_path
|
212
|
+
staging_path = File.join(self.staging_root, entry.filename)
|
213
|
+
end
|
214
|
+
opts.staging_path ||= unique_staging_path(staging_path)
|
215
|
+
|
216
|
+
# copy other useful entries
|
217
|
+
opts.source_entry = entry
|
218
|
+
opts.source_entries = [entry]
|
219
|
+
opts.composite = true
|
220
|
+
opts.transform = true # make .transform? = true
|
221
|
+
|
222
|
+
# Normalize to new extension if provided. else copy ext from entry...
|
223
|
+
if opts.ext
|
224
|
+
%w(filename build_path staging_path url).each do |key|
|
225
|
+
opts[key] = opts[key].ext(opts.ext)
|
226
|
+
end
|
227
|
+
opts.ext = opts.ext.to_s
|
228
|
+
else
|
229
|
+
opts.ext = entry.ext
|
230
|
+
end
|
231
|
+
|
232
|
+
# Create new entry and hide old one
|
233
|
+
@entries << (ret = ManifestEntry.new(self, opts)).prepare!
|
234
|
+
entry.hide! if should_hide_entries
|
235
|
+
|
236
|
+
# done!
|
237
|
+
return ret
|
238
|
+
end
|
239
|
+
|
240
|
+
# Finds the first visible entry with the specified filename. You may also
|
241
|
+
# pass any number of additional options which will be used to further
|
242
|
+
# restrict your search. If you pass :hidden => true only hidden entries
|
243
|
+
# will be returned. Otherwise, only visible entries will be returned.
|
244
|
+
#
|
245
|
+
# You may also include the name of the target you would like to search.
|
246
|
+
# The target name should be relative to the target you are requesting
|
247
|
+
# from.
|
248
|
+
#
|
249
|
+
# === Examples
|
250
|
+
#
|
251
|
+
# entry = manifest.entry_for('javascript.js')
|
252
|
+
# => returns local javascript.js entry
|
253
|
+
#
|
254
|
+
# entry = manifest.entry_for('sproutcore:javascript.js')
|
255
|
+
# => returns entry for javascript.js in 'sproutcore' bundle
|
256
|
+
#
|
257
|
+
# entry = manifest.entry_for('sproutcore/costello:javascript.js')
|
258
|
+
#
|
259
|
+
#
|
260
|
+
# === Params
|
261
|
+
# filename:: the filename to search
|
262
|
+
#
|
263
|
+
# === Options
|
264
|
+
# :hidden:: if true, include hidden entries
|
265
|
+
#
|
266
|
+
# === Returns
|
267
|
+
# the manifest entry
|
268
|
+
def entry_for(filename, opts = {})
|
269
|
+
target_name, filename = filename.split(':')
|
270
|
+
if filename.nil? # no targetname given...
|
271
|
+
manifest = self
|
272
|
+
filename = target_name
|
273
|
+
else
|
274
|
+
manifest = target.target_for(target_name).manifest_for(self.variation)
|
275
|
+
manifest.build!
|
276
|
+
end
|
277
|
+
|
278
|
+
manifest.entries(:hidden => opts[:hidden]).find do |entry|
|
279
|
+
(entry.filename == filename) && entry.has_options?(opts)
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
283
|
+
# Attempts to find any entry matching the specified static URL fragment.
|
284
|
+
# the fragment you pass may contain only a portion of the url, and it may
|
285
|
+
# exclude the file extension if you choose. The filter will select the
|
286
|
+
# entry with the broadest match possible.
|
287
|
+
#
|
288
|
+
# This is the root search method used by static_url().
|
289
|
+
#
|
290
|
+
def find_entry(fragment, opts = {}, seen=nil)
|
291
|
+
|
292
|
+
extname = File.extname(fragment)
|
293
|
+
rootname = fragment.sub(/#{extname}$/, '')
|
294
|
+
entry_extname = entry_rootname = nil
|
295
|
+
|
296
|
+
ret = entries(:hidden => opts[:hidden]).reject do |entry|
|
297
|
+
if entry.has_options?(opts)
|
298
|
+
entry_extname = File.extname(entry.filename)
|
299
|
+
entry_rootname = entry.filename.sub(/#{entry_extname}$/,'')
|
300
|
+
ext_match = (extname.nil? || extname.size == 0) || (entry_extname == extname)
|
301
|
+
else
|
302
|
+
ext_match = false
|
303
|
+
end
|
304
|
+
!(ext_match && (/#{rootname}$/ =~ entry_rootname))
|
305
|
+
end
|
306
|
+
|
307
|
+
ret = ret.first
|
308
|
+
|
309
|
+
# if no match was found, search the same manifests in required targets
|
310
|
+
if ret.nil?
|
311
|
+
seen = Set.new if seen.nil?
|
312
|
+
seen << self.target
|
313
|
+
self.target.expand_required_targets.each do |t|
|
314
|
+
next if seen.include?(t) # avoid recursion
|
315
|
+
|
316
|
+
manifest = t.manifest_for(self.variation).build!
|
317
|
+
ret = manifest.find_entry(fragment, opts, seen)
|
318
|
+
break unless ret.nil?
|
319
|
+
end
|
320
|
+
end
|
321
|
+
return ret
|
322
|
+
end
|
323
|
+
|
324
|
+
# Finds a unique staging path starting with the root proposed staging
|
325
|
+
# path.
|
326
|
+
def unique_staging_path(path)
|
327
|
+
paths = entries(:hidden => true).map { |e| e.staging_path }
|
328
|
+
while paths.include?(path)
|
329
|
+
path = path.sub(/(__\$[0-9]+)?(\.\w+)?$/,"__$#{next_staging_uuid}\\2")
|
330
|
+
end
|
331
|
+
return path
|
332
|
+
end
|
333
|
+
|
334
|
+
protected
|
335
|
+
|
336
|
+
def next_staging_uuid
|
337
|
+
self.staging_uuid = (self.staging_uuid || 0) + 1
|
338
|
+
end
|
339
|
+
|
340
|
+
end
|
341
|
+
|
342
|
+
end
|