yap 1.4.2 → 2.0.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
- SHA1:
3
- metadata.gz: 04100f8b32c43f3281e414e58d2ac06bc736351f
4
- data.tar.gz: 8242bbd5e3b635a25feb3d69264a057d491bffda
2
+ SHA256:
3
+ metadata.gz: 31ce01326f81f7238e39694bc1fc985c61916804f70c8824180b86d55497f4cb
4
+ data.tar.gz: 18283789203a2b51c7af66e50fd328ba7d085f2a36fe2143c52b4bd76e043156
5
5
  SHA512:
6
- metadata.gz: 276f3729be6894e0ce980a4625d3f48f7b4f03730c1a89cc2468441b08c85aba33abb5aa213f2a7e2d92c08a01cb5fb8d6275af2dc65570943e67b806d3d15d8
7
- data.tar.gz: a3424e43274c8bc5c27c6b3ebe11a5a09576a00b07685fadd6c54b64fa9234f9a0f45a9b51ea03121dbeb5180557b6c76bad8b2c54a0f613cf19ee9056467d46
6
+ metadata.gz: dbdd01ead34574cc9d91428c0d7ddec3e0e127de9ceff731d6ae308490c231a0f9a98c6bbe426a35f484b0a0fd00836881fe8ed2f65059d40d9d58568495904b
7
+ data.tar.gz: fdb8383e6ce8f5acbd0546291b782b9a0d0918bb87d6542489bff47140ab3b4ec35e7a1e259c1a587a9b2ef475c6c6c933282b9c39dda988253d5ee57bf233fa
data/README.md CHANGED
@@ -80,22 +80,22 @@ Assuming you included `Yap` into `User`, you can now do something like this:
80
80
  User.paginate(sort: 'gender,date_of_birth', direction: 'desc,asc')
81
81
  # => Sort by gender and date_of_birth (method 2)
82
82
 
83
- User.filter('gender' => 'f')
83
+ User.filtered('gender' => 'f')
84
84
  # => All female users
85
85
 
86
- User.filter(
86
+ User.filtered(
87
87
  'team_id' => '1,2',
88
88
  'gender' => 'm'
89
89
  )
90
90
  # => All males of teams 1 and 2
91
91
 
92
- User.filter(
92
+ User.filtered(
93
93
  # Note that '0...3' means [0,1,2] while '0..3' means [0,1,2,3]
94
94
  'date_of_birth' => '1990-01-01...1991-01-01'
95
95
  )
96
96
  # => All users born in 1990
97
97
 
98
- User.filter('team_id' => '!null')
98
+ User.filtered('team_id' => '!null')
99
99
  # => All users with any team
100
100
 
101
101
  User.paginate(
@@ -164,6 +164,12 @@ If an option cannot be parsed it will raise `Yap::PaginationError` or `Yap::Filt
164
164
 
165
165
  ## Changelog
166
166
 
167
+ ### 2.0
168
+
169
+ * [BREAKING] dropped support for ruby 1.9.x
170
+ * [BREAKING] renamed `filter` method to `filtered` due to a conflict with a new method in `Activerecord::Relation`
171
+ * [BREAKING] dropped support for activerecord 4
172
+
167
173
  ### 1.4
168
174
 
169
175
  * added support for strings and dates with comparison parameters
data/lib/yap.rb CHANGED
@@ -32,6 +32,7 @@ module Yap
32
32
 
33
33
  def self.configure
34
34
  raise ArgumentError, 'No block given.' unless block_given?
35
+
35
36
  yield(DEFAULTS)
36
37
  end
37
38
 
@@ -49,7 +50,7 @@ module Yap
49
50
  #
50
51
  scope :paginate, lambda { |params = {}|
51
52
  page, per_page, order_by = extract_pagination_params(params)
52
- filter(params[:filter]).limit(per_page).offset((page - 1) * per_page).order(order_by)
53
+ filtered(params[:filter]).limit(per_page).offset((page - 1) * per_page).order(order_by)
53
54
  }
54
55
  end
55
56
  end
@@ -1,14 +1,39 @@
1
1
  module ColumnMapper
2
+ attr_reader :_api_aliases
3
+ def api_aliases(aliases = nil, &block)
4
+ raise "Aliases already defined. Make sure to invoke #{__method__} only once." if defined? @_api_aliases
5
+
6
+ api_aliases_hash(aliases) if aliases.present?
7
+
8
+ if block_given?
9
+ raise ArgumentError, 'Only one of the following allowed: Hash of aliases or block.' if aliases.present?
10
+
11
+ @_api_aliases = block
12
+ end
13
+
14
+ nil
15
+ end
16
+
17
+ def api_aliases_hash(aliases)
18
+ raise ArgumentError, "Expected first argument to be a Hash, got #{aliases.class.name}." unless aliases.is_a? Hash
19
+
20
+ @_api_aliases = aliases.symbolize_keys
21
+
22
+ nil
23
+ end
24
+
2
25
  def map_column(name)
3
26
  actual_column = name if column_names.include?(name)
4
27
 
5
- column_alias = if respond_to? :map_name_to_column
6
- map_name_to_column(name)
7
- elsif actual_column.nil? && !Yap::DEFAULTS.disable_warnings
8
- warn "#{self.name} does not implement map_name_to_column. If you do not need column mapping set " \
9
- 'disable_warnings=true'
28
+ column_alias = if _api_aliases.is_a? Hash
29
+ _api_aliases[name.to_sym]
30
+ elsif _api_aliases.is_a? Proc
31
+ _api_aliases.call(name)
10
32
  end
11
33
 
12
- column_alias || actual_column
34
+ result = column_alias || actual_column
35
+ return if result.blank?
36
+
37
+ result.to_s
13
38
  end
14
39
  end
@@ -38,7 +38,7 @@ module Yap
38
38
  end
39
39
 
40
40
  def parse_arrtibute(model, attribute, values)
41
- column = model.map_column(attribute.to_s.downcase)
41
+ column = model.map_column(attribute.to_s)
42
42
  if column.nil?
43
43
  @failed << attribute
44
44
  return
@@ -8,17 +8,17 @@ require 'yap/filter'
8
8
  # be applied through the filter or paginate scope. Multiple filters for the same attribute can be separated by comma,
9
9
  # negative filters have a leading exclamation mark (!) and 'null' will be translated to the NULL value.
10
10
  #
11
- # User.filter('gender' => 'f') # => All female users.
12
- # User.filter(
11
+ # User.filtered('gender' => 'f') # => All female users.
12
+ # User.filtered(
13
13
  # 'team_id' => '1,2',
14
14
  # 'gender' => 'm'
15
15
  # ) # => All males of teams 1 and 2.
16
- # User.filter('team_id' => '!null') # => All users with any team.
16
+ # User.filtered('team_id' => '!null') # => All users with any team.
17
17
  # User.paginate(params) # => Passing parameters in controller (http://localhost/users?filter[gender]=f)
18
18
  # User.paginate(
19
19
  # page: 1,
20
20
  # filter: { 'team' => 'null' }
21
- # ) # => Combining filter and pagination.
21
+ # ) # => Combining filter and pagination.
22
22
  #
23
23
  module Yap
24
24
  module Filterable
@@ -32,7 +32,7 @@ module Yap
32
32
  #
33
33
  # @param [Hash] Attribute/value pairs to filter ( { 'gender' => 'f' } )
34
34
  #
35
- scope :filter, lambda { |params = nil|
35
+ scope :filtered, lambda { |params = nil|
36
36
  if params.blank?
37
37
  all
38
38
  else
@@ -36,6 +36,7 @@ module Yap
36
36
  end
37
37
 
38
38
  raise PaginationError, 'Only positive numbers are accepted.' unless number > 0
39
+
39
40
  number
40
41
  end
41
42
 
@@ -83,7 +84,7 @@ module Yap
83
84
  end
84
85
 
85
86
  def extract_column(sort)
86
- column = map_column(sort.to_s.downcase)
87
+ column = map_column(sort.to_s)
87
88
  raise PaginationError, "Cannot sort by '#{sort}'." unless column
88
89
 
89
90
  column
@@ -92,7 +93,7 @@ module Yap
92
93
  def extract_direction(direction)
93
94
  direction ||= DEFAULTS.direction
94
95
  dir = direction.to_sym.downcase
95
- unless [:asc, :desc].include? dir
96
+ unless %i[asc desc].include? dir
96
97
  raise PaginationError, "'#{direction}' is not a valid direction. Use 'asc' or 'desc'."
97
98
  end
98
99
 
@@ -1,3 +1,3 @@
1
1
  module Yap
2
- VERSION = '1.4.2'.freeze
2
+ VERSION = '2.0.0'.freeze
3
3
  end
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: 1.4.2
4
+ version: 2.0.0
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: 2017-02-16 00:00:00.000000000 Z
11
+ date: 2020-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,48 +16,48 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '4.2'
19
+ version: '5.2'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '6'
22
+ version: '7'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: '4.2'
29
+ version: '5.2'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '6'
32
+ version: '7'
33
33
  - !ruby/object:Gem::Dependency
34
- name: sqlite3
34
+ name: rake
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '1.3'
39
+ version: '11.1'
40
40
  type: :development
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '1.3'
46
+ version: '11.1'
47
47
  - !ruby/object:Gem::Dependency
48
- name: rake
48
+ name: sqlite3
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '11.1'
53
+ version: 1.4.0
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '11.1'
60
+ version: 1.4.0
61
61
  description: Yet another paginator for Ruby on Rails adding pagination and filtering
62
62
  interface to ActiveRecords.
63
63
  email: finn.gloee@1und1.de
@@ -91,17 +91,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
91
91
  requirements:
92
92
  - - ">="
93
93
  - !ruby/object:Gem::Version
94
- version: 1.9.3
94
+ version: '2.3'
95
95
  required_rubygems_version: !ruby/object:Gem::Requirement
96
96
  requirements:
97
97
  - - ">="
98
98
  - !ruby/object:Gem::Version
99
99
  version: '0'
100
100
  requirements: []
101
- rubyforge_project:
102
- rubygems_version: 2.6.10
101
+ rubygems_version: 3.1.2
103
102
  signing_key:
104
103
  specification_version: 4
105
104
  summary: Yet another paginator for Ruby on Rails
106
105
  test_files: []
107
- has_rdoc: