From 8baed4429c5df713de422804c8eac6c9d2d8cb52 Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Thu, 27 Nov 2014 11:34:35 +1100 Subject: [PATCH] Indexer accepts arbitrary key to index by. Fix bug: Return an object instead of an array. --- app/assets/javascripts/admin/services/indexer.js.coffee | 6 +++--- .../unit/admin/services/indexer_spec.js.coffee | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/admin/services/indexer.js.coffee b/app/assets/javascripts/admin/services/indexer.js.coffee index a69f7f06e1..f9a9688a2f 100644 --- a/app/assets/javascripts/admin/services/indexer.js.coffee +++ b/app/assets/javascripts/admin/services/indexer.js.coffee @@ -6,8 +6,8 @@ angular.module("ofn.admin").factory 'Indexer', -> new class Indexer - index: (data) -> - index = [] + index: (data, key='id') -> + index = {} for e in data - index[e.id] = e + index[e[key]] = e index diff --git a/spec/javascripts/unit/admin/services/indexer_spec.js.coffee b/spec/javascripts/unit/admin/services/indexer_spec.js.coffee index a7f009e7d3..f17f8bd83c 100644 --- a/spec/javascripts/unit/admin/services/indexer_spec.js.coffee +++ b/spec/javascripts/unit/admin/services/indexer_spec.js.coffee @@ -11,3 +11,12 @@ describe "indexer", -> objects = [{id: 1, name: 'one'}, {id: 2, name: 'two'}] index = Indexer.index objects expect(index).toEqual({1: {id: 1, name: 'one'}, 2: {id: 2, name: 'two'}}) + + it "indexes an array of objects by another field", -> + objects = [{widget_id: 1, name: 'one'}, {widget_id: 2, name: 'two'}] + index = Indexer.index objects, 'widget_id' + expect(index).toEqual({1: {widget_id: 1, name: 'one'}, 2: {widget_id: 2, name: 'two'}}) + + it "returns an object, not an array", -> + index = Indexer.index [] + expect(index.constructor).not.toEqual(Array)