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.
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: []