yap 0.0.2 → 0.1.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 +4 -4
  2. data/lib/yap.rb +22 -11
  3. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 652e0f8b08ebf6db3a3d4abcef18ff18c2b396dd
4
- data.tar.gz: bc167399e7a104e1a2976c321e234a1ae6ef0e73
3
+ metadata.gz: a6132b923e8420349b899bae89b59facfd4b3e3f
4
+ data.tar.gz: a951a562f70ad37f9ab830f4816a028c08da99da
5
5
  SHA512:
6
- metadata.gz: 1ddb459b81ce8a96002c204820ddda8ded839280f9033c943dc48b98b44533593e829c48d5671faa8c72eef95ff47171b46b8a93fec34cb1807179d8fab21262
7
- data.tar.gz: 9f27ba7825b48da80fd3a2d520c3709498aa99a8da7a53b7530c7c0bb5a89490128e232b1caacf06ccccd7b9148a1168a76b5baa255270e632ce34fac706fa6d
6
+ metadata.gz: ca05f1a2d8d221441b19bd30936a57868b726263f00425feac3ac8aa2f3075508c3b36cc148419a0c4ae0e91ce8f87f78d9e20da5e51c8d01b629b29a3cf4e26
7
+ data.tar.gz: 195d596aae8ef0dcf931642b68049fce688220ef00b4a92609e513a8287c41c49b2cd040927c7730af09a2d98baaa2cc9beb371ee76abbceb9644979869b458e
data/lib/yap.rb CHANGED
@@ -18,8 +18,8 @@ require 'active_support/concern'
18
18
  module Yap
19
19
  extend ActiveSupport::Concern
20
20
 
21
- DEFAULTS = Struct.new(:page, :per_page, :sort, :direction)
22
- .new(1, 10, :id, :asc)
21
+ DEFAULTS = Struct.new(:page, :per_page, :sort, :direction, :disable_warnings)
22
+ .new(1, 10, 'id', 'ASC', false)
23
23
 
24
24
  def self.configure
25
25
  raise ArgumentError, 'No block given.' unless block_given?
@@ -30,8 +30,8 @@ module Yap
30
30
  extend ClassMethods
31
31
 
32
32
  scope :paginate, -> (params = {}) {
33
- page, per_page, sort, direction = extract_pagination_params(params)
34
- limit(per_page).offset((page-1)*per_page).order(sort => direction)
33
+ page, per_page, column, direction = extract_pagination_params(params)
34
+ limit(per_page).offset((page-1)*per_page).order("#{column} #{direction}")
35
35
  }
36
36
 
37
37
  private
@@ -39,7 +39,7 @@ module Yap
39
39
  def self.extract_pagination_params(params)
40
40
  page = extract_number(params[:page], DEFAULTS.page)
41
41
  per_page = extract_number(params[:per_page], DEFAULTS.per_page)
42
- sort = extract_sort(params[:sort])
42
+ sort = extract_column(params[:sort])
43
43
  direction = extract_direction(params[:direction])
44
44
 
45
45
  return page, per_page, sort, direction
@@ -56,17 +56,28 @@ module Yap
56
56
  number
57
57
  end
58
58
 
59
- def self.extract_sort(sort)
60
- sort = sort.present? ? sort : DEFAULTS.sort
61
- raise PaginationError.new("Cannot sort by '#{sort}'.") unless column_names.include? sort.to_s
62
- sort
59
+ def self.extract_column(sort)
60
+ column = map_column(sort.present? ? sort.to_s.downcase : DEFAULTS.sort)
61
+ raise PaginationError.new("Cannot sort by '#{sort}'.") unless column
62
+ column
63
63
  end
64
64
 
65
65
  def self.extract_direction(direction)
66
- dir = direction.present? ? direction.downcase.to_sym : DEFAULTS.direction
67
- raise PaginationError.new("'#{direction}' is not a valid direction. Use 'asc' or 'desc'.") unless [:asc, :desc].include? dir
66
+ dir = direction.present? ? direction.to_s.upcase : DEFAULTS.direction
67
+ raise PaginationError.new("'#{direction}' is not a valid direction. Use 'asc' or 'desc'.") unless %w[ASC DESC].include? dir
68
68
  dir
69
69
  end
70
+
71
+ private
72
+
73
+ def self.map_column(name)
74
+ begin
75
+ map_name_to_column(name)
76
+ rescue
77
+ warn "#{self.name} does not implement map_name_to_column. If you do not need column mapping set disable_warnings=true" unless DEFAULTS.disable_warnings
78
+ nil
79
+ end || (column_names.include?(name) ? name : nil)
80
+ end
70
81
  end
71
82
 
72
83
  module ClassMethods
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Finn Glöe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-09 00:00:00.000000000 Z
11
+ date: 2015-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -66,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
66
66
  version: '0'
67
67
  requirements: []
68
68
  rubyforge_project:
69
- rubygems_version: 2.4.3
69
+ rubygems_version: 2.4.5
70
70
  signing_key:
71
71
  specification_version: 4
72
72
  summary: Yet another paginator for Ruby on Rails