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 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