sproutit-sproutcore 1.0.203 → 1.0.20090721145236
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/Rakefile +54 -189
- data/VERSION +1 -0
- data/lib/sproutcore/tools/build.rb +1 -1
- data/lib/sproutcore.rb +1 -9
- 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/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/a.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/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/a.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/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-abbot.gemspec +640 -0
- data/vendor/jsdoc/templates/jsdoc/allclasses.tmpl +17 -0
- data/vendor/jsdoc/templates/jsdoc/allfiles.tmpl +56 -0
- data/vendor/jsdoc/templates/jsdoc/class.tmpl +487 -0
- data/vendor/jsdoc/templates/jsdoc/index.tmpl +38 -0
- data/vendor/jsdoc/templates/jsdoc/symbol.tmpl +35 -0
- data/vendor/jsdoc/templates/sproutcore/allclasses.tmpl +0 -0
- data/vendor/jsdoc/templates/sproutcore/allfiles.tmpl +56 -0
- data/vendor/jsdoc/templates/sproutcore/class.tmpl +674 -0
- data/vendor/jsdoc/templates/sproutcore/index.tmpl +55 -0
- data/vendor/jsdoc/templates/sproutcore/symbol.tmpl +35 -0
- metadata +351 -664
- data/VERSION.yml +0 -5
- data/frameworks/sproutcore/Buildfile +0 -64
- data/frameworks/sproutcore/HISTORY +0 -682
- data/frameworks/sproutcore/README +0 -23
- data/frameworks/sproutcore/apps/docs/core.js +0 -27
- data/frameworks/sproutcore/apps/docs/english.lproj/loading.rhtml +0 -9
- data/frameworks/sproutcore/apps/docs/english.lproj/main_page.js +0 -22
- data/frameworks/sproutcore/apps/docs/english.lproj/strings.js +0 -15
- data/frameworks/sproutcore/apps/docs/main.js +0 -30
- data/frameworks/sproutcore/apps/tests/controllers/detail.js +0 -16
- data/frameworks/sproutcore/apps/tests/controllers/source.js +0 -29
- data/frameworks/sproutcore/apps/tests/controllers/target.js +0 -26
- data/frameworks/sproutcore/apps/tests/controllers/targets.js +0 -86
- data/frameworks/sproutcore/apps/tests/controllers/tests.js +0 -33
- data/frameworks/sproutcore/apps/tests/core.js +0 -133
- data/frameworks/sproutcore/apps/tests/data_source.js +0 -96
- data/frameworks/sproutcore/apps/tests/english.lproj/loading.rhtml +0 -9
- data/frameworks/sproutcore/apps/tests/english.lproj/main_page.css +0 -39
- data/frameworks/sproutcore/apps/tests/english.lproj/main_page.js +0 -232
- data/frameworks/sproutcore/apps/tests/english.lproj/strings.js +0 -26
- data/frameworks/sproutcore/apps/tests/fixtures/target.js +0 -87
- data/frameworks/sproutcore/apps/tests/fixtures/test.js +0 -44
- data/frameworks/sproutcore/apps/tests/main.js +0 -28
- data/frameworks/sproutcore/apps/tests/models/target.js +0 -92
- data/frameworks/sproutcore/apps/tests/models/test.js +0 -48
- data/frameworks/sproutcore/apps/tests/states/no_targets.js +0 -26
- data/frameworks/sproutcore/apps/tests/states/ready.js +0 -56
- data/frameworks/sproutcore/apps/tests/states/ready_detail.js +0 -41
- data/frameworks/sproutcore/apps/tests/states/ready_empty.js +0 -48
- data/frameworks/sproutcore/apps/tests/states/ready_list.js +0 -41
- data/frameworks/sproutcore/apps/tests/states/ready_loading.js +0 -44
- data/frameworks/sproutcore/apps/tests/states/ready_no_tests.js +0 -31
- data/frameworks/sproutcore/apps/tests/states/start.js +0 -39
- data/frameworks/sproutcore/apps/tests/tests/controllers/detail.js +0 -15
- data/frameworks/sproutcore/apps/tests/tests/controllers/source.js +0 -15
- data/frameworks/sproutcore/apps/tests/tests/controllers/target.js +0 -15
- data/frameworks/sproutcore/apps/tests/tests/controllers/targets.js +0 -15
- data/frameworks/sproutcore/apps/tests/tests/controllers/tests.js +0 -15
- data/frameworks/sproutcore/apps/tests/tests/models/target.js +0 -15
- data/frameworks/sproutcore/apps/tests/tests/models/test.js +0 -15
- data/frameworks/sproutcore/apps/tests/tests/views/offset_checkbox.js +0 -15
- data/frameworks/sproutcore/apps/tests/views/offset_checkbox.js +0 -26
- data/frameworks/sproutcore/apps/welcome/core.js +0 -23
- data/frameworks/sproutcore/apps/welcome/english.lproj/loading.rhtml +0 -8
- data/frameworks/sproutcore/apps/welcome/english.lproj/main_page.js +0 -43
- data/frameworks/sproutcore/apps/welcome/english.lproj/strings.js +0 -15
- data/frameworks/sproutcore/apps/welcome/main.js +0 -36
- data/frameworks/sproutcore/design/Record State Table.numbers +0 -0
- data/frameworks/sproutcore/frameworks/datastore/core.js +0 -14
- data/frameworks/sproutcore/frameworks/datastore/data_sources/cascade.js +0 -113
- data/frameworks/sproutcore/frameworks/datastore/data_sources/data_source.js +0 -273
- data/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures.js +0 -311
- data/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures_with_queries.js +0 -238
- data/frameworks/sproutcore/frameworks/datastore/debug/json.js +0 -71
- data/frameworks/sproutcore/frameworks/datastore/debug/standard_setup.js +0 -96
- data/frameworks/sproutcore/frameworks/datastore/fixtures/author_fixtures.js +0 -2503
- data/frameworks/sproutcore/frameworks/datastore/fixtures/sample.js +0 -17
- data/frameworks/sproutcore/frameworks/datastore/models/fetched_attribute.js +0 -92
- data/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +0 -54
- data/frameworks/sproutcore/frameworks/datastore/models/record.js +0 -561
- data/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +0 -423
- data/frameworks/sproutcore/frameworks/datastore/system/many_array.js +0 -158
- data/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +0 -488
- data/frameworks/sproutcore/frameworks/datastore/system/query.js +0 -979
- data/frameworks/sproutcore/frameworks/datastore/system/record_array.js +0 -287
- data/frameworks/sproutcore/frameworks/datastore/system/store.js +0 -2007
- data/frameworks/sproutcore/frameworks/datastore/tests/data_sources/fixtures.js +0 -121
- data/frameworks/sproutcore/frameworks/datastore/tests/integration/contact_model.js +0 -114
- data/frameworks/sproutcore/frameworks/datastore/tests/integration/mail_model.js +0 -91
- data/frameworks/sproutcore/frameworks/datastore/tests/integration/test_runner_model.js +0 -56
- data/frameworks/sproutcore/frameworks/datastore/tests/models/many_attribute.js +0 -94
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/core_methods.js +0 -30
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/destroy.js +0 -73
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/normalize.js +0 -238
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/readAttribute.js +0 -48
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/refresh.js +0 -42
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/storeDidChangeProperties.js +0 -138
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/unknownProperty.js +0 -46
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/writeAttribute.js +0 -71
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +0 -204
- data/frameworks/sproutcore/frameworks/datastore/tests/system/many_array/core_methods.js +0 -178
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/chain.js +0 -40
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChanges.js +0 -117
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +0 -135
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/dataHashDidChange.js +0 -110
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/discardChanges.js +0 -99
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readDataHash.js +0 -180
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readEditableDataHash.js +0 -126
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/removeDataHash.js +0 -163
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/writeDataHash.js +0 -166
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/compare_records.js +0 -126
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation.js +0 -165
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation_of_records.js +0 -82
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/find_all.js +0 -362
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/parsing.js +0 -170
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/record_type_is.js +0 -43
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/registered_comparisons.js +0 -60
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/registered_query_extensions.js +0 -67
- data/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/core_methods.js +0 -164
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/cancelRecord.js +0 -54
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitChangesFromNestedStore.js +0 -126
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitRecord.js +0 -126
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/core_methods.js +0 -73
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/createRecord.js +0 -72
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataHashDidChange.js +0 -78
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataSourceCallbacks.js +0 -249
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/destroyRecord.js +0 -106
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/init.js +0 -21
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushChanges.js +0 -61
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/readDataHash.js +0 -74
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/readEditableDataHash.js +0 -74
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/recordDidChange.js +0 -74
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/removeDataHash.js +0 -144
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/retrieveRecord.js +0 -137
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/writeDataHash.js +0 -130
- data/frameworks/sproutcore/frameworks/debug/core.js +0 -61
- data/frameworks/sproutcore/frameworks/deprecated/core.js +0 -59
- data/frameworks/sproutcore/frameworks/deprecated/lib/button_views.rb +0 -330
- data/frameworks/sproutcore/frameworks/deprecated/lib/collection_view.rb +0 -83
- data/frameworks/sproutcore/frameworks/deprecated/lib/core_views.rb +0 -326
- data/frameworks/sproutcore/frameworks/deprecated/lib/form_views.rb +0 -253
- data/frameworks/sproutcore/frameworks/deprecated/lib/index.rhtml +0 -75
- data/frameworks/sproutcore/frameworks/deprecated/lib/menu_views.rb +0 -93
- data/frameworks/sproutcore/frameworks/deprecated/server/rails_server.js +0 -80
- data/frameworks/sproutcore/frameworks/deprecated/server/rest_server.js +0 -178
- data/frameworks/sproutcore/frameworks/deprecated/server/server.js +0 -673
- data/frameworks/sproutcore/frameworks/deprecated/system/animator.js +0 -679
- data/frameworks/sproutcore/frameworks/deprecated/system/binding.js +0 -36
- data/frameworks/sproutcore/frameworks/deprecated/system/browser.js +0 -75
- data/frameworks/sproutcore/frameworks/deprecated/system/classic_responder.js +0 -312
- data/frameworks/sproutcore/frameworks/deprecated/system/event.js +0 -58
- data/frameworks/sproutcore/frameworks/deprecated/system/globals.js +0 -20
- data/frameworks/sproutcore/frameworks/deprecated/system/misc.js +0 -58
- data/frameworks/sproutcore/frameworks/deprecated/system/node_descriptor.js +0 -72
- data/frameworks/sproutcore/frameworks/deprecated/system/object.js +0 -122
- data/frameworks/sproutcore/frameworks/deprecated/system/path_module.js +0 -432
- data/frameworks/sproutcore/frameworks/deprecated/system/string.js +0 -107
- data/frameworks/sproutcore/frameworks/deprecated/tests/application/application.rhtml +0 -125
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/classic_view/clippingFrame.rhtml +0 -401
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/classic_view/frame.rhtml +0 -357
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/classic_view/isVisibleInWindow.rhtml +0 -147
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/collection/base.rhtml +0 -298
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/collection/incremental_rendering.rhtml +0 -260
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/collection/source_list_rendering.rhtml +0 -143
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/popup_button.rhtml +0 -128
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/text_field.rhtml +0 -37
- data/frameworks/sproutcore/frameworks/deprecated/views/collection.js +0 -24
- data/frameworks/sproutcore/frameworks/designer/coders/design.js +0 -29
- data/frameworks/sproutcore/frameworks/designer/coders/localization.js +0 -27
- data/frameworks/sproutcore/frameworks/designer/coders/object.js +0 -347
- data/frameworks/sproutcore/frameworks/designer/controllers/page_design.js +0 -102
- data/frameworks/sproutcore/frameworks/designer/css/css_rule.js +0 -22
- data/frameworks/sproutcore/frameworks/designer/css/css_style.js +0 -29
- data/frameworks/sproutcore/frameworks/designer/css/css_style_sheet.js +0 -201
- data/frameworks/sproutcore/frameworks/designer/ext/page.js +0 -86
- data/frameworks/sproutcore/frameworks/designer/ext/view.js +0 -38
- data/frameworks/sproutcore/frameworks/designer/views/controls/button.js +0 -17
- data/frameworks/sproutcore/frameworks/designer/views/designer.js +0 -569
- data/frameworks/sproutcore/frameworks/designer/views/label.js +0 -16
- data/frameworks/sproutcore/frameworks/designer/views/mixins/button.js +0 -11
- data/frameworks/sproutcore/frameworks/designer/views/tab.js +0 -16
- data/frameworks/sproutcore/frameworks/desktop/core.js +0 -6
- data/frameworks/sproutcore/frameworks/desktop/debug/drag.js +0 -41
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/alert.css +0 -56
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/debug/a_sample_image.jpg +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/debug/apple-logo1.jpeg +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/debug/iframe.html +0 -23
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/disclosure.css +0 -71
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/drag.css +0 -6
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/icons.css +0 -943
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_222222.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_454545.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_888888.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_ffffff.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/shared.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/indicator.gif +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/panels/sprite-x.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/panels/sprite-y.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/sc-theme-sprite.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/standard_fade/000000.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/standard_fade/ffffff.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/sticky-note.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/list_item.css +0 -209
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/menu_item_view.css +0 -100
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/modal.css +0 -5
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/panel.css +0 -95
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/picker.css +0 -39
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/progress.css +0 -31
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/radio.css +0 -10
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/scroller.css +0 -26
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/segmented.css +0 -141
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/separator.css +0 -19
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/slider.css +0 -62
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/split.css +0 -70
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/split_divider.css +0 -9
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/strings.js +0 -14
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/tab.css +0 -12
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/toolbar.css +0 -6
- data/frameworks/sproutcore/frameworks/desktop/mixins/border.js +0 -53
- data/frameworks/sproutcore/frameworks/desktop/mixins/collection_group.js +0 -22
- data/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +0 -61
- data/frameworks/sproutcore/frameworks/desktop/mixins/collection_view_delegate.js +0 -283
- data/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +0 -247
- data/frameworks/sproutcore/frameworks/desktop/panes/alert.js +0 -408
- data/frameworks/sproutcore/frameworks/desktop/panes/menu.js +0 -651
- data/frameworks/sproutcore/frameworks/desktop/panes/modal.js +0 -68
- data/frameworks/sproutcore/frameworks/desktop/panes/palette.js +0 -63
- data/frameworks/sproutcore/frameworks/desktop/panes/panel.js +0 -184
- data/frameworks/sproutcore/frameworks/desktop/panes/picker.js +0 -400
- data/frameworks/sproutcore/frameworks/desktop/panes/sheet.js +0 -46
- data/frameworks/sproutcore/frameworks/desktop/protocols/drag_data_source.js +0 -39
- data/frameworks/sproutcore/frameworks/desktop/protocols/drag_source.js +0 -81
- data/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +0 -175
- data/frameworks/sproutcore/frameworks/desktop/protocols/responder.js +0 -280
- data/frameworks/sproutcore/frameworks/desktop/system/drag.js +0 -827
- data/frameworks/sproutcore/frameworks/desktop/system/key_bindings.js +0 -40
- data/frameworks/sproutcore/frameworks/desktop/system/root_responder.js +0 -641
- data/frameworks/sproutcore/frameworks/desktop/system/undo_manager.js +0 -187
- data/frameworks/sproutcore/frameworks/desktop/tests/integration/dialog.js +0 -43
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/methods.js +0 -10
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +0 -152
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +0 -55
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +0 -59
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/methods.js +0 -10
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/ui.js +0 -35
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/methods.js +0 -10
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/ui.js +0 -40
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/methods.js +0 -10
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/ui.js +0 -84
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/methods.js +0 -10
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/ui.js +0 -38
- data/frameworks/sproutcore/frameworks/desktop/tests/views/button/methods.js +0 -45
- data/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +0 -159
- data/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +0 -144
- data/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/ui.js +0 -99
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/content.js +0 -249
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/deleteSelection.js +0 -82
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/deselect.js +0 -199
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/itemViewForContentIndex.js +0 -288
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/layerIdFor.js +0 -65
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/length.js +0 -88
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/mouse.js +0 -165
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/nowShowing.js +0 -121
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/reload.js +0 -177
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/select.js +0 -240
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectNextItem.js +0 -191
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectPreviousItem.js +0 -197
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selection.js +0 -141
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/ui_diagram.js +0 -182
- data/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/methods.js +0 -10
- data/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/ui.js +0 -64
- data/frameworks/sproutcore/frameworks/desktop/tests/views/grid/methods.js +0 -10
- data/frameworks/sproutcore/frameworks/desktop/tests/views/grid/ui.js +0 -10
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowDelegate.js +0 -183
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowHeightForContentIndex.js +0 -133
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowOffsetForContentIndex.js +0 -132
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_outline.js +0 -56
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_row_heights.js +0 -167
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_simple.js +0 -127
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +0 -284
- data/frameworks/sproutcore/frameworks/desktop/tests/views/menu_item/methods.js +0 -10
- data/frameworks/sproutcore/frameworks/desktop/tests/views/menu_item/ui.js +0 -44
- data/frameworks/sproutcore/frameworks/desktop/tests/views/progress/methods.js +0 -128
- data/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +0 -240
- data/frameworks/sproutcore/frameworks/desktop/tests/views/radio/methods.js +0 -113
- data/frameworks/sproutcore/frameworks/desktop/tests/views/radio/ui.js +0 -202
- data/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +0 -139
- data/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/ui.js +0 -111
- data/frameworks/sproutcore/frameworks/desktop/tests/views/scroller/methods.js +0 -102
- data/frameworks/sproutcore/frameworks/desktop/tests/views/scroller/ui.js +0 -70
- data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +0 -95
- data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +0 -222
- data/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/methods.js +0 -81
- data/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/ui.js +0 -100
- data/frameworks/sproutcore/frameworks/desktop/tests/views/separator.js +0 -37
- data/frameworks/sproutcore/frameworks/desktop/tests/views/source_list/methods.js +0 -10
- data/frameworks/sproutcore/frameworks/desktop/tests/views/source_list/ui.js +0 -10
- data/frameworks/sproutcore/frameworks/desktop/tests/views/split/methods.js +0 -50
- data/frameworks/sproutcore/frameworks/desktop/tests/views/split/ui.js +0 -52
- data/frameworks/sproutcore/frameworks/desktop/tests/views/stacked/ui_comments.js +0 -231
- data/frameworks/sproutcore/frameworks/desktop/tests/views/tab/methods.js +0 -54
- data/frameworks/sproutcore/frameworks/desktop/tests/views/tab/ui.js +0 -88
- data/frameworks/sproutcore/frameworks/desktop/tests/views/web/methods.js +0 -10
- data/frameworks/sproutcore/frameworks/desktop/tests/views/web/ui.js +0 -110
- data/frameworks/sproutcore/frameworks/desktop/views/button.js +0 -331
- data/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +0 -105
- data/frameworks/sproutcore/frameworks/desktop/views/collection.js +0 -2757
- data/frameworks/sproutcore/frameworks/desktop/views/disclosure.js +0 -44
- data/frameworks/sproutcore/frameworks/desktop/views/form.js +0 -594
- data/frameworks/sproutcore/frameworks/desktop/views/grid.js +0 -201
- data/frameworks/sproutcore/frameworks/desktop/views/list.js +0 -540
- data/frameworks/sproutcore/frameworks/desktop/views/list_item.js +0 -660
- data/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +0 -587
- data/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +0 -68
- data/frameworks/sproutcore/frameworks/desktop/views/progress.js +0 -207
- data/frameworks/sproutcore/frameworks/desktop/views/radio.js +0 -332
- data/frameworks/sproutcore/frameworks/desktop/views/scene.js +0 -204
- data/frameworks/sproutcore/frameworks/desktop/views/scroll.js +0 -690
- data/frameworks/sproutcore/frameworks/desktop/views/scroller.js +0 -226
- data/frameworks/sproutcore/frameworks/desktop/views/segmented.js +0 -525
- data/frameworks/sproutcore/frameworks/desktop/views/select_field.js +0 -331
- data/frameworks/sproutcore/frameworks/desktop/views/separator.js +0 -37
- data/frameworks/sproutcore/frameworks/desktop/views/slider.js +0 -180
- data/frameworks/sproutcore/frameworks/desktop/views/source_list.js +0 -47
- data/frameworks/sproutcore/frameworks/desktop/views/source_list_group.js +0 -169
- data/frameworks/sproutcore/frameworks/desktop/views/split.js +0 -677
- data/frameworks/sproutcore/frameworks/desktop/views/split_divider.js +0 -55
- data/frameworks/sproutcore/frameworks/desktop/views/stacked.js +0 -101
- data/frameworks/sproutcore/frameworks/desktop/views/tab.js +0 -191
- data/frameworks/sproutcore/frameworks/desktop/views/thumb.js +0 -49
- data/frameworks/sproutcore/frameworks/desktop/views/toolbar.js +0 -49
- data/frameworks/sproutcore/frameworks/desktop/views/web.js +0 -86
- data/frameworks/sproutcore/frameworks/foundation/TESTING +0 -46
- data/frameworks/sproutcore/frameworks/foundation/controllers/array.js +0 -509
- data/frameworks/sproutcore/frameworks/foundation/controllers/controller.js +0 -45
- data/frameworks/sproutcore/frameworks/foundation/controllers/object.js +0 -323
- data/frameworks/sproutcore/frameworks/foundation/controllers/tree.js +0 -109
- data/frameworks/sproutcore/frameworks/foundation/core.js +0 -136
- data/frameworks/sproutcore/frameworks/foundation/debug/control_test_pane.js +0 -194
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/blank.gif +0 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/bootstrap.rhtml +0 -68
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/button_view.css +0 -55
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/core.css +0 -221
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/debug/control-test-pane.css +0 -9
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/images/sproutcore-logo.png +0 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/label.css +0 -30
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/static_layout.css +0 -5
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/strings.js +0 -15
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/text_field.css +0 -45
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/view.css +0 -45
- data/frameworks/sproutcore/frameworks/foundation/ext/object.js +0 -81
- data/frameworks/sproutcore/frameworks/foundation/ext/run_loop.js +0 -158
- data/frameworks/sproutcore/frameworks/foundation/fixtures/file_exists.json +0 -1
- data/frameworks/sproutcore/frameworks/foundation/license.js +0 -19
- data/frameworks/sproutcore/frameworks/foundation/mixins/button.js +0 -299
- data/frameworks/sproutcore/frameworks/foundation/mixins/collection_content.js +0 -171
- data/frameworks/sproutcore/frameworks/foundation/mixins/content_display.js +0 -88
- data/frameworks/sproutcore/frameworks/foundation/mixins/control.js +0 -352
- data/frameworks/sproutcore/frameworks/foundation/mixins/editable.js +0 -146
- data/frameworks/sproutcore/frameworks/foundation/mixins/inline_text_field.js +0 -462
- data/frameworks/sproutcore/frameworks/foundation/mixins/selection_support.js +0 -232
- data/frameworks/sproutcore/frameworks/foundation/mixins/static_layout.js +0 -132
- data/frameworks/sproutcore/frameworks/foundation/mixins/string.js +0 -251
- data/frameworks/sproutcore/frameworks/foundation/mixins/tree_item_content.js +0 -159
- data/frameworks/sproutcore/frameworks/foundation/mixins/validatable.js +0 -176
- data/frameworks/sproutcore/frameworks/foundation/panes/main.js +0 -47
- data/frameworks/sproutcore/frameworks/foundation/panes/pane.js +0 -584
- data/frameworks/sproutcore/frameworks/foundation/private/tree_item_observer.js +0 -887
- data/frameworks/sproutcore/frameworks/foundation/protocols/inline_editor_delegate.js +0 -84
- data/frameworks/sproutcore/frameworks/foundation/system/application.js +0 -36
- data/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +0 -492
- data/frameworks/sproutcore/frameworks/foundation/system/browser.js +0 -64
- data/frameworks/sproutcore/frameworks/foundation/system/builder.js +0 -210
- data/frameworks/sproutcore/frameworks/foundation/system/core_query.js +0 -2015
- data/frameworks/sproutcore/frameworks/foundation/system/cursor.js +0 -129
- data/frameworks/sproutcore/frameworks/foundation/system/datetime.js +0 -729
- data/frameworks/sproutcore/frameworks/foundation/system/error.js +0 -93
- data/frameworks/sproutcore/frameworks/foundation/system/event.js +0 -853
- data/frameworks/sproutcore/frameworks/foundation/system/image_cache.js +0 -433
- data/frameworks/sproutcore/frameworks/foundation/system/json.js +0 -440
- data/frameworks/sproutcore/frameworks/foundation/system/locale.js +0 -288
- data/frameworks/sproutcore/frameworks/foundation/system/page.js +0 -106
- data/frameworks/sproutcore/frameworks/foundation/system/ready.js +0 -195
- data/frameworks/sproutcore/frameworks/foundation/system/render_context.js +0 -904
- data/frameworks/sproutcore/frameworks/foundation/system/request.js +0 -380
- data/frameworks/sproutcore/frameworks/foundation/system/responder.js +0 -120
- data/frameworks/sproutcore/frameworks/foundation/system/responder_context.js +0 -243
- data/frameworks/sproutcore/frameworks/foundation/system/root_responder.js +0 -391
- data/frameworks/sproutcore/frameworks/foundation/system/routes.js +0 -487
- data/frameworks/sproutcore/frameworks/foundation/system/time.js +0 -478
- data/frameworks/sproutcore/frameworks/foundation/system/timer.js +0 -549
- data/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +0 -165
- data/frameworks/sproutcore/frameworks/foundation/system/utils.js +0 -425
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/array_case.js +0 -182
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/enum_case.js +0 -193
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/null_case.js +0 -64
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/single_case.js +0 -136
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/empty_case.js +0 -82
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/multiple_case.js +0 -111
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/single_case.js +0 -193
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/single_enumerable_case.js +0 -179
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/tree/outline_case.js +0 -108
- data/frameworks/sproutcore/frameworks/foundation/tests/debug/control_test_pane/methods.js +0 -10
- data/frameworks/sproutcore/frameworks/foundation/tests/debug/control_test_pane/ui.js +0 -113
- data/frameworks/sproutcore/frameworks/foundation/tests/integration/creating_views.js +0 -113
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/content.js +0 -195
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/displayProperties.js +0 -89
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/keyEquivalents.js +0 -35
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/control/content.js +0 -168
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/control/displayProperties.js +0 -89
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/staticLayout.js +0 -128
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/string.js +0 -17
- data/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/flat_case.js +0 -325
- data/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/group_case.js +0 -718
- data/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/outline_case.js +0 -484
- data/frameworks/sproutcore/frameworks/foundation/tests/system/builder.js +0 -42
- data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_core.js +0 -1323
- data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_dimensions.js +0 -387
- data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_selector.js +0 -405
- data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/setClass.js +0 -49
- data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/within.js +0 -66
- data/frameworks/sproutcore/frameworks/foundation/tests/system/datetime.js +0 -151
- data/frameworks/sproutcore/frameworks/foundation/tests/system/error.js +0 -41
- data/frameworks/sproutcore/frameworks/foundation/tests/system/json.js +0 -14
- data/frameworks/sproutcore/frameworks/foundation/tests/system/locale.js +0 -128
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/begin.js +0 -47
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/element.js +0 -44
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/end.js +0 -119
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/get.js +0 -51
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_attr.js +0 -50
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_basic.js +0 -28
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_className.js +0 -179
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_style.js +0 -100
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/init.js +0 -55
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/join.js +0 -28
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/push_text.js +0 -74
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/tag.js +0 -45
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/update.js +0 -205
- data/frameworks/sproutcore/frameworks/foundation/tests/system/request.js +0 -127
- data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/makeKeyPane.js +0 -124
- data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/makeMainPane.js +0 -68
- data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/root_responder.js +0 -101
- data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/targetForAction.js +0 -238
- data/frameworks/sproutcore/frameworks/foundation/tests/system/routes.js +0 -33
- data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/invalidate.js +0 -38
- data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/invokeLater.js +0 -201
- data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/isPaused.js +0 -71
- data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/performAction.js +0 -67
- data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/schedule.js +0 -170
- data/frameworks/sproutcore/frameworks/foundation/tests/system/user_defaults.js +0 -27
- data/frameworks/sproutcore/frameworks/foundation/tests/system/utils/normalizeURL.js +0 -18
- data/frameworks/sproutcore/frameworks/foundation/tests/system/utils/range.js +0 -62
- data/frameworks/sproutcore/frameworks/foundation/tests/validators/credit_card.js +0 -35
- data/frameworks/sproutcore/frameworks/foundation/tests/validators/date.js +0 -23
- data/frameworks/sproutcore/frameworks/foundation/tests/validators/number.js +0 -47
- data/frameworks/sproutcore/frameworks/foundation/tests/validators/password.js +0 -13
- data/frameworks/sproutcore/frameworks/foundation/tests/views/container/methods.js +0 -10
- data/frameworks/sproutcore/frameworks/foundation/tests/views/container/ui.js +0 -83
- data/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +0 -39
- data/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +0 -148
- data/frameworks/sproutcore/frameworks/foundation/tests/views/main_pane.js +0 -31
- data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/append_remove.js +0 -89
- data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/firstResponder.js +0 -148
- data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/keyPane.js +0 -133
- data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/sendEvent.js +0 -165
- data/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +0 -76
- data/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +0 -250
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/clippingFrame.js +0 -133
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/convertFrames.js +0 -246
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/createChildViews.js +0 -122
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/createLayer.js +0 -97
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/destroyLayer.js +0 -85
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/findLayerInParentLayer.js +0 -52
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/init.js +0 -50
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/insertBefore.js +0 -200
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/isVisible.js +0 -51
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/isVisibleInWindow.js +0 -113
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layer.js +0 -150
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutChildViews.js +0 -162
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutDidChange.js +0 -127
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutStyle.js +0 -328
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/parentViewDidChange.js +0 -67
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/prepareContext.js +0 -166
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/removeChild.js +0 -189
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/render.js +0 -83
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/replaceChild.js +0 -29
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/updateLayer.js +0 -146
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/updateLayerLocation.js +0 -194
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/viewDidResize.js +0 -185
- data/frameworks/sproutcore/frameworks/foundation/validators/credit_card.js +0 -125
- data/frameworks/sproutcore/frameworks/foundation/validators/date.js +0 -52
- data/frameworks/sproutcore/frameworks/foundation/validators/email.js +0 -45
- data/frameworks/sproutcore/frameworks/foundation/validators/not_empty.js +0 -33
- data/frameworks/sproutcore/frameworks/foundation/validators/number.js +0 -82
- data/frameworks/sproutcore/frameworks/foundation/validators/password.js +0 -86
- data/frameworks/sproutcore/frameworks/foundation/validators/validator.js +0 -311
- data/frameworks/sproutcore/frameworks/foundation/views/container.js +0 -136
- data/frameworks/sproutcore/frameworks/foundation/views/field.js +0 -287
- data/frameworks/sproutcore/frameworks/foundation/views/image.js +0 -161
- data/frameworks/sproutcore/frameworks/foundation/views/label.js +0 -271
- data/frameworks/sproutcore/frameworks/foundation/views/text_field.js +0 -257
- data/frameworks/sproutcore/frameworks/foundation/views/view.js +0 -2405
- data/frameworks/sproutcore/frameworks/mobile/english.lproj/core.css +0 -12
- data/frameworks/sproutcore/frameworks/mobile/lib/index.rhtml +0 -126
- data/frameworks/sproutcore/frameworks/mobile/system/root_responder.js +0 -109
- data/frameworks/sproutcore/frameworks/mobile/tests/views/button/ui.js +0 -9
- data/frameworks/sproutcore/frameworks/mobile/views/button.js +0 -190
- data/frameworks/sproutcore/frameworks/runtime/README +0 -12
- data/frameworks/sproutcore/frameworks/runtime/core.js +0 -856
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/base.js +0 -238
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/indexOf.js +0 -33
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/insertAt.js +0 -121
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/objectAt.js +0 -34
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/popObject.js +0 -50
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/pushObject.js +0 -46
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/rangeObserver.js +0 -371
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/removeAt.js +0 -100
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/removeObject.js +0 -49
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/replace.js +0 -94
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/shiftObject.js +0 -50
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/unshiftObject.js +0 -47
- data/frameworks/sproutcore/frameworks/runtime/license.js +0 -28
- data/frameworks/sproutcore/frameworks/runtime/mixins/array.js +0 -613
- data/frameworks/sproutcore/frameworks/runtime/mixins/copyable.js +0 -64
- data/frameworks/sproutcore/frameworks/runtime/mixins/delegate_support.js +0 -108
- data/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +0 -1258
- data/frameworks/sproutcore/frameworks/runtime/mixins/freezable.js +0 -104
- data/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +0 -1305
- data/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +0 -141
- data/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +0 -148
- data/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +0 -152
- data/frameworks/sproutcore/frameworks/runtime/protocols/observable_protocol.js +0 -40
- data/frameworks/sproutcore/frameworks/runtime/protocols/sparse_array_delegate.js +0 -131
- data/frameworks/sproutcore/frameworks/runtime/system/binding.js +0 -915
- data/frameworks/sproutcore/frameworks/runtime/system/enumerator.js +0 -107
- data/frameworks/sproutcore/frameworks/runtime/system/index_set.js +0 -1166
- data/frameworks/sproutcore/frameworks/runtime/system/object.js +0 -801
- data/frameworks/sproutcore/frameworks/runtime/system/range_observer.js +0 -265
- data/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +0 -241
- data/frameworks/sproutcore/frameworks/runtime/system/selection_set.js +0 -649
- data/frameworks/sproutcore/frameworks/runtime/system/set.js +0 -375
- data/frameworks/sproutcore/frameworks/runtime/system/sparse_array.js +0 -295
- data/frameworks/sproutcore/frameworks/runtime/tests/core/IsEqual.js +0 -56
- data/frameworks/sproutcore/frameworks/runtime/tests/core/beget.js +0 -23
- data/frameworks/sproutcore/frameworks/runtime/tests/core/clone.js +0 -66
- data/frameworks/sproutcore/frameworks/runtime/tests/core/compare.js +0 -44
- data/frameworks/sproutcore/frameworks/runtime/tests/core/console.js +0 -16
- data/frameworks/sproutcore/frameworks/runtime/tests/core/guidFor.js +0 -147
- data/frameworks/sproutcore/frameworks/runtime/tests/core/isArray.js +0 -25
- data/frameworks/sproutcore/frameworks/runtime/tests/core/itemType.js +0 -38
- data/frameworks/sproutcore/frameworks/runtime/tests/core/keys.js +0 -20
- data/frameworks/sproutcore/frameworks/runtime/tests/core/makeArray.js +0 -30
- data/frameworks/sproutcore/frameworks/runtime/tests/core/objectForPropertyPath.js +0 -19
- data/frameworks/sproutcore/frameworks/runtime/tests/core/tupleForPropertyPath.js +0 -37
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/array.js +0 -57
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable.js +0 -611
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +0 -587
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/propertyChanges.js +0 -132
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/registerDependentKeys.js +0 -79
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/propertyChanges.js +0 -80
- data/frameworks/sproutcore/frameworks/runtime/tests/private/observer_queue/isObservingSuspended.js +0 -55
- data/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +0 -265
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/add.js +0 -195
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/clone.js +0 -43
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/contains.js +0 -74
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/create.js +0 -42
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/indexAfter.js +0 -38
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/indexBefore.js +0 -38
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/intersects.js +0 -74
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/max.js +0 -40
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/min.js +0 -40
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/rangeStartForIndex.js +0 -36
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/remove.js +0 -189
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/without.js +0 -89
- data/frameworks/sproutcore/frameworks/runtime/tests/system/object/base.js +0 -135
- data/frameworks/sproutcore/frameworks/runtime/tests/system/object/bindings.js +0 -339
- data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/create.js +0 -59
- data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/destroy.js +0 -75
- data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/objectPropertyDidChange.js +0 -117
- data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/rangeDidChange.js +0 -110
- data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/update.js +0 -65
- data/frameworks/sproutcore/frameworks/runtime/tests/system/run_loop.js +0 -120
- data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/add.js +0 -92
- data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/copy.js +0 -17
- data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/indexSetForSource.js +0 -85
- data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/isEqual.js +0 -60
- data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/remove.js +0 -87
- data/frameworks/sproutcore/frameworks/runtime/tests/system/set.js +0 -292
- data/frameworks/sproutcore/frameworks/runtime/tests/system/sparse_array.js +0 -122
- data/frameworks/sproutcore/frameworks/testing/core.js +0 -196
- data/frameworks/sproutcore/frameworks/testing/english.lproj/additions.css +0 -8
- data/frameworks/sproutcore/frameworks/testing/english.lproj/runner.css +0 -126
- data/frameworks/sproutcore/frameworks/testing/english.lproj/testsuite.css +0 -131
- data/frameworks/sproutcore/frameworks/testing/extras.js +0 -17
- data/frameworks/sproutcore/frameworks/testing/jquery.js +0 -3559
- data/frameworks/sproutcore/frameworks/testing/qunit.js +0 -827
- data/frameworks/sproutcore/frameworks/testing/system/dump.js +0 -205
- data/frameworks/sproutcore/frameworks/testing/system/equiv.js +0 -201
- data/frameworks/sproutcore/frameworks/testing/system/plan.js +0 -691
- data/frameworks/sproutcore/frameworks/testing/system/runner.js +0 -209
- data/frameworks/sproutcore/frameworks/testing/system/suite.js +0 -228
- data/frameworks/sproutcore/frameworks/testing/utils.js +0 -62
- data/frameworks/sproutcore/lib/index.rhtml +0 -121
- data/frameworks/sproutcore/license.js +0 -28
- data/frameworks/sproutcore/themes/empty_theme/tests/mini_icons.rhtml +0 -69
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/button.css +0 -41
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/core.css +0 -8
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/backButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/blueButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/cancel.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/grayButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/leftButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/listArrow.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/listArrowSel.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/listGroup.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/loading.gif +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/pinstripes.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/rightButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/selection.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/thumb.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toggle.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toggleOn.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toolButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toolbar.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/whiteButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/strings.js +0 -15
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/button.css +0 -331
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/checkbox.css +0 -91
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/collection.css +0 -134
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/core.css +0 -60
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/disclosure.css +0 -55
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-repeat-x.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-sprite.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-ysprite.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-toolbar-view.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/label.css +0 -11
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/list_item.css +0 -30
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/pane.css +0 -8
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/background-fat.jpg +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/background-thin.jpg +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/bottom-edge.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/bottom-left-corner.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/bottom-right-corner.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/left-edge.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/overlay.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/right-edge.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/top-edge.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/top-left-corner.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/top-right-corner.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/progress.css +0 -26
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/radio.css +0 -122
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/segmented.css +0 -279
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/slider.css +0 -94
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/split_view.css +0 -27
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/tab.css +0 -18
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/text_field.css +0 -10
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/toolbar.css +0 -7
- data/lib/thor/CHANGELOG.rdoc +0 -52
- data/lib/thor/LICENSE +0 -20
- data/lib/thor/README.markdown +0 -76
- data/lib/thor/Rakefile +0 -6
- data/lib/thor/Thorfile +0 -45
- data/lib/thor/bin/rake2thor +0 -83
- data/lib/thor/bin/thor +0 -7
- data/lib/thor/lib/thor/error.rb +0 -3
- data/lib/thor/lib/thor/options.rb +0 -267
- data/lib/thor/lib/thor/ordered_hash.rb +0 -64
- data/lib/thor/lib/thor/runner.rb +0 -305
- data/lib/thor/lib/thor/task.rb +0 -83
- data/lib/thor/lib/thor/task_hash.rb +0 -22
- data/lib/thor/lib/thor/tasks/package.rb +0 -18
- data/lib/thor/lib/thor/tasks.rb +0 -77
- data/lib/thor/lib/thor/util.rb +0 -75
- data/lib/thor/lib/thor.rb +0 -170
- data/lib/thor/script/destroy +0 -14
- data/lib/thor/script/generate +0 -14
- data/lib/thor/task.thor +0 -15
@@ -1,2007 +0,0 @@
|
|
1
|
-
// ==========================================================================
|
2
|
-
// Project: SproutCore - JavaScript Application Framework
|
3
|
-
// Copyright: ©2006-2009 Sprout Systems, Inc. and contributors.
|
4
|
-
// Portions ©2008-2009 Apple, Inc. All rights reserved.
|
5
|
-
// License: Licened under MIT license (see license.js)
|
6
|
-
// ==========================================================================
|
7
|
-
|
8
|
-
sc_require('models/record');
|
9
|
-
|
10
|
-
/**
|
11
|
-
@class
|
12
|
-
|
13
|
-
|
14
|
-
The Store is where you can find all of your dataHashes. Stores can be
|
15
|
-
chained for editing purposes and committed back one chain level at a time
|
16
|
-
all the way back to a persistent data source.
|
17
|
-
|
18
|
-
Every application you create should generally have its own store objects.
|
19
|
-
Once you create the store, you will rarely need to work with the store
|
20
|
-
directly except to retrieve records and collections.
|
21
|
-
|
22
|
-
Internally, the store will keep track of changes to your json data hashes
|
23
|
-
and manage syncing those changes with your data source. A data source may
|
24
|
-
be a server, local storage, or any other persistent code.
|
25
|
-
|
26
|
-
@extends SC.Object
|
27
|
-
@since SproutCore 1.0
|
28
|
-
*/
|
29
|
-
SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
30
|
-
|
31
|
-
/**
|
32
|
-
An array of all the chained stores that current rely on the receiver
|
33
|
-
store.
|
34
|
-
|
35
|
-
@property {Array}
|
36
|
-
*/
|
37
|
-
nestedStores: null,
|
38
|
-
|
39
|
-
/**
|
40
|
-
The data source is the persistent storage that will provide data to the
|
41
|
-
store and save changes. You normally will set your data source when you
|
42
|
-
first create your store in your application.
|
43
|
-
*/
|
44
|
-
dataSource: null,
|
45
|
-
|
46
|
-
/**
|
47
|
-
This type of store is not nested.
|
48
|
-
*/
|
49
|
-
isNested: NO,
|
50
|
-
|
51
|
-
/**
|
52
|
-
This type of store is not nested.
|
53
|
-
*/
|
54
|
-
commitRecordsAutomatically: NO,
|
55
|
-
|
56
|
-
// ..........................................................
|
57
|
-
// DATA SOURCE SUPPORT
|
58
|
-
//
|
59
|
-
|
60
|
-
/**
|
61
|
-
Convenience method. Sets the current data source to the passed property.
|
62
|
-
This will also set the store property on the dataSource to the receiver.
|
63
|
-
|
64
|
-
If you are using this from the core.js method of your app, you may need to
|
65
|
-
just pass a string naming your data source class. If this is the case,
|
66
|
-
then your data source will be instantiated the first time it is requested.
|
67
|
-
|
68
|
-
@param {SC.DataSource|String} dataSource the data source
|
69
|
-
@returns {SC.Store} receiver
|
70
|
-
*/
|
71
|
-
from: function(dataSource) {
|
72
|
-
this.set('dataSource', dataSource);
|
73
|
-
return this ;
|
74
|
-
},
|
75
|
-
|
76
|
-
// lazily convert data source to real object
|
77
|
-
_getDataSource: function() {
|
78
|
-
var ret = this.get('dataSource');
|
79
|
-
if (typeof ret === SC.T_STRING) {
|
80
|
-
ret = SC.objectForPropertyPath(ret);
|
81
|
-
if (ret) ret = ret.create();
|
82
|
-
if (ret) this.set('dataSource', ret);
|
83
|
-
}
|
84
|
-
return ret;
|
85
|
-
},
|
86
|
-
|
87
|
-
/**
|
88
|
-
Convenience method. Creates a CascadeDataSource with the passed
|
89
|
-
data source arguments and sets the CascadeDataSource as the data source
|
90
|
-
for the receiver.
|
91
|
-
|
92
|
-
@param {SC.DataSource...} dataSource one or more data source arguments
|
93
|
-
@returns {SC.Store} reciever
|
94
|
-
*/
|
95
|
-
cascade: function(dataSource) {
|
96
|
-
var dataSources = SC.A(arguments) ;
|
97
|
-
dataSource = SC.CascadeDataSource.create({
|
98
|
-
dataSources: dataSources
|
99
|
-
});
|
100
|
-
return this.from(dataSource);
|
101
|
-
},
|
102
|
-
|
103
|
-
// ..........................................................
|
104
|
-
// STORE CHAINING
|
105
|
-
//
|
106
|
-
|
107
|
-
/**
|
108
|
-
Returns a new nested store instance that can be used to buffer changes
|
109
|
-
until you are ready to commit them. When you are ready to commit your
|
110
|
-
changes, call commitChanges() or destroyChanges() and then destroy() when
|
111
|
-
you are finished with the chained store altogether.
|
112
|
-
|
113
|
-
{{{
|
114
|
-
store = MyApp.store.chain();
|
115
|
-
.. edit edit edit
|
116
|
-
store.commitChanges().destroy();
|
117
|
-
}}}
|
118
|
-
|
119
|
-
@param {Hash} attrs optional attributes to set on new store
|
120
|
-
@returns {SC.NestedStore} new nested store chained to receiver
|
121
|
-
*/
|
122
|
-
chain: function(attrs) {
|
123
|
-
if (!attrs) attrs = {};
|
124
|
-
attrs.parentStore = this;
|
125
|
-
|
126
|
-
var ret = SC.NestedStore.create(attrs),
|
127
|
-
nested = this.nestedStores;
|
128
|
-
|
129
|
-
if (!nested) nested = this.nestedStores = [];
|
130
|
-
nested.push(ret);
|
131
|
-
return ret ;
|
132
|
-
},
|
133
|
-
|
134
|
-
/** @private
|
135
|
-
|
136
|
-
Called by a nested store just before it is destroyed so that the parent
|
137
|
-
can remove the store from its list of nested stores.
|
138
|
-
|
139
|
-
@returns {SC.Store} receiver
|
140
|
-
*/
|
141
|
-
willDestroyNestedStore: function(nestedStore) {
|
142
|
-
if (this.nestedStores) {
|
143
|
-
this.nestedStores.removeObject(nestedStore);
|
144
|
-
}
|
145
|
-
return this ;
|
146
|
-
},
|
147
|
-
|
148
|
-
/**
|
149
|
-
Used to determine if a nested store belongs directly or indirectly to the
|
150
|
-
receiver.
|
151
|
-
|
152
|
-
@param {SC.Store} store store instance
|
153
|
-
@returns {Boolean} YES if belongs
|
154
|
-
*/
|
155
|
-
hasNestedStore: function(store) {
|
156
|
-
while(store && (store !== this)) store = store.get('parentStore');
|
157
|
-
return store === this ;
|
158
|
-
},
|
159
|
-
|
160
|
-
// ..........................................................
|
161
|
-
// SHARED DATA STRUCTURES
|
162
|
-
//
|
163
|
-
|
164
|
-
/** @private
|
165
|
-
JSON data hashes indexed by store key.
|
166
|
-
|
167
|
-
*IMPORTANT: Property is not observable*
|
168
|
-
|
169
|
-
Shared by a store and its child stores until you make edits to it.
|
170
|
-
|
171
|
-
@property {Hash}
|
172
|
-
*/
|
173
|
-
dataHashes: null,
|
174
|
-
|
175
|
-
/** @private
|
176
|
-
The current status of a data hash indexed by store key.
|
177
|
-
|
178
|
-
*IMPORTANT: Property is not observable*
|
179
|
-
|
180
|
-
Shared by a store and its child stores until you make edits to it.
|
181
|
-
|
182
|
-
@property {Hash}
|
183
|
-
*/
|
184
|
-
statuses: null,
|
185
|
-
|
186
|
-
/** @private
|
187
|
-
This array contains the revisions for the attributes indexed by the
|
188
|
-
storeKey.
|
189
|
-
|
190
|
-
*IMPORTANT: Property is not observable*
|
191
|
-
|
192
|
-
Revisions are used to keep track of when an attribute hash has been
|
193
|
-
changed. A store shares the revisions data with its parent until it
|
194
|
-
starts to make changes to it.
|
195
|
-
|
196
|
-
@property {Hash}
|
197
|
-
*/
|
198
|
-
revisions: null,
|
199
|
-
|
200
|
-
/** @private
|
201
|
-
Stores three sets of record property changes (storeKeys, statuses
|
202
|
-
and recordTypes) which is used when _notifyRecordPropertyChange is
|
203
|
-
called. Makes it possible to only execute once at the end of
|
204
|
-
the runloop.
|
205
|
-
|
206
|
-
@property {Hash}
|
207
|
-
*/
|
208
|
-
recordPropertyChanges: {
|
209
|
-
storeKeys: [],
|
210
|
-
records: [],
|
211
|
-
statusOnly: []
|
212
|
-
},
|
213
|
-
|
214
|
-
/**
|
215
|
-
Array indicates whether a data hash is possibly in use by an external
|
216
|
-
record for editing. If a data hash is editable then it may be modified
|
217
|
-
at any time and therefore chained stores may need to clone the
|
218
|
-
attributes before keeping a copy of them.
|
219
|
-
|
220
|
-
Note that this is kept as an array because it will be stored as a dense
|
221
|
-
array on some browsers, making it faster.
|
222
|
-
|
223
|
-
@property {Array}
|
224
|
-
*/
|
225
|
-
editables: null,
|
226
|
-
|
227
|
-
/**
|
228
|
-
A set of storeKeys that need to be committed back to the data source. If
|
229
|
-
you call commitRecords() without passing any other parameters, the keys
|
230
|
-
in this set will be committed instead.
|
231
|
-
|
232
|
-
@property {Hash}
|
233
|
-
*/
|
234
|
-
changelog: null,
|
235
|
-
|
236
|
-
/**
|
237
|
-
A set of SC.RecordArray that have been returned from findAll with an
|
238
|
-
SC.Query. These will all be notified with _notifyRecordArraysWithQuery()
|
239
|
-
whenever the store changes.
|
240
|
-
|
241
|
-
@property {Array}
|
242
|
-
*/
|
243
|
-
recordArraysWithQuery: null,
|
244
|
-
|
245
|
-
// ..........................................................
|
246
|
-
// CORE ATTRIBUTE API
|
247
|
-
//
|
248
|
-
// The methods in this layer work on data hashes in the store. They do not
|
249
|
-
// perform any changes that can impact records. Usually you will not need
|
250
|
-
// to use these methods.
|
251
|
-
|
252
|
-
/**
|
253
|
-
Returns the current edit status of a storekey. May be one of EDITABLE or
|
254
|
-
LOCKED. Used mostly for unit testing.
|
255
|
-
|
256
|
-
@param {Number} storeKey the store key
|
257
|
-
@returns {Number} edit status
|
258
|
-
*/
|
259
|
-
storeKeyEditState: function(storeKey) {
|
260
|
-
var editables = this.editables, locks = this.locks;
|
261
|
-
return (editables && editables[storeKey]) ? SC.Store.EDITABLE : SC.Store.LOCKED ;
|
262
|
-
},
|
263
|
-
|
264
|
-
/**
|
265
|
-
Returns the data hash for the given storeKey. This will also 'lock'
|
266
|
-
the hash so that further edits to the parent store will no
|
267
|
-
longer be reflected in this store until you reset.
|
268
|
-
|
269
|
-
@param {Number} storeKey key to retrieve
|
270
|
-
@returns {Hash} data hash or null
|
271
|
-
*/
|
272
|
-
readDataHash: function(storeKey) {
|
273
|
-
return this.dataHashes[storeKey];
|
274
|
-
},
|
275
|
-
|
276
|
-
/**
|
277
|
-
Returns the data hash for the storeKey, cloned so that you can edit
|
278
|
-
the contents of the attributes if you like. This will do the extra work
|
279
|
-
to make sure that you only clone the attributes one time.
|
280
|
-
|
281
|
-
If you use this method to modify data hash, be sure to call
|
282
|
-
dataHashDidChange() when you make edits to record the change.
|
283
|
-
|
284
|
-
@param {Number} storeKey the store key to retrieve
|
285
|
-
@returns {Hash} the attributes hash
|
286
|
-
*/
|
287
|
-
readEditableDataHash: function(storeKey) {
|
288
|
-
// read the value - if there is no hash just return; nothing to do
|
289
|
-
var ret = this.dataHashes[storeKey];
|
290
|
-
if (!ret) return ret ; // nothing to do.
|
291
|
-
|
292
|
-
// clone data hash if not editable
|
293
|
-
var editables = this.editables;
|
294
|
-
if (!editables) editables = this.editables = [];
|
295
|
-
if (!editables[storeKey]) {
|
296
|
-
editables[storeKey] = 1 ; // use number to store as dense array
|
297
|
-
ret = this.dataHashes[storeKey] = SC.clone(ret);
|
298
|
-
}
|
299
|
-
return ret;
|
300
|
-
},
|
301
|
-
|
302
|
-
/**
|
303
|
-
Replaces the data hash for the storeKey. This will lock the data hash and
|
304
|
-
mark them as cloned. This will also call dataHashDidChange() for you.
|
305
|
-
|
306
|
-
Note that the hash you set here must be a different object from the
|
307
|
-
original data hash. Once you make a change here, you must also call
|
308
|
-
dataHashDidChange() to register the changes.
|
309
|
-
|
310
|
-
If the data hash does not yet exist in the store, this method will add it.
|
311
|
-
Pass the optional status to edit the status as well.
|
312
|
-
|
313
|
-
@param {Number} storeKey the store key to write
|
314
|
-
@param {Hash} hash the new hash
|
315
|
-
@param {String} status the new hash status
|
316
|
-
@returns {SC.Store} receiver
|
317
|
-
*/
|
318
|
-
writeDataHash: function(storeKey, hash, status) {
|
319
|
-
|
320
|
-
// update dataHashes and optionally status.
|
321
|
-
if (hash) this.dataHashes[storeKey] = hash;
|
322
|
-
if (status) this.statuses[storeKey] = status ;
|
323
|
-
|
324
|
-
// also note that this hash is now editable
|
325
|
-
var editables = this.editables;
|
326
|
-
if (!editables) editables = this.editables = [];
|
327
|
-
editables[storeKey] = 1 ; // use number for dense array support
|
328
|
-
|
329
|
-
return this ;
|
330
|
-
},
|
331
|
-
|
332
|
-
/**
|
333
|
-
Removes the data hash from the store. This does not imply a deletion of
|
334
|
-
the record. You could be simply unloading the record. Eitherway,
|
335
|
-
removing the dataHash will be synced back to the parent store but not to
|
336
|
-
the server.
|
337
|
-
|
338
|
-
Note that you can optionally pass a new status to go along with this. If
|
339
|
-
you do not pass a status, it will change the status to SC.RECORD_EMPTY
|
340
|
-
(assuming you just unloaded the record). If you are deleting the record
|
341
|
-
you may set it to SC.Record.DESTROYED_CLEAN.
|
342
|
-
|
343
|
-
Be sure to also call dataHashDidChange() to register this change.
|
344
|
-
|
345
|
-
@param {Number} storeKey
|
346
|
-
@param {String} status optional new status
|
347
|
-
@returns {SC.Store} reciever
|
348
|
-
*/
|
349
|
-
removeDataHash: function(storeKey, status) {
|
350
|
-
var rev ;
|
351
|
-
|
352
|
-
// don't use delete -- that will allow parent dataHash to come through
|
353
|
-
this.dataHashes[storeKey] = null;
|
354
|
-
this.statuses[storeKey] = status || SC.Record.EMPTY;
|
355
|
-
rev = this.revisions[storeKey] = this.revisions[storeKey]; // copy ref
|
356
|
-
|
357
|
-
// hash is gone and therefore no longer editable
|
358
|
-
var editables = this.editables;
|
359
|
-
if (editables) editables[storeKey] = 0 ;
|
360
|
-
|
361
|
-
return this ;
|
362
|
-
},
|
363
|
-
|
364
|
-
/**
|
365
|
-
Reads the current status for a storeKey. This will also lock the data
|
366
|
-
hash. If no status is found, returns SC.RECORD_EMPTY.
|
367
|
-
|
368
|
-
@param {Number} storeKey the store key
|
369
|
-
@returns {String} status
|
370
|
-
*/
|
371
|
-
readStatus: function(storeKey) {
|
372
|
-
// use readDataHash to handle optimistic locking. this could be inlined
|
373
|
-
// but for now this minimized copy-and-paste code.
|
374
|
-
this.readDataHash(storeKey);
|
375
|
-
return this.statuses[storeKey] || SC.Record.EMPTY;
|
376
|
-
},
|
377
|
-
|
378
|
-
/**
|
379
|
-
Writes the current status for a storeKey.
|
380
|
-
|
381
|
-
@param {Number} storeKey the store key
|
382
|
-
@param {String} newStatus the new status
|
383
|
-
@returns {SC.Store} receiver
|
384
|
-
*/
|
385
|
-
writeStatus: function(storeKey, newStatus) {
|
386
|
-
// use writeDataHash for now to handle optimistic lock. maximize code
|
387
|
-
// reuse.
|
388
|
-
return this.writeDataHash(storeKey, null, newStatus);
|
389
|
-
},
|
390
|
-
|
391
|
-
/**
|
392
|
-
Call this method whenever you modify some editable data hash to register
|
393
|
-
with the Store that the attribute values have actually changed. This will
|
394
|
-
do the book-keeping necessary to track the change across stores including
|
395
|
-
managing locks.
|
396
|
-
|
397
|
-
@param {Number|Array} storeKeys one or more store keys that changed
|
398
|
-
@param {Number} rev optional new revision number. normally leave null
|
399
|
-
@param {Boolean} statusOnly (optional) YES if only status changed
|
400
|
-
@returns {SC.Store} receiver
|
401
|
-
*/
|
402
|
-
dataHashDidChange: function(storeKeys, rev, statusOnly) {
|
403
|
-
|
404
|
-
// update the revision for storeKey. Use generateStoreKey() because that
|
405
|
-
// gaurantees a universally (to this store hierarchy anyway) unique
|
406
|
-
// key value.
|
407
|
-
if (!rev) rev = SC.Store.generateStoreKey();
|
408
|
-
var isArray, len, idx, storeKey;
|
409
|
-
|
410
|
-
isArray = SC.typeOf(storeKeys) === SC.T_ARRAY;
|
411
|
-
if (isArray) {
|
412
|
-
len = storeKeys.length;
|
413
|
-
} else {
|
414
|
-
len = 1;
|
415
|
-
storeKey = storeKeys;
|
416
|
-
}
|
417
|
-
|
418
|
-
SC.RunLoop.begin();
|
419
|
-
for(idx=0;idx<len;idx++) {
|
420
|
-
if (isArray) storeKey = storeKeys[idx];
|
421
|
-
this.revisions[storeKey] = rev;
|
422
|
-
this._notifyRecordPropertyChange(storeKey, statusOnly);
|
423
|
-
}
|
424
|
-
|
425
|
-
SC.RunLoop.end();
|
426
|
-
|
427
|
-
return this ;
|
428
|
-
},
|
429
|
-
|
430
|
-
/** @private
|
431
|
-
Will push all changes to a the recordPropertyChanges property
|
432
|
-
and execute flushRecordChanges() once at the end of the runloop.
|
433
|
-
*/
|
434
|
-
_notifyRecordPropertyChange: function(storeKey, statusOnly) {
|
435
|
-
|
436
|
-
var records = this.records, rec, editState;
|
437
|
-
|
438
|
-
// pass along to nested stores
|
439
|
-
var nestedStores = this.get('nestedStores'), len, idx, store, status;
|
440
|
-
var K = SC.Store;
|
441
|
-
len = nestedStores ? nestedStores.length : 0 ;
|
442
|
-
for(idx=0;idx<len;idx++) {
|
443
|
-
store = nestedStores[idx];
|
444
|
-
status = store.readStatus(storeKey);
|
445
|
-
editState = store.storeKeyEditState(storeKey);
|
446
|
-
|
447
|
-
// when store needs to propagate out changes in the parent store
|
448
|
-
// to nested stores
|
449
|
-
if(editState!==K.INHERITED && (status & SC.Record.BUSY)) {
|
450
|
-
// make sure nested store does not have any changes before resetting
|
451
|
-
if(store.get('hasChanges')) throw K.CHAIN_CONFLICT_ERROR;
|
452
|
-
store.reset();
|
453
|
-
}
|
454
|
-
|
455
|
-
if(store.storeKeyEditState(storeKey) === K.INHERITED) {
|
456
|
-
store._notifyRecordPropertyChange(storeKey, statusOnly);
|
457
|
-
}
|
458
|
-
}
|
459
|
-
|
460
|
-
// schedule
|
461
|
-
this.recordPropertyChanges.storeKeys.push(storeKey);
|
462
|
-
|
463
|
-
if (records && (rec=records[storeKey])) {
|
464
|
-
this.recordPropertyChanges.records.push(storeKey);
|
465
|
-
if(statusOnly) {
|
466
|
-
this.recordPropertyChanges.statusOnly.push(storeKey);
|
467
|
-
}
|
468
|
-
}
|
469
|
-
|
470
|
-
this._flushRecordChanges();
|
471
|
-
|
472
|
-
return this;
|
473
|
-
},
|
474
|
-
|
475
|
-
/** @private
|
476
|
-
Will notify any record instances of the property change at the end of
|
477
|
-
the run loop. Also notifies any inherited record instances as well.
|
478
|
-
|
479
|
-
Will also notify any record arrays with queries to refresh based on
|
480
|
-
the new/changed store keys.
|
481
|
-
*/
|
482
|
-
|
483
|
-
_flushRecordChanges: function() {
|
484
|
-
var storeKeys = this.recordPropertyChanges.storeKeys,
|
485
|
-
statusOnly = this.recordPropertyChanges.statusOnly,
|
486
|
-
records = this.recordPropertyChanges.records, rec,
|
487
|
-
recordType, recordTypes = SC.Set.create(), status, idx, len, storeKey;
|
488
|
-
|
489
|
-
for(idx=0,len=storeKeys.length;idx<len;idx++) {
|
490
|
-
storeKey = storeKeys[idx];
|
491
|
-
|
492
|
-
if(records.indexOf(storeKey)!==-1) {
|
493
|
-
status = statusOnly.indexOf(storeKey)!==-1 ? YES: NO;
|
494
|
-
rec = this.records[storeKey];
|
495
|
-
rec.storeDidChangeProperties(status);
|
496
|
-
// remove it so we don't trigger this twice
|
497
|
-
records.removeObject(storeKey);
|
498
|
-
}
|
499
|
-
|
500
|
-
recordType = SC.Store.recordTypeFor(storeKey);
|
501
|
-
if(!recordTypes.contains(recordType)) {
|
502
|
-
recordTypes.push(recordType);
|
503
|
-
}
|
504
|
-
|
505
|
-
}
|
506
|
-
|
507
|
-
this._notifyRecordArraysWithQuery(storeKeys, recordTypes);
|
508
|
-
|
509
|
-
// reset for next run loop
|
510
|
-
this.recordPropertyChanges.storeKeys = [];
|
511
|
-
this.recordPropertyChanges.records = [];
|
512
|
-
this.recordPropertyChanges.statusOnly = [];
|
513
|
-
},
|
514
|
-
|
515
|
-
/** @private
|
516
|
-
Will ask all record arrays that have been returned from findAll
|
517
|
-
with an SC.Query to reapply their query with the new storeKeys
|
518
|
-
|
519
|
-
@param {SC.IndexSet} storeKeys set of storeKeys that changed
|
520
|
-
@param {SC.Set} recordTypes
|
521
|
-
*/
|
522
|
-
|
523
|
-
_notifyRecordArraysWithQuery: function(storeKeys, recordTypes) {
|
524
|
-
var recordArrays = this.recordArraysWithQuery;
|
525
|
-
if(!recordArrays) return;
|
526
|
-
|
527
|
-
for(var idx=0, len=recordArrays.length;idx<len;idx++) {
|
528
|
-
var recArray = recordArrays[idx];
|
529
|
-
// if this record array still exists, reapply the query
|
530
|
-
if(recArray) recArray.applyQuery(storeKeys, recordTypes, YES);
|
531
|
-
}
|
532
|
-
},
|
533
|
-
|
534
|
-
/**
|
535
|
-
Resets the store content. This will clear all internal data for all
|
536
|
-
records, resetting them to an EMPTY state. You generally do not want
|
537
|
-
to call this method yourself, though you may override it.
|
538
|
-
|
539
|
-
@returns {SC.Store} receiver
|
540
|
-
*/
|
541
|
-
reset: function() {
|
542
|
-
|
543
|
-
// create a new empty data store
|
544
|
-
this.dataHashes = {} ;
|
545
|
-
this.revisions = {} ;
|
546
|
-
this.statuses = {} ;
|
547
|
-
|
548
|
-
// also reset temporary objects
|
549
|
-
this.chainedChanges = this.locks = this.editables = null;
|
550
|
-
this.changelog = null ;
|
551
|
-
|
552
|
-
var records = this.records, storeKey;
|
553
|
-
if (records) {
|
554
|
-
SC.RunLoop.begin();
|
555
|
-
for(storeKey in records) {
|
556
|
-
if (!records.hasOwnProperty(storeKey)) continue ;
|
557
|
-
this._notifyRecordPropertyChange(storeKey, NO);
|
558
|
-
}
|
559
|
-
SC.RunLoop.end();
|
560
|
-
}
|
561
|
-
|
562
|
-
this.set('hasChanges', NO);
|
563
|
-
},
|
564
|
-
|
565
|
-
/** @private
|
566
|
-
Called by a nested store on a parent store to commit any changes from the
|
567
|
-
store. This will copy any changed dataHashes as well as any persistant
|
568
|
-
change logs.
|
569
|
-
|
570
|
-
If the parentStore detects a conflict with the optimistic locking, it will
|
571
|
-
raise an exception before it makes any changes. If you pass the
|
572
|
-
force flag then this detection phase will be skipped and the changes will
|
573
|
-
be applied even if another resource has modified the store in the mean
|
574
|
-
time.
|
575
|
-
|
576
|
-
@param {SC.Store} nestedStore the child store
|
577
|
-
@param {Array} changes the array of changed store keys
|
578
|
-
@param {Boolean} force
|
579
|
-
@returns {SC.Store} receiver
|
580
|
-
*/
|
581
|
-
commitChangesFromNestedStore: function(nestedStore, changes, force) {
|
582
|
-
// first, check for optimistic locking problems
|
583
|
-
if (!force) this._verifyLockRevisions(changes, nestedStore.locks);
|
584
|
-
|
585
|
-
// OK, no locking issues. So let's just copy them changes.
|
586
|
-
// get local reference to values.
|
587
|
-
var len = changes.length, i, storeKey, myDataHashes, myStatuses,
|
588
|
-
myEditables, myRevisions, chDataHashes, chStatuses, chRevisions;
|
589
|
-
|
590
|
-
myRevisions = this.revisions ;
|
591
|
-
myDataHashes = this.dataHashes;
|
592
|
-
myStatuses = this.statuses;
|
593
|
-
myEditables = this.editables ;
|
594
|
-
|
595
|
-
// setup some arrays if needed
|
596
|
-
if (!myEditables) myEditables = this.editables = [] ;
|
597
|
-
|
598
|
-
chDataHashes = nestedStore.dataHashes;
|
599
|
-
chRevisions = nestedStore.revisions ;
|
600
|
-
chStatuses = nestedStore.statuses;
|
601
|
-
|
602
|
-
SC.RunLoop.begin();
|
603
|
-
for(i=0;i<len;i++) {
|
604
|
-
storeKey = changes[i];
|
605
|
-
|
606
|
-
// now copy changes
|
607
|
-
myDataHashes[storeKey] = chDataHashes[storeKey];
|
608
|
-
myStatuses[storeKey] = chStatuses[storeKey];
|
609
|
-
myRevisions[storeKey] = chRevisions[storeKey];
|
610
|
-
|
611
|
-
myEditables[storeKey] = 0 ; // always make dataHash no longer editable
|
612
|
-
|
613
|
-
this._notifyRecordPropertyChange(storeKey, NO);
|
614
|
-
}
|
615
|
-
SC.RunLoop.end();
|
616
|
-
|
617
|
-
// add any records to the changelog for commit handling
|
618
|
-
var myChangelog = this.changelog, chChangelog = nestedStore.changelog;
|
619
|
-
if (chChangelog) {
|
620
|
-
if (!myChangelog) myChangelog = this.changelog = SC.Set.create();
|
621
|
-
myChangelog.addEach(chChangelog);
|
622
|
-
}
|
623
|
-
this.changelog = myChangelog;
|
624
|
-
|
625
|
-
return this ;
|
626
|
-
},
|
627
|
-
|
628
|
-
/** @private
|
629
|
-
Verifies that the passed lock revisions match the current revisions
|
630
|
-
in the receiver store. If the lock revisions do not match, then the
|
631
|
-
store is in a conflict and an exception will be raised.
|
632
|
-
|
633
|
-
@param {Array} changes set of changes we are trying to apply
|
634
|
-
@param {SC.Set} locks the locks to verify
|
635
|
-
@returns {SC.Store} receiver
|
636
|
-
*/
|
637
|
-
_verifyLockRevisions: function(changes, locks) {
|
638
|
-
var len = changes.length, revs = this.revisions, i, storeKey, lock, rev ;
|
639
|
-
if (locks && revs) {
|
640
|
-
for(i=0;i<len;i++) {
|
641
|
-
storeKey = changes[i];
|
642
|
-
lock = locks[storeKey] || 1;
|
643
|
-
rev = revs[storeKey] || 1;
|
644
|
-
|
645
|
-
// if the save revision for the item does not match the current rev
|
646
|
-
// the someone has changed the data hash in this store and we have
|
647
|
-
// a conflict.
|
648
|
-
if (lock < rev) throw SC.Store.CHAIN_CONFLICT_ERROR;
|
649
|
-
}
|
650
|
-
}
|
651
|
-
return this ;
|
652
|
-
},
|
653
|
-
|
654
|
-
// ..........................................................
|
655
|
-
// HIGH-LEVEL RECORD API
|
656
|
-
//
|
657
|
-
|
658
|
-
/**
|
659
|
-
Finds a record instance with the specified recordType and id, returning
|
660
|
-
the record instance. If no matching record could be found, asks the
|
661
|
-
data source to retrieve the record. If the data source cannot retrieve
|
662
|
-
the record, returns null.
|
663
|
-
|
664
|
-
Note that if you try to find a record id that does not exist in memory,
|
665
|
-
a dataSource may load it from the server. In this case, this method will
|
666
|
-
return a record instance with a status of SC.Record.BUSY_LOADING to indicate
|
667
|
-
that it is still fetching the data from the server.
|
668
|
-
|
669
|
-
You can also pass YES to the isRefresh parameter which will make sure to
|
670
|
-
always go back to the data source so that you can go back to refresh the
|
671
|
-
record that is currently in the store. In that case, the record will
|
672
|
-
get the SC.Record.BUSY_REFRESH status until server has responded and
|
673
|
-
store is refreshed.
|
674
|
-
|
675
|
-
@param {SC.Record|String} recordType the expected record type
|
676
|
-
@param {String} id the id to load
|
677
|
-
@param {Boolean} isRefresh
|
678
|
-
@returns {SC.Record} record instance or null
|
679
|
-
*/
|
680
|
-
find: function(recordType, id, isRefresh) {
|
681
|
-
// if recordType is passed as string, find object
|
682
|
-
if(SC.typeOf(recordType)===SC.T_STRING) {
|
683
|
-
recordType = SC.objectForPropertyPath(recordType);
|
684
|
-
}
|
685
|
-
|
686
|
-
// first attempt to find the record in the local store
|
687
|
-
var storeKey = recordType.storeKeyFor(id);
|
688
|
-
|
689
|
-
if (this.readStatus(storeKey) === SC.Record.EMPTY) {
|
690
|
-
storeKey = this.retrieveRecord(recordType, id);
|
691
|
-
}
|
692
|
-
|
693
|
-
// also make sure to reach to the data source to actually
|
694
|
-
// retrieveRecord if isRefresh is YES, even if it already exists in store
|
695
|
-
if(isRefresh) {
|
696
|
-
this.retrieveRecord(recordType, id, null, isRefresh);
|
697
|
-
}
|
698
|
-
|
699
|
-
// now we have the storeKey, materialize the record and return it.
|
700
|
-
return storeKey ? this.materializeRecord(storeKey) : null ;
|
701
|
-
},
|
702
|
-
|
703
|
-
/**
|
704
|
-
Retrieves records from the persistent store. You should pass in a named
|
705
|
-
query that will be understood by one of the persistent stores you have
|
706
|
-
configured along with any optional parameters needed by the search.
|
707
|
-
|
708
|
-
The return value is an SC.RecordArray that may be populated dynamically
|
709
|
-
by the server as data becomes available. You can treat this object just
|
710
|
-
like any other object that implements SC.Array.
|
711
|
-
|
712
|
-
h2. Query Keys
|
713
|
-
|
714
|
-
The kind of fetchKey you pass is generally determined by the type of
|
715
|
-
persistent stores you hook up for your application. Most stores, however,
|
716
|
-
will accept an SC.Record subclass as the fetchKey. It is up to your data source
|
717
|
-
to figure out which storeKeys to return based on the fetchKey. This will return
|
718
|
-
a RecordArray matching all instances of that class as is relevant to your
|
719
|
-
application, for instance: findAll(MyApp.MyModel)
|
720
|
-
|
721
|
-
You can also pass an SC.Query object as your fetchKey, for instance:
|
722
|
-
var q = SC.Query.create({ recordType: MyApp.MyModel,
|
723
|
-
conditions: "firstName = 'John'", orderBy: "lastName ASC"});
|
724
|
-
var records = MyApp.store.findAll(q);
|
725
|
-
|
726
|
-
If an SC.Query is given as fetchKey, the record array created in
|
727
|
-
findAll() will automatically update when records are added, changed,
|
728
|
-
or removed from the store. When a fetchKey is given, you do not have to
|
729
|
-
return anything from the data source as you are from then on delegating
|
730
|
-
the responsibility to keep the record array updated to the store.
|
731
|
-
|
732
|
-
Once you retrieve a RecordArray, you can filter the results even further
|
733
|
-
by using the filter() method, which may issue even more specific requests.
|
734
|
-
|
735
|
-
@param {Object|SC.Query} fetchKey key describing the type of records to
|
736
|
-
fetch or a predefined SC.Query object
|
737
|
-
@param {Hash} params optional additional parameters to pass along to the
|
738
|
-
data source
|
739
|
-
@param {SC.RecordArray} recordArray optional if you want to find just
|
740
|
-
within a given record array
|
741
|
-
@returns {SC.RecordArray} matching set or null if no server handled it
|
742
|
-
*/
|
743
|
-
findAll: function(fetchKey, params, recordArray) {
|
744
|
-
var _store = this, source = this._getDataSource(), ret = [], storeKeys,
|
745
|
-
sourceRet, cacheKey;
|
746
|
-
|
747
|
-
if(recordArray) {
|
748
|
-
// giving a recordArray will circumvent the data source
|
749
|
-
// typically happens when chaining findAll statements
|
750
|
-
storeKeys = SC.Query.containsRecords(fetchKey, recordArray, _store);
|
751
|
-
}
|
752
|
-
else if (source) {
|
753
|
-
// call fetch() on the data source.
|
754
|
-
sourceRet = source.fetch.call(source, this, fetchKey, params);
|
755
|
-
if(SC.typeOf(sourceRet)===SC.T_ARRAY) {
|
756
|
-
storeKeys = sourceRet;
|
757
|
-
}
|
758
|
-
}
|
759
|
-
|
760
|
-
// if SC.Query returned from data source or no data source was given
|
761
|
-
if(!storeKeys && SC.instanceOf(fetchKey, SC.Query)) {
|
762
|
-
storeKeys = SC.Query.containsStoreKeys(fetchKey, null, _store);
|
763
|
-
}
|
764
|
-
|
765
|
-
ret = this.recordArrayFromStoreKeys(storeKeys, fetchKey, _store);
|
766
|
-
return ret ;
|
767
|
-
},
|
768
|
-
|
769
|
-
/**
|
770
|
-
Creates a record array based on passed storeKeys. Will return
|
771
|
-
cache if records are already cached, if not store them for reuse.
|
772
|
-
|
773
|
-
@param {Array} storeKeys added to returned record array
|
774
|
-
@param {Object|SC.Query} fetchKey
|
775
|
-
@param {SC.Store} _store
|
776
|
-
@returns {SC.RecordArray} matching set or null if no server handled it
|
777
|
-
*/
|
778
|
-
|
779
|
-
recordArrayFromStoreKeys: function(storeKeys, fetchKey, _store) {
|
780
|
-
var ret, isQuery = SC.instanceOf(fetchKey, SC.Query), cacheKey, queryKey;
|
781
|
-
|
782
|
-
// if an array was provided, see if a wrapper already exists for
|
783
|
-
// this store. Otherwise create it
|
784
|
-
cacheKey = SC.keyFor('__records__', [SC.guidFor(storeKeys), SC.guidFor(fetchKey)].join('_'));
|
785
|
-
ret = this[cacheKey];
|
786
|
-
if (!ret) {
|
787
|
-
if(isQuery) queryKey = fetchKey;
|
788
|
-
ret = SC.RecordArray.create({store: _store, storeKeys: storeKeys, queryKey: queryKey});
|
789
|
-
|
790
|
-
// store reference to record array if SC.Query so we can notify it
|
791
|
-
// when store changes
|
792
|
-
if(isQuery) {
|
793
|
-
if (!this.recordArraysWithQuery) this.recordArraysWithQuery = [];
|
794
|
-
this.recordArraysWithQuery.push(ret);
|
795
|
-
}
|
796
|
-
|
797
|
-
this[cacheKey] = ret ; // save for future reuse.
|
798
|
-
}
|
799
|
-
return ret;
|
800
|
-
},
|
801
|
-
|
802
|
-
/**
|
803
|
-
Array of all records currently in the store with the specified
|
804
|
-
type. This method only reflects the actual records loaded into memory and
|
805
|
-
therefore is not usually needed at runtime. However you will often use
|
806
|
-
this method for testing.
|
807
|
-
|
808
|
-
@param {SC.Record} recordType the record type
|
809
|
-
@returns {SC.Array} array instance - usually SC.RecordArray
|
810
|
-
*/
|
811
|
-
recordsFor: function(recordType) {
|
812
|
-
var storeKeys = [],
|
813
|
-
storeKeysById = recordType.storeKeysById(),
|
814
|
-
id, storeKey, ret;
|
815
|
-
|
816
|
-
// collect all non-empty store keys
|
817
|
-
for(id in storeKeysById) {
|
818
|
-
storeKey = storeKeysById[id]; // get the storeKey
|
819
|
-
if (this.readStatus(storeKey) !== SC.RECORD_EMPTY) {
|
820
|
-
storeKeys.push(storeKey);
|
821
|
-
}
|
822
|
-
}
|
823
|
-
|
824
|
-
if (storeKeys.length>0) {
|
825
|
-
ret = SC.RecordArray.create({ store: this, storeKeys: storeKeys });
|
826
|
-
} else ret = storeKeys; // empty array
|
827
|
-
return ret ;
|
828
|
-
},
|
829
|
-
|
830
|
-
_TMP_REC_ATTRS: {},
|
831
|
-
|
832
|
-
/**
|
833
|
-
Given a storeKey, return a materialized record. You will not usually
|
834
|
-
call this method yourself. Instead it will used by other methods when
|
835
|
-
you find records by id or perform other searches.
|
836
|
-
|
837
|
-
If a recordType has been mapped to the storeKey, then a record instance
|
838
|
-
will be returned even if the data hash has not been requested yet.
|
839
|
-
|
840
|
-
Each Store instance returns unique record instances for each storeKey.
|
841
|
-
|
842
|
-
@param {Integer} storeKey The storeKey for the dataHash.
|
843
|
-
@returns {SC.Record} Returns a record instance.
|
844
|
-
*/
|
845
|
-
materializeRecord: function(storeKey) {
|
846
|
-
var records = this.records, ret, recordType, attrs;
|
847
|
-
|
848
|
-
// look up in cached records
|
849
|
-
if (!records) records = this.records = {}; // load cached records
|
850
|
-
ret = records[storeKey];
|
851
|
-
if (ret) return ret;
|
852
|
-
|
853
|
-
// not found -- OK, create one then.
|
854
|
-
recordType = SC.Store.recordTypeFor(storeKey);
|
855
|
-
if (!recordType) return null; // not recordType registered, nothing to do
|
856
|
-
|
857
|
-
attrs = this._TMP_REC_ATTRS ;
|
858
|
-
attrs.storeKey = storeKey ;
|
859
|
-
attrs.store = this ;
|
860
|
-
ret = records[storeKey] = recordType.create(attrs);
|
861
|
-
|
862
|
-
return ret ;
|
863
|
-
},
|
864
|
-
|
865
|
-
// ..........................................................
|
866
|
-
// CORE RECORDS API
|
867
|
-
//
|
868
|
-
// The methods in this section can be used to manipulate records without
|
869
|
-
// actually creating record instances.
|
870
|
-
|
871
|
-
/**
|
872
|
-
Creates a new record instance with the passed recordType and dataHash.
|
873
|
-
You can also optionally specify an id or else it will be pulled from the
|
874
|
-
data hash.
|
875
|
-
|
876
|
-
Note that the record will not yet be saved back to the server. To save
|
877
|
-
a record to the server, call commitChanges() on the store.
|
878
|
-
|
879
|
-
@param {SC.Record} recordType the record class to use on creation
|
880
|
-
@param {Hash} dataHash the JSON attributes to assign to the hash.
|
881
|
-
@param {String} id (optional) id to assign to record
|
882
|
-
|
883
|
-
@returns {SC.Record} Returns the created record
|
884
|
-
*/
|
885
|
-
createRecord: function(recordType, dataHash, id) {
|
886
|
-
|
887
|
-
var primaryKey, storeKey, status, K = SC.Record, changelog, defaultVal;
|
888
|
-
|
889
|
-
// First, try to get an id. If no id is passed, look it up in the
|
890
|
-
// dataHash.
|
891
|
-
if (!id && (primaryKey = recordType.prototype.primaryKey)) {
|
892
|
-
id = dataHash[primaryKey];
|
893
|
-
// if still no id, check if there is a defaultValue function for
|
894
|
-
// the primaryKey attribute and assign that
|
895
|
-
defaultVal = recordType.prototype[primaryKey] ? recordType.prototype[primaryKey].defaultValue : null;
|
896
|
-
if(!id && SC.typeOf(defaultVal)===SC.T_FUNCTION) {
|
897
|
-
id = dataHash[primaryKey] = defaultVal();
|
898
|
-
}
|
899
|
-
}
|
900
|
-
|
901
|
-
// Next get the storeKey - base on id if available
|
902
|
-
storeKey = id ? recordType.storeKeyFor(id) : SC.Store.generateStoreKey();
|
903
|
-
|
904
|
-
// now, check the state and do the right thing.
|
905
|
-
status = this.readStatus(storeKey);
|
906
|
-
|
907
|
-
// check state
|
908
|
-
// any busy or ready state or destroyed dirty state is not allowed
|
909
|
-
if ((status & K.BUSY) ||
|
910
|
-
(status & K.READY) ||
|
911
|
-
(status == K.DESTROYED_DIRTY)) {
|
912
|
-
throw id ? K.RECORD_EXISTS_ERROR : K.BAD_STATE_ERROR;
|
913
|
-
|
914
|
-
// allow error or destroyed state only with id
|
915
|
-
} else if (!id && (status==SC.DESTROYED_CLEAN || status==SC.ERROR)) {
|
916
|
-
throw K.BAD_STATE_ERROR;
|
917
|
-
}
|
918
|
-
|
919
|
-
// add dataHash and setup initial status -- also save recordType
|
920
|
-
this.writeDataHash(storeKey, (dataHash ? dataHash : {}), K.READY_NEW);
|
921
|
-
|
922
|
-
SC.Store.replaceRecordTypeFor(storeKey, recordType);
|
923
|
-
this.dataHashDidChange(storeKey);
|
924
|
-
|
925
|
-
// Record is now in a committable state -- add storeKey to changelog
|
926
|
-
changelog = this.changelog;
|
927
|
-
if (!changelog) changelog = SC.Set.create();
|
928
|
-
changelog.add(storeKey);
|
929
|
-
this.changelog = changelog;
|
930
|
-
|
931
|
-
// if commit records is enabled
|
932
|
-
if(this.get('commitRecordsAutomatically')){
|
933
|
-
this.invokeLast(this.commitRecords);
|
934
|
-
}
|
935
|
-
|
936
|
-
// finally return materialized record
|
937
|
-
return this.materializeRecord(storeKey) ;
|
938
|
-
},
|
939
|
-
|
940
|
-
/**
|
941
|
-
Creates an array of new records. You must pass an array of dataHashes
|
942
|
-
plus a recordType and, optionally, an array of ids. This will create an
|
943
|
-
array of record instances with the same record type.
|
944
|
-
|
945
|
-
If you need to instead create a bunch of records with different data types
|
946
|
-
you can instead pass an array of recordTypes, one for each data hash.
|
947
|
-
|
948
|
-
@param {SC.Record|Array} recordTypes class or array of classes
|
949
|
-
@param {Array} dataHashes array of data hashes
|
950
|
-
@param {Array} ids (optional) ids to assign to records
|
951
|
-
@returns {Array} array of materialized record instances.
|
952
|
-
*/
|
953
|
-
createRecords: function(recordTypes, dataHashes, ids) {
|
954
|
-
var ret = [], recordType, id, isArray, len = dataHashes.length, idx ;
|
955
|
-
isArray = SC.typeOf(recordTypes) === SC.T_ARRAY;
|
956
|
-
if (!isArray) recordType = recordTypes;
|
957
|
-
for(idx=0;idx<len;idx++) {
|
958
|
-
if (isArray) recordType = recordTypes[idx] || SC.Record;
|
959
|
-
id = ids ? ids[idx] : undefined ;
|
960
|
-
ret.push(this.createRecord(recordType, dataHashes[idx], id));
|
961
|
-
}
|
962
|
-
return ret ;
|
963
|
-
},
|
964
|
-
|
965
|
-
/**
|
966
|
-
Destroys a record, removing the data hash from the store and adding the
|
967
|
-
record to the destroyed changelog. If you try to destroy a record that is
|
968
|
-
already destroyed then this method will have no effect. If you destroy a
|
969
|
-
record that does not exist or an error then an exception will be raised.
|
970
|
-
|
971
|
-
@param {SC.Record} recordType the recordType
|
972
|
-
@param {String} id the record id
|
973
|
-
@param {Number} storeKey (optional) if passed, ignores recordType and id
|
974
|
-
@returns {SC.Store} receiver
|
975
|
-
*/
|
976
|
-
destroyRecord: function(recordType, id, storeKey) {
|
977
|
-
if (storeKey === undefined) storeKey = recordType.storeKeyFor(id);
|
978
|
-
var status = this.readStatus(storeKey), changelog, K = SC.Record;
|
979
|
-
|
980
|
-
// handle status - ignore if destroying or destroyed
|
981
|
-
if ((status === K.BUSY_DESTROYING) || (status & K.DESTROYED)) {
|
982
|
-
return this; // nothing to do
|
983
|
-
|
984
|
-
// error out if empty
|
985
|
-
} else if (status == K.EMPTY) {
|
986
|
-
throw K.NOT_FOUND_ERROR ;
|
987
|
-
|
988
|
-
// error out if busy
|
989
|
-
} else if (status & K.BUSY) {
|
990
|
-
throw K.BUSY_ERROR ;
|
991
|
-
|
992
|
-
// if new status, destroy but leave in clean state
|
993
|
-
} else if (status == K.READY_NEW) {
|
994
|
-
status = K.DESTROYED_CLEAN ;
|
995
|
-
|
996
|
-
// otherwise, destroy in dirty state
|
997
|
-
} else status = K.DESTROYED_DIRTY ;
|
998
|
-
|
999
|
-
// remove the data hash, set new status
|
1000
|
-
this.writeStatus(storeKey, status);
|
1001
|
-
this.dataHashDidChange(storeKey);
|
1002
|
-
|
1003
|
-
// add/remove change log
|
1004
|
-
changelog = this.changelog;
|
1005
|
-
if (!changelog) changelog = this.changelog = SC.Set.create();
|
1006
|
-
|
1007
|
-
((status & K.DIRTY) ? changelog.add(storeKey) : changelog.remove(storeKey));
|
1008
|
-
this.changelog=changelog;
|
1009
|
-
|
1010
|
-
// if commit records is enabled
|
1011
|
-
if(this.get('commitRecordsAutomatically')){
|
1012
|
-
this.invokeLast(this.commitRecords);
|
1013
|
-
}
|
1014
|
-
|
1015
|
-
return this ;
|
1016
|
-
},
|
1017
|
-
|
1018
|
-
/**
|
1019
|
-
Destroys a group of records. If you have a set of record ids, destroying
|
1020
|
-
them this way can be faster than retrieving each record and destroying
|
1021
|
-
it individually.
|
1022
|
-
|
1023
|
-
You can pass either a single recordType or an array of recordTypes. If
|
1024
|
-
you pass a single recordType, then the record type will be used for each
|
1025
|
-
record. If you pass an array, then each id must have a matching record
|
1026
|
-
type in the array.
|
1027
|
-
|
1028
|
-
You can optionally pass an array of storeKeys instead of the recordType
|
1029
|
-
and ids. In this case the first two parameters will be ignored. This
|
1030
|
-
is usually only used by low-level internal methods. You will not usually
|
1031
|
-
destroy records this way.
|
1032
|
-
|
1033
|
-
@param {SC.Record|Array} recordTypes class or array of classes
|
1034
|
-
@param {Array} ids ids to destroy
|
1035
|
-
@param {Array} storeKeys (optional) store keys to destroy
|
1036
|
-
@returns {SC.Store} receiver
|
1037
|
-
*/
|
1038
|
-
destroyRecords: function(recordTypes, ids, storeKeys) {
|
1039
|
-
var len, isArray, idx, id, recordType, storeKey;
|
1040
|
-
if(storeKeys===undefined){
|
1041
|
-
len = ids.length;
|
1042
|
-
isArray = SC.typeOf(recordTypes) === SC.T_ARRAY;
|
1043
|
-
if (!isArray) recordType = recordTypes;
|
1044
|
-
for(idx=0;idx<len;idx++) {
|
1045
|
-
if (isArray) recordType = recordTypes[idx] || SC.Record;
|
1046
|
-
id = ids ? ids[idx] : undefined ;
|
1047
|
-
this.destroyRecord(recordType, id, undefined);
|
1048
|
-
}
|
1049
|
-
}else{
|
1050
|
-
len = storeKeys.length;
|
1051
|
-
for(idx=0;idx<len;idx++) {
|
1052
|
-
storeKey = storeKeys ? storeKeys[idx] : undefined ;
|
1053
|
-
this.destroyRecord(undefined, undefined, storeKey);
|
1054
|
-
}
|
1055
|
-
}
|
1056
|
-
return this ;
|
1057
|
-
},
|
1058
|
-
|
1059
|
-
/**
|
1060
|
-
Notes that the data for the given record id has changed. The record will
|
1061
|
-
be committed to the server the next time you commit the root store. Only
|
1062
|
-
call this method on a record in a READY state of some type.
|
1063
|
-
|
1064
|
-
@param {SC.Record} recordType the recordType
|
1065
|
-
@param {String} id the record id
|
1066
|
-
@param {Number} storeKey (optional) if passed, ignores recordType and id
|
1067
|
-
@returns {SC.Store} receiver
|
1068
|
-
*/
|
1069
|
-
recordDidChange: function(recordType, id, storeKey) {
|
1070
|
-
if (storeKey === undefined) storeKey = recordType.storeKeyFor(id);
|
1071
|
-
var status = this.readStatus(storeKey), changelog, K = SC.Record;
|
1072
|
-
|
1073
|
-
// BUSY_LOADING, BUSY_CREATING, BUSY_COMMITTING, BUSY_REFRESH_CLEAN
|
1074
|
-
// BUSY_REFRESH_DIRTY, BUSY_DESTROYING
|
1075
|
-
if (status & K.BUSY) {
|
1076
|
-
throw K.BUSY_ERROR ;
|
1077
|
-
|
1078
|
-
// if record is not in ready state, then it is not found.
|
1079
|
-
// ERROR, EMPTY, DESTROYED_CLEAN, DESTROYED_DIRTY
|
1080
|
-
} else if (!(status & K.READY)) {
|
1081
|
-
throw K.NOT_FOUND_ERROR ;
|
1082
|
-
|
1083
|
-
// otherwise, make new status READY_DIRTY unless new.
|
1084
|
-
// K.READY_CLEAN, K.READY_DIRTY, ignore K.READY_NEW
|
1085
|
-
} else {
|
1086
|
-
if (status != K.READY_NEW) this.writeStatus(storeKey, K.READY_DIRTY);
|
1087
|
-
}
|
1088
|
-
|
1089
|
-
// record data hash change
|
1090
|
-
this.dataHashDidChange(storeKey, null);
|
1091
|
-
// record in changelog
|
1092
|
-
changelog = this.changelog ;
|
1093
|
-
if (!changelog) changelog = this.changelog = SC.Set.create() ;
|
1094
|
-
changelog.add(storeKey);
|
1095
|
-
this.changelog=changelog;
|
1096
|
-
|
1097
|
-
// if commit records is enabled
|
1098
|
-
if(this.get('commitRecordsAutomatically')){
|
1099
|
-
this.invokeLast(this.commitRecords);
|
1100
|
-
}
|
1101
|
-
|
1102
|
-
return this ;
|
1103
|
-
},
|
1104
|
-
|
1105
|
-
/**
|
1106
|
-
Mark a group of records as dirty. The records will be committed to the
|
1107
|
-
server the next time you commit changes on the root store. If you have a
|
1108
|
-
set of record ids, marking them dirty this way can be faster than
|
1109
|
-
retrieving each record and destroying it individually.
|
1110
|
-
|
1111
|
-
You can pass either a single recordType or an array of recordTypes. If
|
1112
|
-
you pass a single recordType, then the record type will be used for each
|
1113
|
-
record. If you pass an array, then each id must have a matching record
|
1114
|
-
type in the array.
|
1115
|
-
|
1116
|
-
You can optionally pass an array of storeKeys instead of the recordType
|
1117
|
-
and ids. In this case the first two parameters will be ignored. This
|
1118
|
-
is usually only used by low-level internal methods.
|
1119
|
-
|
1120
|
-
@param {SC.Record|Array} recordTypes class or array of classes
|
1121
|
-
@param {Array} ids ids to destroy
|
1122
|
-
@param {Array} storeKeys (optional) store keys to destroy
|
1123
|
-
@returns {SC.Store} receiver
|
1124
|
-
*/
|
1125
|
-
recordsDidChange: function(recordTypes, ids, storeKeys) {
|
1126
|
-
var len, isArray, idx, id, recordType, storeKey;
|
1127
|
-
if(storeKeys===undefined){
|
1128
|
-
len = ids.length;
|
1129
|
-
isArray = SC.typeOf(recordTypes) === SC.T_ARRAY;
|
1130
|
-
if (!isArray) recordType = recordTypes;
|
1131
|
-
for(idx=0;idx<len;idx++) {
|
1132
|
-
if (isArray) recordType = recordTypes[idx] || SC.Record;
|
1133
|
-
id = ids ? ids[idx] : undefined ;
|
1134
|
-
storeKey = storeKeys ? storeKeys[idx] : undefined ;
|
1135
|
-
this.recordDidChange(recordType, id, storeKey);
|
1136
|
-
}
|
1137
|
-
}else{
|
1138
|
-
len = storeKeys.length;
|
1139
|
-
for(idx=0;idx<len;idx++) {
|
1140
|
-
storeKey = storeKeys ? storeKeys[idx] : undefined ;
|
1141
|
-
this.recordDidChange(undefined, undefined, storeKey);
|
1142
|
-
}
|
1143
|
-
}
|
1144
|
-
return this ;
|
1145
|
-
},
|
1146
|
-
|
1147
|
-
/**
|
1148
|
-
Retrieves a set of records from the server. If the records has
|
1149
|
-
already been loaded in the store, then this method will simply return.
|
1150
|
-
Otherwise if your store has a dataSource, this will call the
|
1151
|
-
dataSource to retrieve the record. Generally you will not need to
|
1152
|
-
call this method yourself. Instead you can just use find().
|
1153
|
-
|
1154
|
-
This will not actually create a record instance but it will initiate a
|
1155
|
-
load of the record from the server. You can subsequently get a record
|
1156
|
-
instance itself using materializeRecord()
|
1157
|
-
|
1158
|
-
@param {SC.Record|Array} recordTypes class or array of classes
|
1159
|
-
@param {Array} ids ids to retrieve
|
1160
|
-
@param {Array} storeKeys (optional) store keys to retrieve
|
1161
|
-
@param {Boolean} isRefresh
|
1162
|
-
@returns {Array} storeKeys to be retrieved
|
1163
|
-
*/
|
1164
|
-
retrieveRecords: function(recordTypes, ids, storeKeys, isRefresh) {
|
1165
|
-
|
1166
|
-
var source = this._getDataSource(),
|
1167
|
-
isArray = SC.typeOf(recordTypes) === SC.T_ARRAY,
|
1168
|
-
len = (!storeKeys) ? ids.length : storeKeys.length,
|
1169
|
-
ret = [],
|
1170
|
-
rev = SC.Store.generateStoreKey(),
|
1171
|
-
K = SC.Record,
|
1172
|
-
recordType, idx, storeKey, status;
|
1173
|
-
|
1174
|
-
if (!isArray) recordType = recordTypes;
|
1175
|
-
|
1176
|
-
// if no storeKeys were passed, map recordTypes + ids
|
1177
|
-
for(idx=0;idx<len;idx++) {
|
1178
|
-
|
1179
|
-
// collect store key
|
1180
|
-
if (storeKeys) {
|
1181
|
-
storeKey = storeKeys[idx];
|
1182
|
-
} else {
|
1183
|
-
if (isArray) recordType = recordTypes[idx];
|
1184
|
-
storeKey = recordType.storeKeyFor(ids[idx]);
|
1185
|
-
}
|
1186
|
-
|
1187
|
-
// collect status and process
|
1188
|
-
status = this.readStatus(storeKey);
|
1189
|
-
|
1190
|
-
// K.EMPTY, K.ERROR, K.DESTROYED_CLEAN - initial retrieval
|
1191
|
-
if ((status == K.EMPTY) || (status == K.ERROR) || (status == K.DESTROYED_CLEAN)) {
|
1192
|
-
this.writeStatus(storeKey, K.BUSY_LOADING);
|
1193
|
-
this.dataHashDidChange(storeKey, rev, YES);
|
1194
|
-
ret.push(storeKey);
|
1195
|
-
|
1196
|
-
// otherwise, ignore record unless isRefresh is YES.
|
1197
|
-
} else if (isRefresh) {
|
1198
|
-
// K.READY_CLEAN, K.READY_DIRTY, ignore K.READY_NEW
|
1199
|
-
if (status & K.READY) {
|
1200
|
-
this.writeStatus(storeKey, K.BUSY_REFRESH | (status & 0x03)) ;
|
1201
|
-
this.dataHashDidChange(storeKey, rev, YES);
|
1202
|
-
ret.push(storeKey);
|
1203
|
-
|
1204
|
-
// K.BUSY_DESTROYING, K.BUSY_COMMITTING, K.BUSY_CREATING
|
1205
|
-
} else if ((status == K.BUSY_DESTROYING) || (status == K.BUSY_CREATING) || (status == K.BUSY_COMMITTING)) {
|
1206
|
-
throw K.BUSY_ERROR ;
|
1207
|
-
|
1208
|
-
// K.DESTROY_DIRTY, bad state...
|
1209
|
-
} else if (status == K.DESTROYED_DIRTY) {
|
1210
|
-
throw K.BAD_STATE_ERROR ;
|
1211
|
-
|
1212
|
-
// ignore K.BUSY_LOADING, K.BUSY_REFRESH_CLEAN, K.BUSY_REFRESH_DIRTY
|
1213
|
-
}
|
1214
|
-
}
|
1215
|
-
}
|
1216
|
-
|
1217
|
-
// now retrieve storekeys from dataSource
|
1218
|
-
if (source) {
|
1219
|
-
var ok = source.retrieveRecords.call(source, this, ret, ids);
|
1220
|
-
if (ok === NO) ret.length = 0; // could not find.
|
1221
|
-
}
|
1222
|
-
return ret ;
|
1223
|
-
},
|
1224
|
-
|
1225
|
-
_TMP_RETRIEVE_ARRAY: [],
|
1226
|
-
|
1227
|
-
/**
|
1228
|
-
Retrieves a record from the server. If the record has already been loaded
|
1229
|
-
in the store, then this method will simply return. Otherwise if your
|
1230
|
-
store has a dataSource, this will call the dataSource to retrieve the
|
1231
|
-
record. Generally you will not need to call this method yourself.
|
1232
|
-
Instead you can just use find().
|
1233
|
-
|
1234
|
-
This will not actually create a record instance but it will initiate a
|
1235
|
-
load of the record from the server. You can subsequently get a record
|
1236
|
-
instance itself using materializeRecord()
|
1237
|
-
|
1238
|
-
@param {SC.Record} recordType class
|
1239
|
-
@param {String} id id to retrieve
|
1240
|
-
@param {Number} storeKey (optional) store key
|
1241
|
-
@param {Boolean} isRefresh
|
1242
|
-
@returns {Number} storeKey that was retrieved
|
1243
|
-
*/
|
1244
|
-
retrieveRecord: function(recordType, id, storeKey, isRefresh) {
|
1245
|
-
var array = this._TMP_RETRIEVE_ARRAY,
|
1246
|
-
ret;
|
1247
|
-
|
1248
|
-
if (storeKey) {
|
1249
|
-
array[0] = storeKey;
|
1250
|
-
storeKey = array;
|
1251
|
-
id = null ;
|
1252
|
-
} else {
|
1253
|
-
array[0] = id;
|
1254
|
-
id = array;
|
1255
|
-
}
|
1256
|
-
|
1257
|
-
ret = this.retrieveRecords(recordType, id, storeKey, isRefresh);
|
1258
|
-
array.length = 0 ;
|
1259
|
-
return ret[0];
|
1260
|
-
},
|
1261
|
-
|
1262
|
-
/**
|
1263
|
-
Refreshes a record from the server. If the record has already been loaded
|
1264
|
-
in the store, then this method will request a refresh from the dataSource.
|
1265
|
-
Otherwise it will attempt to retrieve the record.
|
1266
|
-
|
1267
|
-
@param {String} id to id of the record to load
|
1268
|
-
@param {SC.Record} recordType the expected record type
|
1269
|
-
@param {Number} storeKey (optional) optional store key
|
1270
|
-
@returns {Boolean} YES if the retrieval was a success.
|
1271
|
-
*/
|
1272
|
-
refreshRecord: function(recordType, id, storeKey) {
|
1273
|
-
return this.retrieveRecord(recordType, id, storeKey, YES);
|
1274
|
-
},
|
1275
|
-
|
1276
|
-
/**
|
1277
|
-
Refreshes a set of records from the server. If the records has already been loaded
|
1278
|
-
in the store, then this method will request a refresh from the dataSource.
|
1279
|
-
Otherwise it will attempt to retrieve them.
|
1280
|
-
|
1281
|
-
@param {SC.Record|Array} recordTypes class or array of classes
|
1282
|
-
@param {Array} ids ids to destroy
|
1283
|
-
@param {Array} storeKeys (optional) store keys to destroy
|
1284
|
-
@returns {Boolean} YES if the retrieval was a success.
|
1285
|
-
*/
|
1286
|
-
refreshRecords: function(recordTypes, ids, storeKeys) {
|
1287
|
-
return this.retrieveRecords(recordTypes, ids, storeKeys, YES);
|
1288
|
-
},
|
1289
|
-
|
1290
|
-
/**
|
1291
|
-
Commits the passed store keys. Based on the current state of the
|
1292
|
-
record, this will ask the data source to perform the appropriate actions
|
1293
|
-
on the store keys.
|
1294
|
-
|
1295
|
-
@param {String} id to id of the record to load
|
1296
|
-
@param {SC.Record} recordType the expected record type
|
1297
|
-
|
1298
|
-
@returns {SC.Bool} if the action was succesful.
|
1299
|
-
*/
|
1300
|
-
commitRecords: function(recordTypes, ids, storeKeys) {
|
1301
|
-
var source = this._getDataSource(),
|
1302
|
-
isArray = SC.typeOf(recordTypes) === SC.T_ARRAY,
|
1303
|
-
retCreate= [], retUpdate= [], retDestroy = [],
|
1304
|
-
rev = SC.Store.generateStoreKey(),
|
1305
|
-
K = SC.Record,
|
1306
|
-
recordType, idx, storeKey, status, key, ret, len ;
|
1307
|
-
|
1308
|
-
// If no params are passed, look up storeKeys in the changelog property.
|
1309
|
-
// Remove any committed records from changelog property.
|
1310
|
-
|
1311
|
-
if(recordTypes===undefined && ids===undefined && storeKeys===undefined){
|
1312
|
-
storeKeys=this.changelog;
|
1313
|
-
}
|
1314
|
-
|
1315
|
-
// if no storeKeys or ids at this point, return
|
1316
|
-
if(!storeKeys && !ids) return;
|
1317
|
-
|
1318
|
-
len = (storeKeys === undefined) ? ids.length : storeKeys.length;
|
1319
|
-
|
1320
|
-
for(idx=0;idx<len;idx++) {
|
1321
|
-
|
1322
|
-
// collect store key
|
1323
|
-
if (storeKeys) {
|
1324
|
-
storeKey = storeKeys[idx];
|
1325
|
-
} else {
|
1326
|
-
if (isArray) recordType = recordTypes[idx] || SC.Record;
|
1327
|
-
else recordType = recordTypes;
|
1328
|
-
storeKey = recordType.storeKeyFor(ids[idx]);
|
1329
|
-
}
|
1330
|
-
|
1331
|
-
// collect status and process
|
1332
|
-
status = this.readStatus(storeKey);
|
1333
|
-
|
1334
|
-
if ((status == K.EMPTY) || (status == K.ERROR)) {
|
1335
|
-
throw K.NOT_FOUND_ERROR ;
|
1336
|
-
}else{
|
1337
|
-
if(status==K.READY_NEW){
|
1338
|
-
this.writeStatus(storeKey, K.BUSY_CREATING);
|
1339
|
-
this.dataHashDidChange(storeKey, rev, YES);
|
1340
|
-
retCreate.push(storeKey);
|
1341
|
-
} else if (status==K.READY_DIRTY) {
|
1342
|
-
this.writeStatus(storeKey, K.BUSY_COMMITTING);
|
1343
|
-
this.dataHashDidChange(storeKey, rev, YES);
|
1344
|
-
retUpdate.push(storeKey);
|
1345
|
-
} else if (status==K.DESTROYED_DIRTY) {
|
1346
|
-
this.writeStatus(storeKey, K.BUSY_DESTROYING);
|
1347
|
-
this.dataHashDidChange(storeKey, rev, YES);
|
1348
|
-
retDestroy.push(storeKey);
|
1349
|
-
} else if (status==K.DESTROYED_CLEAN) {
|
1350
|
-
this.dataHashDidChange(storeKey, rev, YES);
|
1351
|
-
retDestroy.push(storeKey);
|
1352
|
-
}
|
1353
|
-
// ignore K.READY_CLEAN, K.BUSY_LOADING, K.BUSY_CREATING, K.BUSY_COMMITTING,
|
1354
|
-
// K.BUSY_REFRESH_CLEAN, K_BUSY_REFRESH_DIRTY, KBUSY_DESTROYING
|
1355
|
-
}
|
1356
|
-
}
|
1357
|
-
|
1358
|
-
// now commit storekeys to dataSource
|
1359
|
-
if (source) ret=source.commitRecords.call(source, this, retCreate, retUpdate, retDestroy);
|
1360
|
-
//remove all commited changes from changelog
|
1361
|
-
if (ret && recordTypes===undefined && ids===undefined && storeKeys===this.changelog){
|
1362
|
-
this.changelog=null;
|
1363
|
-
}
|
1364
|
-
return ret ;
|
1365
|
-
},
|
1366
|
-
|
1367
|
-
/**
|
1368
|
-
Commits the passed store key. Based on the current state of the
|
1369
|
-
record, this will ask the data source to perform the appropriate action
|
1370
|
-
on the store key.
|
1371
|
-
|
1372
|
-
You have to pass either the id or the storeKey otherwise it will return NO.
|
1373
|
-
|
1374
|
-
@param {String} id to id of the record to load
|
1375
|
-
@param {SC.Record} recordType the expected record type
|
1376
|
-
|
1377
|
-
@returns {SC.Bool} if the action was succesful.
|
1378
|
-
*/
|
1379
|
-
commitRecord: function(recordType, id, storeKey) {
|
1380
|
-
var array = this._TMP_RETRIEVE_ARRAY,
|
1381
|
-
ret ;
|
1382
|
-
if (id === undefined && storeKey === undefined ) return NO;
|
1383
|
-
if (storeKey !== undefined) {
|
1384
|
-
array[0] = storeKey;
|
1385
|
-
storeKey = array;
|
1386
|
-
id = null ;
|
1387
|
-
} else {
|
1388
|
-
array[0] = id;
|
1389
|
-
id = array;
|
1390
|
-
}
|
1391
|
-
|
1392
|
-
ret = this.commitRecords(recordType, id, storeKey);
|
1393
|
-
array.length = 0 ;
|
1394
|
-
return ret;
|
1395
|
-
},
|
1396
|
-
|
1397
|
-
/**
|
1398
|
-
Cancels an inflight request for the passed records. Depending on the
|
1399
|
-
server implementation, this could cancel an entire request, causing
|
1400
|
-
other records to also transition their current state.
|
1401
|
-
|
1402
|
-
@param {SC.Record|Array} recordTypes class or array of classes
|
1403
|
-
@param {Array} ids ids to destroy
|
1404
|
-
@param {Array} storeKeys (optional) store keys to destroy
|
1405
|
-
@returns {SC.Store} the store.
|
1406
|
-
*/
|
1407
|
-
cancelRecords: function(recordTypes, ids, storeKeys) {
|
1408
|
-
var source = this._getDataSource(),
|
1409
|
-
isArray = SC.typeOf(recordTypes) === SC.T_ARRAY,
|
1410
|
-
K = SC.Record,
|
1411
|
-
ret = [],
|
1412
|
-
status, len, idx, id, recordType, storeKey;
|
1413
|
-
|
1414
|
-
len = (storeKeys === undefined) ? ids.length : storeKeys.length;
|
1415
|
-
for(idx=0;idx<len;idx++) {
|
1416
|
-
if (isArray) recordType = recordTypes[idx] || SC.Record;
|
1417
|
-
else recordType = recordTypes || SC.Record;
|
1418
|
-
|
1419
|
-
id = ids ? ids[idx] : undefined ;
|
1420
|
-
|
1421
|
-
if(storeKeys===undefined){
|
1422
|
-
storeKey = recordType.storeKeyFor(id);
|
1423
|
-
}else{
|
1424
|
-
storeKey = storeKeys ? storeKeys[idx] : undefined ;
|
1425
|
-
}
|
1426
|
-
if(storeKey) {
|
1427
|
-
status = this.readStatus(storeKey);
|
1428
|
-
|
1429
|
-
if ((status == K.EMPTY) || (status == K.ERROR)) {
|
1430
|
-
throw K.NOT_FOUND_ERROR ;
|
1431
|
-
}
|
1432
|
-
ret.push(storeKey);
|
1433
|
-
}
|
1434
|
-
}
|
1435
|
-
|
1436
|
-
if (source) source.cancel.call(source, this, ret);
|
1437
|
-
|
1438
|
-
return this ;
|
1439
|
-
},
|
1440
|
-
|
1441
|
-
/**
|
1442
|
-
Cancels an inflight request for the passed record. Depending on the
|
1443
|
-
server implementation, this could cancel an entire request, causing
|
1444
|
-
other records to also transition their current state.
|
1445
|
-
|
1446
|
-
@param {SC.Record|Array} recordTypes class or array of classes
|
1447
|
-
@param {Array} ids ids to destroy
|
1448
|
-
@param {Array} storeKeys (optional) store keys to destroy
|
1449
|
-
@returns {SC.Store} the store.
|
1450
|
-
*/
|
1451
|
-
cancelRecord: function(recordType, id, storeKey) {
|
1452
|
-
var array = this._TMP_RETRIEVE_ARRAY,
|
1453
|
-
ret ;
|
1454
|
-
|
1455
|
-
if (storeKey !== undefined) {
|
1456
|
-
array[0] = storeKey;
|
1457
|
-
storeKey = array;
|
1458
|
-
id = null ;
|
1459
|
-
} else {
|
1460
|
-
array[0] = id;
|
1461
|
-
id = array;
|
1462
|
-
}
|
1463
|
-
|
1464
|
-
ret = this.cancelRecords(recordType, id, storeKey);
|
1465
|
-
array.length = 0 ;
|
1466
|
-
return this;
|
1467
|
-
},
|
1468
|
-
|
1469
|
-
/**
|
1470
|
-
Convenience method can be called by the store or other parts of your
|
1471
|
-
application to load records into the store. This method will take a
|
1472
|
-
recordType and an array of data hashes and either add or update the
|
1473
|
-
record in the store.
|
1474
|
-
|
1475
|
-
The loaded records will be in an SC.Record.READY_CLEAN state, indicating
|
1476
|
-
they were loaded from the data source and do not need to be committed
|
1477
|
-
back before changing.
|
1478
|
-
|
1479
|
-
This method is implemented by calling pushRetrieve(). The standard
|
1480
|
-
state constraints for that method apply here.
|
1481
|
-
|
1482
|
-
If you are upgrading from a pre SproutCore 1.0 application, this method
|
1483
|
-
is the closest to the old updateRecords().
|
1484
|
-
|
1485
|
-
@param {SC.Record} recordTypes the record type or array of record types
|
1486
|
-
@param {Array} dataHashes array of data hashes to update
|
1487
|
-
@param {Array} ids optional array of ids. if not passed lookup on hashes
|
1488
|
-
@returns {Array} store keys assigned to these ids
|
1489
|
-
*/
|
1490
|
-
loadRecords: function(recordTypes, dataHashes, ids) {
|
1491
|
-
var isArray = SC.typeOf(recordTypes) === SC.T_ARRAY,
|
1492
|
-
len = dataHashes.get('length'),
|
1493
|
-
ret = [],
|
1494
|
-
recordType, id, primaryKey, idx, dataHash, storeKey;
|
1495
|
-
|
1496
|
-
// save lookup info
|
1497
|
-
if (!isArray) {
|
1498
|
-
recordType = recordTypes || SC.Record;
|
1499
|
-
primaryKey = recordType.prototype.primaryKey ;
|
1500
|
-
}
|
1501
|
-
|
1502
|
-
// push each record
|
1503
|
-
for(idx=0;idx<len;idx++) {
|
1504
|
-
dataHash = dataHashes.objectAt(idx);
|
1505
|
-
if (isArray) {
|
1506
|
-
recordType = recordTypes.objectAt(idx) || SC.Record;
|
1507
|
-
primaryKey = recordType.prototype.primaryKey ;
|
1508
|
-
}
|
1509
|
-
id = (ids) ? ids.objectAt(idx) : dataHash[primaryKey];
|
1510
|
-
ret[idx] = storeKey = recordType.storeKeyFor(id); // needed to cache
|
1511
|
-
this.pushRetrieve(recordType, id, dataHash, storeKey);
|
1512
|
-
}
|
1513
|
-
// return storeKeys
|
1514
|
-
return ret ;
|
1515
|
-
},
|
1516
|
-
|
1517
|
-
// ..........................................................
|
1518
|
-
// DATA SOURCE CALLBACKS
|
1519
|
-
//
|
1520
|
-
// Mathods called by the data source on the store
|
1521
|
-
|
1522
|
-
/**
|
1523
|
-
Called by a dataSource when it cancels an inflight operation on a
|
1524
|
-
record. This will transition the record back to it non-inflight state.
|
1525
|
-
|
1526
|
-
@param {Number} storeKey record store key to cancel
|
1527
|
-
@returns {SC.Store} reciever
|
1528
|
-
*/
|
1529
|
-
dataSourceDidCancel: function(storeKey) {
|
1530
|
-
var status = this.readStatus(storeKey),
|
1531
|
-
K = SC.Record;
|
1532
|
-
|
1533
|
-
// EMPTY, ERROR, READY_CLEAN, READY_NEW, READY_DIRTY, DESTROYED_CLEAN,
|
1534
|
-
// DESTROYED_DIRTY
|
1535
|
-
if (!(status & K.BUSY)) {
|
1536
|
-
throw K.BAD_STATE_ERROR; // should never be called in this state
|
1537
|
-
|
1538
|
-
}
|
1539
|
-
|
1540
|
-
// otherwise, determine proper state transition
|
1541
|
-
switch(status) {
|
1542
|
-
case K.BUSY_LOADING:
|
1543
|
-
status = K.EMPTY;
|
1544
|
-
break ;
|
1545
|
-
|
1546
|
-
case K.BUSY_CREATING:
|
1547
|
-
status = K.READY_NEW;
|
1548
|
-
break;
|
1549
|
-
|
1550
|
-
case K.BUSY_COMMITTING:
|
1551
|
-
status = K.READY_DIRTY ;
|
1552
|
-
break;
|
1553
|
-
|
1554
|
-
case K.BUSY_REFRESH_CLEAN:
|
1555
|
-
status = K.READY_CLEAN;
|
1556
|
-
break;
|
1557
|
-
|
1558
|
-
case K.BUSY_REFRESH_DIRTY:
|
1559
|
-
status = K.READY_DIRTY ;
|
1560
|
-
break ;
|
1561
|
-
|
1562
|
-
case K.BUSY_DESTROYING:
|
1563
|
-
status = K.DESTROYED_DIRTY ;
|
1564
|
-
break;
|
1565
|
-
|
1566
|
-
default:
|
1567
|
-
throw K.BAD_STATE_ERROR ;
|
1568
|
-
}
|
1569
|
-
this.writeStatus(storeKey, status) ;
|
1570
|
-
this.dataHashDidChange(storeKey, null, YES);
|
1571
|
-
|
1572
|
-
return this ;
|
1573
|
-
},
|
1574
|
-
|
1575
|
-
/**
|
1576
|
-
Called by a data source when it creates or commits a record. Passing an
|
1577
|
-
optional id will remap the storeKey to the new record id. This is
|
1578
|
-
required when you commit a record that does not have an id yet.
|
1579
|
-
|
1580
|
-
@param {Number} storeKey record store key to change to READY_CLEAN state
|
1581
|
-
@returns {SC.Store} reciever
|
1582
|
-
*/
|
1583
|
-
dataSourceDidComplete: function(storeKey, dataHash, newId) {
|
1584
|
-
var status = this.readStatus(storeKey), K = SC.Record, statusOnly;
|
1585
|
-
|
1586
|
-
// EMPTY, ERROR, READY_CLEAN, READY_NEW, READY_DIRTY, DESTROYED_CLEAN,
|
1587
|
-
// DESTROYED_DIRTY
|
1588
|
-
if (!(status & K.BUSY)) {
|
1589
|
-
throw K.BAD_STATE_ERROR; // should never be called in this state
|
1590
|
-
}
|
1591
|
-
|
1592
|
-
// otherwise, determine proper state transition
|
1593
|
-
if(status===K.BUSY_DESTROYING) {
|
1594
|
-
throw K.BAD_STATE_ERROR ;
|
1595
|
-
} else status = K.READY_CLEAN ;
|
1596
|
-
|
1597
|
-
this.writeStatus(storeKey, status) ;
|
1598
|
-
if (dataHash) this.writeDataHash(storeKey, dataHash, status) ;
|
1599
|
-
if (newId) SC.Store.replaceIdFor(storeKey, newId);
|
1600
|
-
|
1601
|
-
statusOnly = dataHash || newId ? NO : YES;
|
1602
|
-
this.dataHashDidChange(storeKey, null, statusOnly);
|
1603
|
-
|
1604
|
-
return this ;
|
1605
|
-
},
|
1606
|
-
|
1607
|
-
/**
|
1608
|
-
Called by a data source when it has destroyed a record. This will
|
1609
|
-
transition the record to the proper state.
|
1610
|
-
|
1611
|
-
@param {Number} storeKey record store key to cancel
|
1612
|
-
@returns {SC.Store} reciever
|
1613
|
-
*/
|
1614
|
-
dataSourceDidDestroy: function(storeKey) {
|
1615
|
-
var status = this.readStatus(storeKey), K = SC.Record;
|
1616
|
-
|
1617
|
-
// EMPTY, ERROR, READY_CLEAN, READY_NEW, READY_DIRTY, DESTROYED_CLEAN,
|
1618
|
-
// DESTROYED_DIRTY
|
1619
|
-
if (!(status & K.BUSY)) {
|
1620
|
-
throw K.BAD_STATE_ERROR; // should never be called in this state
|
1621
|
-
}
|
1622
|
-
// otherwise, determine proper state transition
|
1623
|
-
else{
|
1624
|
-
status = K.DESTROYED_CLEAN ;
|
1625
|
-
}
|
1626
|
-
this.removeDataHash(storeKey, status) ;
|
1627
|
-
this.dataHashDidChange(storeKey);
|
1628
|
-
|
1629
|
-
return this ;
|
1630
|
-
},
|
1631
|
-
|
1632
|
-
/**
|
1633
|
-
Converts the passed record into an error object.
|
1634
|
-
|
1635
|
-
@param {Number} storeKey record store key to cancel
|
1636
|
-
@returns {SC.Store} reciever
|
1637
|
-
*/
|
1638
|
-
dataSourceDidError: function(storeKey, error) {
|
1639
|
-
var status = this.readStatus(storeKey), K = SC.Record;
|
1640
|
-
|
1641
|
-
// EMPTY, ERROR, READY_CLEAN, READY_NEW, READY_DIRTY, DESTROYED_CLEAN,
|
1642
|
-
// DESTROYED_DIRTY
|
1643
|
-
if (!(status & K.BUSY)) {
|
1644
|
-
throw K.BAD_STATE_ERROR; // should never be called in this state
|
1645
|
-
}
|
1646
|
-
// otherwise, determine proper state transition
|
1647
|
-
else{
|
1648
|
-
status = error ;
|
1649
|
-
}
|
1650
|
-
this.writeStatus(storeKey, status) ;
|
1651
|
-
this.dataHashDidChange(storeKey, null, YES);
|
1652
|
-
|
1653
|
-
return this ;
|
1654
|
-
},
|
1655
|
-
|
1656
|
-
// ..........................................................
|
1657
|
-
// PUSH CHANGES FROM DATA SOURCE
|
1658
|
-
//
|
1659
|
-
|
1660
|
-
pushRetrieve: function(recordType, id, dataHash, storeKey) {
|
1661
|
-
var K = SC.Record, status;
|
1662
|
-
|
1663
|
-
if(storeKey===undefined){
|
1664
|
-
storeKey = recordType.storeKeyFor(id);
|
1665
|
-
}
|
1666
|
-
status = this.readStatus(storeKey);
|
1667
|
-
if(status==K.EMPTY || status==K.ERROR || status==K.READY_CLEAN || status==K.DESTROY_CLEAN) {
|
1668
|
-
|
1669
|
-
status = K.READY_CLEAN;
|
1670
|
-
if(dataHash===undefined) {
|
1671
|
-
this.writeStatus(storeKey, status) ;
|
1672
|
-
}
|
1673
|
-
else {
|
1674
|
-
this.writeDataHash(storeKey, dataHash, status) ;
|
1675
|
-
}
|
1676
|
-
this.dataHashDidChange(storeKey);
|
1677
|
-
|
1678
|
-
return YES;
|
1679
|
-
}
|
1680
|
-
//conflicted (ready)
|
1681
|
-
return NO;
|
1682
|
-
},
|
1683
|
-
|
1684
|
-
pushDestroy: function(recordType, id, storeKey) {
|
1685
|
-
var K = SC.Record, status;
|
1686
|
-
|
1687
|
-
if(storeKey===undefined){
|
1688
|
-
storeKey = recordType.storeKeyFor(id);
|
1689
|
-
}
|
1690
|
-
status = this.readStatus(storeKey);
|
1691
|
-
if(status==K.EMPTY || status==K.ERROR || status==K.READY_CLEAN || status==K.DESTROY_CLEAN){
|
1692
|
-
status = K.DESTROY_CLEAN;
|
1693
|
-
this.removeDataHash(storeKey, status) ;
|
1694
|
-
this.dataHashDidChange(storeKey);
|
1695
|
-
return YES;
|
1696
|
-
}
|
1697
|
-
//conflicted (destroy)
|
1698
|
-
return NO;
|
1699
|
-
},
|
1700
|
-
|
1701
|
-
pushError: function(recordType, id, error, storeKey) {
|
1702
|
-
var K = SC.Record, status;
|
1703
|
-
|
1704
|
-
if(storeKey===undefined){
|
1705
|
-
storeKey = recordType.storeKeyFor(id);
|
1706
|
-
}
|
1707
|
-
status = this.readStatus(storeKey);
|
1708
|
-
if(status==K.EMPTY || status==K.ERROR || status==K.READY_CLEAN || status==K.DESTROY_CLEAN){
|
1709
|
-
status = error;
|
1710
|
-
this.writeStatus(storeKey, status) ;
|
1711
|
-
this.dataHashDidChange(storeKey, null, YES);
|
1712
|
-
return YES;
|
1713
|
-
}
|
1714
|
-
//conflicted (error)
|
1715
|
-
return NO;
|
1716
|
-
},
|
1717
|
-
|
1718
|
-
// ..........................................................
|
1719
|
-
// INTERNAL SUPPORT
|
1720
|
-
//
|
1721
|
-
|
1722
|
-
init: function() {
|
1723
|
-
sc_super();
|
1724
|
-
this.reset();
|
1725
|
-
},
|
1726
|
-
|
1727
|
-
|
1728
|
-
// ..........................................................
|
1729
|
-
// PRIMARY KEY CONVENIENCE METHODS
|
1730
|
-
//
|
1731
|
-
|
1732
|
-
/**
|
1733
|
-
Given a storeKey, return the primaryKey.
|
1734
|
-
|
1735
|
-
@param {Number} storeKey the store key
|
1736
|
-
@returns {String} primaryKey value
|
1737
|
-
*/
|
1738
|
-
idFor: function(storeKey) {
|
1739
|
-
return SC.Store.idFor(storeKey);
|
1740
|
-
},
|
1741
|
-
|
1742
|
-
/**
|
1743
|
-
Given a storeKey, return the recordType.
|
1744
|
-
|
1745
|
-
@param {Number} storeKey the store key
|
1746
|
-
@returns {SC.Record} record instance
|
1747
|
-
*/
|
1748
|
-
recordTypeFor: function(storeKey) {
|
1749
|
-
return SC.Store.recordTypeFor(storeKey) ;
|
1750
|
-
},
|
1751
|
-
|
1752
|
-
/**
|
1753
|
-
Given a recordType and primaryKey, find the storeKey. If the primaryKey
|
1754
|
-
has not been assigned a storeKey yet, it will be added.
|
1755
|
-
|
1756
|
-
@param {SC.Record} recordType the record type
|
1757
|
-
@param {String} primaryKey the primary key
|
1758
|
-
@returns {Number} storeKey
|
1759
|
-
*/
|
1760
|
-
storeKeyFor: function(recordType, primaryKey) {
|
1761
|
-
return recordType.storeKeyFor(primaryKey);
|
1762
|
-
},
|
1763
|
-
|
1764
|
-
/**
|
1765
|
-
Given a primaryKey value for the record, returns the associated
|
1766
|
-
storeKey. As opposed to storeKeyFor() however, this method
|
1767
|
-
will NOT generate a new storeKey but returned undefined.
|
1768
|
-
|
1769
|
-
@param {String} id a record id
|
1770
|
-
@returns {Number} a storeKey.
|
1771
|
-
*/
|
1772
|
-
storeKeyExists: function(recordType, primaryKey) {
|
1773
|
-
return recordType.storeKeyExists(primaryKey);
|
1774
|
-
},
|
1775
|
-
|
1776
|
-
/**
|
1777
|
-
Finds all storeKeys of a certain record type in this store
|
1778
|
-
and returns an array.
|
1779
|
-
|
1780
|
-
@param {SC.Record} recordType
|
1781
|
-
@returns {Array} set of storeKeys
|
1782
|
-
*/
|
1783
|
-
storeKeysFor: function(recordType) {
|
1784
|
-
var recType, ret = [], storeKey;
|
1785
|
-
if(!this.statuses) return;
|
1786
|
-
|
1787
|
-
for(storeKey in SC.Store.recordTypesByStoreKey) {
|
1788
|
-
recType = SC.Store.recordTypesByStoreKey[storeKey];
|
1789
|
-
// if same record type and this store has it
|
1790
|
-
if(recType===recordType && this.statuses[storeKey]) {
|
1791
|
-
ret.push(parseInt(storeKey,0));
|
1792
|
-
}
|
1793
|
-
}
|
1794
|
-
|
1795
|
-
return ret;
|
1796
|
-
},
|
1797
|
-
|
1798
|
-
/**
|
1799
|
-
Finds all storeKeys in this store
|
1800
|
-
and returns an array.
|
1801
|
-
|
1802
|
-
@returns {Array} set of storeKeys
|
1803
|
-
*/
|
1804
|
-
storeKeys: function() {
|
1805
|
-
var ret = [], storeKey;
|
1806
|
-
if(!this.statuses) return;
|
1807
|
-
|
1808
|
-
for(storeKey in this.statuses) {
|
1809
|
-
// if status is not empty
|
1810
|
-
if(this.statuses[storeKey] != SC.Record.EMPTY) {
|
1811
|
-
ret.push(parseInt(storeKey,0));
|
1812
|
-
}
|
1813
|
-
}
|
1814
|
-
|
1815
|
-
return ret;
|
1816
|
-
},
|
1817
|
-
|
1818
|
-
/**
|
1819
|
-
Returns string representation of a storeKey, with status.
|
1820
|
-
|
1821
|
-
@param {Number} storeKey
|
1822
|
-
@returns {String}
|
1823
|
-
*/
|
1824
|
-
statusString: function(storeKey) {
|
1825
|
-
var rec = this.materializeRecord(storeKey);
|
1826
|
-
return rec.statusString();
|
1827
|
-
}
|
1828
|
-
|
1829
|
-
}) ;
|
1830
|
-
|
1831
|
-
SC.Store.mixin({
|
1832
|
-
|
1833
|
-
CHAIN_CONFLICT_ERROR: new Error("Nested Store Conflict"),
|
1834
|
-
NO_PARENT_STORE_ERROR: new Error("Parent Store Required"),
|
1835
|
-
NESTED_STORE_UNSUPPORTED_ERROR: new Error("Unsupported In Nested Store"),
|
1836
|
-
|
1837
|
-
EDITABLE: 'editable',
|
1838
|
-
LOCKED: 'locked',
|
1839
|
-
INHERITED: 'inherited',
|
1840
|
-
|
1841
|
-
/** @private
|
1842
|
-
This array maps all storeKeys to primary keys. You will not normally
|
1843
|
-
access this method directly. Instead use the idFor() and
|
1844
|
-
storeKeyFor() methods on SC.Record.
|
1845
|
-
*/
|
1846
|
-
idsByStoreKey: [],
|
1847
|
-
|
1848
|
-
/** @private
|
1849
|
-
Maps all storeKeys to a recordType. Once a storeKey is associated with
|
1850
|
-
a primaryKey and recordType that remains constant throughout the lifetime
|
1851
|
-
of the application.
|
1852
|
-
*/
|
1853
|
-
recordTypesByStoreKey: {},
|
1854
|
-
|
1855
|
-
/** @private
|
1856
|
-
The next store key to allocate. A storeKey must always be greater than 0
|
1857
|
-
*/
|
1858
|
-
nextStoreKey: 1,
|
1859
|
-
|
1860
|
-
generateStoreKey: function() { return this.nextStoreKey++; },
|
1861
|
-
|
1862
|
-
/**
|
1863
|
-
Given a storeKey returns the primaryKey associated with the key.
|
1864
|
-
If not primaryKey is associated with the storeKey, returns null.
|
1865
|
-
|
1866
|
-
@param {Number} storeKey the store key
|
1867
|
-
@returns {String} the primary key or null
|
1868
|
-
*/
|
1869
|
-
idFor: function(storeKey) {
|
1870
|
-
return this.idsByStoreKey[storeKey] ;
|
1871
|
-
},
|
1872
|
-
|
1873
|
-
/**
|
1874
|
-
Given a storeKey returns the SC.Record class associated with the key.
|
1875
|
-
If no record type is associated with the store key, returns null.
|
1876
|
-
|
1877
|
-
The SC.Record class will only be found if you have already called
|
1878
|
-
storeKeyFor() on the record.
|
1879
|
-
|
1880
|
-
@param {Number} storeKey the store key
|
1881
|
-
@returns {SC.Record} the record type
|
1882
|
-
*/
|
1883
|
-
recordTypeFor: function(storeKey) {
|
1884
|
-
return this.recordTypesByStoreKey[storeKey];
|
1885
|
-
},
|
1886
|
-
|
1887
|
-
/**
|
1888
|
-
Swaps the primaryKey mapped to the given storeKey with the new
|
1889
|
-
primaryKey. If the storeKey is not currently associated with a record
|
1890
|
-
this will raise an exception.
|
1891
|
-
|
1892
|
-
@param {Number} storeKey the existing store key
|
1893
|
-
@param {String} newPrimaryKey the new primary key
|
1894
|
-
@returns {SC.Store} receiver
|
1895
|
-
*/
|
1896
|
-
replaceIdFor: function(storeKey, primaryKey) {
|
1897
|
-
var recordType = this.recordTypeFor(storeKey);
|
1898
|
-
if (!recordType) {
|
1899
|
-
throw "replaceIdFor: storeKey %@ does not exist".fmt(storeKey);
|
1900
|
-
}
|
1901
|
-
|
1902
|
-
// map one direction...
|
1903
|
-
var oldPrimaryKey = this.idsByStoreKey[storeKey];
|
1904
|
-
this.idsByStoreKey[storeKey] = primaryKey ;
|
1905
|
-
|
1906
|
-
// then the other...
|
1907
|
-
var storeKeys = recordType.storeKeysById() ;
|
1908
|
-
delete storeKeys[oldPrimaryKey];
|
1909
|
-
storeKeys[primaryKey] = storeKey;
|
1910
|
-
|
1911
|
-
return this ;
|
1912
|
-
},
|
1913
|
-
|
1914
|
-
/**
|
1915
|
-
Swaps the recordType recorded for a given storeKey. Normally you should
|
1916
|
-
not call this method directly as it can damage the store behavior. This
|
1917
|
-
method is used by other store methods to set the recordType for a
|
1918
|
-
storeKey.
|
1919
|
-
|
1920
|
-
@param {Integer} storeKey the store key
|
1921
|
-
@param {SC.Record} recordType a record class
|
1922
|
-
@returns {SC.Store} reciever
|
1923
|
-
*/
|
1924
|
-
replaceRecordTypeFor: function(storeKey, recordType) {
|
1925
|
-
this.recordTypesByStoreKey[storeKey] = recordType;
|
1926
|
-
return this ;
|
1927
|
-
}
|
1928
|
-
|
1929
|
-
});
|
1930
|
-
|
1931
|
-
|
1932
|
-
SC.Store.prototype.nextStoreIndex = 1;
|
1933
|
-
|
1934
|
-
// ..........................................................
|
1935
|
-
// COMPATIBILITY
|
1936
|
-
//
|
1937
|
-
|
1938
|
-
/** @private
|
1939
|
-
global store is used only for deprecated compatibility methods. Don't use
|
1940
|
-
this in real code.
|
1941
|
-
*/
|
1942
|
-
SC.Store._getDefaultStore = function() {
|
1943
|
-
var store = this._store;
|
1944
|
-
if(!store) this._store = store = SC.Store.create();
|
1945
|
-
return store;
|
1946
|
-
};
|
1947
|
-
|
1948
|
-
/** @deprecated
|
1949
|
-
Included for compatibility, loads data hashes with the named recordType.
|
1950
|
-
If no recordType is passed, expects to find a recordType property in the
|
1951
|
-
data hashes. dataSource and isLoaded params are ignored.
|
1952
|
-
|
1953
|
-
Calls SC.Store#loadRecords() on the default store. Do not use this method in
|
1954
|
-
new code.
|
1955
|
-
|
1956
|
-
@param {Array} dataHashes data hashes to import
|
1957
|
-
@param {Object} dataSource ignored
|
1958
|
-
@param {SC.Record} recordType default record type
|
1959
|
-
@param {Boolean} isLoaded ignored
|
1960
|
-
@returns {Array} SC.Record instances for loaded data hashes
|
1961
|
-
*/
|
1962
|
-
SC.Store.updateRecords = function(dataHashes, dataSource, recordType, isLoaded) {
|
1963
|
-
var store = this._getDefaultStore(),
|
1964
|
-
len = dataHashes.length,
|
1965
|
-
idx, ret;
|
1966
|
-
|
1967
|
-
// if no recordType was passed, build an array of recordTypes from hashes
|
1968
|
-
if (!recordType) {
|
1969
|
-
recordType = [];
|
1970
|
-
for(idx=0;idx<len;idx++) recordType[idx] = dataHashes[idx].recordType;
|
1971
|
-
}
|
1972
|
-
|
1973
|
-
// call new API. Returns storeKeys
|
1974
|
-
ret = store.loadRecords(recordType, dataHashes);
|
1975
|
-
|
1976
|
-
// map to SC.Record instances
|
1977
|
-
len = ret.length;
|
1978
|
-
for(idx=0;idx<len;idx++) ret[idx] = store.materializeRecord(ret[idx]);
|
1979
|
-
|
1980
|
-
return ret ;
|
1981
|
-
};
|
1982
|
-
|
1983
|
-
/** @deprecated
|
1984
|
-
Finds a record with the passed guid on the default store. This is included
|
1985
|
-
only for compatibility. You should use the newer find() method defined on
|
1986
|
-
SC.Store instead.
|
1987
|
-
|
1988
|
-
@param {String} guid the guid
|
1989
|
-
@param {SC.Record} recordType expected record type
|
1990
|
-
@returns {SC.Record} found record
|
1991
|
-
*/
|
1992
|
-
SC.Store.find = function(guid, recordType) {
|
1993
|
-
return this._getDefaultStore().find(recordType, guid);
|
1994
|
-
};
|
1995
|
-
|
1996
|
-
/** @deprecated
|
1997
|
-
Passes through to findAll on default store. This is included only for
|
1998
|
-
compatibility. You should use the newer findAll() defined on SC.Store
|
1999
|
-
instead.
|
2000
|
-
|
2001
|
-
@param {Hash} filter search parameters
|
2002
|
-
@param {SC.Record} recordType type of record to find
|
2003
|
-
@returns {SC.RecordArray} result set
|
2004
|
-
*/
|
2005
|
-
SC.Store.findAll = function(filter, recordType) {
|
2006
|
-
return this._getDefaultStore().findAll(filter, recordType);
|
2007
|
-
};
|