sort_n_params 1.1.0 → 1.2.4
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 +4 -4
- data/Gemfile +4 -2
- data/Rakefile +5 -3
- data/lib/sort_n_params/concerns/scopes.rb +3 -1
- data/lib/sort_n_params/sort_helpers.rb +24 -10
- data/lib/sort_n_params/sortable.rb +26 -7
- data/lib/sort_n_params.rb +3 -1
- data/sort_n_params.gemspec +12 -6
- data/spec/concerns/scopes_spec.rb +50 -12
- data/spec/sortable_spec.rb +2 -0
- data/spec/spec_helper.rb +9 -0
- metadata +64 -9
- data/.travis.yml +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d4ac056564f23114d90e35df4b967adb86fa41078a7ea283b0194bc4185770e
|
4
|
+
data.tar.gz: 3d5ef6cb54e2332663f866fb64b4f4129ce71dcb759e7a07d81591f4305d9947
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3958ff1ccc8458fa980a3372f362663be02b5a812641fc55f2e3c8fcc290038c152045538236290f2fb530bb4fd510c9af45e8c6a35c50c4fb14c4bc3fd1172
|
7
|
+
data.tar.gz: 0f17254708d77572faa51439bafebac85d8b7276a7b060b78bc1e917b9d7a06095edc534983be0508dada603b432dd4e9eb2cde400235ada34cad226d47c19f9
|
data/Gemfile
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
source 'https://rubygems.org'
|
4
|
+
|
5
|
+
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
4
6
|
|
5
7
|
# Specify your gem's dependencies in invoice_client.gemspec
|
6
8
|
gemspec
|
data/Rakefile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'active_support/concern'
|
2
4
|
|
3
5
|
module SortNParams
|
@@ -7,7 +9,7 @@ module SortNParams
|
|
7
9
|
def sorting_order(ordering_array, table_name = nil)
|
8
10
|
return all if ordering_array.blank?
|
9
11
|
|
10
|
-
all.order(parse_array(ordering_array, table_name))
|
12
|
+
all.order(sanitize_sql_for_order(parse_array(ordering_array, table_name)))
|
11
13
|
end
|
12
14
|
|
13
15
|
def parse_array(ordering_array, table_name = nil)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SortNParams
|
2
4
|
module SortHelpers
|
3
5
|
def sortable(column, title = nil)
|
@@ -6,17 +8,29 @@ module SortNParams
|
|
6
8
|
concat(
|
7
9
|
link_to(data.title, data.sort_params, class: data.css)
|
8
10
|
)
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
) if data.position.present?
|
14
|
-
concat(
|
15
|
-
link_to(data.clear_params, class: SortNParams.badge_secondary_class) do
|
16
|
-
"<i class='#{SortNParams.sort_clear_class}'></i>".html_safe
|
17
|
-
end
|
18
|
-
) if data.clear_params.present?
|
11
|
+
|
12
|
+
concat_position(data) if data.position.present?
|
13
|
+
|
14
|
+
concat_clear_params(data) if data.clear_params.present?
|
19
15
|
end
|
20
16
|
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def concat_position(data)
|
21
|
+
concat(
|
22
|
+
link_to(data.sort_params, class: SortNParams.badge_main_class) do
|
23
|
+
"<b>#{data.position}</b><i class='#{data.icon}'></i>".html_safe
|
24
|
+
end
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
def concat_clear_params(data)
|
29
|
+
concat(
|
30
|
+
link_to(data.clear_params, class: SortNParams.badge_secondary_class) do
|
31
|
+
"<i class='#{SortNParams.sort_clear_class}'></i>".html_safe
|
32
|
+
end
|
33
|
+
)
|
34
|
+
end
|
21
35
|
end
|
22
36
|
end
|
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'ostruct'
|
2
4
|
require 'sort_n_params'
|
3
5
|
|
4
6
|
class Sortable
|
5
|
-
DEFAULT_ORDER = 'asc'
|
7
|
+
DEFAULT_ORDER = 'asc'
|
6
8
|
|
7
9
|
def initialize(column, title, params)
|
8
10
|
@column = column
|
@@ -34,13 +36,18 @@ class Sortable
|
|
34
36
|
end
|
35
37
|
|
36
38
|
def build_data
|
37
|
-
OpenStruct.new(css: set_css, icon: set_icon, title: @title, position: @column_position, sort_params: @sort_params,
|
39
|
+
OpenStruct.new(css: set_css, icon: set_icon, title: @title, position: @column_position, sort_params: @sort_params,
|
40
|
+
clear_params: @clear_params)
|
38
41
|
end
|
39
42
|
|
40
43
|
def revert_order
|
41
44
|
column_index = @sort_params[:order].find_index(@column)
|
42
|
-
direction = @column == @sort_params[:order].detect { |e| e == @column } &&
|
43
|
-
|
45
|
+
direction = if @column == @sort_params[:order].detect { |e| e == @column } &&
|
46
|
+
@sort_params[:order][column_index + 1] == 'asc'
|
47
|
+
'desc'
|
48
|
+
else
|
49
|
+
'asc'
|
50
|
+
end
|
44
51
|
@sort_params[:order][column_index + 1] = direction
|
45
52
|
end
|
46
53
|
|
@@ -51,7 +58,7 @@ class Sortable
|
|
51
58
|
|
52
59
|
def set_clear_params
|
53
60
|
column_index = @clear_params[:order].find_index(@column)
|
54
|
-
2.times{|
|
61
|
+
2.times { |_x| @clear_params[:order].delete_at(column_index) }
|
55
62
|
end
|
56
63
|
|
57
64
|
def reset_clear_params
|
@@ -69,8 +76,20 @@ class Sortable
|
|
69
76
|
end
|
70
77
|
|
71
78
|
def set_icon
|
72
|
-
|
73
|
-
|
79
|
+
return unless order_param_exists?
|
80
|
+
|
81
|
+
if @column == order_column && @params[:order][ @params[:order].find_index(@column) + 1 ] == 'asc'
|
82
|
+
SortNParams.sort_asc_class
|
83
|
+
else
|
84
|
+
SortNParams.sort_desc_class
|
74
85
|
end
|
75
86
|
end
|
87
|
+
|
88
|
+
def order_param_exists?
|
89
|
+
@params[:order] && @column == order_column && @params[:order][ @params[:order].find_index(@column) + 1 ]
|
90
|
+
end
|
91
|
+
|
92
|
+
def order_column
|
93
|
+
@params[:order].detect { |e| e == @column }
|
94
|
+
end
|
76
95
|
end
|
data/lib/sort_n_params.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'sort_n_params/sort_helpers'
|
2
4
|
require 'sort_n_params/sortable'
|
3
5
|
require 'rails/engine'
|
@@ -16,7 +18,7 @@ module SortNParams
|
|
16
18
|
|
17
19
|
initializer 'sort_n_params.initialize' do |_app|
|
18
20
|
ActiveSupport.on_load :action_view do
|
19
|
-
ActionView::Base.
|
21
|
+
ActionView::Base.include SortNParams::SortHelpers
|
20
22
|
end
|
21
23
|
end
|
22
24
|
end
|
data/sort_n_params.gemspec
CHANGED
@@ -1,14 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
Gem::Specification.new do |s|
|
2
4
|
s.name = 'sort_n_params'
|
3
|
-
s.version = '1.
|
4
|
-
s.date = '
|
5
|
+
s.version = '1.2.4'
|
6
|
+
s.date = '2022-06-23'
|
5
7
|
s.summary = 'Sort N Params'
|
6
8
|
s.description = 'Make your html <tables> sortables with N <th> parameters this gem.'
|
7
9
|
s.authors = ['Juan Francisco Ferrari']
|
8
10
|
s.email = 'juannferrari@gmail.com'
|
9
11
|
s.require_paths = ['lib']
|
10
12
|
s.files = [
|
11
|
-
'.travis.yml',
|
12
13
|
'Gemfile',
|
13
14
|
'LICENSE',
|
14
15
|
'Rakefile',
|
@@ -24,14 +25,19 @@ Gem::Specification.new do |s|
|
|
24
25
|
s.homepage =
|
25
26
|
'https://github.com/JuannFerrari/sort_n_params'
|
26
27
|
s.license = 'MIT'
|
28
|
+
s.required_ruby_version = Gem::Requirement.new('>= 2.6.0')
|
27
29
|
|
28
30
|
s.add_development_dependency 'bundler'
|
29
31
|
s.add_development_dependency 'factory_bot', '~> 4.0'
|
32
|
+
s.add_development_dependency 'pry', '~> 0.13.1'
|
30
33
|
s.add_development_dependency 'pry-byebug'
|
31
34
|
s.add_development_dependency 'rake', '>= 12.3.3'
|
32
35
|
s.add_development_dependency 'rspec', '~> 3.0'
|
36
|
+
s.add_development_dependency 'rubocop', '~> 1.30'
|
37
|
+
s.add_development_dependency 'rubocop-rails'
|
38
|
+
s.add_development_dependency 'sqlite3'
|
33
39
|
|
34
|
-
s.add_dependency('
|
35
|
-
s.add_dependency('
|
36
|
-
s.add_dependency('rake'
|
40
|
+
s.add_dependency('nokogiri', ['>= 0'])
|
41
|
+
s.add_dependency('rails', ['>= 7.0'])
|
42
|
+
s.add_dependency('rake', ['>= 12.3.3'])
|
37
43
|
end
|
@@ -1,25 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'sort_n_params/concerns/scopes'
|
4
|
+
require 'active_record'
|
5
|
+
|
6
|
+
class CustomTable < ActiveRecord::Base
|
7
|
+
include SortNParams::Scopes
|
8
|
+
end
|
2
9
|
|
3
10
|
RSpec.describe SortNParams::Scopes do
|
4
|
-
|
5
|
-
|
6
|
-
|
11
|
+
before(:all) { create_tables }
|
12
|
+
after(:all) { drop_tables }
|
13
|
+
|
14
|
+
def create_tables
|
15
|
+
ActiveRecord::Base.connection.create_table :custom_tables do |t|
|
16
|
+
t.text :test_field
|
7
17
|
end
|
8
18
|
end
|
9
19
|
|
10
|
-
|
11
|
-
|
20
|
+
def drop_tables
|
21
|
+
ActiveRecord::Base.connection.drop_table :custom_tables
|
22
|
+
end
|
23
|
+
|
24
|
+
let(:test_class) do
|
25
|
+
CustomTable
|
26
|
+
end
|
12
27
|
|
13
|
-
|
14
|
-
|
28
|
+
describe '#sorting_order' do
|
29
|
+
context 'when you pass only the sorting field with direction asc' do
|
30
|
+
subject { test_class.sorting_order(%w[test_field asc]) }
|
31
|
+
|
32
|
+
it 'builds an order with that field and direction' do
|
33
|
+
expect(subject.explain).to include('ORDER BY custom_tables.test_field asc')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'when you pass only the sorting field direction desc' do
|
38
|
+
subject { test_class.sorting_order(%w[test_field desc]) }
|
39
|
+
|
40
|
+
it 'builds an order with that field and direction' do
|
41
|
+
expect(subject.explain).to include('ORDER BY custom_tables.test_field desc')
|
42
|
+
end
|
15
43
|
end
|
16
44
|
end
|
17
45
|
|
18
|
-
|
19
|
-
|
46
|
+
describe '#parse_array' do
|
47
|
+
context 'when you pass only an ordering array' do
|
48
|
+
subject { test_class.parse_array(%w[test_field asc]) }
|
49
|
+
|
50
|
+
it 'builds the array correctly without the table_name param passed' do
|
51
|
+
expect(subject).to eq('custom_tables.test_field asc')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'when you pass both ordering array and table name' do
|
56
|
+
subject { test_class.parse_array(%w[test_field asc], 'another_table_name') }
|
20
57
|
|
21
|
-
|
22
|
-
|
58
|
+
it 'builds the array correctly with the table_name param passed' do
|
59
|
+
expect(subject).to eq('another_table_name.test_field asc')
|
60
|
+
end
|
23
61
|
end
|
24
62
|
end
|
25
|
-
end
|
63
|
+
end
|
data/spec/sortable_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,7 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'factory_bot'
|
2
4
|
require 'sort_n_params/sortable'
|
5
|
+
require 'active_record'
|
6
|
+
require 'sqlite3'
|
3
7
|
|
4
8
|
RSpec.configure do |config|
|
5
9
|
config.include FactoryBot::Syntax::Methods
|
6
10
|
FactoryBot.find_definitions
|
11
|
+
|
12
|
+
ActiveRecord::Base.establish_connection(
|
13
|
+
adapter: 'sqlite3',
|
14
|
+
database: ':memory:'
|
15
|
+
)
|
7
16
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sort_n_params
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juan Francisco Ferrari
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-06-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '4.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.13.1
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.13.1
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: pry-byebug
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,19 +95,47 @@ dependencies:
|
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '3.0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
98
|
+
name: rubocop
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.30'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1.30'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubocop-rails
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
86
114
|
requirements:
|
87
115
|
- - ">="
|
88
116
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
90
|
-
type: :
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
91
119
|
prerelease: false
|
92
120
|
version_requirements: !ruby/object:Gem::Requirement
|
93
121
|
requirements:
|
94
122
|
- - ">="
|
95
123
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: sqlite3
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
97
139
|
- !ruby/object:Gem::Dependency
|
98
140
|
name: nokogiri
|
99
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +150,20 @@ dependencies:
|
|
108
150
|
- - ">="
|
109
151
|
- !ruby/object:Gem::Version
|
110
152
|
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rails
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '7.0'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '7.0'
|
111
167
|
- !ruby/object:Gem::Dependency
|
112
168
|
name: rake
|
113
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,7 +184,6 @@ executables: []
|
|
128
184
|
extensions: []
|
129
185
|
extra_rdoc_files: []
|
130
186
|
files:
|
131
|
-
- ".travis.yml"
|
132
187
|
- Gemfile
|
133
188
|
- LICENSE
|
134
189
|
- Rakefile
|
@@ -152,14 +207,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
152
207
|
requirements:
|
153
208
|
- - ">="
|
154
209
|
- !ruby/object:Gem::Version
|
155
|
-
version:
|
210
|
+
version: 2.6.0
|
156
211
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
157
212
|
requirements:
|
158
213
|
- - ">="
|
159
214
|
- !ruby/object:Gem::Version
|
160
215
|
version: '0'
|
161
216
|
requirements: []
|
162
|
-
rubygems_version: 3.
|
217
|
+
rubygems_version: 3.3.7
|
163
218
|
signing_key:
|
164
219
|
specification_version: 4
|
165
220
|
summary: Sort N Params
|