yap 1.4.2 → 2.0.0

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 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: