sproutcore 1.6.0.rc.2-x86-mingw32 → 1.6.0.1-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. data/CHANGELOG +12 -0
  2. data/VERSION.yml +1 -1
  3. data/bin/sc-docs +6 -1
  4. data/lib/buildtasks/target.rake +1 -1
  5. data/lib/frameworks/sproutcore/Buildfile +5 -1
  6. data/lib/frameworks/sproutcore/CHANGELOG.md +175 -1
  7. data/lib/frameworks/sproutcore/apps/test_controls/controllers/select.js +12 -0
  8. data/lib/frameworks/sproutcore/apps/test_controls/resources/select_page.js +19 -5
  9. data/lib/frameworks/sproutcore/frameworks/ajax/system/request.js +28 -31
  10. data/lib/frameworks/sproutcore/frameworks/ajax/system/response.js +9 -2
  11. data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/controller.js +21 -1
  12. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/responder_context.js +1 -1
  13. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/template_helpers/checkbox_support.js +6 -1
  14. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/template_helpers/text_field_support.js +26 -8
  15. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/keyboard.js +2 -0
  16. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane.js +12 -5
  17. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/template.js +25 -9
  18. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js +157 -5
  19. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +7 -6
  20. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +9 -3
  21. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/sparse_array.js +8 -8
  22. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/string.js +104 -4
  23. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/theme.js +3 -56
  24. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils.js +4 -2
  25. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/content_destroyed.js +59 -0
  26. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/string.js +41 -1
  27. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/template_helpers/text_field_support.js +10 -2
  28. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/panes/template.js +16 -1
  29. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template/handlebars.js +1 -1
  30. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/clippingFrame.js +11 -0
  31. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/didAppendToDocument.js +18 -2
  32. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/insertBefore.js +10 -6
  33. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/keyboard.js +18 -1
  34. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template_collection.js +9 -1
  35. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +9 -4
  36. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/keyboard.js +15 -3
  37. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/manipulation.js +14 -8
  38. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/theming.js +8 -18
  39. data/lib/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures.js +12 -2
  40. data/lib/frameworks/sproutcore/frameworks/datastore/mixins/relationship_support.js +296 -0
  41. data/lib/frameworks/sproutcore/frameworks/datastore/models/child_record.js +1 -1
  42. data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +330 -326
  43. data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +22 -1
  44. data/lib/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +1 -1
  45. data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +614 -614
  46. data/lib/frameworks/sproutcore/frameworks/datastore/tests/data_sources/data_source.js +14 -1
  47. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +3 -1
  48. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +2 -0
  49. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +2 -0
  50. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/core_methods.js +20 -13
  51. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +61 -46
  52. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +30 -30
  53. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitChangesFromNestedStore.js +24 -24
  54. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/connectDataSource.js +31 -0
  55. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushRelationships.js +1177 -0
  56. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/system/datetime.js +4 -63
  57. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/border.js +1 -1
  58. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +1 -1
  59. data/lib/frameworks/sproutcore/frameworks/desktop/panes/alert.js +7 -8
  60. data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +18 -1
  61. data/lib/frameworks/sproutcore/frameworks/desktop/panes/panel.js +9 -0
  62. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drag_data_source.js +3 -3
  63. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +3 -3
  64. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/button.js +1 -1
  65. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/checkbox.js +1 -1
  66. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/collection.js +1 -1
  67. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/disclosure.js +1 -1
  68. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/image_button.js +1 -1
  69. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/master_detail.js +3 -2
  70. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/menu.js +12 -2
  71. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/panel.js +1 -1
  72. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/picker.js +1 -1
  73. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/progress.js +1 -1
  74. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/radio.js +1 -1
  75. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/radio_group.js +2 -2
  76. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segment.js +1 -1
  77. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segmented.js +1 -1
  78. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/slider.js +1 -1
  79. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/toolbar.js +1 -1
  80. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/well.js +1 -1
  81. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/workspace.js +1 -1
  82. data/lib/frameworks/sproutcore/frameworks/desktop/resources/segmented.css +1 -0
  83. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +33 -22
  84. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/methods.js +20 -1
  85. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +10 -3
  86. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/methods.js +34 -7
  87. data/lib/frameworks/sproutcore/frameworks/desktop/views/button.js +14 -15
  88. data/lib/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +40 -14
  89. data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +699 -700
  90. data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +2 -2
  91. data/lib/frameworks/sproutcore/frameworks/desktop/views/master_detail.js +11 -1
  92. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +16 -6
  93. data/lib/frameworks/sproutcore/frameworks/desktop/views/progress.js +0 -1
  94. data/lib/frameworks/sproutcore/frameworks/desktop/views/radio.js +49 -7
  95. data/lib/frameworks/sproutcore/frameworks/desktop/views/select_button.js +9 -0
  96. data/lib/frameworks/sproutcore/frameworks/desktop/views/select_field.js +6 -2
  97. data/lib/frameworks/sproutcore/frameworks/desktop/views/slider.js +4 -26
  98. data/lib/frameworks/sproutcore/frameworks/desktop/views/web.js +20 -19
  99. data/lib/frameworks/sproutcore/frameworks/experimental/Buildfile +2 -0
  100. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/view_designer.js +249 -249
  101. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/mixins/edit_mode.js +13 -5
  102. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/mixins/emptiness.js +53 -37
  103. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/render_delegates/form.js +2 -1
  104. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/render_delegates/form_row.js +3 -11
  105. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/mixins/edit_mode.js +53 -0
  106. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/mixins/emptiness.js +114 -0
  107. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form.js +174 -6
  108. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_row.js +86 -6
  109. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form.js +80 -110
  110. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form_row.js +96 -97
  111. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/README.md +2 -1
  112. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/models/record.js +20 -36
  113. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu.js +121 -0
  114. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu_item.js +90 -0
  115. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/mixins/select_view_menu.js +139 -0
  116. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/render_delegates/select_button.js +14 -0
  117. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/ext/menu_resizing.js +25 -0
  118. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/mixins/select_view_menu/bindings.js +43 -0
  119. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/mixins/select_view_menu/check_selected.js +32 -0
  120. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/popup_button/menu_setup.js +40 -0
  121. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/popup_button/show_menu.js +45 -0
  122. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/select/menu_width.js +49 -0
  123. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/select/selected_item.js +191 -0
  124. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/popup_button.js +264 -0
  125. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/select.js +450 -0
  126. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_child.js +14 -6
  127. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_thumb.js +1 -1
  128. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/render_delegates/split.js +1 -1
  129. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/render_delegates/split_divider.js +1 -1
  130. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/split.js +9 -0
  131. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/thumb.js +3 -2
  132. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +7 -17
  133. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_value_support.js +1 -1
  134. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/flowed_layout.js +35 -8
  135. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editable.js +1 -1
  136. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editor.js +1 -1
  137. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editor_delegate.js +1 -1
  138. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inner_frame.js +1 -1
  139. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/canvas_image.js +1 -1
  140. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/helpers/sizing.js +2 -0
  141. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/image.js +1 -1
  142. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/label.js +1 -1
  143. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/render_delegate.js +6 -6
  144. data/lib/frameworks/sproutcore/frameworks/foundation/resources/images/favicon.ico +0 -0
  145. data/lib/frameworks/sproutcore/frameworks/foundation/resources/text_field.css +0 -5
  146. data/lib/frameworks/sproutcore/frameworks/foundation/system/exception_handler.js +4 -2
  147. data/lib/frameworks/sproutcore/frameworks/foundation/system/math.js +2 -1
  148. data/lib/frameworks/sproutcore/frameworks/foundation/system/module.js +13 -0
  149. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/string_measurement.js +6 -9
  150. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/flowed_layout/tests.js +912 -0
  151. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +36 -7
  152. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +58 -4
  153. data/lib/frameworks/sproutcore/frameworks/foundation/validators/validator.js +1 -3
  154. data/lib/frameworks/sproutcore/frameworks/foundation/views/field.js +0 -15
  155. data/lib/frameworks/sproutcore/frameworks/foundation/views/label.js +2 -2
  156. data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +25 -14
  157. data/lib/frameworks/sproutcore/frameworks/handlebars/handlebars.js +1 -1
  158. data/lib/frameworks/sproutcore/frameworks/runtime/core.js +15 -9
  159. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/flatten.js +24 -0
  160. data/lib/frameworks/sproutcore/frameworks/runtime/ext/array.js +2 -1
  161. data/lib/frameworks/sproutcore/frameworks/runtime/ext/function.js +5 -5
  162. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +19 -0
  163. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/copyable.js +3 -2
  164. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/freezable.js +1 -1
  165. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +1 -1
  166. data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +14 -14
  167. data/lib/frameworks/sproutcore/frameworks/runtime/system/error.js +3 -0
  168. data/lib/frameworks/sproutcore/frameworks/runtime/system/logger.js +2 -2
  169. data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +2 -2
  170. data/lib/frameworks/sproutcore/frameworks/runtime/system/range_observer.js +1 -1
  171. data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +3 -3
  172. data/lib/frameworks/sproutcore/frameworks/runtime/system/set.js +15 -16
  173. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/itemType.js +6 -2
  174. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/enhance.js +30 -0
  175. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/create.js +17 -0
  176. data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +9 -2
  177. data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +3 -1
  178. data/lib/frameworks/sproutcore/frameworks/testing/resources/runner.css +0 -1
  179. data/lib/frameworks/sproutcore/frameworks/yuireset/resources/base.css +80 -0
  180. data/lib/frameworks/sproutcore/frameworks/yuireset/resources/core.css +0 -4
  181. data/lib/frameworks/sproutcore/lib/index.rhtml +2 -1
  182. data/lib/frameworks/sproutcore/themes/ace/resources/collection/normal/list.css +3 -3
  183. data/lib/frameworks/sproutcore/themes/ace/resources/collection/normal/list_item.css +2 -2
  184. data/lib/frameworks/sproutcore/themes/ace/resources/form/form.css +9 -0
  185. data/lib/frameworks/sproutcore/themes/ace/resources/menu/menu.css +3 -1
  186. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/picker.js +1 -1
  187. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/workspace.js +1 -1
  188. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/button.js +1 -1
  189. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/panel.js +1 -1
  190. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/progress.js +2 -0
  191. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/slider.js +1 -1
  192. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/well.js +1 -1
  193. data/lib/sproutcore/builders/base.rb +5 -1
  194. data/lib/sproutcore/builders/handlebars.rb +12 -1
  195. data/lib/sproutcore/models/target.rb +1 -9
  196. data/lib/sproutcore/rack/proxy.rb +238 -92
  197. data/lib/sproutcore/tools/docs.rb +1 -7
  198. data/spec/fixtures/builder_tests/apps/handlebars_test/Buildfile +1 -0
  199. data/spec/fixtures/builder_tests/apps/handlebars_test/{template.handlebars → templates/template.handlebars} +2 -0
  200. data/spec/lib/builders/handlebars_spec.rb +10 -4
  201. data/sproutcore.gemspec +3 -1
  202. metadata +73 -44
  203. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/english.lproj/default_styles.css +0 -5
  204. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/english.lproj/strings.js +0 -15
  205. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_checkbox_field.js +0 -17
  206. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_field.js +0 -17
  207. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_label.js +0 -17
  208. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_radio_field.js +0 -17
  209. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_text_field.js +0 -17
@@ -5,7 +5,7 @@
5
5
  // ==========================================================================
6
6
  /*globals JN module test ok equals same stop start */
7
7
 
8
- var MyApp, wasCalled;
8
+ var MyApp, wasCalled, resetWasCalled;
9
9
  module("SC.DataSource", {
10
10
  setup: function () {
11
11
  MyApp = window.MyApp = {};
@@ -41,6 +41,11 @@ module("SC.DataSource", {
41
41
  wasCalled = true;
42
42
  equals(arguments.length, 3);
43
43
  return YES;
44
+ },
45
+
46
+ reset: function() {
47
+ resetWasCalled = true;
48
+ return this;
44
49
  }
45
50
  });
46
51
  SC.RunLoop.begin();
@@ -188,3 +193,11 @@ test("The dataSource will return NO when all records committed return NO", funct
188
193
  equals(MyApp.store.commitRecords(), NO,
189
194
  "commiting records for an 'update', 'create', and 'destroy' should return NO");
190
195
  });
196
+
197
+ test("The store calls reset on the dataSource when reset", function(){
198
+ MyApp.store.set('dataSource', MyApp.DataSource.create());
199
+ resetWasCalled = NO; // Just to be sure
200
+
201
+ MyApp.store.reset();
202
+ ok(resetWasCalled, "should have called reset");
203
+ });
@@ -9,7 +9,7 @@
9
9
  //
10
10
  var NestedRecord, store, testParent, testParent2, childData1;
11
11
 
12
- var initModels = function(){
12
+ var initModels = function() {
13
13
  NestedRecord.ParentRecordTest = SC.Record.extend({
14
14
  /** Child Record Namespace */
15
15
  nestedRecordNamespace: NestedRecord,
@@ -34,6 +34,7 @@ module("Basic SC.Record Functions w/ Parent > Child", {
34
34
  NestedRecord = SC.Object.create({
35
35
  store: SC.Store.create()
36
36
  });
37
+ window.NestedRecord = NestedRecord;
37
38
  store = NestedRecord.store;
38
39
  initModels();
39
40
  SC.RunLoop.begin();
@@ -79,6 +80,7 @@ module("Basic SC.Record Functions w/ Parent > Child", {
79
80
  store = null;
80
81
  childData1 = null;
81
82
  NestedRecord = null;
83
+ delete(window.NestedRecord);
82
84
  }
83
85
  });
84
86
 
@@ -42,6 +42,7 @@ module("Complex SC.Record: Parent > Array of Children > Array of Children", {
42
42
  NestedRecord = SC.Object.create({
43
43
  store: SC.Store.create()
44
44
  });
45
+ window.NestedRecord = NestedRecord;
45
46
  store = NestedRecord.store;
46
47
  initModels();
47
48
  SC.RunLoop.begin();
@@ -117,6 +118,7 @@ module("Complex SC.Record: Parent > Array of Children > Array of Children", {
117
118
  delete NestedRecord.Group;
118
119
  delete NestedRecord.Person;
119
120
  delete NestedRecord.Address;
121
+ delete window.NestedRecord;
120
122
  NestedRecord = null;
121
123
  testParent = null;
122
124
  peopleData1 = null;
@@ -42,6 +42,7 @@ module("Basic SC.Record Functions w/ a Parent > Child > Child", {
42
42
  NestedRecord = SC.Object.create({
43
43
  store: SC.Store.create()
44
44
  });
45
+ window.NestedRecord = NestedRecord;
45
46
  store = NestedRecord.store;
46
47
  initModels();
47
48
  SC.RunLoop.begin();
@@ -65,6 +66,7 @@ module("Basic SC.Record Functions w/ a Parent > Child > Child", {
65
66
  delete NestedRecord.ParentRecordTest;
66
67
  delete NestedRecord.Person;
67
68
  delete NestedRecord.Address;
69
+ delete window.NestedRecord;
68
70
  NestedRecord = null;
69
71
  testParent = null;
70
72
  store = null;
@@ -8,33 +8,33 @@
8
8
  var MyApp, dataSource;
9
9
  module("SC.Record core methods", {
10
10
  setup: function() {
11
- dataSource = SC.DataSource.create({
12
-
11
+ dataSource = SC.DataSource.create({
12
+
13
13
  gotParams: NO,
14
14
  wasCommitted: NO,
15
-
15
+
16
16
  createRecord: function(store, storeKey, params) {
17
17
  this.wasCommitted = YES;
18
18
  this.gotParams = params && params['param1'] ? YES: NO;
19
19
  }});
20
-
20
+
21
21
  MyApp = SC.Object.create({
22
22
  store: SC.Store.create().from(dataSource)
23
23
  }) ;
24
-
24
+
25
25
  MyApp.Foo = SC.Record.extend({});
26
- MyApp.json = {
27
- foo: "bar",
26
+ MyApp.json = {
27
+ foo: "bar",
28
28
  number: 123,
29
29
  bool: YES,
30
30
  array: [1,2,3],
31
31
  guid: 1
32
32
  };
33
-
33
+
34
34
  SC.RunLoop.begin();
35
35
  MyApp.foo = MyApp.store.createRecord(MyApp.Foo, MyApp.json);
36
36
  SC.RunLoop.end();
37
-
37
+
38
38
  }
39
39
  });
40
40
 
@@ -43,13 +43,20 @@ test("statusString", function() {
43
43
  });
44
44
 
45
45
  test("Can commitRecord() specific SC.Record instance", function() {
46
-
46
+
47
47
  MyApp.foo.set('foo', 'foobar');
48
-
48
+
49
49
  // commit the new record
50
50
  MyApp.foo.commitRecord({ param1: 'value1' });
51
-
51
+
52
52
  equals(dataSource.wasCommitted, YES, 'Record was committed');
53
53
  equals(dataSource.gotParams, YES, 'Params were properly passed through commitRecord');
54
-
54
+
55
+ });
56
+
57
+ test("JSON encoding an SC.Record should encode the attributes", function(){
58
+ var str = SC.json.encode(MyApp.foo);
59
+ var result = SC.json.decode(str);
60
+
61
+ same(MyApp.json, result, "original = encoded record");
55
62
  });
@@ -14,72 +14,72 @@ module("SC.RecordAttribute core methods", {
14
14
  MyApp = SC.Object.create({
15
15
  store: SC.Store.create()
16
16
  });
17
-
17
+
18
18
  // stick it to the window object so that objectForPropertyPath works
19
19
  window.MyApp = MyApp;
20
-
20
+
21
21
  MyApp.Foo = SC.Record.extend({
22
-
22
+
23
23
  // test simple reading of a pass-through prop
24
24
  firstName: SC.Record.attr(String),
25
25
 
26
26
  // test mapping to another internal key
27
27
  otherName: SC.Record.attr(String, { key: "firstName" }),
28
-
28
+
29
29
  // test mapping Date
30
30
  date: SC.Record.attr(Date),
31
31
  nonIsoDate: SC.Record.attr(Date, { useIsoDate: false }),
32
32
 
33
33
  // test SC.DateTimes
34
34
  dateTime: SC.Record.attr(SC.DateTime),
35
-
35
+
36
36
  // test Array
37
37
  anArray: SC.Record.attr(Array),
38
-
38
+
39
39
  // test Object
40
40
  anObject: SC.Record.attr(Object),
41
-
41
+
42
42
  // test Number
43
43
  aNumber: SC.Record.attr(Number),
44
-
44
+
45
45
  // used to test default value
46
46
  defaultValue: SC.Record.attr(String, {
47
47
  defaultValue: "default"
48
48
  }),
49
-
49
+
50
50
  // used to test default value
51
51
  defaultComputedValue: SC.Record.attr(Number, {
52
52
  defaultValue: function() {
53
53
  return Math.floor(Math.random()*3+1);
54
54
  }
55
55
  }),
56
-
56
+
57
57
  // test toOne relationships
58
58
  relatedTo: SC.Record.toOne('MyApp.Foo'),
59
-
59
+
60
60
  // test toOne relationship with computed type
61
61
  relatedToComputed: SC.Record.toOne(function() {
62
- // not using .get() to avoid another transform which will
62
+ // not using .get() to avoid another transform which will
63
63
  // trigger an infinite loop
64
64
  return (this.readAttribute('relatedToComputed').indexOf("foo")===0) ? MyApp.Foo : MyApp.Bar;
65
65
  }),
66
-
66
+
67
67
  // test readONly
68
68
  readOnly: SC.Record.attr(String, { isEditable: NO })
69
-
69
+
70
70
  });
71
-
71
+
72
72
  MyApp.Bar = SC.Record.extend({
73
73
  parent: SC.Record.toOne('MyApp.Foo', { aggregate: YES }),
74
74
  relatedMany: SC.Record.toMany('MyApp.Foo', { aggregate: YES })
75
75
  });
76
-
76
+
77
77
  SC.RunLoop.begin();
78
78
  storeKeys = MyApp.store.loadRecords(MyApp.Foo, [
79
- {
80
- guid: 'foo1',
81
- firstName: "John",
82
- lastName: "Doe",
79
+ {
80
+ guid: 'foo1',
81
+ firstName: "John",
82
+ lastName: "Doe",
83
83
  date: "2009-03-01T20:30-08:00",
84
84
  dateTime: new Date(1235939425000),
85
85
  anArray: ['one', 'two', 'three'],
@@ -87,11 +87,11 @@ module("SC.RecordAttribute core methods", {
87
87
  aNumber: '123',
88
88
  readOnly: 'foo1'
89
89
  },
90
-
91
- {
92
- guid: 'foo2',
93
- firstName: "Jane",
94
- lastName: "Doe",
90
+
91
+ {
92
+ guid: 'foo2',
93
+ firstName: "Jane",
94
+ lastName: "Doe",
95
95
  relatedTo: 'foo1',
96
96
  relatedToAggregate: 'bar1',
97
97
  dateTime: "2009-03-01T20:30:25Z",
@@ -100,39 +100,39 @@ module("SC.RecordAttribute core methods", {
100
100
  aNumber: '123',
101
101
  nonIsoDate: "2009/06/10 8:55:50 +0000"
102
102
  },
103
-
104
- {
105
- guid: 'foo3',
106
- firstName: "Alex",
107
- lastName: "Doe",
103
+
104
+ {
105
+ guid: 'foo3',
106
+ firstName: "Alex",
107
+ lastName: "Doe",
108
108
  relatedToComputed: 'bar1',
109
109
  dateTime: SC.DateTime.create(1235939425000),
110
110
  anArray: ['one', 'two', 'three'],
111
111
  anObject: { 'key1': 'value1', 'key2': 'value2' },
112
112
  aNumber: '123'
113
113
  }
114
-
114
+
115
115
  ]);
116
-
116
+
117
117
  MyApp.store.loadRecords(MyApp.Bar, [
118
118
  { guid: 'bar1', city: "Chicago", parent: 'foo2', relatedMany: ['foo1', 'foo2'] }
119
119
  ]);
120
-
120
+
121
121
  SC.RunLoop.end();
122
-
122
+
123
123
  rec = MyApp.store.find(MyApp.Foo, 'foo1');
124
124
  rec2 = MyApp.store.find(MyApp.Foo, 'foo2');
125
125
  rec3 = MyApp.store.find(MyApp.Foo, 'foo3');
126
-
126
+
127
127
  bar = MyApp.store.find(MyApp.Bar, 'bar1');
128
128
  equals(rec.storeKey, storeKeys[0], 'should find record');
129
-
129
+
130
130
  }
131
131
  });
132
132
 
133
133
  // ..........................................................
134
134
  // READING
135
- //
135
+ //
136
136
 
137
137
  test("pass-through should return builtin value" ,function() {
138
138
  equals(rec.get('firstName'), 'John', 'reading prop should get attr value');
@@ -190,7 +190,7 @@ test("reading computed default value", function() {
190
190
 
191
191
  // ..........................................................
192
192
  // WRITING
193
- //
193
+ //
194
194
 
195
195
  test("writing pass-through should simply set value", function() {
196
196
  rec.set("firstName", "Foo");
@@ -201,7 +201,7 @@ test("writing pass-through should simply set value", function() {
201
201
 
202
202
  rec.set("firstName", YES);
203
203
  equals(rec.readAttribute("firstName"), YES, "should write bool");
204
-
204
+
205
205
  });
206
206
 
207
207
  test("writing when isEditable is NO should ignore", function() {
@@ -217,7 +217,7 @@ test("writing a value should override default value", function() {
217
217
  });
218
218
 
219
219
  test("writing a string to a number attribute should store a number" ,function() {
220
- equals(rec.set('aNumber', "456"), rec, 'returns reciever');
220
+ equals(rec.set('aNumber', "456"), rec, 'returns receiver');
221
221
  equals(rec.get('aNumber'), 456, 'should have new value');
222
222
  equals(typeof rec.get('aNumber'), 'number', 'new value should be a number');
223
223
  });
@@ -229,27 +229,27 @@ test("writing a date should generate an ISO date" ,function() {
229
229
  var utcDate = new Date(Number(date) + (date.getTimezoneOffset() * 60000)); // Adjust for timezone offset
230
230
  utcDate.getTimezoneOffset = function(){ return 0; }; // Hack the offset to respond 0
231
231
 
232
- equals(rec.set('date', utcDate), rec, 'returns reciever');
232
+ equals(rec.set('date', utcDate), rec, 'returns receiver');
233
233
  equals(rec.readAttribute('date'), '2009-04-02T05:28:03Z', 'should have time in ISO format');
234
234
  });
235
235
 
236
236
  test("writing an attribute should make relationship aggregate dirty" ,function() {
237
237
  equals(bar.get('status'), SC.Record.READY_CLEAN, "precond - bar should be READY_CLEAN");
238
238
  equals(rec2.get('status'), SC.Record.READY_CLEAN, "precond - rec2 should be READY_CLEAN");
239
-
239
+
240
240
  bar.set('city', 'Oslo');
241
241
  bar.get('store').flush();
242
-
242
+
243
243
  equals(rec2.get('status'), SC.Record.READY_DIRTY, "foo2 should be READY_DIRTY");
244
244
  });
245
245
 
246
246
  test("writing an attribute should make many relationship aggregate dirty" ,function() {
247
247
  equals(bar.get('status'), SC.Record.READY_CLEAN, "precond - bar should be READY_CLEAN");
248
248
  equals(rec2.get('status'), SC.Record.READY_CLEAN, "precond - rec2 should be READY_CLEAN");
249
-
249
+
250
250
  bar.set('city', 'Oslo');
251
251
  bar.get('store').flush();
252
-
252
+
253
253
  equals(rec.get('status'), SC.Record.READY_DIRTY, "foo1 should be READY_DIRTY");
254
254
  equals(rec2.get('status'), SC.Record.READY_DIRTY, "foo2 should be READY_DIRTY");
255
255
  });
@@ -257,10 +257,25 @@ test("writing an attribute should make many relationship aggregate dirty" ,funct
257
257
  test("writing an attribute should make many relationship aggregate dirty and add the aggregate to the store" ,function() {
258
258
  equals(bar.get('status'), SC.Record.READY_CLEAN, "precond - bar should be READY_CLEAN");
259
259
  equals(rec2.get('status'), SC.Record.READY_CLEAN, "precond - rec2 should be READY_CLEAN");
260
-
260
+
261
261
  bar.set('city', 'Oslo');
262
262
 
263
263
  var store = bar.get('store');
264
264
  ok(store.changelog.contains(rec.get('storeKey')), "foo1 should be in the store's changelog");
265
265
  ok(store.changelog.contains(rec2.get('storeKey')), "foo2 should be in the store's changelog");
266
266
  });
267
+
268
+ test("adding attribute with non existing class should throw error", function() {
269
+ MyApp.InvalidModel = SC.Record.extend({
270
+ foo: SC.Record.attr("SomethingSomethingSomething")
271
+ });
272
+
273
+ var message;
274
+ try {
275
+ MyApp.InvalidModel.prototype.foo.typeClass();
276
+ } catch (x) {
277
+ message = x;
278
+ }
279
+
280
+ same(message, 'SomethingSomethingSomething could not be found');
281
+ });
@@ -11,13 +11,13 @@ module("SC.NestedStore#commitChangesFromNestedStore", {
11
11
  SC.RunLoop.begin();
12
12
 
13
13
  parent = SC.Store.create();
14
-
14
+
15
15
  json = {
16
16
  string: "string",
17
17
  number: 23,
18
18
  bool: YES
19
19
  };
20
-
20
+
21
21
  storeKey = SC.Store.generateStoreKey();
22
22
 
23
23
  store = parent.chain();
@@ -34,22 +34,22 @@ module("SC.NestedStore#commitChangesFromNestedStore", {
34
34
  });
35
35
 
36
36
  test("copies changed data hashes, statuses, and revisions", function() {
37
-
37
+
38
38
  SC.RunLoop.begin();
39
-
39
+
40
40
  // verify preconditions
41
41
  equals(store.readDataHash(storeKey), null, 'precond - should not have data yet');
42
42
  ok(child.chainedChanges.contains(storeKey), 'precond - child changes should include storeKey');
43
-
43
+
44
44
  // perform action
45
45
  equals(store.commitChangesFromNestedStore(child, child.chainedChanges, NO), store, 'should return receiver');
46
46
  SC.RunLoop.end();
47
-
47
+
48
48
  // verify new status
49
49
  equals(store.readDataHash(storeKey), json, 'now should have json');
50
50
  equals(store.readStatus(storeKey), SC.Record.READY_DIRTY, 'now should have status');
51
- equals(store.revisions[storeKey], child.revisions[storeKey], 'now shoulave have revision from child');
52
-
51
+ equals(store.revisions[storeKey], child.revisions[storeKey], 'now shoulave have revision from child');
52
+
53
53
  });
54
54
 
55
55
  test("adds lock on any items not already locked", function() {
@@ -58,40 +58,40 @@ test("adds lock on any items not already locked", function() {
58
58
 
59
59
  var storeKey2 = SC.Store.generateStoreKey();
60
60
  var json2 = { kind: "json2" };
61
-
61
+
62
62
  // verify preconditions
63
63
  store.readDataHash(storeKey);
64
64
  ok(store.locks[storeKey], 'precond - storeKey should have lock');
65
65
  ok(!store.locks[storeKey2], 'precond - storeKey2 should not have lock');
66
-
66
+
67
67
  // write another record into child store to commit changes.
68
68
  child.writeDataHash(storeKey2, json2, SC.Record.READY_DIRTY);
69
69
  child.dataHashDidChange(storeKey2);
70
-
70
+
71
71
  var changes = child.chainedChanges ;
72
72
  ok(changes.contains(storeKey), 'precond - child.chainedChanges should contain storeKey');
73
73
  ok(changes.contains(storeKey2), 'precond - child.chainedChanges should contain storeKey2');
74
-
74
+
75
75
  // now commit back to parent
76
- equals(store.commitChangesFromNestedStore(child, changes, NO), store, 'should return reciever');
76
+ equals(store.commitChangesFromNestedStore(child, changes, NO), store, 'should return receiver');
77
77
  SC.RunLoop.end();
78
-
78
+
79
79
  // and verify that both have locks
80
80
  ok(store.locks[storeKey], 'storeKey should have lock after commit (actual: %@)'.fmt(store.locks[storeKey]));
81
81
  ok(store.locks[storeKey2], 'storeKey2 should have lock after commit (actual: %@)'.fmt(store.locks[storeKey2]));
82
-
82
+
83
83
  });
84
84
 
85
- test("adds items in chainedChanges to reciever chainedChanges", function() {
85
+ test("adds items in chainedChanges to receiver chainedChanges", function() {
86
86
 
87
87
  SC.RunLoop.begin();
88
88
 
89
89
  var key1 = SC.Store.generateStoreKey();
90
90
 
91
91
  store.dataHashDidChange(key1);
92
-
92
+
93
93
  ok(child.chainedChanges.contains(storeKey), 'precond - child.chainedChanges should contain store key');
94
-
94
+
95
95
  equals(store.commitChangesFromNestedStore(child, child.chainedChanges, NO), store, 'should return receiver');
96
96
  SC.RunLoop.end();
97
97
 
@@ -101,36 +101,36 @@ test("adds items in chainedChanges to reciever chainedChanges", function() {
101
101
  });
102
102
 
103
103
  test("should set hasChanges to YES if has changes", function() {
104
-
104
+
105
105
  SC.RunLoop.begin();
106
-
106
+
107
107
  var changes = child.chainedChanges;
108
108
  ok(changes.length>0, 'precond - should have some changes in child');
109
109
  equals(store.get('hasChanges'), NO, 'precond - store should not have changes');
110
-
110
+
111
111
  store.commitChangesFromNestedStore(child, changes, NO);
112
112
  equals(store.get('hasChanges'), YES, 'store should now have changes');
113
113
  });
114
114
 
115
115
  test("should set hasChanges to NO if no changes", function() {
116
-
116
+
117
117
  SC.RunLoop.begin();
118
-
118
+
119
119
  child = store.chain() ; // get a new child store
120
-
120
+
121
121
  var changes = child.chainedChanges || SC.Set.create();
122
122
  ok(!changes || !changes.length, 'precond - should have not have changes in child');
123
123
  equals(store.get('hasChanges'), NO, 'precond - store should not have changes');
124
-
124
+
125
125
  store.commitChangesFromNestedStore(child, changes, NO);
126
126
  SC.RunLoop.end();
127
-
127
+
128
128
  equals(store.get('hasChanges'), NO, 'store should NOT now have changes');
129
129
  });
130
130
 
131
131
  // ..........................................................
132
132
  // SPECIAL CASES
133
- //
133
+ //
134
134
 
135
135
  test("committing changes should chain back each step", function() {
136
136
 
@@ -140,18 +140,18 @@ test("committing changes should chain back each step", function() {
140
140
  equals(child.readDataHash(storeKey), json, 'precond - child should have data');
141
141
  equals(store.readDataHash(storeKey), null, 'precond - store should not have data');
142
142
  equals(parent.readDataHash(storeKey), null, 'precond - parent should not have data');
143
-
143
+
144
144
  // do commits
145
145
  child.commitChanges();
146
146
 
147
147
  equals(store.get('hasChanges'), YES, 'store should now have changes');
148
148
  equals(store.readDataHash(storeKey), json, 'store should now have json');
149
-
149
+
150
150
  store.commitChanges();
151
151
  equals(store.get('hasChanges'), NO, 'store should no longer have changes');
152
152
  equals(parent.readDataHash(storeKey), json, 'parent should now have json');
153
153
  SC.RunLoop.end();
154
-
154
+
155
155
  });
156
156
 
157
157