Skip to content

Commit

Permalink
Merge pull request #13289 from rwjblue/lastobject-readonly
Browse files Browse the repository at this point in the history
Make Enumerable#lastObject readOnly.
  • Loading branch information
rwjblue committed Apr 10, 2016
2 parents b29d10c + c31c50e commit fc29bc5
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 2 deletions.
2 changes: 1 addition & 1 deletion packages/ember-runtime/lib/mixins/array.js
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ export default Mixin.create(Enumerable, {

lastObject: computed(function() {
return objectAt(this, get(this, 'length') - 1);
}),
}).readOnly(),

// optimized version from Enumerable
contains(obj) {
Expand Down
3 changes: 2 additions & 1 deletion packages/ember-runtime/lib/mixins/enumerable.js
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,7 @@ var Enumerable = Mixin.create({
@property lastObject
@return {Object} the last object or undefined
@readOnly
@public
*/
lastObject: computed('[]', function() {
Expand All @@ -210,7 +211,7 @@ var Enumerable = Mixin.create({
pushCtx(context);

return last;
}),
}).readOnly(),

/**
Returns `true` if the passed object can be found in the receiver. The
Expand Down
12 changes: 12 additions & 0 deletions packages/ember-runtime/tests/suites/enumerable/lastObject.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {SuiteModuleBuilder} from 'ember-runtime/tests/suites/suite';
import {get} from 'ember-metal/property_get';
import {set} from 'ember-metal/property_set';

var suite = SuiteModuleBuilder.create();

Expand All @@ -18,4 +19,15 @@ suite.test('returns undefined if enumerable is empty', function() {
equal(get(obj, 'lastObject'), undefined);
});

suite.test('can not be set', function() {
var obj = this.newObject();
var ary = this.toArray(obj);

equal(get(obj, 'lastObject'), ary[ary.length - 1]);

throws(function() {
set(obj, 'lastObject', 'foo!');
}, /Cannot set read-only property "lastObject" on object/);
});

export default suite;

0 comments on commit fc29bc5

Please sign in to comment.