actionpager 0.0.5 → 0.1.0

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
  SHA256:
3
- metadata.gz: f802c6a8d4b24b2acdef2cd58992d777ea2474ca6c87f32762f5d6a0b5ecd78b
4
- data.tar.gz: 26306561adbdcf858e9ee23205806c157380a17fa3295dbf3d0ec0083013f2e1
3
+ metadata.gz: 99b07f8d0f856295de69abdfe86ec10ca9bfbe04fcf3b9de3b290727e85cb25f
4
+ data.tar.gz: 5005c6fabe8b1b7dba2ce2787cb36bfaeb4ff44710e635bc8372e54307027f91
5
5
  SHA512:
6
- metadata.gz: a684cc104adbff58048cb94eab079699eb33c555e75cf82fef2dfb9ef53f6514994b1383acfb8da4a12b6f66c6e38d0a0d4819d46345762ca672455e94435065
7
- data.tar.gz: edbf8cd64f0ef6f6bd42b6403dcc63adfaaad97a12552ac64322f40eb1cadcd55fbc0da5d3e0f856048b8bb37db4cbb1227b4aa58c393b7e62272e22847e1b8a
6
+ metadata.gz: 87d74558a627912d6fb96fd5e3558d3109fa204345e9125359532cbacb6fc4536c105707a78c054b14c73fba4f23bd0d2764e2649f4dec06b52f4867f022eca4
7
+ data.tar.gz: ff05082a9c4cd7d02e6a9dafb80be0e6710f88b78ae52613212cd8c346ae18bf122dba495eec0f10a9df38dd9be5b5d7150ceddfb8b95cab630d4fdf963b0a17
data/.gitignore CHANGED
@@ -6,3 +6,4 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ *.gem
@@ -1,22 +1,43 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- actionpager (0.0.3)
4
+ actionpager (0.1.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
- minitest (5.11.3)
10
- rake (10.5.0)
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
- bundler (~> 1.16)
36
+ activerecord (>= 5.2)
37
+ bundler (>= 1.16)
18
38
  minitest (~> 5.0)
19
- rake (~> 10.0)
39
+ rake (>= 12.3.3)
40
+ sqlite3 (~> 1.4)
20
41
 
21
42
  BUNDLED WITH
22
- 1.17.1
43
+ 2.1.4
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2018 Ryo Hashimoto
3
+ Copyright (c) 2018-2020 Ryo Hashimoto
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -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 lightweight paginator for collections (Array, ActiveRecord::Relation etc.)
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
- TODO: Write usage instructions here
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
 
@@ -0,0 +1 @@
1
+ 2020-10-12
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -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
- require "action_pager/version"
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 = ActionPager::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", "~> 1.16"
25
- spec.add_development_dependency "rake", "~> 10.0"
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
@@ -20,7 +20,8 @@ module ActionPager
20
20
  current_collection
21
21
  end
22
22
 
23
- def current_collection
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 offset
32
- (current_page - 1) * per_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
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "action_pager/version"
4
3
  require "action_pager/pager"
4
+ require "action_pager/pagination"
@@ -1,37 +1,39 @@
1
- <ul class="pagination">
2
- <% unless pager.first_page? -%>
3
- <li>
4
- <%= link_to url_for_page(page: pager.first_page) do %>
5
- &laquo;
6
- <% end -%>
7
- </li>
8
- <li>
9
- <%= link_to url_for_page(page: pager.prev_page), rel: "prev" do %>
10
- &lsaquo;
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
+ &laquo;
7
+ <% end -%>
18
8
  </li>
19
- <% else -%>
20
- <li>
21
- <%= link_to page, url_for_page(page: page) -%>
9
+ <li class="page-item">
10
+ <%= link_to url_for_page(page: pager.prev_page), class: "page-link", rel: "prev" do %>
11
+ &lsaquo;
12
+ <% end -%>
22
13
  </li>
23
14
  <% end -%>
24
- <% end -%>
25
- <% unless pager.last_page? -%>
26
- <li>
27
- <%= link_to url_for_page(page: pager.next_page), rel: "next" do -%>
28
- &rsaquo;
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
- </li>
31
- <li>
32
- <%= link_to url_for_page(page: pager.last_page) do -%>
33
- &raquo;
34
- <% end -%>
35
- </li>
36
- <% end -%>
37
- </ul>
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
+ &rsaquo;
30
+ <% end -%>
31
+ </li>
32
+ <li class="page-item">
33
+ <%= link_to url_for_page(page: pager.last_page), class: "page-link" do -%>
34
+ &raquo;
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.5
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: 2018-11-08 00:00:00.000000000 Z
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: '10.0'
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: '10.0'
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/version.rb
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
- rubyforge_project:
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
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActionPager
4
- VERSION = "0.0.5"
5
- end