yap 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/yap.rb +70 -0
  3. 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: []