From 0e2774882f2ff4e58cab17b29b2cf847fb75482d Mon Sep 17 00:00:00 2001 From: Rafael Schouten Date: Thu, 25 Sep 2014 13:03:18 +1000 Subject: [PATCH] dry enterprise angular --- ...offee => enterprises_controller.js.coffee} | 10 +++-- .../producers_controller.js.coffee | 14 ------ ....js.coffee => enterproise_modal.js.coffee} | 2 +- .../directives/producer_modal.js.coffee | 10 ----- .../services/enterprise_modal.js.coffee | 7 +++ .../darkswarm/services/enterprises.js.coffee | 15 ++++--- .../darkswarm/services/hubs.js.coffee | 9 ---- .../darkswarm/services/map.js.coffee | 6 +-- .../darkswarm/services/map_modal.js.coffee | 12 ----- .../darkswarm/services/producers.js.coffee | 7 --- ...l.html.haml => enterprise_modal.html.haml} | 0 .../templates/map_modal_producer.html.haml | 4 -- .../templates/producer_modal.html.haml | 3 -- app/views/home/_hubs.html.haml | 4 +- app/views/producers/index.html.haml | 4 +- .../filters/filter_hubs_spec.js.coffee | 45 ------------------- .../filters/filter_producers_spec.js.coffee | 28 ------------ .../filters/search_enterprises_spec.js.coffee | 45 +++++++++++++++++++ 18 files changed, 76 insertions(+), 149 deletions(-) rename app/assets/javascripts/darkswarm/controllers/{hubs_controller.js.coffee => enterprises_controller.js.coffee} (61%) delete mode 100644 app/assets/javascripts/darkswarm/controllers/producers_controller.js.coffee rename app/assets/javascripts/darkswarm/directives/{hub_modal.js.coffee => enterproise_modal.js.coffee} (84%) delete mode 100644 app/assets/javascripts/darkswarm/directives/producer_modal.js.coffee create mode 100644 app/assets/javascripts/darkswarm/services/enterprise_modal.js.coffee delete mode 100644 app/assets/javascripts/darkswarm/services/hubs.js.coffee delete mode 100644 app/assets/javascripts/darkswarm/services/map_modal.js.coffee delete mode 100644 app/assets/javascripts/darkswarm/services/producers.js.coffee rename app/assets/javascripts/templates/{hub_modal.html.haml => enterprise_modal.html.haml} (100%) delete mode 100644 app/assets/javascripts/templates/map_modal_producer.html.haml delete mode 100644 app/assets/javascripts/templates/producer_modal.html.haml delete mode 100644 spec/javascripts/unit/darkswarm/filters/filter_hubs_spec.js.coffee delete mode 100644 spec/javascripts/unit/darkswarm/filters/filter_producers_spec.js.coffee create mode 100644 spec/javascripts/unit/darkswarm/filters/search_enterprises_spec.js.coffee diff --git a/app/assets/javascripts/darkswarm/controllers/hubs_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/enterprises_controller.js.coffee similarity index 61% rename from app/assets/javascripts/darkswarm/controllers/hubs_controller.js.coffee rename to app/assets/javascripts/darkswarm/controllers/enterprises_controller.js.coffee index b44d63eadf..dc1218a14b 100644 --- a/app/assets/javascripts/darkswarm/controllers/hubs_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/enterprises_controller.js.coffee @@ -1,13 +1,15 @@ -Darkswarm.controller "HubsCtrl", ($scope, Hubs, Search, $document, $rootScope, HashNavigation, FilterSelectorsService, MapModal) -> - $scope.Hubs = Hubs - $scope.hubs = Hubs.visible +Darkswarm.controller "EnterprisesCtrl", ($scope, Enterprises, Search, $document, $rootScope, HashNavigation, FilterSelectorsService, EnterpriseModal) -> + $scope.Enterprises = Enterprises $scope.totalActive = FilterSelectorsService.totalActive $scope.clearAll = FilterSelectorsService.clearAll $scope.filterText = FilterSelectorsService.filterText $scope.FilterSelectorsService = FilterSelectorsService $scope.query = Search.search() + $scope.openModal = EnterpriseModal.open + $scope.activeTaxons = [] + $scope.show_profiles = false + $scope.filtersActive = false $scope.show_profiles = false - $scope.openModal = MapModal.open $scope.$watch "query", (query)-> Search.search query diff --git a/app/assets/javascripts/darkswarm/controllers/producers_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/producers_controller.js.coffee deleted file mode 100644 index b16dcdfa77..0000000000 --- a/app/assets/javascripts/darkswarm/controllers/producers_controller.js.coffee +++ /dev/null @@ -1,14 +0,0 @@ -Darkswarm.controller "ProducersCtrl", ($scope, Producers, $filter, FilterSelectorsService, Search, MapModal) -> - $scope.Producers = Producers - $scope.totalActive = FilterSelectorsService.totalActive - $scope.clearAll = FilterSelectorsService.clearAll - $scope.filterText = FilterSelectorsService.filterText - $scope.FilterSelectorsService = FilterSelectorsService - $scope.filtersActive = false - $scope.activeTaxons = [] - $scope.query = Search.search() - $scope.show_profiles = false - $scope.openModal = MapModal.open - - $scope.$watch "query", (query)-> - Search.search query diff --git a/app/assets/javascripts/darkswarm/directives/hub_modal.js.coffee b/app/assets/javascripts/darkswarm/directives/enterproise_modal.js.coffee similarity index 84% rename from app/assets/javascripts/darkswarm/directives/hub_modal.js.coffee rename to app/assets/javascripts/darkswarm/directives/enterproise_modal.js.coffee index 6eb0299ab4..60f3810f41 100644 --- a/app/assets/javascripts/darkswarm/directives/hub_modal.js.coffee +++ b/app/assets/javascripts/darkswarm/directives/enterproise_modal.js.coffee @@ -1,4 +1,4 @@ -Darkswarm.directive "hubModal", ($modal)-> +Darkswarm.directive "enterpriseModal", ($modal)-> restrict: 'E' replace: true template: "{{enterprise.name}}" diff --git a/app/assets/javascripts/darkswarm/directives/producer_modal.js.coffee b/app/assets/javascripts/darkswarm/directives/producer_modal.js.coffee deleted file mode 100644 index af2b13f157..0000000000 --- a/app/assets/javascripts/darkswarm/directives/producer_modal.js.coffee +++ /dev/null @@ -1,10 +0,0 @@ -Darkswarm.directive "producerModal", ($modal)-> - restrict: 'E' - replace: true - template: "" - transclude: true - link: (scope, elem, attrs, ctrl)-> - elem.on "click", (ev)=> - ev.stopPropagation() - scope.modalInstance = $modal.open(controller: ctrl, templateUrl: 'producer_modal.html', scope: scope) - diff --git a/app/assets/javascripts/darkswarm/services/enterprise_modal.js.coffee b/app/assets/javascripts/darkswarm/services/enterprise_modal.js.coffee new file mode 100644 index 0000000000..1cd0727cd8 --- /dev/null +++ b/app/assets/javascripts/darkswarm/services/enterprise_modal.js.coffee @@ -0,0 +1,7 @@ +Darkswarm.factory "EnterpriseModal", ($modal, $rootScope)-> + new class EnterpriseModal + open: (enterprise)-> + scope = $rootScope.$new(true) # Spawn an isolate to contain the enterprise + + scope.enterprise = enterprise + $modal.open(templateUrl: "enterprise_modal.html", scope: scope) diff --git a/app/assets/javascripts/darkswarm/services/enterprises.js.coffee b/app/assets/javascripts/darkswarm/services/enterprises.js.coffee index 50143e006b..2451c14739 100644 --- a/app/assets/javascripts/darkswarm/services/enterprises.js.coffee +++ b/app/assets/javascripts/darkswarm/services/enterprises.js.coffee @@ -1,13 +1,17 @@ -Darkswarm.factory 'Enterprises', (enterprises, CurrentHub, Taxons, Dereferencer)-> +Darkswarm.factory 'Enterprises', (enterprises, CurrentHub, Taxons, Dereferencer, visibleFilter)-> new class Enterprises - enterprises_by_id: {} # id/object pairs for lookup + enterprises_by_id: {} # id/object pairs for lookup constructor: -> - @enterprises = enterprises + @enterprises = visibleFilter enterprises for enterprise in enterprises @enterprises_by_id[enterprise.id] = enterprise @dereferenceEnterprises() @dereferenceTaxons() - + @producers = @enterprises.filter (enterprise)-> + enterprise.is_primary_producer + @hubs = @enterprises.filter (enterprise)-> + enterprise.is_distributor + dereferenceEnterprises: -> if CurrentHub.hub?.id CurrentHub.hub = @enterprises_by_id[CurrentHub.hub.id] @@ -16,6 +20,7 @@ Darkswarm.factory 'Enterprises', (enterprises, CurrentHub, Taxons, Dereferencer) Dereferencer.dereference enterprise.producers, @enterprises_by_id dereferenceTaxons: -> - for enterprise in @enterprises + for enterprise in @enterprises Dereferencer.dereference enterprise.taxons, Taxons.taxons_by_id Dereferencer.dereference enterprise.supplied_taxons, Taxons.taxons_by_id + diff --git a/app/assets/javascripts/darkswarm/services/hubs.js.coffee b/app/assets/javascripts/darkswarm/services/hubs.js.coffee deleted file mode 100644 index ac7dc3a0eb..0000000000 --- a/app/assets/javascripts/darkswarm/services/hubs.js.coffee +++ /dev/null @@ -1,9 +0,0 @@ -Darkswarm.factory 'Hubs', ($filter, Enterprises, visibleFilter) -> - new class Hubs - constructor: -> - @hubs = @order Enterprises.enterprises.filter (hub)-> - hub.is_distributor - @visible = visibleFilter @hubs - - order: (hubs)-> - $filter('orderBy')(hubs, ['-active', '+orders_close_at']) diff --git a/app/assets/javascripts/darkswarm/services/map.js.coffee b/app/assets/javascripts/darkswarm/services/map.js.coffee index 43750acdb2..703c3c54bf 100644 --- a/app/assets/javascripts/darkswarm/services/map.js.coffee +++ b/app/assets/javascripts/darkswarm/services/map.js.coffee @@ -1,7 +1,7 @@ -Darkswarm.factory "OfnMap", (Enterprises, MapModal, visibleFilter)-> +Darkswarm.factory "OfnMap", (Enterprises, EnterpriseModal, visibleFilter)-> new class OfnMap constructor: -> - @enterprises = (@extend(enterprise) for enterprise in visibleFilter(Enterprises.enterprises)) + @enterprises = (@extend(enterprise) for enterprise in visibleFilter(Enterprises.enterprises)) # Adding methods to each enterprise @@ -14,4 +14,4 @@ Darkswarm.factory "OfnMap", (Enterprises, MapModal, visibleFilter)-> icon: enterprise.icon id: enterprise.id reveal: => - MapModal.open enterprise + EnterpriseModal.open enterprise diff --git a/app/assets/javascripts/darkswarm/services/map_modal.js.coffee b/app/assets/javascripts/darkswarm/services/map_modal.js.coffee deleted file mode 100644 index c9ed30f558..0000000000 --- a/app/assets/javascripts/darkswarm/services/map_modal.js.coffee +++ /dev/null @@ -1,12 +0,0 @@ -Darkswarm.factory "MapModal", ($modal, $rootScope)-> - new class MapModal - open: (enterprise)-> - scope = $rootScope.$new(true) # Spawn an isolate to contain the enterprise - - scope.enterprise = enterprise - if enterprise.is_distributor - scope.hub = enterprise - $modal.open(templateUrl: "hub_modal.html", scope: scope) - else - scope.producer = enterprise - $modal.open(templateUrl: "map_modal_producer.html", scope: scope) diff --git a/app/assets/javascripts/darkswarm/services/producers.js.coffee b/app/assets/javascripts/darkswarm/services/producers.js.coffee deleted file mode 100644 index 65d8e42c5d..0000000000 --- a/app/assets/javascripts/darkswarm/services/producers.js.coffee +++ /dev/null @@ -1,7 +0,0 @@ -Darkswarm.factory 'Producers', (Enterprises, visibleFilter) -> - new class Producers - constructor: -> - @producers = Enterprises.enterprises.filter (enterprise)-> - enterprise.is_primary_producer - @visible = visibleFilter @producers - diff --git a/app/assets/javascripts/templates/hub_modal.html.haml b/app/assets/javascripts/templates/enterprise_modal.html.haml similarity index 100% rename from app/assets/javascripts/templates/hub_modal.html.haml rename to app/assets/javascripts/templates/enterprise_modal.html.haml diff --git a/app/assets/javascripts/templates/map_modal_producer.html.haml b/app/assets/javascripts/templates/map_modal_producer.html.haml deleted file mode 100644 index dff26519d3..0000000000 --- a/app/assets/javascripts/templates/map_modal_producer.html.haml +++ /dev/null @@ -1,4 +0,0 @@ -%ng-include{src: "'partials/enterprise_header.html'"} -%ng-include{src: "'partials/enterprise_details.html'"} -%ng-include{src: "'partials/hub_actions.html'"} -%ng-include{src: "'partials/close.html'"} diff --git a/app/assets/javascripts/templates/producer_modal.html.haml b/app/assets/javascripts/templates/producer_modal.html.haml deleted file mode 100644 index db6f927e21..0000000000 --- a/app/assets/javascripts/templates/producer_modal.html.haml +++ /dev/null @@ -1,3 +0,0 @@ -%ng-include{src: "'partials/enterprise_header.html'"} -%ng-include{src: "'partials/enterprise_details.html'"} -%ng-include{src: "'partials/close.html'"} diff --git a/app/views/home/_hubs.html.haml b/app/views/home/_hubs.html.haml index b7a14fc7bf..9e9215ff83 100644 --- a/app/views/home/_hubs.html.haml +++ b/app/views/home/_hubs.html.haml @@ -1,5 +1,5 @@ = inject_enterprises -#hubs.hubs{"ng-controller" => "HubsCtrl"} +#hubs.hubs{"ng-controller" => "EnterprisesCtrl"} .row .small-12.columns %h1 Shop in your local area @@ -17,7 +17,7 @@ .row{bindonce: true} .small-12.columns .active_table - %hub.active_table_node.row.animate-repeat{"ng-repeat" => "hub in filteredHubs = (hubs | searchEnterprises:query | taxons:activeTaxons | shipping:shippingTypes | showProfiles:show_profiles )", + %hub.active_table_node.row.animate-repeat{"ng-repeat" => "hub in hubs = (Enterprises.hubs | searchEnterprises:query | taxons:activeTaxons | shipping:shippingTypes | showProfiles:show_profiles | orderBy:['-active', '+orders_close_at'])", "ng-class" => "{'closed' : !open(), 'open' : open(), 'inactive' : !hub.active, 'current' : current()}", "scroll-after-load" => true, "ng-controller" => "HubNodeCtrl", diff --git a/app/views/producers/index.html.haml b/app/views/producers/index.html.haml index 095cff2a11..e012f4c1ee 100644 --- a/app/views/producers/index.html.haml +++ b/app/views/producers/index.html.haml @@ -1,5 +1,5 @@ = inject_enterprises -.producers.pad-top{"ng-controller" => "ProducersCtrl"} +.producers.pad-top{"ng-controller" => "EnterprisesCtrl"} .row .small-12.columns.pad-top %h1 Find local producers @@ -24,7 +24,7 @@ .active_table %producer.active_table_node.row.animate-repeat{id: "{{producer.path}}", "scroll-after-load" => true, - "ng-repeat" => "producer in producers = (Producers.visible | showProfiles:show_profiles | searchEnterprises:query | taxons:activeTaxons)", + "ng-repeat" => "producer in producers = (Enterprises.producers | showProfiles:show_profiles | searchEnterprises:query | taxons:activeTaxons)", "ng-controller" => "ProducerNodeCtrl", "ng-class" => "{'closed' : !open(), 'open' : open(), 'inactive' : !producer.active}", id: "{{producer.hash}}"} diff --git a/spec/javascripts/unit/darkswarm/filters/filter_hubs_spec.js.coffee b/spec/javascripts/unit/darkswarm/filters/filter_hubs_spec.js.coffee deleted file mode 100644 index fc2702a72b..0000000000 --- a/spec/javascripts/unit/darkswarm/filters/filter_hubs_spec.js.coffee +++ /dev/null @@ -1,45 +0,0 @@ -describe 'filtering Hubs', -> - filter = null - filterHubs = null - hubs = [{ - name: "frogs" - other: "roger" - address: - zipcode: "cats" - city: "cambridge" - state: "kansas" - }, { - name: "donkeys" - other: "roger" - address: - zipcode: "" - city: "Wellington" - state: "uzbekistan" - }] - - beforeEach -> - module 'Darkswarm' - inject ($filter) -> - filter = $filter - filterHubs = $filter('hubs') - - it 'has a hub filter', -> - expect(filter('hubs')).not.toBeNull() - - it "filters by name", -> - expect(filterHubs(hubs, 'donkeys').length).toEqual 1 - - it "is case insensitive", -> - expect(filterHubs(hubs, 'DONKEYS').length).toEqual 1 - - it "filters by state", -> - expect(filterHubs(hubs, 'kansas').length).toEqual 1 - - it "filters by zipcode", -> - expect(filterHubs(hubs, 'cats').length).toEqual 1 - - it "gives all hubs when no argument is specified", -> - expect(filterHubs(hubs, '').length).toEqual 2 - - it "does not filter by anything else", -> - expect(filterHubs(hubs, 'roger').length).toEqual 0 diff --git a/spec/javascripts/unit/darkswarm/filters/filter_producers_spec.js.coffee b/spec/javascripts/unit/darkswarm/filters/filter_producers_spec.js.coffee deleted file mode 100644 index 29d8986b56..0000000000 --- a/spec/javascripts/unit/darkswarm/filters/filter_producers_spec.js.coffee +++ /dev/null @@ -1,28 +0,0 @@ -describe 'filtering producers', -> - filter = null - filterProducers = null - producers = [{ - name: "frogs" - other: "roger" - address: - zipcode: "cats" - city: "cambridge" - state: "kansas" - }, { - name: "donkeys" - other: "roger" - address: - zipcode: "" - city: "Wellington" - state: "uzbekistan" - }] - - beforeEach -> - module 'Darkswarm' - inject ($filter) -> - filter = $filter - filterProducers = $filter('filterProducers') - - - it 'has a producer filter', -> - expect(filter('filterProducers')).not.toBeNull() diff --git a/spec/javascripts/unit/darkswarm/filters/search_enterprises_spec.js.coffee b/spec/javascripts/unit/darkswarm/filters/search_enterprises_spec.js.coffee new file mode 100644 index 0000000000..61e58071e2 --- /dev/null +++ b/spec/javascripts/unit/darkswarm/filters/search_enterprises_spec.js.coffee @@ -0,0 +1,45 @@ +describe 'filtering Enterprises', -> + filter = null + searchEnterprises = null + enterprises = [{ + name: "frogs" + other: "roger" + address: + zipcode: "cats" + city: "cambridge" + state: "kansas" + }, { + name: "donkeys" + other: "roger" + address: + zipcode: "" + city: "Wellington" + state: "uzbekistan" + }] + + beforeEach -> + module 'Darkswarm' + inject ($filter) -> + filter = $filter + searchEnterprises = $filter('enterprises') + + it 'has a enterprise filter', -> + expect(filter('enterprises')).not.toBeNull() + + it "filters by name", -> + expect(searchEnterprises(enterprises, 'donkeys').length).toEqual 1 + + it "is case insensitive", -> + expect(searchEnterprises(enterprises, 'DONKEYS').length).toEqual 1 + + it "filters by state", -> + expect(searchEnterprises(enterprises, 'kansas').length).toEqual 1 + + it "filters by zipcode", -> + expect(searchEnterprises(enterprises, 'cats').length).toEqual 1 + + it "gives all enterprises when no argument is specified", -> + expect(searchEnterprises(enterprises, '').length).toEqual 2 + + it "does not filter by anything else", -> + expect(searchEnterprises(enterprises, 'roger').length).toEqual 0