From 497427bf6b0c0c4dd09c6785eda46a1b9e4a77a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavi=20Magrinya=CC=80?= Date: Sat, 30 Aug 2014 22:22:42 +0300 Subject: [PATCH 1/5] Implemented '-' option for bucket search --- server/models/entry.coffee | 4 +++- user/templates/index.hbs | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/server/models/entry.coffee b/server/models/entry.coffee index d13f58f..49b180b 100755 --- a/server/models/entry.coffee +++ b/server/models/entry.coffee @@ -119,9 +119,11 @@ entrySchema.statics.findByParams = (params, callback) -> (callback) -> if settings.bucket? filteredBuckets = settings.bucket.split '|' + excludedBuckets = filteredBuckets.map (bucket) -> bucket.substring(1) if bucket.indexOf('-') == 0 + queryObject = if excludedBuckets[0]? then {slug: $ne: excludedBuckets} else {slug: $in: filteredBuckets} searchQuery.bucket = $in: [] - mongoose.model('Bucket').find {slug: $in: filteredBuckets}, (err, buckets) => + mongoose.model('Bucket').find queryObject, (err, buckets) => filteredBucketIDs = _.pluck _.filter(buckets, (bkt) -> bkt.slug in filteredBuckets), '_id' searchQuery.bucket = $in: filteredBucketIDs callback null diff --git a/user/templates/index.hbs b/user/templates/index.hbs index 7fc19f5..6ddbc3f 100644 --- a/user/templates/index.hbs +++ b/user/templates/index.hbs @@ -18,4 +18,19 @@ {{else}}

Add some entries into any Bucket and they’ll show up here :)

{{/entries}} + {{#entries bucket="-meetups" slug=req.params.slug search=req.query.q}} +

+ {{title}} + {{#if author}} + + {{/if}} +

+ {{markdown body}} + + {{!-- {{inspect .}} --}} + {{else}} +

Add some entries into any Bucket and they’ll show up here :)

+ {{/entries}} From ecd08b5dc8483585c37e0e9ce92df6857b0a68e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavi=20Magrinya=CC=80?= Date: Sat, 30 Aug 2014 23:33:23 +0300 Subject: [PATCH 2/5] Test added for negative search --- test/server/models/entry.coffee | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/server/models/entry.coffee b/test/server/models/entry.coffee index 8af62d1..3d2aef6 100644 --- a/test/server/models/entry.coffee +++ b/test/server/models/entry.coffee @@ -121,3 +121,9 @@ describe 'Entry', -> expect(entries).to.have.length 1 expect(entries?[0]?.title).to.equal 'Test Article' done() + + it 'filters by negative bucket slug', (done) -> + Entry.findByParams bucket: '-photos', (e, entries) -> + expect(entries).to.have.length 1 + expect(entries?[0]?.title).to.equal 'Test Article' + done() From 18f72895a7ed2d5f09e4b1336a77e1461fcafe70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavi=20Magrinya=CC=80?= Date: Sun, 31 Aug 2014 00:59:48 +0300 Subject: [PATCH 3/5] Refactoring of excluded buckets filtering --- server/models/entry.coffee | 9 ++++++--- test/server/models/entry.coffee | 6 ++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/server/models/entry.coffee b/server/models/entry.coffee index 49b180b..23f16f7 100755 --- a/server/models/entry.coffee +++ b/server/models/entry.coffee @@ -119,12 +119,15 @@ entrySchema.statics.findByParams = (params, callback) -> (callback) -> if settings.bucket? filteredBuckets = settings.bucket.split '|' - excludedBuckets = filteredBuckets.map (bucket) -> bucket.substring(1) if bucket.indexOf('-') == 0 - queryObject = if excludedBuckets[0]? then {slug: $ne: excludedBuckets} else {slug: $in: filteredBuckets} + excludedBuckets = _.chain(filteredBuckets) + .filter (bucket) -> bucket.indexOf('-') == 0 + .map (bucket) -> bucket.substring(1) + .value() + queryObject = if excludedBuckets.length > 0 then {slug: $ne: excludedBuckets} else {slug: $in: filteredBuckets} searchQuery.bucket = $in: [] mongoose.model('Bucket').find queryObject, (err, buckets) => - filteredBucketIDs = _.pluck _.filter(buckets, (bkt) -> bkt.slug in filteredBuckets), '_id' + filteredBucketIDs = _.pluck _.filter(buckets, (bkt) -> bkt.slug?), '_id' searchQuery.bucket = $in: filteredBucketIDs callback null else diff --git a/test/server/models/entry.coffee b/test/server/models/entry.coffee index 3d2aef6..582cf9c 100644 --- a/test/server/models/entry.coffee +++ b/test/server/models/entry.coffee @@ -127,3 +127,9 @@ describe 'Entry', -> expect(entries).to.have.length 1 expect(entries?[0]?.title).to.equal 'Test Article' done() + + it 'filters by negative and positive bucket slug', (done) -> + Entry.findByParams bucket: '-photos|articles', (e, entries) -> + expect(entries).to.have.length 1 + expect(entries?[0]?.title).to.equal 'Test Article' + done() From 4dc5ac943eb0c414ff6be857d9c7b4dd162573eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavi=20Magrinya=CC=80?= Date: Sun, 31 Aug 2014 01:03:04 +0300 Subject: [PATCH 4/5] Reverse unneeded changes --- user/templates/index.hbs | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/user/templates/index.hbs b/user/templates/index.hbs index 4a18267..4311d69 100644 --- a/user/templates/index.hbs +++ b/user/templates/index.hbs @@ -19,19 +19,4 @@ {{else}}

Add some entries into any Bucket and they’ll show up here :)

{{/entries}} - {{#entries bucket="-meetups" slug=req.params.slug search=req.query.q}} -

- {{title}} - {{#if author}} - - {{/if}} -

- {{markdown body}} -
- Published on {{formatTime publishDate format="MMM D, YYYY h:mma"}} by {{author.name}} -
- {{!-- {{inspect .}} --}} - {{else}} -

Add some entries into any Bucket and they’ll show up here :)

- {{/entries}} From ac3b084414b36093c720e1e8b3b155afbdb3b1fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavi=20Magrinya=CC=80?= Date: Sun, 31 Aug 2014 01:25:39 +0300 Subject: [PATCH 5/5] Support for multiple exclusions --- server/models/entry.coffee | 2 +- test/server/models/entry.coffee | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/server/models/entry.coffee b/server/models/entry.coffee index 23f16f7..6e5ecb7 100755 --- a/server/models/entry.coffee +++ b/server/models/entry.coffee @@ -123,7 +123,7 @@ entrySchema.statics.findByParams = (params, callback) -> .filter (bucket) -> bucket.indexOf('-') == 0 .map (bucket) -> bucket.substring(1) .value() - queryObject = if excludedBuckets.length > 0 then {slug: $ne: excludedBuckets} else {slug: $in: filteredBuckets} + queryObject = if excludedBuckets.length > 0 then {slug: $nin: excludedBuckets} else {slug: $in: filteredBuckets} searchQuery.bucket = $in: [] mongoose.model('Bucket').find queryObject, (err, buckets) => diff --git a/test/server/models/entry.coffee b/test/server/models/entry.coffee index 582cf9c..7bfd8cf 100644 --- a/test/server/models/entry.coffee +++ b/test/server/models/entry.coffee @@ -128,6 +128,11 @@ describe 'Entry', -> expect(entries?[0]?.title).to.equal 'Test Article' done() + it 'filters by multiple negative bucket slugs', (done) -> + Entry.findByParams bucket: '-photos|-articles', (e, entries) -> + expect(entries).to.have.length 0 + done() + it 'filters by negative and positive bucket slug', (done) -> Entry.findByParams bucket: '-photos|articles', (e, entries) -> expect(entries).to.have.length 1