sortable-for-rails 1.0.0 → 1.2.2

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
2
  SHA256:
3
- metadata.gz: a2d4bbc350e99a47d9970db6c37b5d89e47bf6a0f26fd4fccd1e8dec71757d84
4
- data.tar.gz: 966cc6ebac6496a4632c886830068c7e9e30a3bead23344f94ead732e75369a1
3
+ metadata.gz: 8241cfda491ab92c3630f541f3ebe420c30dfa477a08eeb84924adacd5499c80
4
+ data.tar.gz: 63fb69082b1f418680e4c1292eea9ae5c327bd5b9a11b796ed4f08f0883267d1
5
5
  SHA512:
6
- metadata.gz: d07d2354242f3cea174566598705962d955189f86facb9a6c0691e4b49ed3ebc65b1ca73df48ee77d6fb894cc78a9cb8e588c4dc3cb2545ddb537e7ddca44324
7
- data.tar.gz: 4d9c3a6b109ba6d9b180843e73f2c24d90cb5d381ecb81ccb60cc1a0f8e3b0b11a9ca5e46742efa9e2f1b388ca8d0dd3fe1aa76c20ad02cfe1d6cb2fbbd78ba3
6
+ metadata.gz: 9164aa52cf51722b00543e5f407cc9776fad8ea054d64277851824308f8dfa3831c652759e8f9a5936d4a62424a21e7b7d6ec0e3b1937710f29cba4ab3518fcd
7
+ data.tar.gz: 499dbd023f27937514ee211dcc1817c13a40503b2b2f3516111080e0b3b0223a52336439ce1126e59f3d8c70864998d0a177f99f3fc65f871643925c73478874
data/README.md CHANGED
@@ -27,6 +27,15 @@ class User < ApplicationRecord
27
27
 
28
28
  sortable :id, :updated_at, :email
29
29
  sortable :profile_name, -> { joins(:profile) }, column: "profiles.name"
30
+ sortable :status, method: :sortable_status
31
+
32
+ # we can sort in memory also if needed (for data not stored directly in DB)
33
+ # just remember on performance impact
34
+ def self.sortable_status(direction)
35
+ results = all.sort_by { |user| user.status }
36
+ results.reverse! if direction == :desc
37
+ results
38
+ end
30
39
 
31
40
  end
32
41
  ```
@@ -10,7 +10,9 @@ module Sortable::SortableHelper
10
10
  new_direction = current_direction.to_s == "asc" ? "desc" : "asc"
11
11
  end
12
12
 
13
- link_to(url_for(sort: column, direction: new_direction), options) do
13
+ url = url_for params.permit!.merge(sort: column, direction: new_direction)
14
+
15
+ link_to(url, options) do
14
16
  label = block_given? ? capture(&block) : column
15
17
  sortable_label_for(label, current, current_direction, scope)
16
18
  end
data/lib/sortable.rb CHANGED
@@ -12,32 +12,34 @@ module Sortable
12
12
  @sortable
13
13
  end
14
14
 
15
- def sorting(column, direction = :asc)
16
- Sortable::Sort.new(self, column, direction).all
15
+ def sorting(column, direction = :asc, *args)
16
+ Sortable::Sort.new(self, column, direction, *args).all
17
17
  end
18
18
  end
19
19
  end
20
20
 
21
21
  class Column
22
- attr_reader :name, :column, :scope
23
- def initialize(name, scope = nil, column: name)
22
+ attr_reader :name, :column, :scope, :method
23
+ def initialize(name, scope = nil, column: name, method: nil)
24
24
  @name = name
25
25
  @column = column
26
+ @method = method
26
27
  @scope = scope
27
28
  end
28
29
  end
29
30
 
30
31
  class Sort
31
- attr_reader :scope
32
+ attr_reader :scope, :args
32
33
 
33
- def initialize(scope, column, direction)
34
+ def initialize(scope, column, direction, *args)
34
35
  @scope = scope
35
36
  @column = column
36
37
  @direction = direction
38
+ @args = args
37
39
  end
38
40
 
39
41
  def columns
40
- @columns = create_columns
42
+ @columns ||= create_columns
41
43
  end
42
44
 
43
45
  def all
@@ -45,7 +47,14 @@ module Sortable
45
47
 
46
48
  if column
47
49
  all = all.merge(column.scope) if column.scope.present?
48
- all = all.order("#{column.column} #{direction}")
50
+
51
+ if column.method
52
+ all = all.public_send(column.method, direction.to_sym, *args)
53
+ elsif column.column.is_a?(Symbol)
54
+ all = all.order(column.column => direction)
55
+ else
56
+ all = all.order("#{column.column} #{direction}")
57
+ end
49
58
  end
50
59
 
51
60
  all
@@ -62,8 +71,16 @@ module Sortable
62
71
  def create_columns
63
72
  scope.sortable.flat_map do |columns|
64
73
  columns = [columns] unless columns.all? { |column| column.is_a?(Symbol) }
65
- columns.map { |column| Column.new(*column) }
74
+ columns.map { |column| create_column(column) }
66
75
  end.group_by { |column| column.name.to_s }
67
76
  end
77
+
78
+ def create_column(column)
79
+ if column.respond_to?(:last) && column.last.is_a?(Hash)
80
+ Column.new(*column[0...-1], **column.last)
81
+ else
82
+ Column.new(*column)
83
+ end
84
+ end
68
85
  end
69
86
  end
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = "sortable-for-rails"
6
- spec.version = "1.0.0"
6
+ spec.version = "1.2.2"
7
7
  spec.authors = ["Grzegorz Derebecki"]
8
8
  spec.email = ["grzegorz.derebecki@fdb.pl"]
9
9
 
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
27
27
 
28
28
  spec.add_dependency "rails", ">= 5.2"
29
29
  spec.add_development_dependency "bundler", "~> 2.0"
30
- spec.add_development_dependency "rake", "~> 10.0"
30
+ spec.add_development_dependency "rake", ">= 12.3.3"
31
31
  spec.add_development_dependency "minitest", "~> 5.0"
32
32
 
33
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sortable-for-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Grzegorz Derebecki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-08-16 00:00:00.000000000 Z
11
+ date: 2021-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -42,16 +42,16 @@ dependencies:
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: 12.3.3
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: 12.3.3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: minitest
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -109,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  requirements: []
112
- rubygems_version: 3.0.3
112
+ rubygems_version: 3.1.2
113
113
  signing_key:
114
114
  specification_version: 4
115
115
  summary: Allow easy sorting tables tables in rails