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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 65438859688c9289931f4447f73b1939a03058d98360878cb297b62d5c7c2ae4
4
- data.tar.gz: 6bf07b3f4bac11774805bb5e2ebc010211b8d0a5b793af7d0d93cf8a7044617f
3
+ metadata.gz: 0d4ac056564f23114d90e35df4b967adb86fa41078a7ea283b0194bc4185770e
4
+ data.tar.gz: 3d5ef6cb54e2332663f866fb64b4f4129ce71dcb759e7a07d81591f4305d9947
5
5
  SHA512:
6
- metadata.gz: ba8e96b6e58098196af8d86789e9b90c43212c5e2727dcd97aa72dc31d90a9231de96de39cf29aab6ab2c50b6c12074ba633120f139a4f45302b8a7efd493bf0
7
- data.tar.gz: '026306599ab142c755abb914c495fb57df5f01bf76a18a503c400c11c8b806186fb54d1b11028bf8ab5316151ddb740b2f22b25787f365800ccba1bbf2bf7911'
6
+ metadata.gz: d3958ff1ccc8458fa980a3372f362663be02b5a812641fc55f2e3c8fcc290038c152045538236290f2fb530bb4fd510c9af45e8c6a35c50c4fb14c4bc3fd1172
7
+ data.tar.gz: 0f17254708d77572faa51439bafebac85d8b7276a7b060b78bc1e917b9d7a06095edc534983be0508dada603b432dd4e9eb2cde400235ada34cad226d47c19f9
data/Gemfile CHANGED
@@ -1,6 +1,8 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
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,6 +1,8 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
3
5
 
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
 
6
- task :default => :spec
8
+ task default: :spec
@@ -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
- concat(
10
- link_to(data.sort_params, class: SortNParams.badge_main_class) do
11
- "<b>#{data.position}</b><i class='#{data.icon}'></i>".html_safe
12
- end
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'.freeze
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, clear_params: @clear_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
- @sort_params[:order][column_index + 1] == 'asc' ? 'desc' : 'asc'
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{|x| @clear_params[:order].delete_at(column_index) }
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
- if @params[:order] && @params[:order].detect { |e| e == @column } == @column && @params[:order][ @params[:order].find_index(@column) + 1 ]
73
- @column == @params[:order].detect { |e| e == @column } && @params[:order][ @params[:order].find_index(@column) + 1 ] == 'asc' ? SortNParams.sort_asc_class : SortNParams.sort_desc_class
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.send :include, SortNParams::SortHelpers
21
+ ActionView::Base.include SortNParams::SortHelpers
20
22
  end
21
23
  end
22
24
  end
@@ -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.1.0'
4
- s.date = '2019-05-07'
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('rails'.freeze, ['>= 5.0'])
35
- s.add_dependency('nokogiri'.freeze, ['>= 0'])
36
- s.add_dependency('rake'.freeze, ['>= 12.3.3'])
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
- let(:test_class) do
5
- CustomTable = Struct.new(:custom_field) do
6
- include SortNParams::Scopes
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
- context 'when you pass only an ordering array' do
11
- subject { test_class.parse_array(["test_field","asc"]) }
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
- it "builds the array correctly without the table_name param passed" do
14
- expect(subject).to eq("custom_tables.test_field asc")
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
- context 'when you pass both ordering array and table name' do
19
- subject { test_class.parse_array(["test_field","asc"], "another_table_name" ) }
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
- it "builds the array correctly with the table_name param passed" do
22
- expect(subject).to eq("another_table_name.test_field asc")
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'sort_n_params'
2
4
 
3
5
  RSpec.describe Sortable do
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.1.0
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: 2019-05-07 00:00:00.000000000 Z
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: rails
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: '5.0'
90
- type: :runtime
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: '5.0'
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: '0'
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.0.3
217
+ rubygems_version: 3.3.7
163
218
  signing_key:
164
219
  specification_version: 4
165
220
  summary: Sort N Params
data/.travis.yml DELETED
@@ -1,9 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.6.1
4
- before_install:
5
- - gem update --system
6
- - gem install bundler
7
- script:
8
- - bundle install
9
- - bundle exec rake spec