Changing convention for angular resource services to generic 'byID' object and 'all' array

This commit is contained in:
Rob Harrington
2016-08-20 19:57:31 +10:00
parent cbbb047fc1
commit 3de69987e6
11 changed files with 49 additions and 39 deletions

View File

@@ -1,12 +1,12 @@
angular.module("admin.enterprises").factory 'Enterprises', ($q, EnterpriseResource) ->
new class Enterprises
enterprisesByID: {}
byID: {}
pristineByID: {}
index: (params={}, callback=null) ->
EnterpriseResource.index(params, (data) =>
for enterprise in data
@enterprisesByID[enterprise.id] = enterprise
@byID[enterprise.id] = enterprise
@pristineByID[enterprise.id] = angular.copy(enterprise)
(callback || angular.noop)(data)
data

View File

@@ -22,8 +22,8 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
$scope.refreshData = ->
unless !$scope.orderCycleFilter? || $scope.orderCycleFilter == 0
$scope.startDate = OrderCycles.orderCyclesByID[$scope.orderCycleFilter].first_order
$scope.endDate = OrderCycles.orderCyclesByID[$scope.orderCycleFilter].last_order
$scope.startDate = OrderCycles.byID[$scope.orderCycleFilter].first_order
$scope.endDate = OrderCycles.byID[$scope.orderCycleFilter].last_order
RequestMonitor.load $scope.orders = Orders.index("q[state_not_eq]": "canceled", "q[completed_at_not_null]": "true", "q[completed_at_gt]": "#{parseDate($scope.startDate)}", "q[completed_at_lt]": "#{parseDate($scope.endDate)}")
RequestMonitor.load $scope.lineItems = LineItems.index("q[order][state_not_eq]": "canceled", "q[order][completed_at_not_null]": "true", "q[order][completed_at_gt]": "#{parseDate($scope.startDate)}", "q[order][completed_at_lt]": "#{parseDate($scope.endDate)}")
@@ -34,12 +34,12 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
RequestMonitor.load $scope.suppliers = Enterprises.index(action: "for_line_items", ams_prefix: "basic", "q[is_primary_producer_eq]": "true")
RequestMonitor.load $q.all([$scope.orders.$promise, $scope.distributors.$promise, $scope.orderCycles.$promise]).then ->
Dereferencer.dereferenceAttr $scope.orders, "distributor", Enterprises.enterprisesByID
Dereferencer.dereferenceAttr $scope.orders, "order_cycle", OrderCycles.orderCyclesByID
Dereferencer.dereferenceAttr $scope.orders, "distributor", Enterprises.byID
Dereferencer.dereferenceAttr $scope.orders, "order_cycle", OrderCycles.byID
RequestMonitor.load $q.all([$scope.orders.$promise, $scope.suppliers.$promise, $scope.lineItems.$promise]).then ->
Dereferencer.dereferenceAttr $scope.lineItems, "supplier", Enterprises.enterprisesByID
Dereferencer.dereferenceAttr $scope.lineItems, "order", Orders.ordersByID
Dereferencer.dereferenceAttr $scope.lineItems, "supplier", Enterprises.byID
Dereferencer.dereferenceAttr $scope.lineItems, "order", Orders.byID
$scope.bulk_order_form.$setPristine()
StatusMessage.clear()
unless $scope.initialized

View File

@@ -1,23 +1,23 @@
angular.module("admin.lineItems").factory 'LineItems', ($q, LineItemResource) ->
new class LineItems
lineItemsByID: {}
byID: {}
pristineByID: {}
index: (params={}, callback=null) ->
LineItemResource.index params, (data) =>
@resetData()
for lineItem in data
@lineItemsByID[lineItem.id] = lineItem
@byID[lineItem.id] = lineItem
@pristineByID[lineItem.id] = angular.copy(lineItem)
(callback || angular.noop)(data)
resetData: ->
@lineItemsByID = {}
@byID = {}
@pristineByID = {}
saveAll: ->
for id, lineItem of @lineItemsByID
for id, lineItem of @byID
lineItem.errors = {} # removes errors when line_item has been returned to original state
@save(lineItem) if !@isSaved(lineItem)
@@ -34,7 +34,7 @@ angular.module("admin.lineItems").factory 'LineItems', ($q, LineItemResource) ->
deferred.promise
allSaved: ->
for id, lineItem of @lineItemsByID
for id, lineItem of @byID
return false unless @isSaved(lineItem)
true
@@ -54,7 +54,7 @@ angular.module("admin.lineItems").factory 'LineItems', ($q, LineItemResource) ->
deferred = $q.defer()
lineItem.$delete({id: lineItem.id, orders: "orders", order_number: lineItem.order.number})
.then( (data) =>
delete @lineItemsByID[lineItem.id]
delete @byID[lineItem.id]
delete @pristineByID[lineItem.id]
(callback || angular.noop)(data)
deferred.resolve(data)

View File

@@ -1,12 +1,21 @@
angular.module("admin.orderCycles").factory 'OrderCycles', ($q, OrderCycleResource) ->
angular.module("admin.orderCycles").factory 'OrderCycles', ($q, $injector, OrderCycleResource) ->
new class OrderCycles
orderCyclesByID: {}
all: []
byID: {}
pristineByID: {}
constructor: ->
if $injector.has('orderCycles')
for orderCycle in $injector.get('orderCycles')
@all.push orderCycle
@byID[orderCycle.id] = orderCycle
@pristineByID[orderCycle.id] = angular.copy(orderCycle)
index: (params={}, callback=null) ->
OrderCycleResource.index(params, (data) =>
for orderCycle in data
@orderCyclesByID[orderCycle.id] = orderCycle
@byID[orderCycle.id] = orderCycle
@pristineByID[orderCycle.id] = angular.copy(orderCycle)
(callback || angular.noop)(data)

View File

@@ -1,12 +1,12 @@
angular.module("admin.orders").factory 'Orders', ($q, OrderResource) ->
new class Orders
ordersByID: {}
byID: {}
pristineByID: {}
index: (params={}, callback=null) ->
OrderResource.index params, (data) =>
for order in data
@ordersByID[order.id] = order
@byID[order.id] = order
@pristineByID[order.id] = angular.copy(order)
(callback || angular.noop)(data)

View File

@@ -1,19 +1,20 @@
angular.module("admin.taxons").factory "Taxons", (taxons, $filter) ->
new class Taxons
taxons: taxons
taxonsByID: {}
all: []
byID: {}
constructor: ->
for taxon in @taxons
@taxonsByID[taxon.id] = taxon
for taxon in taxons
@all.push taxon
@byID[taxon.id] = taxon
# For finding a single Taxon
findByID: (id) ->
@taxonsByID[id]
@byID[id]
# For finding multiple Taxons represented by comma delimited string
findByIDs: (ids) ->
@taxonsByID[taxon_id] for taxon_id in ids.split(",") when @taxonsByID[taxon_id]
@byID[taxon_id] for taxon_id in ids.split(",") when @byID[taxon_id]
findByTerm: (term) ->
$filter('filter')(@taxons, term)
$filter('filter')(@all, term)

View File

@@ -26,9 +26,9 @@ describe "Enterprises service", ->
result = Enterprises.index()
$httpBackend.flush()
it "stores returned data in @enterprisesByID, with ids as keys", ->
it "stores returned data in @byID, with ids as keys", ->
# EnterpriseResource returns instances of Resource rather than raw objects
expect(Enterprises.enterprisesByID).toDeepEqual { 5: response[0] }
expect(Enterprises.byID).toDeepEqual { 5: response[0] }
it "stores returned data in @pristineByID, with ids as keys", ->
expect(Enterprises.pristineByID).toDeepEqual { 5: response[0] }

View File

@@ -70,7 +70,7 @@ describe "LineItemsCtrl", ->
expect(scope.distributors).toDeepEqual [ distributor ]
it "stores enterprises in an list that is accessible by id", ->
expect(Enterprises.enterprisesByID[1]).toDeepEqual supplier
expect(Enterprises.byID[1]).toDeepEqual supplier
it "gets order cycles", ->
expect(scope.orderCycles).toDeepEqual [ orderCycle ]

View File

@@ -23,9 +23,9 @@ describe "LineItems service", ->
result = LineItems.index()
$httpBackend.flush()
it "stores returned data in @lineItemsByID, with ids as keys", ->
it "stores returned data in @byID, with ids as keys", ->
# LineItemResource returns instances of Resource rather than raw objects
expect(LineItems.lineItemsByID).toDeepEqual { 5: response[0] }
expect(LineItems.byID).toDeepEqual { 5: response[0] }
it "stores returned data in @pristineByID, with ids as keys", ->
expect(LineItems.pristineByID).toDeepEqual { 5: response[0] }
@@ -114,14 +114,14 @@ describe "LineItems service", ->
beforeEach ->
lineItem = new LineItemResource({ id: 15, order: { number: '12345678'} })
LineItems.pristineByID[15] = lineItem
LineItems.lineItemsByID[15] = lineItem
LineItems.byID[15] = lineItem
$httpBackend.expectDELETE('/admin/orders/12345678/line_items/15.json').respond 200, { id: 15, name: 'LineItem 1'}
LineItems.delete(lineItem, callback).then( -> resolved = true).catch( -> rejected = true)
$httpBackend.flush()
it "updates the pristine copy of the lineItem", ->
expect(LineItems.pristineByID[15]).toBeUndefined()
expect(LineItems.lineItemsByID[15]).toBeUndefined()
expect(LineItems.byID[15]).toBeUndefined()
it "runs the callback", ->
expect(callback).toHaveBeenCalled()
@@ -139,14 +139,14 @@ describe "LineItems service", ->
beforeEach ->
lineItem = new LineItemResource({ id: 15, order: { number: '12345678'} })
LineItems.pristineByID[15] = lineItem
LineItems.lineItemsByID[15] = lineItem
LineItems.byID[15] = lineItem
$httpBackend.expectDELETE('/admin/orders/12345678/line_items/15.json').respond 422, { error: 'obj' }
LineItems.delete(lineItem, callback).then( -> resolved = true).catch( -> rejected = true)
$httpBackend.flush()
it "does not update the pristine copy of the lineItem", ->
expect(LineItems.pristineByID[15]).toBeDefined()
expect(LineItems.lineItemsByID[15]).toBeDefined()
expect(LineItems.byID[15]).toBeDefined()
it "does not run the callback", ->
expect(callback).not.toHaveBeenCalled()

View File

@@ -26,9 +26,9 @@ describe "OrderCycles service", ->
result = OrderCycles.index()
$httpBackend.flush()
it "stores returned data in @orderCyclesByID, with ids as keys", ->
it "stores returned data in @byID, with ids as keys", ->
# OrderCycleResource returns instances of Resource rather than raw objects
expect(OrderCycles.orderCyclesByID).toDeepEqual { 5: response[0] }
expect(OrderCycles.byID).toDeepEqual { 5: response[0] }
it "stores returned data in @pristineByID, with ids as keys", ->
expect(OrderCycles.pristineByID).toDeepEqual { 5: response[0] }

View File

@@ -23,9 +23,9 @@ describe "Orders service", ->
result = Orders.index()
$httpBackend.flush()
it "stores returned data in @ordersByID, with ids as keys", ->
it "stores returned data in @byID, with ids as keys", ->
# OrderResource returns instances of Resource rather than raw objects
expect(Orders.ordersByID).toDeepEqual { 5: response[0] }
expect(Orders.byID).toDeepEqual { 5: response[0] }
it "stores returned data in @pristineByID, with ids as keys", ->
expect(Orders.pristineByID).toDeepEqual { 5: response[0] }