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 }