6 description: Object generic methods
8 license: MIT-style license.
12 provides: [Object, Hash]
19 var hasOwnProperty = Object.prototype.hasOwnProperty;
23 subset: function(object, keys){
25 for (var i = 0, l = keys.length; i < l; i++){
27 if (k in object) results[k] = object[k];
32 map: function(object, fn, bind){
34 var keys = Object.keys(object);
35 for (var i = 0; i < keys.length; i++){
37 results[key] = fn.call(bind, object[key], key, object);
42 filter: function(object, fn, bind){
44 var keys = Object.keys(object);
45 for (var i = 0; i < keys.length; i++){
46 var key = keys[i], value = object[key];
47 if (fn.call(bind, value, key, object)) results[key] = value;
52 every: function(object, fn, bind){
53 var keys = Object.keys(object);
54 for (var i = 0; i < keys.length; i++){
56 if (!fn.call(bind, object[key], key)) return false;
61 some: function(object, fn, bind){
62 var keys = Object.keys(object);
63 for (var i = 0; i < keys.length; i++){
65 if (fn.call(bind, object[key], key)) return true;
70 values: function(object){
72 var keys = Object.keys(object);
73 for (var i = 0; i < keys.length; i++){
75 values.push(object[k]);
80 getLength: function(object){
81 return Object.keys(object).length;
84 keyOf: function(object, value){
85 var keys = Object.keys(object);
86 for (var i = 0; i < keys.length; i++){
88 if (object[key] === value) return key;
93 contains: function(object, value){
94 return Object.keyOf(object, value) != null;
97 toQueryString: function(object, base){
100 Object.each(object, function(value, key){
101 if (base) key = base + '[' + key + ']';
103 switch (typeOf(value)){
104 case 'object': result = Object.toQueryString(value, key); break;
107 value.each(function(val, i){
110 result = Object.toQueryString(qs, key);
112 default: result = key + '=' + encodeURIComponent(value);
114 if (value != null) queryString.push(result);
117 return queryString.join('&');
128 has: Object.prototype.hasOwnProperty,
130 keyOf: function(value){
131 return Object.keyOf(this, value);
134 hasValue: function(value){
135 return Object.contains(this, value);
138 extend: function(properties){
139 Hash.each(properties || {}, function(value, key){
140 Hash.set(this, key, value);
145 combine: function(properties){
146 Hash.each(properties || {}, function(value, key){
147 Hash.include(this, key, value);
152 erase: function(key){
153 if (this.hasOwnProperty(key)) delete this[key];
158 return (this.hasOwnProperty(key)) ? this[key] : null;
161 set: function(key, value){
162 if (!this[key] || this.hasOwnProperty(key)) this[key] = value;
167 Hash.each(this, function(value, key){
173 include: function(key, value){
174 if (this[key] == null) this[key] = value;
178 map: function(fn, bind){
179 return new Hash(Object.map(this, fn, bind));
182 filter: function(fn, bind){
183 return new Hash(Object.filter(this, fn, bind));
186 every: function(fn, bind){
187 return Object.every(this, fn, bind);
190 some: function(fn, bind){
191 return Object.some(this, fn, bind);
195 return Object.keys(this);
198 getValues: function(){
199 return Object.values(this);
202 toQueryString: function(base){
203 return Object.toQueryString(this, base);
208 Hash.extend = Object.append;
210 Hash.alias({indexOf: 'keyOf', contains: 'hasValue'});