diff --git a/app/assets/javascripts/darkswarm/services/enterprises.js.coffee b/app/assets/javascripts/darkswarm/services/enterprises.js.coffee index b967bdd18c..04042a2d4b 100644 --- a/app/assets/javascripts/darkswarm/services/enterprises.js.coffee +++ b/app/assets/javascripts/darkswarm/services/enterprises.js.coffee @@ -1,5 +1,7 @@ Darkswarm.factory 'Enterprises', (enterprises)-> new class Enterprises + enterprises_by_id: {} # id/object pairs for lookup constructor: -> @enterprises = enterprises - @dereference() + for enterprise in enterprises + @enterprises_by_id[enterprise.id] = enterprise diff --git a/app/assets/javascripts/darkswarm/services/hubs.js.coffee b/app/assets/javascripts/darkswarm/services/hubs.js.coffee index 275ce45cec..402b5a0603 100644 --- a/app/assets/javascripts/darkswarm/services/hubs.js.coffee +++ b/app/assets/javascripts/darkswarm/services/hubs.js.coffee @@ -1,4 +1,9 @@ -Darkswarm.factory 'Hubs', (hubs, $filter) -> +Darkswarm.factory 'Hubs', ($filter, Enterprises) -> new class Hubs constructor: -> - @hubs = $filter('orderBy')(hubs, ['-active', '+orders_close_at']) + @hubs = @filter Enterprises.enterprises.filter (hub)-> + hub.type == "hub" + + + filter: (hubs)-> + $filter('orderBy')(hubs, ['-active', '+orders_close_at']) diff --git a/app/assets/javascripts/darkswarm/services/producers.js.coffee b/app/assets/javascripts/darkswarm/services/producers.js.coffee index 65e33599af..8ca9752d28 100644 --- a/app/assets/javascripts/darkswarm/services/producers.js.coffee +++ b/app/assets/javascripts/darkswarm/services/producers.js.coffee @@ -1,5 +1,6 @@ -Darkswarm.factory 'Producers', (producers) -> +Darkswarm.factory 'Producers', (Enterprises) -> new class Producers constructor: -> - @producers = producers + @producers = Enterprises.enterprises.filter (enterprise)-> + enterprise.type == "producer" diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 592388c243..54c200beff 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -3,6 +3,7 @@ class HomeController < BaseController def index @active_distributors ||= Enterprise.distributors_with_active_order_cycles + @enterprises = Enterprise.visible end def about_us diff --git a/app/views/home/_hubs.html.haml b/app/views/home/_hubs.html.haml index c96ec6698c..17a4cc13a5 100644 --- a/app/views/home/_hubs.html.haml +++ b/app/views/home/_hubs.html.haml @@ -1,6 +1,5 @@ #hubs.hubs{"ng-controller" => "HubsCtrl"} - :javascript - angular.module('Darkswarm').value('hubs', #{render "json/hubs"}) + = inject_json "enterprises" , "enterprises", collection: @enterprises .row .small-12.columns.text-center diff --git a/app/views/json/_hubs.rabl b/app/views/json/_hubs.rabl index 8e8e36d213..7f8c4ac7b4 100644 --- a/app/views/json/_hubs.rabl +++ b/app/views/json/_hubs.rabl @@ -1,4 +1,4 @@ -collection Enterprise.visible.is_distributor +collection Enterprise.is_distributor.visible extends 'json/partials/enterprise' extends 'json/partials/hub' diff --git a/app/views/json/_producers.rabl b/app/views/json/_producers.rabl index 89839c51ea..cad5b29062 100644 --- a/app/views/json/_producers.rabl +++ b/app/views/json/_producers.rabl @@ -1,3 +1,3 @@ -collection @producers +collection Enterprise.is_primary_producer.visible extends 'json/partials/enterprise' extends 'json/partials/producer' diff --git a/app/views/json/partials/_enterprise.rabl b/app/views/json/partials/_enterprise.rabl index 4ebf5f7a78..32c2ccf4ab 100644 --- a/app/views/json/partials/_enterprise.rabl +++ b/app/views/json/partials/_enterprise.rabl @@ -1,5 +1,13 @@ attributes :name, :id, :description, :latitude, :longitude, :long_description, :website, :instagram, :linkedin, :twitter, :facebook, :is_primary_producer?, :is_distributor? +node :type do |enterprise| + if enterprise.is_primary_producer? + "producer" + elsif enterprise.is_distributor? + "hub" + end +end + node :email do |enterprise| enterprise.email.to_s.reverse end diff --git a/app/views/layouts/darkswarm.html.haml b/app/views/layouts/darkswarm.html.haml index f399756efc..5208c3d5ef 100644 --- a/app/views/layouts/darkswarm.html.haml +++ b/app/views/layouts/darkswarm.html.haml @@ -26,7 +26,6 @@ = inject_json "currentHub", "current_hub" - = inject_json "enterprises", "enterprises" = inject_json "currentOrder", "current_order" = inject_json "user", "current_user" = inject_json "railsFlash", "flash" diff --git a/app/views/map/index.html.haml b/app/views/map/index.html.haml index 277178bfdc..2c49deb4d4 100644 --- a/app/views/map/index.html.haml +++ b/app/views/map/index.html.haml @@ -1,4 +1,4 @@ -= inject_json "enterprisesForMap" , "enterprises_for_map", collection: @enterprises += inject_json "enterprisesForMap" , "enterprises", collection: @enterprises .map-container{"fill-vertical" => true} %map{"ng-controller" => "MapCtrl"} diff --git a/app/views/producers/index.haml b/app/views/producers/index.haml index 7c4b6a5b62..e30475fdd8 100644 --- a/app/views/producers/index.haml +++ b/app/views/producers/index.haml @@ -1,8 +1,5 @@ .producers{"ng-controller" => "ProducersCtrl"} - :javascript - angular.module('Darkswarm').value('producers', #{render partial: "json/producers", object: @producers}) - -#%pre - -#{{ Producers.producers | json }} + = inject_json "producers" , "producers", collection: @producers .row .small-12.columns.text-center.pad-top diff --git a/spec/javascripts/unit/darkswarm/services/enterprise_spec.js.coffee b/spec/javascripts/unit/darkswarm/services/enterprise_spec.js.coffee new file mode 100644 index 0000000000..a2c18e879c --- /dev/null +++ b/spec/javascripts/unit/darkswarm/services/enterprise_spec.js.coffee @@ -0,0 +1,22 @@ +describe "Enterprises service", -> + Enterprises = null + enterprises = [ + {id: 1, type: "hub"}, + {id: 2, type: "producer"} + ] + beforeEach -> + module 'Darkswarm' + angular.module('Darkswarm').value('enterprises', enterprises) + + inject ($injector)-> + Enterprises = $injector.get("Enterprises") + + it "stores enterprises as id/object pairs", -> + expect(Enterprises.enterprises_by_id["1"]).toBe enterprises[0] + expect(Enterprises.enterprises_by_id["2"]).toBe enterprises[1] + + it "stores enterprises as an array", -> + expect(Enterprises.enterprises).toBe enterprises + + it "puts the same objects in enterprises and enterprises_by_id", -> + expect(Enterprises.enterprises[0]).toBe Enterprises.enterprises_by_id["1"] diff --git a/spec/javascripts/unit/darkswarm/services/hubs_spec.js.coffee b/spec/javascripts/unit/darkswarm/services/hubs_spec.js.coffee new file mode 100644 index 0000000000..6247c7a713 --- /dev/null +++ b/spec/javascripts/unit/darkswarm/services/hubs_spec.js.coffee @@ -0,0 +1,39 @@ +describe "Hubs service", -> + Hubs = null + Enterprises = null + hubs = [ + { + id: 2 + active: false + orders_close_at: new Date() + type: "hub" + } + { + id: 3 + active: false + orders_close_at: new Date() + type: "hub" + } + { + id: 1 + active: true + orders_close_at: new Date() + type: "hub" + } + ] + + + beforeEach -> + module 'Darkswarm' + angular.module('Darkswarm').value('enterprises', hubs) + inject ($injector)-> + Enterprises = $injector.get("Enterprises") + Hubs = $injector.get("Hubs") + + it "filters Enterprise.hubs into a new array", -> + expect(Hubs.hubs[0]).toBe Enterprises.enterprises[2] + # Because the $filter is a new sorted array + # We check to see the objects in both arrays are still the same + Enterprises.enterprises[2].active = false + expect(Hubs.hubs[0].active).toBe false + diff --git a/spec/javascripts/unit/darkswarm/services/producers_spec.js.coffee b/spec/javascripts/unit/darkswarm/services/producers_spec.js.coffee new file mode 100644 index 0000000000..ab2cc04cac --- /dev/null +++ b/spec/javascripts/unit/darkswarm/services/producers_spec.js.coffee @@ -0,0 +1,15 @@ +describe "Producers service", -> + Producers = null + Enterprises = null + enterprises = [ + {type: "producer"} + ] + + beforeEach -> + module 'Darkswarm' + angular.module('Darkswarm').value('enterprises', enterprises) + inject ($injector)-> + Producers = $injector.get("Producers") + + it "delegates producers array to Enterprises", -> + expect(Producers.producers[0]).toBe enterprises[0]