simple_paginate 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 52213695afadde9c4e6914a10e89a69e3172fd50
4
- data.tar.gz: 843b0371f94a788fd2d66c697e3ea39d0a83bfab
3
+ metadata.gz: 9ccfd558c3db4487692dce7e3e619020b59bb135
4
+ data.tar.gz: 4ceef5a49453b3fdf4662f1b2c5c3ae85a8b14ad
5
5
  SHA512:
6
- metadata.gz: 2d87801708e54fa73201e6216c0aa79b95c661b29d06ff76627a1544a1f65cd30dc77eec7f1147e54e338aa337cf99924bc766ba69450c95e9826971e0405d3c
7
- data.tar.gz: 21527728172629e242b9118b61b8cecf08246af18b453eaa151407ccb43ceb81701db74604d64679be04a290070db1cb6d516af239ba0454729453ff64872ae9
6
+ metadata.gz: 4bb9548797d7d4dbedaf3a6a97247e7a3949b5023f05674d0a9440a972c5cc9a7ac4eaefccd30854558eab988c8308ab147d40beb35add414a363607cdbcd4cd
7
+ data.tar.gz: ed638195243abb718b5a0ba4000ba22fef39b1a77a7a4a7454f449f7cb832606ecb21b86a2f4dbe039fa358e2c7edf8594476520ce6d63fce0635b04c78afaf0
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.1.5
5
+ - 2.2.1
6
+
7
+ gemfile:
8
+ gemfiles/active_record_42.gemfile
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # simple_paginate
2
2
 
3
+ [![Build Status](https://travis-ci.org/xinminlabs/simple_paginate.png)](https://travis-ci.org/xinminlabs/simple_paginate)
4
+
3
5
  Simple pagination solution for previous and next page navigation.
4
6
 
5
7
  ## Why simple_paginate
@@ -39,6 +41,9 @@ it fetches one more record (11 = 10 + 1) to calculate if there is a next page re
39
41
  ```
40
42
  ## perform a paginate query:
41
43
  @users = User.paginate(:page => params[:page])
44
+
45
+ # or, use page and per scope:
46
+ @users = User.page(params[:page]).per(25)
42
47
  ```
43
48
 
44
49
  ### Helpers
@@ -75,3 +80,12 @@ SimplePaginate includes a handy template generator, To edit your paginator, run
75
80
  ```
76
81
  % rails g simple_paginate:views
77
82
  ```
83
+
84
+ ### Contribute
85
+
86
+ To run the test suite locally:
87
+
88
+ ```
89
+ % bundle install
90
+ % rake spec:active_record_42
91
+ ```
@@ -1,26 +1,27 @@
1
+ require 'simple_paginate/models/active_record_model_extension'
2
+
1
3
  module SimplePaginate
2
4
  module ActiveRecordExtension
3
5
  extend ActiveSupport::Concern
4
6
 
5
- included do
6
- def self.paginate(options = {})
7
- options = options.dup
8
- page = options.delete(:page) || 1
9
- per_page = options.delete(:per_page) || SimplePaginate.config.default_per_page
10
-
11
- offset(per_page * (page - 1)).limit(per_page + 1).extending do
12
- def current_page
13
- (offset_value / (limit_value - 1)) + 1
14
- end
15
-
16
- def first_page?
17
- current_page == 1
18
- end
7
+ module ClassMethods
8
+ def inherited(kls)
9
+ super
10
+ kls.send(:include, SimplePaginate::ActiveRecordModelExtension)
11
+ end
12
+ end
19
13
 
20
- def last_page?
21
- length < limit_value
22
- end
14
+ included do
15
+ class << self
16
+ def inherited_with_simple_paginate(kls)
17
+ inherited_without_simple_paginate kls
18
+ kls.send(:include, SimplePaginate::ActiveRecordModelExtension)
23
19
  end
20
+ alias_method_chain :inherited, :simple_paginate
21
+ end
22
+
23
+ self.descendants.each do |kls|
24
+ kls.send(:include, SimplePaginate::ActiveRecordModelExtension)
24
25
  end
25
26
  end
26
27
  end
@@ -0,0 +1,53 @@
1
+ module SimplePaginate
2
+ module ActiveRecordModelExtension
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ def self.paginate(options = {})
7
+ options = options.dup
8
+ page = options.delete(:page) || 1
9
+ per_page = options.delete(:per_page) || SimplePaginate.config.default_per_page
10
+
11
+ offset(per_page * (page - 1)).limit(per_page + 1).extending do
12
+ def current_page
13
+ (offset_value / (limit_value - 1)) + 1
14
+ end
15
+
16
+ def first_page?
17
+ current_page == 1
18
+ end
19
+
20
+ def last_page?
21
+ loaded? ? @actual_records.length < limit_value : count(:all) < limit_value
22
+ end
23
+
24
+ def per(num)
25
+ if (n = num.to_i) < 0 || !(/^\d/ =~ num.to_s)
26
+ self
27
+ elsif n.zero?
28
+ limit(n + 1)
29
+ else
30
+ limit(n + 1).offset(offset_value / (limit_value - 1) + 1)
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def exec_queries
37
+ @actual_records = super
38
+ @records = if @actual_records.length > 1 && @actual_records.length == limit_value
39
+ @actual_records.first(limit_value - 1)
40
+ else
41
+ @actual_records
42
+ end
43
+ @records
44
+ end
45
+ end
46
+ end
47
+
48
+ def self.page(num = nil)
49
+ self.paginate(page: num)
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,3 +1,3 @@
1
1
  module SimplePaginate
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -35,6 +35,41 @@ describe SimplePaginate::ActiveRecordExtension do
35
35
 
36
36
  it { expect(subject).to be_empty }
37
37
  end
38
+ end
39
+
40
+ describe '#page' do
41
+ subject { User.page(page) }
42
+
43
+ context 'page 1' do
44
+ let(:page) { 1 }
45
+
46
+ it { expect(subject.first.name).to eq('user001') }
47
+ end
48
+
49
+ context 'page 2' do
50
+ let(:page) { 2 }
51
+
52
+ it { expect(subject.first.name).to eq('user026') }
53
+ end
54
+
55
+ context 'page < 1' do
56
+ let(:page) { 0 }
57
+
58
+ it { expect(subject.first.name).to eq('user001') }
59
+ end
60
+
61
+ context 'page > max page' do
62
+ let(:page) { 5 }
63
+
64
+ it { expect(subject).to be_empty }
65
+ end
66
+ end
67
+
68
+ describe '#per' do
69
+ context 'page 1 per 5' do
70
+ subject { User.page(1).per(5) }
71
+ it { expect(subject.last.name).to eq('user006') }
72
+ end
38
73
  end
39
74
 
40
75
  describe '#current_page' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_paginate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yong Gu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-15 00:00:00.000000000 Z
11
+ date: 2015-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -102,6 +102,7 @@ extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
104
  - ".gitignore"
105
+ - ".travis.yml"
105
106
  - Gemfile
106
107
  - LICENSE
107
108
  - LICENSE.txt
@@ -116,7 +117,7 @@ files:
116
117
  - app/views/simple_paginate/_prev_page.html.erb
117
118
  - app/views/simple_paginate/_prev_page.html.haml
118
119
  - app/views/simple_paginate/_prev_page.html.slim
119
- - config/locales/simple_paginate.yml
120
+ - config/locales/simple_paginate.en.yml
120
121
  - gemfiles/.bundle/config
121
122
  - gemfiles/active_record_42.gemfile
122
123
  - gemfiles/active_record_42.gemfile.lock
@@ -130,6 +131,7 @@ files:
130
131
  - lib/simple_paginate/helpers/paginator.rb
131
132
  - lib/simple_paginate/helpers/tags.rb
132
133
  - lib/simple_paginate/models/active_record_extension.rb
134
+ - lib/simple_paginate/models/active_record_model_extension.rb
133
135
  - lib/simple_paginate/railtie.rb
134
136
  - lib/simple_paginate/version.rb
135
137
  - simple_paginate.gemspec