sort_n_params 1.1.0 → 1.2.4

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