redis_pagination 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.rdb
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format nested
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use ruby-1.9.3@redis_pagination_gem --create
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 David Czarnecki
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,118 @@
1
+ # RedisPagination
2
+
3
+ Simple pagination for Redis lists and sorted sets.
4
+
5
+ Make sure your redis server is running! Redis configuration is outside the scope of this README, but
6
+ check out the [Redis documentation](http://redis.io/documentation) for more information.
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ ```ruby
13
+ gem 'redis_pagination'
14
+ ```
15
+
16
+ And then execute:
17
+
18
+ ```
19
+ $ bundle
20
+ ```
21
+
22
+ Or install it yourself as:
23
+
24
+ ```
25
+ $ gem install redis_pagination
26
+ ```
27
+
28
+ ## Usage
29
+
30
+ Configure redis_pagination:
31
+
32
+ ```ruby
33
+ RedisPaginations.configure do |configuration|
34
+ configuration.redis = Redis.new
35
+ configuration.page_size = 25
36
+ end
37
+ ```
38
+
39
+ Use redis_pagination:
40
+
41
+ ```ruby
42
+ require 'redis_pagination'
43
+
44
+ RedisPagination.configure do |configuration|
45
+ configuration.redis = Redis.new(:db => 15)
46
+ configuration.page_size = 25
47
+ end
48
+
49
+ # List
50
+ add_items_to_list('items', RedisPagination.page_size + 2)
51
+ => 1
52
+ items_paginator = RedisPagination.paginate('items')
53
+ => #<RedisPagination::Paginator::ListPaginator:0x007f8109b08ba0 @key="items">
54
+ items_paginator.total_items
55
+ => 27
56
+ items_paginator.total_pages
57
+ => 2
58
+ items_paginator.total_pages(5)
59
+ => 6
60
+ items = items_paginator.page(1)
61
+ => {:current_page=>1, :total_pages=>2, :total_items=>27, :items=>["item_1", "item_2", "item_3", "item_4", "item_5", "item_6", "item_7", "item_8", "item_9", "item_10", "item_11", "item_12", "item_13", "item_14", "item_15", "item_16", "item_17", "item_18", "item_19", "item_20", "item_21", "item_22", "item_23", "item_24", "item_25"]}
62
+ items = items_paginator.page(2)
63
+ => {:current_page=>2, :total_pages=>2, :total_items=>27, :items=>["item_26", "item_27"]}
64
+
65
+ # Sorted Set
66
+ add_items_to_sorted_set('items', RedisPagination.page_size + 2)
67
+ => 1
68
+ items_paginator = RedisPagination.paginate('items')
69
+ => #<RedisPagination::Paginator::SortedSetPaginator:0x007f8109a25828 @key="items">
70
+ items_paginator.total_items
71
+ => 27
72
+ items_paginator.total_pages
73
+ => 2
74
+ items_paginator.total_pages(5)
75
+ => 6
76
+ items = items_paginator.page(1)
77
+ => {:current_page=>1, :total_pages=>2, :total_items=>27, :items=>[["item_27", 27.0], ["item_26", 26.0], ["item_25", 25.0], ["item_24", 24.0], ["item_23", 23.0], ["item_22", 22.0], ["item_21", 21.0], ["item_20", 20.0], ["item_19", 19.0], ["item_18", 18.0], ["item_17", 17.0], ["item_16", 16.0], ["item_15", 15.0], ["item_14", 14.0], ["item_13", 13.0], ["item_12", 12.0], ["item_11", 11.0], ["item_10", 10.0], ["item_9", 9.0], ["item_8", 8.0], ["item_7", 7.0], ["item_6", 6.0], ["item_5", 5.0], ["item_4", 4.0], ["item_3", 3.0]]}
78
+ items = items_paginator.page(2)
79
+ => {:current_page=>2, :total_pages=>2, :total_items=>27, :items=>[["item_2", 2.0], ["item_1", 1.0]]}
80
+ items = items_paginator.page(1, :with_scores => false, :reverse => false)
81
+ => {:current_page=>1, :total_pages=>2, :total_items=>27, :items=>["item_1", "item_2", "item_3", "item_4", "item_5", "item_6", "item_7", "item_8", "item_9", "item_10", "item_11", "item_12", "item_13", "item_14", "item_15", "item_16", "item_17", "item_18", "item_19", "item_20", "item_21", "item_22", "item_23", "item_24", "item_25"]}
82
+ ```
83
+
84
+ ## Paging Options
85
+
86
+ Valid options in the `page` call for paginating a Redis list are:
87
+
88
+ * `:page_size` controls the page size for the call. Default is `RedisPagination.page_size`.
89
+
90
+ Valid options in the `page` call for paginating a Redis sorted set are:
91
+
92
+ * `:page_size` controls the page size for the call. Default is `RedisPagination.page_size`.
93
+ * `:with_scores` controls whether the score is returned along with the item. Default is `true`.
94
+ * `:reverse controls` whether to return items in highest-to-lowest (`true`) or loweest-to-highest order (`false`). Default is `true`.
95
+
96
+ ## Caveats
97
+
98
+ There is a difference between how sorted set data with scores is returned between the 2.x and the 3.x branch of the Ruby Redis client library.
99
+
100
+ If you are using the 2.x branch, you will get items returned with alternating item and score as follows:
101
+
102
+ ```ruby
103
+ {:current_page=>1, :total_pages=>2, :total_items=>27, :items=>["item_27", "27", "item_26", "26", "item_25", "25", "item_24", "24", "item_23", "23", "item_22", "22", "item_21", "21", "item_20", "20", "item_19", "19", "item_18", "18", "item_17", "17", "item_16", "16", "item_15", "15", "item_14", "14", "item_13", "13", "item_12", "12", "item_11", "11", "item_10", "10", "item_9", "9", "item_8", "8", "item_7", "7", "item_6", "6", "item_5", "5", "item_4", "4", "item_3", "3"]}
104
+ ```
105
+
106
+ If you are using the 3.x branch, you will get items returned as an array of arrays, where the internal arrays are the item and score as follows:
107
+
108
+ ```ruby
109
+ {:current_page=>1, :total_pages=>2, :total_items=>27, :items=>[["item_27", 27.0], ["item_26", 26.0], ["item_25", 25.0], ["item_24", 24.0], ["item_23", 23.0], ["item_22", 22.0], ["item_21", 21.0], ["item_20", 20.0], ["item_19", 19.0], ["item_18", 18.0], ["item_17", 17.0], ["item_16", 16.0], ["item_15", 15.0], ["item_14", 14.0], ["item_13", 13.0], ["item_12", 12.0], ["item_11", 11.0], ["item_10", 10.0], ["item_9", 9.0], ["item_8", 8.0], ["item_7", 7.0], ["item_6", 6.0], ["item_5", 5.0], ["item_4", 4.0], ["item_3", 3.0]]}
110
+ ```
111
+
112
+ ## Contributing
113
+
114
+ 1. Fork it
115
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
116
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
117
+ 4. Push to the branch (`git push origin my-new-feature`)
118
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env rake
2
+ require 'bundler/gem_tasks'
3
+
4
+ require 'rspec/core'
5
+ require 'rspec/core/rake_task'
6
+ RSpec::Core::RakeTask.new(:spec) do |spec|
7
+ spec.pattern = FileList['spec/**/*_spec.rb']
8
+ spec.rspec_opts = ['--backtrace']
9
+ # spec.ruby_opts = ['-w']
10
+ end
11
+
12
+ task :default => :spec
@@ -0,0 +1,10 @@
1
+ require 'redis'
2
+
3
+ require 'redis_pagination/configuration'
4
+ require 'redis_pagination/paginator'
5
+ require 'redis_pagination/version'
6
+
7
+ module RedisPagination
8
+ extend Configuration
9
+ extend Paginator
10
+ end
@@ -0,0 +1,29 @@
1
+ module RedisPagination
2
+ # Configuration settings for redis_pagination.
3
+ module Configuration
4
+ # Redis instance.
5
+ attr_accessor :redis
6
+
7
+ # Page size to be used when peforming paging operations.
8
+ attr_writer :page_size
9
+
10
+ # Yield self to be able to configure redis_pagination with block-style configuration.
11
+ #
12
+ # Example:
13
+ #
14
+ # RedisPagination.configure do |configuration|
15
+ # configuration.redis = Redis.new
16
+ # configuration.page_size = 25
17
+ # end
18
+ def configure
19
+ yield self
20
+ end
21
+
22
+ # Page size to be used when peforming paging operations.
23
+ #
24
+ # @return the page size to be used when peforming paging operations or the default of 25 if not set.
25
+ def page_size
26
+ @page_size ||= 25
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ require 'redis_pagination/paginator/list_paginator'
2
+ require 'redis_pagination/paginator/sorted_set_paginator'
3
+
4
+ module RedisPagination
5
+ module Paginator
6
+ # Retrieve a paginator class appropriate for the +key+ in Redis.
7
+ # +key+ must be one of +list+ or +zset+, otherwise an exception
8
+ # will be raised.
9
+ #
10
+ # @params key [String] Redis key
11
+ # @params options [Hash] Options to be passed to the individual paginator class.
12
+ #
13
+ # @return Returns either a +RedisPagination::Paginator::ListPaginator+ or
14
+ # a +RedisPagination::Paginator::SortedSetPaginator+ depending on the
15
+ # type of +key+.
16
+ def paginate(key, options = {})
17
+ type = RedisPagination.redis.type(key)
18
+
19
+ case type
20
+ when 'list'
21
+ RedisPagination::Paginator::ListPaginator.new(key, options)
22
+ when 'zset'
23
+ RedisPagination::Paginator::SortedSetPaginator.new(key, options)
24
+ else
25
+ raise "Pagination is not supported for #{type}"
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,51 @@
1
+ module RedisPagination
2
+ module Paginator
3
+ class ListPaginator
4
+ # Initialize a new instance with a given Redis +key+ and options.
5
+ #
6
+ # @param key [String] Redis list key.
7
+ # @param options [Hash] Options for paginator.
8
+ def initialize(key, options = {})
9
+ @key = key
10
+ end
11
+
12
+ # Return the total number of pages for +key+.
13
+ #
14
+ # @param page_size [int] Page size to calculate total number of pages.
15
+ #
16
+ # @return the total number of pages for +key+.
17
+ def total_pages(page_size = RedisPagination.page_size)
18
+ (RedisPagination.redis.llen(@key) / page_size.to_f).ceil
19
+ end
20
+
21
+ # Return the total number of items for +key+.
22
+ #
23
+ # @return the total number of items for +key+.
24
+ def total_items
25
+ RedisPagination.redis.llen(@key)
26
+ end
27
+
28
+ # Retrieve a page of items for +key+.
29
+ #
30
+ # @param page [int] Page of items to retrieve.
31
+ # @param options [Hash] Options. Valid options are :page_size.
32
+ # :page_size controls the page size for the call. Default is +RedisPagination.page_size+.
33
+ #
34
+ # @return a +Hash+ containing +:current_page+, +:total_pages+, +:total_items+ and +:items+.
35
+ def page(page, options = {})
36
+ current_page = page < 1 ? 1 : page
37
+ index_for_redis = current_page - 1
38
+ page_size = options[:page_size] || RedisPagination.page_size
39
+ starting_offset = index_for_redis * page_size
40
+ ending_offset = (starting_offset + page_size) - 1
41
+
42
+ {
43
+ :current_page => current_page,
44
+ :total_pages => total_pages(page_size),
45
+ :total_items => total_items,
46
+ :items => RedisPagination.redis.lrange(@key, starting_offset, ending_offset)
47
+ }
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,60 @@
1
+ module RedisPagination
2
+ module Paginator
3
+ class SortedSetPaginator
4
+ # Initialize a new instance with a given Redis +key+ and options.
5
+ #
6
+ # @param key [String] Redis list key.
7
+ # @param options [Hash] Options for paginator.
8
+ def initialize(key, options = {})
9
+ @key = key
10
+ end
11
+
12
+ # Return the total number of pages for +key+.
13
+ #
14
+ # @param page_size [int] Page size to calculate total number of pages.
15
+ #
16
+ # @return the total number of pages for +key+.
17
+ def total_pages(page_size = RedisPagination.page_size)
18
+ (RedisPagination.redis.zcard(@key) / page_size.to_f).ceil
19
+ end
20
+
21
+ # Return the total number of items for +key+.
22
+ #
23
+ # @return the total number of items for +key+.
24
+ def total_items
25
+ RedisPagination.redis.zcard(@key)
26
+ end
27
+
28
+ # Retrieve a page of items for +key+.
29
+ #
30
+ # @param page [int] Page of items to retrieve.
31
+ # @param options [Hash] Options. Valid options are :page_size, :with_scores and :reverse.
32
+ # :page_size controls the page size for the call. Default is +RedisPagination.page_size+.
33
+ # :with_scores controls whether the score is returned along with the item. Default is +true+.
34
+ # :reverse controls whether to return items in highest-to-lowest (+true+) or loweest-to-highest order (+false+). Default is +true+.
35
+ #
36
+ # @return a +Hash+ containing +:current_page+, +:total_pages+, +:total_items+ and +:items+.
37
+ def page(page, options = {})
38
+ current_page = page < 1 ? 1 : page
39
+ index_for_redis = current_page - 1
40
+ page_size = options[:page_size] || RedisPagination.page_size
41
+ starting_offset = index_for_redis * page_size
42
+ ending_offset = (starting_offset + page_size) - 1
43
+
44
+ with_scores = options.has_key?(:with_scores) ? options[:with_scores] : true
45
+ reverse = options.has_key?(:reverse) ? options[:reverse] : true
46
+
47
+ {
48
+ :current_page => current_page,
49
+ :total_pages => total_pages(page_size),
50
+ :total_items => total_items,
51
+ :items => if reverse
52
+ RedisPagination.redis.zrevrange(@key, starting_offset, ending_offset, :with_scores => with_scores)
53
+ else
54
+ RedisPagination.redis.zrange(@key, starting_offset, ending_offset, :with_scores => with_scores)
55
+ end
56
+ }
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,3 @@
1
+ module RedisPagination
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/redis_pagination/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ['David Czarnecki']
6
+ gem.email = ['me@davidczarnecki.com']
7
+ gem.description = %q{Simple pagination for Redis lists and sorted sets.}
8
+ gem.summary = %q{Simple pagination for Redis lists and sorted sets.}
9
+ gem.homepage = 'https://github.com/czarneckid/redis_pagination'
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = 'redis_pagination'
15
+ gem.require_paths = ['lib']
16
+ gem.version = RedisPagination::VERSION
17
+
18
+ gem.add_dependency('redis')
19
+ gem.add_development_dependency('rake')
20
+ gem.add_development_dependency('rspec')
21
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe RedisPagination::Configuration do
4
+ describe '#configure' do
5
+ it 'should have default attributes' do
6
+ RedisPagination.configure do |configuration|
7
+ configuration.page_size.should == 25
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ describe RedisPagination::Paginator::ListPaginator do
4
+ describe '#total_pages' do
5
+ it 'should return the correct number of pages' do
6
+ add_items_to_list('items', RedisPagination.page_size + 2)
7
+
8
+ items_paginator = RedisPagination.paginate('items')
9
+ items_paginator.total_pages.should == 2
10
+ end
11
+
12
+ it 'should return the correct number of pages using a different page size' do
13
+ add_items_to_list('items', 25)
14
+
15
+ items_paginator = RedisPagination.paginate('items')
16
+ items_paginator.total_pages(5).should == 5
17
+ end
18
+ end
19
+
20
+ describe '#total_items' do
21
+ it 'should return the correct number of items' do
22
+ add_items_to_list('items', RedisPagination.page_size)
23
+
24
+ items_paginator = RedisPagination.paginate('items')
25
+ items_paginator.total_items.should == RedisPagination.page_size
26
+ end
27
+ end
28
+
29
+ describe '#page' do
30
+ it 'should return the correct page of items' do
31
+ add_items_to_list('items', RedisPagination.page_size + 2)
32
+
33
+ items_paginator = RedisPagination.paginate('items')
34
+ result = items_paginator.page(1)
35
+ result[:items].length.should == RedisPagination.page_size
36
+ result[:items][0].should == 'item_1'
37
+ result[:items][-1].should == 'item_25'
38
+ result[:current_page].should == 1
39
+ result[:total_pages].should == 2
40
+ result[:total_items].should == RedisPagination.page_size + 2
41
+
42
+ result = items_paginator.page(2)
43
+ result[:items].length.should == 2
44
+ result[:items][-1].should == 'item_27'
45
+ result[:current_page].should == 2
46
+ end
47
+
48
+ it 'should return the correct page of items with the options set' do
49
+ add_items_to_list('items', RedisPagination.page_size + 2)
50
+
51
+ items_paginator = RedisPagination.paginate('items')
52
+ result = items_paginator.page(1, :page_size => 5)
53
+ result[:items].length.should == 5
54
+ result[:items][-1].should == 'item_5'
55
+ result[:current_page].should == 1
56
+ result[:total_pages].should == 6
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ describe RedisPagination::Paginator::SortedSetPaginator do
4
+ describe '#total_pages' do
5
+ it 'should return the correct number of pages' do
6
+ add_items_to_sorted_set('items', RedisPagination.page_size + 2)
7
+
8
+ items_paginator = RedisPagination.paginate('items')
9
+ items_paginator.total_pages.should == 2
10
+ end
11
+
12
+ it 'should return the correct number of pages using a different page size' do
13
+ add_items_to_sorted_set('items', 25)
14
+
15
+ items_paginator = RedisPagination.paginate('items')
16
+ items_paginator.total_pages(5).should == 5
17
+ end
18
+ end
19
+
20
+ describe '#total_items' do
21
+ it 'should return the correct number of items' do
22
+ add_items_to_sorted_set('items', RedisPagination.page_size)
23
+
24
+ items_paginator = RedisPagination.paginate('items')
25
+ items_paginator.total_items.should == RedisPagination.page_size
26
+ end
27
+ end
28
+
29
+ describe '#page' do
30
+ it 'should return the correct page of items with the default options' do
31
+ add_items_to_sorted_set('items', RedisPagination.page_size + 2)
32
+
33
+ items_paginator = RedisPagination.paginate('items')
34
+ result = items_paginator.page(1)
35
+ result[:items].length.should == RedisPagination.page_size
36
+ result[:items][0].should == ['item_27', 27.0]
37
+ result[:items][-1].should == ['item_3', 3.0]
38
+
39
+ result = items_paginator.page(2)
40
+ result[:items].length.should == 2
41
+ result[:items][-1].should == ['item_1', 1.0]
42
+ end
43
+
44
+ it 'should return the correct page of items with the options set' do
45
+ add_items_to_sorted_set('items', RedisPagination.page_size + 2)
46
+
47
+ items_paginator = RedisPagination.paginate('items')
48
+ result = items_paginator.page(1, :reverse => false, :with_scores => false)
49
+ result[:items].length.should == RedisPagination.page_size
50
+ result[:items][0].should == 'item_1'
51
+ result[:items][-1].should == 'item_25'
52
+
53
+ result = items_paginator.page(2, :reverse => false, :with_scores => false)
54
+ result[:items].length.should == 2
55
+ result[:items][-1].should == 'item_27'
56
+
57
+ result = items_paginator.page(1, :page_size => 5, :with_scores => false)
58
+ result[:items].length.should == 5
59
+ result[:items][-1].should == 'item_23'
60
+ result[:current_page].should == 1
61
+ result[:total_pages].should == 6
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe RedisPagination::Paginator do
4
+ describe '#paginate' do
5
+ it 'should return a RedisPagination::Paginator::ListPaginator' do
6
+ redis = RedisPagination.redis
7
+ redis.lpush("items", "item_1")
8
+
9
+ RedisPagination.paginate("items").should be_a_kind_of(RedisPagination::Paginator::ListPaginator)
10
+ end
11
+
12
+ it 'should return a RedisPagination::Paginator::SortedSetPaginator' do
13
+ redis = RedisPagination.redis
14
+ redis.zadd("items", 1, "item_1")
15
+
16
+ RedisPagination.paginate("items").should be_a_kind_of(RedisPagination::Paginator::SortedSetPaginator)
17
+ end
18
+
19
+ it 'should raise an exception if trying to paginate a Redis type that cannot be paginated' do
20
+ redis = RedisPagination.redis
21
+ redis.set("items", "item_1")
22
+
23
+ lambda { RedisPagination.paginate("items") }.should raise_error
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'RedisPagination::VERSION' do
4
+ it 'should be the correct version' do
5
+ RedisPagination::VERSION.should == '0.0.1'
6
+ end
7
+ end
@@ -0,0 +1,29 @@
1
+ require 'rspec'
2
+ require 'redis_pagination'
3
+
4
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
5
+
6
+ RSpec.configure do |config|
7
+ config.before(:all) do
8
+ RedisPagination.configure do |configuration|
9
+ configuration.redis = Redis.new(:db => 15)
10
+ configuration.page_size = 25
11
+ end
12
+ end
13
+
14
+ config.before(:each) do
15
+ RedisPagination.redis.flushdb
16
+ end
17
+
18
+ def add_items_to_list(key, items_to_add = RedisPagination.page_size)
19
+ 1.upto(items_to_add) do |index|
20
+ RedisPagination.redis.rpush(key, "item_#{index}")
21
+ end
22
+ end
23
+
24
+ def add_items_to_sorted_set(key, items_to_add = RedisPagination.page_size)
25
+ 1.upto(items_to_add) do |index|
26
+ RedisPagination.redis.zadd(key, index, "item_#{index}")
27
+ end
28
+ end
29
+ end
metadata ADDED
@@ -0,0 +1,119 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: redis_pagination
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - David Czarnecki
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-07-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: redis
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ description: Simple pagination for Redis lists and sorted sets.
63
+ email:
64
+ - me@davidczarnecki.com
65
+ executables: []
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - .gitignore
70
+ - .rspec
71
+ - .rvmrc
72
+ - Gemfile
73
+ - LICENSE
74
+ - README.md
75
+ - Rakefile
76
+ - lib/redis_pagination.rb
77
+ - lib/redis_pagination/configuration.rb
78
+ - lib/redis_pagination/paginator.rb
79
+ - lib/redis_pagination/paginator/list_paginator.rb
80
+ - lib/redis_pagination/paginator/sorted_set_paginator.rb
81
+ - lib/redis_pagination/version.rb
82
+ - redis_pagination.gemspec
83
+ - spec/redis_pagination/configuration_spec.rb
84
+ - spec/redis_pagination/paginator/list_paginator_spec.rb
85
+ - spec/redis_pagination/paginator/sorted_set_paginator_spec.rb
86
+ - spec/redis_pagination/paginator_spec.rb
87
+ - spec/redis_pagination/version_spec.rb
88
+ - spec/spec_helper.rb
89
+ homepage: https://github.com/czarneckid/redis_pagination
90
+ licenses: []
91
+ post_install_message:
92
+ rdoc_options: []
93
+ require_paths:
94
+ - lib
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ! '>='
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ requirements: []
108
+ rubyforge_project:
109
+ rubygems_version: 1.8.24
110
+ signing_key:
111
+ specification_version: 3
112
+ summary: Simple pagination for Redis lists and sorted sets.
113
+ test_files:
114
+ - spec/redis_pagination/configuration_spec.rb
115
+ - spec/redis_pagination/paginator/list_paginator_spec.rb
116
+ - spec/redis_pagination/paginator/sorted_set_paginator_spec.rb
117
+ - spec/redis_pagination/paginator_spec.rb
118
+ - spec/redis_pagination/version_spec.rb
119
+ - spec/spec_helper.rb