From c9f3a59969864ce4680f62c7389e777be8e67ede Mon Sep 17 00:00:00 2001 From: Nikita Tokarchuk Date: Thu, 7 Feb 2019 23:47:46 +0100 Subject: [PATCH] Split compose applier --- mongox/query/compose.go | 46 +++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/mongox/query/compose.go b/mongox/query/compose.go index 2639437..e529b58 100644 --- a/mongox/query/compose.go +++ b/mongox/query/compose.go @@ -14,7 +14,9 @@ func Compose(filters ...interface{}) *Query { ok := false ok = ok || applyBson(q, f) - ok = ok || applyLimits(q, f) + ok = ok || applyLimit(q, f) + ok = ok || applySort(q, f) + ok = ok || applySkip(q, f) if !ok { panic(errors.InternalErrorf("unknown filter %v", f)) @@ -27,29 +29,43 @@ func Compose(filters ...interface{}) *Query { // applyBson is a fallback for a custom bson.M func applyBson(q *Query, f interface{}) bool { - switch f := f.(type) { - case bson.M: + if f, ok := f.(bson.M); ok { q.And(f) - default: - return false + return true } - return true + return false } -// applyLimits extends query with contol functions -func applyLimits(q *Query, f interface{}) bool { +// applyLimits extends query with a limiter +func applyLimit(q *Query, f interface{}) bool { - switch f := f.(type) { - case Limiter: + if f, ok := f.(Limiter); ok { q.limiter = f - case Sorter: + return true + } + + return false +} + +// applySort extends query with a sort rule +func applySort(q *Query, f interface{}) bool { + + if f, ok := f.(Sorter); ok { q.sorter = f - case Skipper: + return true + } + + return false +} + +// applySkip extends query with a skip number +func applySkip(q *Query, f interface{}) bool { + + if f, ok := f.(Skipper); ok { q.skipper = f - default: - return false + return true } - return true + return false }