<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,4 +1,7 @@
 
+- Added SC.SC.$A() helper.  This works like Prototype's SC.$A() except that it will
+  work with any enumerable.  It is also namespaced properly. [CAJ]
+  
 - Added &quot;application/json&quot; to the default Accept header for all servers.
   Required for proper support of json format. [Lawrence Pit]
   </diff>
      <filename>HISTORY</filename>
    </modified>
    <modified>
      <diff>@@ -105,7 +105,7 @@ SC.CollectionController = SC.ObjectController.extend(SC.SelectionSupport,
     var content = this.get('content') ;
     if (!content || !this.get('canEditCollection')) return ; // only if allowed 
     try {
-      objects = $A(arguments).flatten() ;
+      objects = SC.$A(arguments).flatten() ;
       if (content.addRecords) { 
         content.addRecords(objects) ;
         this.set('selection',(objects) ? objects : []) ;
@@ -126,7 +126,7 @@ SC.CollectionController = SC.ObjectController.extend(SC.SelectionSupport,
     var content = this.get('content') ;
     if (!content || !this.get('canEditCollection')) return ; // only if allowed 
     try {
-      objects = $A(arguments).flatten() ;
+      objects = SC.$A(arguments).flatten() ;
       if (content.removeRecords) { 
         var rec = content.removeRecords(objects) ;
         var sel = (this.get('selection') || []).without(objects) ;</diff>
      <filename>controllers/collection.js</filename>
    </modified>
    <modified>
      <diff>@@ -344,7 +344,7 @@ Test.Unit.Assertions.prototype = {
   },
   assertEnumEqual: function(expected, actual) {
     var message = arguments[2] || &quot;assertEnumEqual&quot;;
-    try { $A(expected).length == $A(actual).length &amp;&amp; 
+    try { SC.$A(expected).length == SC.$A(actual).length &amp;&amp; 
       expected.zip(actual).all(function(pair) { return pair[0] == pair[1]; }) ?
         this.pass() : this.fail(message + ': expected ' + Test.Unit.inspect(expected) + 
           ', actual ' + Test.Unit.inspect(actual)); }
@@ -456,7 +456,7 @@ Test.Unit.Assertions.prototype = {
     }
   },
   assertElementsMatch: function() {
-    var expressions = $A(arguments), elements = $A(expressions.shift());
+    var expressions = SC.$A(arguments), elements = SC.$A(expressions.shift());
     if (elements.length != expressions.length) {
       this.fail('assertElementsMatch: size mismatch: ' + elements.length + ' elements, ' + expressions.length + ' expressions');
       return false;
@@ -573,7 +573,7 @@ Test.setupBDDExtensionMethods = function(){
   Test.BDDMethods = {};   
   $H(METHODMAP).each(function(pair) { 
     Test.BDDMethods[pair.key] = function() { 
-       var args = $A(arguments); 
+       var args = SC.$A(arguments); 
        var scope = args.shift(); 
        makeAssertion.apply(scope, [pair.value, args, this]); }; 
   });</diff>
      <filename>debug/unittest.js</filename>
    </modified>
    <modified>
      <diff>@@ -130,7 +130,7 @@ SC.Benchmark = {
     
     // replace with this helper.
     object[method] = function() {
-      var key = '%@(%@)'.fmt(method, $A(arguments).join(', ')) ;
+      var key = '%@(%@)'.fmt(method, SC.$A(arguments).join(', ')) ;
       SC.Benchmark.start(key, topLevelOnly) ;
       var ret = __func.apply(this, arguments) ;
       SC.Benchmark.end(key) ;</diff>
      <filename>foundation/benchmark.js</filename>
    </modified>
    <modified>
      <diff>@@ -50,7 +50,7 @@ SC.BENCHMARK_OBJECTS = NO;
 */
 SC.Object = function(noinit) { 
 	if (noinit === SC.Object._noinit_) return ;
-	var ret = SC.Object._init.apply(this,$A(arguments)) ;
+	var ret = SC.Object._init.apply(this,SC.$A(arguments)) ;
   return ret ;
 };
 
@@ -66,7 +66,7 @@ Object.extend(SC.Object,
     @returns {void}
   */
   mixin: function(props) {
-    var ext = $A(arguments) ;
+    var ext = SC.$A(arguments) ;
     for(var loc=0;loc&lt;ext.length;loc++) {
       Object.extend(this,ext[loc]);
     }
@@ -87,7 +87,7 @@ Object.extend(SC.Object,
     // build function.  copy class methods on to it.
     var ret = function(noinit) { 
       if (noinit &amp;&amp; (typeof(noinit) == 'string') &amp;&amp; (noinit == SC.Object._noinit_)) return ;
-      var ret = SC.Object._init.apply(this,$A(arguments)); 
+      var ret = SC.Object._init.apply(this,SC.$A(arguments)); 
       return ret ;
     };
     for(var prop in this) { ret[prop] = this[prop]; }
@@ -96,7 +96,7 @@ Object.extend(SC.Object,
     var base = new this(SC.Object._noinit_) ;
 
 //    var base = SC.Object._extend({},this.prototype) ;
-    var extensions = $A(arguments) ;
+    var extensions = SC.$A(arguments) ;
     for(var loc=0;loc&lt;extensions.length;loc++) {
       base = SC.Object._extend(base, extensions[loc]);
     }
@@ -129,7 +129,7 @@ Object.extend(SC.Object,
     @returns {SC.Object} new instance of the receiver class.
   */
   create: function(props) {
-    var ret = new this($A(arguments),this) ;
+    var ret = new this(SC.$A(arguments),this) ;
     return ret ;
   },
     
@@ -422,7 +422,7 @@ SC.Object.prototype = {
   {
     if ( !methodName ) return false;
     
-    var args = $A(arguments);
+    var args = SC.$A(arguments);
     var name = args.shift();
     if (this.respondsTo(name))
     {
@@ -734,7 +734,7 @@ SC.Object.prototype = {
     if (interval === undefined) interval = 1 ;
     var f = methodName ;
     if (arguments.length &gt; 2) {
-      var args =$A(arguments).slice(2,arguments.length);
+      var args =SC.$A(arguments).slice(2,arguments.length);
       args.unshift(this);
       if ($type(f) === T_STRING) f = this[methodName] ;
       f = f.bind.apply(f, args) ;</diff>
      <filename>foundation/object.js</filename>
    </modified>
    <modified>
      <diff>@@ -168,7 +168,7 @@ SC.Responder = SC.Object.extend(
   doCommand: function(method)
   {
     var responder = this;
-    var args      = $A(arguments);
+    var args      = SC.$A(arguments);
     var method    = args.shift();
     var aliases   = this._commandAliases[method];
     var handled   = false;</diff>
      <filename>foundation/responder.js</filename>
    </modified>
    <modified>
      <diff>@@ -3,6 +3,8 @@
 // copyright 2006-2008, Sprout Systems, Inc. and contributors.
 // ==========================================================================
 
+require('mixins/enumerable') ;
+
 /**
   @class 
   
@@ -69,6 +71,7 @@
   use the return value from that method instead.
   
   @extends Object
+  @extends SC.Enumerable 
   @since SproutCore 0.9.15
 */
 SC.Set = function(items) {
@@ -193,7 +196,7 @@ SC.Set.prototype = {
 
   invokeWhile: function(state, methodName) {
     var len = this.length;
-    var args = $A(arguments) ; args.shift(); args.shift() ;
+    var args = SC.$A(arguments) ; args.shift(); args.shift() ;
     
     for(var idx=0;idx&lt;len;idx++) {
       var obj = this[idx] ;
@@ -213,14 +216,18 @@ SC.Set.prototype = {
   },
   
   toString: function() {
-    return &quot;SC.Set&lt;%@&gt;&quot;.fmt($A(this)) ;
+    return &quot;SC.Set&lt;%@&gt;&quot;.fmt(SC.SC.$A(this)) ;
   }
   
 } ;
 
+// Make this enumerable
+SC.mixin(SC.Set.prototype, SC.Enumerable) ;
+
 SC.Set.prototype.push = SC.Set.prototype.unshift = SC.Set.prototype.add ;
 SC.Set.prototype.shift = SC.Set.prototype.pop ;
 
+
 /**
   To create a set, pass an array of items instead of a hash.
 */</diff>
      <filename>foundation/set.js</filename>
    </modified>
    <modified>
      <diff>@@ -24,7 +24,7 @@ Object.extend(String.prototype,{
 
   // Interpolate string. looks for %@ or %@1; to control the order of params.
   format: function() {
-    var args = $A(arguments) ;
+    var args = SC.$A(arguments) ;
     
     // first, replace any ORDERED replacements.
     var str = this.gsub(/%@([0-9]+)/, function(m) {
@@ -75,7 +75,7 @@ Object.extend(String.prototype,{
     var kit = String[String.currentLanguage()];
     var str = kit[this] ;
     if (!str) str = String.English[this] || def ;
-    var args = $A(arguments) ;
+    var args = SC.$A(arguments) ;
     args.shift() ; // escape def.
     return str.format.apply(str, args) ;
   },</diff>
      <filename>foundation/string.js</filename>
    </modified>
    <modified>
      <diff>@@ -215,7 +215,7 @@ SC.Array = {
   */
   invokeWhile: function(retValue, methodName) {
     var ret ;
-    var args = $A(arguments) ;
+    var args = SC.$A(arguments) ;
     retValue = args.shift() ;
     methodName = args.shift() ; 
 
@@ -306,7 +306,7 @@ Object.extend(Array.prototype, {
   */
   invokeWhile: function(retValue, methodName) {
     var ret ;
-    var args = $A(arguments) ;
+    var args = SC.$A(arguments) ;
     retValue = args.shift() ;
     methodName = args.shift() ; 
 
@@ -354,7 +354,7 @@ Object.extend(Enumerable, {
   
   invokeWhile: function(retValue, methodName) {
     var ret ;
-    var args = $A(arguments) ;
+    var args = SC.$A(arguments) ;
     retValue = args.shift() ;
     methodName = args.shift() ; 
 </diff>
      <filename>mixins/array.js</filename>
    </modified>
    <modified>
      <diff>@@ -47,7 +47,7 @@ SC.DelegateSupport = {
     @returns value returned by delegate
   */
   invokeDelegateMethod: function(delegate, methodName, args) {
-    args = $A(arguments); args = args.slice(2, args.length) ;
+    args = SC.$A(arguments); args = args.slice(2, args.length) ;
     if (!delegate || !delegate[methodName]) delegate = this ;
     return delegate[methodName].apply(delegate, args) ;
   },</diff>
      <filename>mixins/delegate_support.js</filename>
    </modified>
    <modified>
      <diff>@@ -556,7 +556,7 @@ SC.mixin(/** @scope SC */ {
   */
   $A: function(obj) {
     if (obj.toArray) return obj.toArray() ;
-    if (obj.length==null) throw &quot;$A() requires an enumerable or array-like object&quot;;
+    if (obj.length==null) throw &quot;SC.$A() requires an enumerable or array-like object&quot;;
     
     // if not enumerable, try to convert manually...
     var len = obj.length;</diff>
      <filename>mixins/enumerable.js</filename>
    </modified>
    <modified>
      <diff>@@ -297,7 +297,7 @@ SC.Observable = {
     }
   */  
   didChangeFor: function(context) {    
-    var keys = $A(arguments) ;
+    var keys = SC.$A(arguments) ;
     context = keys.shift() ;
     
     var ret = false ;
@@ -374,7 +374,7 @@ SC.Observable = {
     @returns {Array} Values of property keys.
   */
   getEach: function() {
-    var keys = $A(arguments).flatten() ;
+    var keys = SC.$A(arguments).flatten() ;
     var ret = [];
     for(var idx=0; idx&lt;keys.length;idx++) {
       ret[ret.length] = this.getPath(keys[idx]);
@@ -646,7 +646,7 @@ SC.Observable = {
     @param propertyNames one or more property names
   */
   logProperty: function() {
-    var props = $A(arguments) ;
+    var props = SC.$A(arguments) ;
     for(var idx=0;idx&lt;props.length; idx++) {
       var prop = props[idx] ;
       console.log('%@:%@: '.fmt(this._guid, prop), this.get(prop)) ;
@@ -686,7 +686,7 @@ SC.Observable = {
     change.
   */  
   registerDependentKey: function(key) {
-    var keys = $A(arguments) ;
+    var keys = SC.$A(arguments) ;
     var dependent = keys.shift() ;
     var kvo = this._kvo() ;
     for(var loc=0;loc&lt;keys.length;loc++) {
@@ -918,14 +918,14 @@ Object.extend(Function.prototype,
     @returns {Function} the declared function instance
   */
   property: function() {
-    this.dependentKeys = $A(arguments) ; 
+    this.dependentKeys = SC.$A(arguments) ; 
     this.isProperty = true; return this; 
   },
   
   // Declare that a function should observe an object at the named path.  Note
   // that the path is used only to construct the observation one time.
   observes: function(propertyPaths) { 
-    this.propertyPaths = $A(arguments); 
+    this.propertyPaths = SC.$A(arguments); 
     return this;
   },
   
@@ -953,7 +953,7 @@ Object.extend(Function.prototype,
     if (interval === undefined) interval = 1 ;
     var f = this;
     if (arguments.length &gt; 2) {
-      var args =$A(arguments).slice(2,arguments.length);
+      var args =SC.$A(arguments).slice(2,arguments.length);
       args.unshift(target);
       f = f.bind.apply(f, args) ;
     }</diff>
      <filename>mixins/observable.js</filename>
    </modified>
    <modified>
      <diff>@@ -678,7 +678,7 @@ SC.Record.mixin(
   find: function(guid) {
     var args ;
     if (typeof(guid) == 'object') {
-      args = $A(arguments) ;
+      args = SC.$A(arguments) ;
       args.push(this) ;
       var ret = SC.Store.findRecords.apply(SC.Store,args) ;
       return (ret &amp;&amp; ret.length &gt; 0) ? ret[0] : null ;
@@ -698,7 +698,7 @@ SC.Record.mixin(
   // Same as find except returns all records matching the passed conditions.
   findAll: function(filter) {
     if (!filter) filter = {} ;
-    args = $A(arguments) ; args.push(this) ; // add type
+    args = SC.$A(arguments) ; args.push(this) ; // add type
     return SC.Store.findRecords.apply(SC.Store,args) ;  
   },
   </diff>
      <filename>models/record.js</filename>
    </modified>
    <modified>
      <diff>@@ -180,7 +180,7 @@ SC.Store = SC.Object.create(
     recordType.  It will AND the results of each condition hash.
   */  
   findRecords: function() {
-    var allConditions = $A(arguments) ;
+    var allConditions = SC.$A(arguments) ;
     var recordType = allConditions.pop() ;
     var guid = recordType._storeKey() ;
 
@@ -200,7 +200,7 @@ SC.Store = SC.Object.create(
     }
 
     // clone records...
-    return $A(records) ;
+    return SC.$A(records) ;
   },
   
   // private method used by Record and Store. Returns null if the record does not exist.</diff>
      <filename>models/store.js</filename>
    </modified>
    <modified>
      <diff>@@ -27,7 +27,7 @@ ArrayTests = function(factoryFunc) {
       } ;
       
       this.observe = function() {
-        var keys = $A(arguments) ;
+        var keys = SC.$A(arguments) ;
         var loc = keys.length ;
         while(--loc &gt;= 0) {
           this.a.addObserver(keys[loc], this.observer) ;</diff>
      <filename>tests/foundation/array.rhtml</filename>
    </modified>
    <modified>
      <diff>@@ -2026,7 +2026,7 @@ SC.View.mixin({
     if (el &amp;&amp; el._configured) return SC.View.findViewForElement(el); 
     
     // Now that we have found an element, instantiate the view.
-    var args = $A(arguments) ; args[0] = { rootElement: el } ;
+    var args = SC.$A(arguments) ; args[0] = { rootElement: el } ;
     if (r) vStart = new Date().getTime();
     var ret = new this(args,this) ; // create instance.
     if (r) SC.idt.v_t += (new Date().getTime()) - vStart;
@@ -2039,7 +2039,7 @@ SC.View.mixin({
   
   // create in the view work is like viewFor but with 'null' for el
   create: function(configs) {
-    var args = $A(arguments) ;
+    var args = SC.$A(arguments) ;
     args.unshift(null) ;
     return this.viewFor.apply(this,args) ;  
   },</diff>
      <filename>views/view.js</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>61d74dea02c975f6f725d6795e038b9dc67b8960</id>
    </parent>
  </parents>
  <author>
    <name>Charles Jolley</name>
    <email>charles@sproutit.com</email>
  </author>
  <url>http://github.com/sproutit/sproutcore/commit/9247d5f001b630df0fa868fede34af354004c427</url>
  <id>9247d5f001b630df0fa868fede34af354004c427</id>
  <committed-date>2008-08-07T11:47:42-07:00</committed-date>
  <authored-date>2008-08-07T11:47:42-07:00</authored-date>
  <message>Convert all uses of () to SC.().  Updated HISTORY also</message>
  <tree>cd188feb29be2dedecbd8d6b6cd25140b6f2a2fb</tree>
  <committer>
    <name>Charles Jolley</name>
    <email>charles@sproutit.com</email>
  </committer>
</commit>
