From f19a02264e782875adf095edd7fc47345f8bcc08 Mon Sep 17 00:00:00 2001 From: Will Marshall Date: Wed, 2 Jul 2014 12:08:21 +1000 Subject: [PATCH] Adding all the Angular filters required to make this work --- .../darkswarm/filters/active.js.coffee | 14 +++++++++ .../darkswarm/filters/shipping.js.coffee | 13 ++++++++ .../darkswarm/filters/taxons.js.coffee | 10 +++++++ .../darkswarm/filters/active_spec.js.coffee | 28 +++++++++++++++++ .../darkswarm/filters/shipping_spec.js.coffee | 30 +++++++++++++++++++ .../darkswarm/filters/taxons_spec.js.coffee | 27 +++++++++++++++++ 6 files changed, 122 insertions(+) create mode 100644 app/assets/javascripts/darkswarm/filters/active.js.coffee create mode 100644 app/assets/javascripts/darkswarm/filters/shipping.js.coffee create mode 100644 app/assets/javascripts/darkswarm/filters/taxons.js.coffee create mode 100644 spec/javascripts/unit/darkswarm/filters/active_spec.js.coffee create mode 100644 spec/javascripts/unit/darkswarm/filters/shipping_spec.js.coffee create mode 100644 spec/javascripts/unit/darkswarm/filters/taxons_spec.js.coffee diff --git a/app/assets/javascripts/darkswarm/filters/active.js.coffee b/app/assets/javascripts/darkswarm/filters/active.js.coffee new file mode 100644 index 0000000000..93bf1c658c --- /dev/null +++ b/app/assets/javascripts/darkswarm/filters/active.js.coffee @@ -0,0 +1,14 @@ +Darkswarm.filter 'active', ()-> + (objects, options)-> + objects ||= [] + options ?= null + + if options.open and !options.closed + objects.filter (obj)-> + obj.active + else if options.closed and !options.open + objects.filter (obj)-> + !obj.active + else + objects + diff --git a/app/assets/javascripts/darkswarm/filters/shipping.js.coffee b/app/assets/javascripts/darkswarm/filters/shipping.js.coffee new file mode 100644 index 0000000000..761e34337d --- /dev/null +++ b/app/assets/javascripts/darkswarm/filters/shipping.js.coffee @@ -0,0 +1,13 @@ +Darkswarm.filter 'shipping', ()-> + (objects, options)-> + objects ||= [] + options ?= null + + if options.pickup and !options.delivery + objects.filter (obj)-> + obj.pickup + else if options.delivery and !options.pickup + objects.filter (obj)-> + obj.delivery + else + objects diff --git a/app/assets/javascripts/darkswarm/filters/taxons.js.coffee b/app/assets/javascripts/darkswarm/filters/taxons.js.coffee new file mode 100644 index 0000000000..c060647ac5 --- /dev/null +++ b/app/assets/javascripts/darkswarm/filters/taxons.js.coffee @@ -0,0 +1,10 @@ +Darkswarm.filter 'taxons', (Matcher)-> + # Filter anything that responds to object.taxons, and/or object.primary_taxon + (objects, text) -> + objects ||= [] + text ?= "" + objects.filter (obj)-> + Matcher.match([obj.primary_taxon?.name || ""], text) || obj.taxons.some (taxon)-> + Matcher.match [taxon.name], text + + diff --git a/spec/javascripts/unit/darkswarm/filters/active_spec.js.coffee b/spec/javascripts/unit/darkswarm/filters/active_spec.js.coffee new file mode 100644 index 0000000000..337121b1ae --- /dev/null +++ b/spec/javascripts/unit/darkswarm/filters/active_spec.js.coffee @@ -0,0 +1,28 @@ +describe 'filtering by active', -> + filterByActive = null + objects = [ + { + active: true + } + { + active: false + } + ] + + + beforeEach -> + module 'Darkswarm' + inject ($filter) -> + filterByActive = $filter('active') + + it "filters to active", -> + expect(filterByActive(objects, {closed: false, open: true})[0]).toBe objects[0] + + it "filters to inactive", -> + expect(filterByActive(objects, {closed: true, open: false})[0]).toBe objects[1] + + it "doesn't filter if needed", -> + expect(filterByActive(objects, {closed: false, open: false})).toBe objects + + it "filters to all", -> + expect(filterByActive(objects, {closed: true, open: true})).toBe objects diff --git a/spec/javascripts/unit/darkswarm/filters/shipping_spec.js.coffee b/spec/javascripts/unit/darkswarm/filters/shipping_spec.js.coffee new file mode 100644 index 0000000000..bfb5ffe606 --- /dev/null +++ b/spec/javascripts/unit/darkswarm/filters/shipping_spec.js.coffee @@ -0,0 +1,30 @@ +describe 'filtering by shipping method', -> + filterByShippingMethod = null + objects = [ + { + delivery: true + pickup: false + } + { + delivery: false + pickup: true + } + ] + + + beforeEach -> + module 'Darkswarm' + inject ($filter) -> + filterByShippingMethod = $filter('shipping') + + it "filters to pickup", -> + expect(filterByShippingMethod(objects, {pickup: true, delivery: false})[0]).toBe objects[1] + + it "filters to delivery", -> + expect(filterByShippingMethod(objects, {pickup: false, delivery: true})[0]).toBe objects[0] + + it "filters to both", -> + expect(filterByShippingMethod(objects, {pickup: true, delivery: true})).toBe objects + + it "filters to none", -> + expect(filterByShippingMethod(objects, {pickup: false, delivery: false})).toBe objects diff --git a/spec/javascripts/unit/darkswarm/filters/taxons_spec.js.coffee b/spec/javascripts/unit/darkswarm/filters/taxons_spec.js.coffee new file mode 100644 index 0000000000..fee894353c --- /dev/null +++ b/spec/javascripts/unit/darkswarm/filters/taxons_spec.js.coffee @@ -0,0 +1,27 @@ +describe 'filtering by taxons', -> + filterByTaxons = null + objects = [ + { + taxons: [] + primary_taxon: + name: "frogs" + } + { + taxons: [ + {name: "kittens"} + {name: "puppies"} + ] + } + ] + + + beforeEach -> + module 'Darkswarm' + inject ($filter) -> + filterByTaxons = $filter('taxons') + + it "filters by primary taxon", -> + expect(filterByTaxons(objects, "frogs")[0]).toBe objects[0] + + it "filters by taxons", -> + expect(filterByTaxons(objects, "kittens")[0]).toBe objects[1]