Skip to content

Commit

Permalink
Added resultset limit and skip methods. issue #1
Browse files Browse the repository at this point in the history
  • Loading branch information
jaimegildesagredo committed Feb 18, 2012
1 parent d4df7c2 commit 35892c8
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 0 deletions.
9 changes: 9 additions & 0 deletions cormoran/resultset.py
Expand Up @@ -23,6 +23,7 @@ def __init__(self, persistence, persistent_cls):
self._persistent_cls = persistent_cls

self._filters = {}
self._limit = slice(None)

def __iter__(self):
results = self._persistence.select(
Expand All @@ -42,3 +43,11 @@ def filter(self, **kwargs):
self._filters[k] = kwargs[k]

return self

def limit(self, stop):
self._limit = slice(self._limit.start, stop)
return self

def skip(self, start):
self._limit = slice(start, self._limit.stop or -1)
return self
45 changes: 45 additions & 0 deletions tests/unit/test_resultset.py
Expand Up @@ -71,6 +71,51 @@ def test_filter_returns_the_resultset_object(self):

assert_that(resultset, is_(self.resultset))

def test_limit_adds_slice_with_stop_value(self):
self.resultset.limit(5)

limit = self.resultset._limit

assert_that(limit, instance_of(slice))
assert_that(limit.stop, is_(5))

def test_skip_adds_slice_with_start_value_and_stop_negative(self):
self.resultset.skip(2)

limit = self.resultset._limit

assert_that(limit, instance_of(slice))
assert_that(limit.start, is_(2))
assert_that(limit.stop, is_(-1))

def test_limit_with_already_set_skip_preserves_skip(self):
self.resultset.skip(1)
self.resultset.limit(2)

limit = self.resultset._limit

assert_that(limit.start, is_(1))
assert_that(limit.stop, is_(2))

def test_skip_with_already_set_limit_preserves_limit(self):
self.resultset.limit(1)
self.resultset.skip(2)

limit = self.resultset._limit

assert_that(limit.start, is_(2))
assert_that(limit.stop, is_(1))

def test_limit_returns_the_resultset_object(self):
resultset = self.resultset.limit(1)

assert_that(resultset, is_(self.resultset))

def test_skip_returns_the_resultset_object(self):
resultset = self.resultset.skip(1)

assert_that(resultset, is_(self.resultset))

def result(self):
return [
{u'_id': 1, u'field': u'test1'},
Expand Down

0 comments on commit 35892c8

Please sign in to comment.