simple_paginate 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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