actionpager 0.0.5 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +27 -6
- data/LICENSE +1 -1
- data/README.ja.md +73 -0
- data/README.md +45 -2
- data/RELEASE_DATE +1 -0
- data/VERSION +1 -0
- data/actionpager.gemspec +8 -4
- data/lib/action_pager/pager.rb +44 -3
- data/lib/action_pager/pagination.rb +14 -0
- data/lib/actionpager.rb +1 -1
- data/lib/generators/action_pager/templates/app/views/action_pager/_pager.html.erb +35 -33
- metadata +41 -11
- data/lib/action_pager/version.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99b07f8d0f856295de69abdfe86ec10ca9bfbe04fcf3b9de3b290727e85cb25f
|
4
|
+
data.tar.gz: 5005c6fabe8b1b7dba2ce2787cb36bfaeb4ff44710e635bc8372e54307027f91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 87d74558a627912d6fb96fd5e3558d3109fa204345e9125359532cbacb6fc4536c105707a78c054b14c73fba4f23bd0d2764e2649f4dec06b52f4867f022eca4
|
7
|
+
data.tar.gz: ff05082a9c4cd7d02e6a9dafb80be0e6710f88b78ae52613212cd8c346ae18bf122dba495eec0f10a9df38dd9be5b5d7150ceddfb8b95cab630d4fdf963b0a17
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,22 +1,43 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
actionpager (0.0
|
4
|
+
actionpager (0.1.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
|
10
|
-
|
9
|
+
activemodel (6.0.3.4)
|
10
|
+
activesupport (= 6.0.3.4)
|
11
|
+
activerecord (6.0.3.4)
|
12
|
+
activemodel (= 6.0.3.4)
|
13
|
+
activesupport (= 6.0.3.4)
|
14
|
+
activesupport (6.0.3.4)
|
15
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
16
|
+
i18n (>= 0.7, < 2)
|
17
|
+
minitest (~> 5.1)
|
18
|
+
tzinfo (~> 1.1)
|
19
|
+
zeitwerk (~> 2.2, >= 2.2.2)
|
20
|
+
concurrent-ruby (1.1.7)
|
21
|
+
i18n (1.8.5)
|
22
|
+
concurrent-ruby (~> 1.0)
|
23
|
+
minitest (5.14.2)
|
24
|
+
rake (13.0.1)
|
25
|
+
sqlite3 (1.4.2)
|
26
|
+
thread_safe (0.3.6)
|
27
|
+
tzinfo (1.2.7)
|
28
|
+
thread_safe (~> 0.1)
|
29
|
+
zeitwerk (2.4.0)
|
11
30
|
|
12
31
|
PLATFORMS
|
13
32
|
ruby
|
14
33
|
|
15
34
|
DEPENDENCIES
|
16
35
|
actionpager!
|
17
|
-
|
36
|
+
activerecord (>= 5.2)
|
37
|
+
bundler (>= 1.16)
|
18
38
|
minitest (~> 5.0)
|
19
|
-
rake (
|
39
|
+
rake (>= 12.3.3)
|
40
|
+
sqlite3 (~> 1.4)
|
20
41
|
|
21
42
|
BUNDLED WITH
|
22
|
-
1.
|
43
|
+
2.1.4
|
data/LICENSE
CHANGED
data/README.ja.md
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
# Action Pager
|
2
|
+
|
3
|
+
コレクション(Array, ActiveRecord::Relationなど)で使用できるシンプルで軽量なページネーターです。
|
4
|
+
|
5
|
+
## 特徴
|
6
|
+
|
7
|
+
- シンプルな`pager`オブジェクトがページネーションで使用されます。
|
8
|
+
- 元のコレクションを汚染しません。
|
9
|
+
- 他のGem (Kaminari, Will Paginateなど)に比べるとメモリ消費が非常に少ないです。
|
10
|
+
- カスタマイズが簡単です。
|
11
|
+
- ページネーターのビューとヘルパのファイルがアプリ内に生成されます。
|
12
|
+
- 用途に応じてカスタマイズできます。
|
13
|
+
|
14
|
+
## インストール
|
15
|
+
|
16
|
+
アプリケーションのGemfile以下の行を追加します。
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
gem "actionpager"
|
20
|
+
```
|
21
|
+
|
22
|
+
以下を実行します。
|
23
|
+
|
24
|
+
$ bundle
|
25
|
+
|
26
|
+
または、以下のようにインストールします。
|
27
|
+
|
28
|
+
$ gem install actionpager
|
29
|
+
|
30
|
+
Railsで使用するには以下のコマンドを実行します
|
31
|
+
|
32
|
+
$ rails g action_pager:install
|
33
|
+
|
34
|
+
2つのファイルが生成され、カスタマイズすることができます。
|
35
|
+
|
36
|
+
- `app/helpers/action_pager/pagination_helper.rb`
|
37
|
+
- `app/views/action_pager/_pager.html.erb`
|
38
|
+
|
39
|
+
標準では、Bootstrap 4のページネーションのスタイルを使用しています。
|
40
|
+
必要であれば、生成されたファイルをカスタマイズしてください。
|
41
|
+
|
42
|
+
## 使い方
|
43
|
+
|
44
|
+
シンプルな配列で使う場合
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
collection = (1..128).to_a
|
48
|
+
pager = ActionPager::Pager.new(collection, page: 3, per: 10)
|
49
|
+
|
50
|
+
pager.current_collection # => [21, ..., 30]
|
51
|
+
```
|
52
|
+
|
53
|
+
ActiveRecordのコレクションで使う場合
|
54
|
+
|
55
|
+
```ruby
|
56
|
+
resources = Book.recent_published
|
57
|
+
@pager = ActionPager::Pager.new(resources, page: 2, per: 25)
|
58
|
+
@books = pager.current_collection
|
59
|
+
```
|
60
|
+
|
61
|
+
Railsのビューでページャーを表示するには、以下のようにコードを記述します。
|
62
|
+
|
63
|
+
```erb
|
64
|
+
<%= render_pager @pager %>
|
65
|
+
```
|
66
|
+
|
67
|
+
## License
|
68
|
+
|
69
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
70
|
+
|
71
|
+
## Code of Conduct
|
72
|
+
|
73
|
+
Everyone interacting in the Actionpager project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/actionpager/blob/master/CODE_OF_CONDUCT.md).
|
data/README.md
CHANGED
@@ -1,6 +1,15 @@
|
|
1
1
|
# Action Pager
|
2
2
|
|
3
|
-
Simple and
|
3
|
+
Simple, lightweight and easy to customize paginator for collections (Array, ActiveRecord::Relation etc.)
|
4
|
+
|
5
|
+
# Features
|
6
|
+
|
7
|
+
- A simple `pager` object is used for pagination.
|
8
|
+
- It does not pollute the original collection.
|
9
|
+
- Consumes less memory than other gems (i.e. Kaminari, Will Paginate etc.).
|
10
|
+
- Easy to customize.
|
11
|
+
- Paginator view and helper files are generated in your app.
|
12
|
+
- You can customize for your own purpose.
|
4
13
|
|
5
14
|
## Installation
|
6
15
|
|
@@ -18,9 +27,43 @@ Or install it yourself as:
|
|
18
27
|
|
19
28
|
$ gem install actionpager
|
20
29
|
|
30
|
+
Use with Rails
|
31
|
+
|
32
|
+
$ rails g action_pager:install
|
33
|
+
|
34
|
+
It generates two files and you can customize.
|
35
|
+
|
36
|
+
- `app/helpers/action_pager/pagination_helper.rb`
|
37
|
+
- `app/views/action_pager/_pager.html.erb`
|
38
|
+
|
39
|
+
By default, it uses Bootstrap 4 pagination for styles.
|
40
|
+
If you need, you can easily customize the generated file.
|
41
|
+
|
21
42
|
## Usage
|
22
43
|
|
23
|
-
|
44
|
+
Use with a simple array:
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
collection = (1..128).to_a
|
48
|
+
pager = ActionPager::Pager.new(collection, page: 3, per: 10)
|
49
|
+
|
50
|
+
pager.current_collection # => [21, ..., 30]
|
51
|
+
```
|
52
|
+
|
53
|
+
Use with an ActiveRecord collection
|
54
|
+
|
55
|
+
```ruby
|
56
|
+
resources = Book.recent_published
|
57
|
+
@pager = ActionPager::Pager.new(resources, page: 2, per: 25)
|
58
|
+
@books = pager.current_collection
|
59
|
+
```
|
60
|
+
|
61
|
+
To show the pager in your Rails app's view, add code like below:
|
62
|
+
|
63
|
+
```erb
|
64
|
+
<%= render_pager @pager %>
|
65
|
+
```
|
66
|
+
|
24
67
|
|
25
68
|
## License
|
26
69
|
|
data/RELEASE_DATE
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2020-10-12
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
data/actionpager.gemspec
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
|
2
2
|
lib = File.expand_path("../lib", __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
|
4
|
+
version = File.read(File.expand_path("VERSION", __dir__)).strip
|
5
|
+
date = File.read(File.expand_path("RELEASE_DATE", __dir__)).strip
|
5
6
|
|
6
7
|
Gem::Specification.new do |spec|
|
7
8
|
spec.name = "actionpager"
|
8
|
-
spec.version =
|
9
|
+
spec.version = version
|
10
|
+
spec.date = date
|
9
11
|
spec.authors = ["Ryo Hashimoto"]
|
10
12
|
spec.email = ["ryohashimoto@gmail.com"]
|
11
13
|
|
@@ -21,7 +23,9 @@ Gem::Specification.new do |spec|
|
|
21
23
|
end
|
22
24
|
spec.require_paths = ["lib"]
|
23
25
|
|
24
|
-
spec.add_development_dependency "bundler", "
|
25
|
-
spec.add_development_dependency "rake", "
|
26
|
+
spec.add_development_dependency "bundler", ">= 1.16"
|
27
|
+
spec.add_development_dependency "rake", ">= 12.3.3"
|
26
28
|
spec.add_development_dependency "minitest", "~> 5.0"
|
29
|
+
spec.add_development_dependency "activerecord", ">= 5.2"
|
30
|
+
spec.add_development_dependency "sqlite3", "~> 1.4"
|
27
31
|
end
|
data/lib/action_pager/pager.rb
CHANGED
@@ -20,7 +20,8 @@ module ActionPager
|
|
20
20
|
current_collection
|
21
21
|
end
|
22
22
|
|
23
|
-
def
|
23
|
+
def collection_at(page)
|
24
|
+
offset = offset_at(page)
|
24
25
|
if collection.is_a?(Array)
|
25
26
|
collection.drop(offset).first(per_page)
|
26
27
|
else # for ActiveRecord::Relation and other OR mapper collections
|
@@ -28,8 +29,48 @@ module ActionPager
|
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
31
|
-
def
|
32
|
-
(current_page
|
32
|
+
def current_collection
|
33
|
+
collection_at(current_page)
|
34
|
+
end
|
35
|
+
|
36
|
+
def first_collection
|
37
|
+
collection_at(first_page)
|
38
|
+
end
|
39
|
+
|
40
|
+
def last_collection
|
41
|
+
collection_at(last_page)
|
42
|
+
end
|
43
|
+
|
44
|
+
def prev_collection
|
45
|
+
collection_at(prev_page)
|
46
|
+
end
|
47
|
+
|
48
|
+
def next_collection
|
49
|
+
collection_at(next_page)
|
50
|
+
end
|
51
|
+
|
52
|
+
def offset_at(page)
|
53
|
+
(page - 1) * per_page
|
54
|
+
end
|
55
|
+
|
56
|
+
def current_offset
|
57
|
+
offset_at(current_page)
|
58
|
+
end
|
59
|
+
|
60
|
+
def first_offset
|
61
|
+
offset_at(first_page)
|
62
|
+
end
|
63
|
+
|
64
|
+
def last_offset
|
65
|
+
offset_at(last_page)
|
66
|
+
end
|
67
|
+
|
68
|
+
def prev_offset
|
69
|
+
offset_at(prev_page)
|
70
|
+
end
|
71
|
+
|
72
|
+
def next_offset
|
73
|
+
offset_at(next_page)
|
33
74
|
end
|
34
75
|
|
35
76
|
def collection_count
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module ActionPager
|
2
|
+
module Pagination
|
3
|
+
DEFAULTS = { page: 1, per: 5 }.freeze
|
4
|
+
|
5
|
+
def pager_for(collection, options={})
|
6
|
+
opts = DEFAULTS.merge(options.reject { |_k, v| v.to_i.zero? })
|
7
|
+
ActionPager::Pager.new(
|
8
|
+
collection,
|
9
|
+
page: opts[:page].to_i,
|
10
|
+
per: opts[:per].to_i
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/actionpager.rb
CHANGED
@@ -1,37 +1,39 @@
|
|
1
|
-
<
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
<li>
|
9
|
-
<%= link_to url_for_page(page: pager.prev_page), rel: "prev" do %>
|
10
|
-
‹
|
11
|
-
<% end -%>
|
12
|
-
</li>
|
13
|
-
<% end -%>
|
14
|
-
<% (1..(pager.last_page)).to_a.each do |page| -%>
|
15
|
-
<% if pager.current_page == page -%>
|
16
|
-
<li class="active">
|
17
|
-
<%= link_to page, url_for_page(page: page) -%>
|
1
|
+
<nav>
|
2
|
+
<ul class="pagination">
|
3
|
+
<% unless pager.first_page? -%>
|
4
|
+
<li class="page-item">
|
5
|
+
<%= link_to url_for_page(page: pager.first_page), class: "page-link" do %>
|
6
|
+
«
|
7
|
+
<% end -%>
|
18
8
|
</li>
|
19
|
-
|
20
|
-
|
21
|
-
|
9
|
+
<li class="page-item">
|
10
|
+
<%= link_to url_for_page(page: pager.prev_page), class: "page-link", rel: "prev" do %>
|
11
|
+
‹
|
12
|
+
<% end -%>
|
22
13
|
</li>
|
23
14
|
<% end -%>
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
15
|
+
<% pager.near_pages.each do |page| -%>
|
16
|
+
<% if pager.current_page == page -%>
|
17
|
+
<li class="page-item active">
|
18
|
+
<%= link_to page, url_for_page(page: page), class: "page-link" -%>
|
19
|
+
</li>
|
20
|
+
<% else -%>
|
21
|
+
<li class="page-item">
|
22
|
+
<%= link_to page, url_for_page(page: page), class: "page-link" -%>
|
23
|
+
</li>
|
29
24
|
<% end -%>
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
25
|
+
<% end -%>
|
26
|
+
<% unless pager.last_page? -%>
|
27
|
+
<li class="page-item">
|
28
|
+
<%= link_to url_for_page(page: pager.next_page), rel: "next", class: "page-link" do -%>
|
29
|
+
›
|
30
|
+
<% end -%>
|
31
|
+
</li>
|
32
|
+
<li class="page-item">
|
33
|
+
<%= link_to url_for_page(page: pager.last_page), class: "page-link" do -%>
|
34
|
+
»
|
35
|
+
<% end -%>
|
36
|
+
</li>
|
37
|
+
<% end -%>
|
38
|
+
</ul>
|
39
|
+
</nav>
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: actionpager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Hashimoto
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.16'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.16'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 12.3.3
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 12.3.3
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +52,34 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '5.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: activerecord
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '5.2'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '5.2'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: sqlite3
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.4'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.4'
|
55
83
|
description: Simple and lightweight paginator for collections (Array, ActiveRecord::Relation
|
56
84
|
etc.)
|
57
85
|
email:
|
@@ -65,11 +93,14 @@ files:
|
|
65
93
|
- Gemfile
|
66
94
|
- Gemfile.lock
|
67
95
|
- LICENSE
|
96
|
+
- README.ja.md
|
68
97
|
- README.md
|
98
|
+
- RELEASE_DATE
|
69
99
|
- Rakefile
|
100
|
+
- VERSION
|
70
101
|
- actionpager.gemspec
|
71
102
|
- lib/action_pager/pager.rb
|
72
|
-
- lib/action_pager/
|
103
|
+
- lib/action_pager/pagination.rb
|
73
104
|
- lib/actionpager.rb
|
74
105
|
- lib/generators/action_pager/install_generator.rb
|
75
106
|
- lib/generators/action_pager/templates/app/helpers/action_pager/pagination_helper.rb
|
@@ -93,8 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
124
|
- !ruby/object:Gem::Version
|
94
125
|
version: '0'
|
95
126
|
requirements: []
|
96
|
-
|
97
|
-
rubygems_version: 2.7.6
|
127
|
+
rubygems_version: 3.1.4
|
98
128
|
signing_key:
|
99
129
|
specification_version: 4
|
100
130
|
summary: Simple and lightweight paginator
|