Skip to content

Commit

Permalink
Merge pull request #9 from rwjblue/deprecations-for-map
Browse files Browse the repository at this point in the history
Deprecations for map
  • Loading branch information
stefanpenner committed Sep 21, 2014
2 parents ccc53a3 + 39bf8b2 commit 8f51ba4
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 15 deletions.
2 changes: 1 addition & 1 deletion packages/ember-metal/lib/binding.js
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ Binding.prototype = {
var fromPath = this._from;
var toPath = this._to;

directionMap.remove(obj);
directionMap.delete(obj);

// if we're synchronizing from the remote object...
if (direction === 'fwd') {
Expand Down
12 changes: 12 additions & 0 deletions packages/ember-metal/lib/map.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import { guidFor } from "ember-metal/utils";
import { indexOf } from "ember-metal/array";
import { create } from "ember-metal/platform";
import { deprecateProperty } from "ember-metal/deprecate_property";

function missingFunction(fn) {
throw new TypeError('' + Object.prototype.toString.call(fn) + " is not a function");
Expand Down Expand Up @@ -70,6 +71,7 @@ function OrderedSet() {

if (this instanceof OrderedSet) {
this.clear();
this._silenceRemoveDeprecation = false;
} else {
missingNew("OrderedSet");
}
Expand Down Expand Up @@ -128,6 +130,8 @@ OrderedSet.prototype = {
@return {Boolean}
*/
remove: function(obj, _guid) {
Ember.deprecate('Calling `OrderedSet.prototype.remove` has been deprecated, please use `OrderedSet.prototype.delete` instead.', this._silenceRemoveDeprecation);

return this['delete'](obj, _guid);
},

Expand Down Expand Up @@ -212,13 +216,16 @@ OrderedSet.prototype = {
var Constructor = this.constructor;
var set = new Constructor();

set._silenceRemoveDeprecation = this._silenceRemoveDeprecation;
set.presenceSet = copyNull(this.presenceSet);
set.list = this.toArray();

return set;
}
};

deprecateProperty(OrderedSet.prototype, 'length', 'size');

/**
A Map stores values indexed by keys. Unlike JavaScript's
default Objects, the keys of a Map can be any JavaScript
Expand All @@ -242,6 +249,7 @@ OrderedSet.prototype = {
function Map() {
if (this instanceof this.constructor) {
this.keys = OrderedSet.create();
this.keys._silenceRemoveDeprecation = true;
this.values = Object.create(null);
this.size = 0;
} else {
Expand Down Expand Up @@ -317,6 +325,8 @@ Map.prototype = {
@return {Boolean} true if an item was removed, false otherwise
*/
remove: function(key) {
Ember.deprecate('Calling `Map.prototype.remove` has been deprecated, please use `Map.prototype.delete` instead.');

return this['delete'](key);
},

Expand Down Expand Up @@ -397,6 +407,8 @@ Map.prototype = {
}
};

deprecateProperty(Map.prototype, 'length', 'size');

/**
@class MapWithDefault
@namespace Ember
Expand Down
80 changes: 67 additions & 13 deletions packages/ember-metal/tests/map_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -115,12 +115,31 @@ function testMap(nameAndFunc) {
map.set(number, "winning");
map.set(string, "winning");

map.remove(object);
map.remove(number);
map.remove(string);
expectDeprecation(function() {
map.remove(object);
map.remove(number);
map.remove(string);

// doesn't explode
map.remove({});
}, 'Calling `Map.prototype.remove` has been deprecated, please use `Map.prototype.delete` instead.');

mapHasEntries([]);
});

test("delete", function() {
expectNoDeprecation();

map.set(object, "winning");
map.set(number, "winning");
map.set(string, "winning");

map.delete(object);
map.delete(number);
map.delete(string);

// doesn't explode
map.remove({});
map.delete({});

mapHasEntries([]);
});
Expand Down Expand Up @@ -149,16 +168,16 @@ function testMap(nameAndFunc) {
], map2);
});

test("copy and then remove", function() {
test("copy and then delete", function() {
map.set(object, "winning");
map.set(number, "winning");
map.set(string, "winning");

var map2 = map.copy();

map2.remove(object);
map2.remove(number);
map2.remove(string);
map2.delete(object);
map2.delete(number);
map2.delete(string);

mapHasEntries([
[ object, "winning" ],
Expand All @@ -169,6 +188,41 @@ function testMap(nameAndFunc) {
mapHasEntries([ ], map2);
});

test("length", function() {
expectDeprecation('Usage of `length` is deprecated, use `size` instead.');

//Add a key twice
equal(map.length, 0);
map.set(string, "a string");
equal(map.length, 1);
map.set(string, "the same string");
equal(map.length, 1);

//Add another
map.set(number, "a number");
equal(map.length, 2);

//Remove one that doesn't exist
map.delete('does not exist');
equal(map.length, 2);

//Check copy
var copy = map.copy();
equal(copy.length, 2);

//Remove a key twice
map.delete(number);
equal(map.length, 1);
map.delete(number);
equal(map.length, 1);

//Remove the last key
map.delete(string);
equal(map.length, 0);
map.delete(string);
equal(map.length, 0);
});

test("size", function() {
//Add a key twice
equal(map.size, 0);
Expand All @@ -182,23 +236,23 @@ function testMap(nameAndFunc) {
equal(map.size, 2);

//Remove one that doesn't exist
map.remove('does not exist');
map.delete('does not exist');
equal(map.size, 2);

//Check copy
var copy = map.copy();
equal(copy.size, 2);

//Remove a key twice
map.remove(number);
map.delete(number);
equal(map.size, 1);
map.remove(number);
map.delete(number);
equal(map.size, 1);

//Remove the last key
map.remove(string);
map.delete(string);
equal(map.size, 0);
map.remove(string);
map.delete(string);
equal(map.size, 0);
});

Expand Down
4 changes: 3 additions & 1 deletion tests/qunit_configuration.js
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,9 @@
}
Ember.deprecate = function(msg, test) {
EmberDev.deprecations.actuals = EmberDev.deprecations.actuals || [];
EmberDev.deprecations.actuals.push([msg, test]);
if (!test) {
EmberDev.deprecations.actuals.push([msg, test]);
}
};
},
restoreEmber: function(){
Expand Down

0 comments on commit 8f51ba4

Please sign in to comment.