yap 0.0.1
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 +7 -0
- data/lib/yap.rb +70 -0
- metadata +73 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6a6e5086f1ca35d0aaf0fadbc47d90b07734bd2b
|
4
|
+
data.tar.gz: 42d6f6430addc6accecfb55958c689528aa11131
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 015d9317569706f7fe83ac1e877b4c750480fd05e09d79f048df30083b505448f5d6f021d588dae713a0fc7bdb89d7fca278989e56996af33e90f5fd32fa22bc
|
7
|
+
data.tar.gz: 3c98bd37fa8c4988dec2e2cd8a4cdac610f3c179f92d4c884e35f46e14559403bfdc708407f8f564577197fad4dfea9436d25dff35033ae694929e2336c807ed
|
data/lib/yap.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
|
3
|
+
##
|
4
|
+
# Include into model to make it paginatable. The paginate scope takes a hash as only parameter. All options are optional
|
5
|
+
# and can be combined arbitrarily.
|
6
|
+
#
|
7
|
+
# User.paginate # => Page 1 with default order and size.
|
8
|
+
# User.paginate(params) # => Use this in controller to pass query parameters.
|
9
|
+
# User.paginate(
|
10
|
+
# page: 1,
|
11
|
+
# per_page: 10,
|
12
|
+
# sort: :id,
|
13
|
+
# direction: :asc
|
14
|
+
# ) # => Invocation with custom options.
|
15
|
+
#
|
16
|
+
# @param [Hash] the parameters used for pagination (:page, :per_page, :sort, :direction)
|
17
|
+
#
|
18
|
+
module Yap
|
19
|
+
extend ActiveSupport::Concern
|
20
|
+
|
21
|
+
DEFAULTS = Struct.new(:page, :per_page, :sort, :direction)
|
22
|
+
.new(1, 10, :id, :asc)
|
23
|
+
|
24
|
+
def self.configure
|
25
|
+
raise ArgumentError, 'No block given.' unless block_given?
|
26
|
+
yield(DEFAULTS)
|
27
|
+
end
|
28
|
+
|
29
|
+
included do
|
30
|
+
scope :paginate, -> (params = {}) {
|
31
|
+
page, per_page, sort, direction = extract_pagination_params(params)
|
32
|
+
limit(per_page).offset((page-1)*per_page).order(sort => direction)
|
33
|
+
}
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def self.extract_pagination_params(params)
|
38
|
+
page = params[:page].present? ? extract_number(params[:page]) : DEFAULTS.page
|
39
|
+
per_page = params[:per_page].present? ? extract_number(params[:per_page]) : DEFAULTS.per_page
|
40
|
+
sort = params[:sort].present? ? extract_sort(params[:sort]) : DEFAULTS.sort
|
41
|
+
direction = params[:direction].present? ? extract_direction(params[:direction]) : DEFAULTS.direction
|
42
|
+
|
43
|
+
return page, per_page, sort, direction
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.extract_number(number)
|
47
|
+
begin
|
48
|
+
number = Integer(number)
|
49
|
+
rescue
|
50
|
+
raise PaginationError.new("'#{number}' is not a valid number.")
|
51
|
+
end
|
52
|
+
|
53
|
+
raise PaginationError.new('Only positive numbers are accepted.') unless number > 0
|
54
|
+
number
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.extract_sort(sort)
|
58
|
+
raise PaginationError.new("Cannot sort by '#{sort}'.") unless column_names.include? sort.to_s
|
59
|
+
sort
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.extract_direction(direction)
|
63
|
+
dir = direction.downcase.to_sym
|
64
|
+
raise PaginationError.new("'#{direction}' is not a valid direction. Use 'asc' or 'desc'.") unless [:asc, :desc].include? dir
|
65
|
+
dir
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
class PaginationError < StandardError; end
|
70
|
+
end
|
metadata
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: yap
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Finn Glöe
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-12-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activerecord
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sqlite3
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.3'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.3'
|
41
|
+
description: Yet another paginator for Ruby on Rails, which adds a paginate scope
|
42
|
+
to your ActiveRecords.
|
43
|
+
email: finn.gloee@1und1.de
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- lib/yap.rb
|
49
|
+
homepage: http://rubygems.org/gems/yap
|
50
|
+
licenses:
|
51
|
+
- GPL v2
|
52
|
+
metadata: {}
|
53
|
+
post_install_message:
|
54
|
+
rdoc_options: []
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
requirements: []
|
68
|
+
rubyforge_project:
|
69
|
+
rubygems_version: 2.4.3
|
70
|
+
signing_key:
|
71
|
+
specification_version: 4
|
72
|
+
summary: Yet another paginator for Ruby on Rails
|
73
|
+
test_files: []
|