sort_n_params 1.0.4 → 1.2.3

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: 1699472fa73140a298c054ba1cf30a75c1f08a38cfa991d2b0d738bed8b707a0
4
- data.tar.gz: fa259494066c8118ce818a88169b771631550bd8b20dbf39c3966230abc24c54
3
+ metadata.gz: 5546d17da19b3cfb15a26cb4cd14fc684545af3f743ea175d28947b0511f9758
4
+ data.tar.gz: 449f77325f1afb0e71ba03276bb07d095e9d00348882d50c69788e4c4902685d
5
5
  SHA512:
6
- metadata.gz: 4b7d0e7c550936f4f85a2312935b138490dcce4f252240465b28eac3e4c7268fa87a089607824af3165934abdb1a8e59fdb2f5412e8684c45e6b8980fc666814
7
- data.tar.gz: 8f406482183c6f110e9eb13a30a0fbbfe85052c5c235b4e0d3366d879632de367c561b06b984184cef0ca01f737aa81a1f2288d2506663beb477d5e061b69eee
6
+ metadata.gz: 350e519cb57c72ba5b7541f8802bba8436a57905b8adb2c293c09d1892c50e23c646a5280f1469a0c5b56e34929bc9c745d5c08a348224c95ff588d526691afc
7
+ data.tar.gz: 0a314e2fcdc8998dfe14fa42ceead8114474f5dccf101112bc7243d265ba56d3f22dd2f8b6e6f00d0111fa90b8d3281e3eeb8e6dd7d653abec71f9976d596ea3
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
@@ -14,9 +16,18 @@ module SortNParams
14
16
  table = table_name || name.tableize
15
17
 
16
18
  ordering_array.each_slice(2).map do |order, direction|
17
- "#{table}.#{order} #{direction}"
19
+ table_custom, order_custom = get_field_order(table, order)
20
+ "#{table_custom}.#{order_custom} #{direction}"
18
21
  end.join(', ')
19
22
  end
23
+
24
+ private
25
+
26
+ def get_field_order(table, order)
27
+ return [table, order] if order.split('.').one?
28
+
29
+ order.split('.')
30
+ end
20
31
  end
21
32
  end
22
33
  end
@@ -1,8 +1,36 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SortNParams
2
4
  module SortHelpers
3
5
  def sortable(column, title = nil)
4
6
  data = Sortable.new(column, title, params).call
5
- link_to "#{data.title} <i class='#{data.icon}'".html_safe, data.sort_params, class: data.css
7
+ capture do
8
+ concat(
9
+ link_to(data.title, data.sort_params, class: data.css)
10
+ )
11
+
12
+ concat_position(data) if data.position.present?
13
+
14
+ concat_clear_params(data) if data.clear_params.present?
15
+ end
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
+ )
6
34
  end
7
35
  end
8
36
  end
@@ -1,5 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ostruct'
4
+ require 'sort_n_params'
5
+
1
6
  class Sortable
2
- DEFAULT_ORDER = 'asc'.freeze
7
+ DEFAULT_ORDER = 'asc'
3
8
 
4
9
  def initialize(column, title, params)
5
10
  @column = column
@@ -10,7 +15,15 @@ class Sortable
10
15
 
11
16
  def call
12
17
  add_previous_order unless @params[:order].nil?
13
- @sort_params[:order].include?(@column) ? revert_order : add_order
18
+ if @sort_params[:order].include?(@column)
19
+ revert_order
20
+ set_clear_params
21
+ set_position
22
+ else
23
+ add_order
24
+ reset_clear_params
25
+ end
26
+
14
27
  build_data
15
28
  end
16
29
 
@@ -19,16 +32,22 @@ class Sortable
19
32
  def add_previous_order
20
33
  @sort_params[:order] << @params[:order]
21
34
  @sort_params[:order].flatten!
35
+ @clear_params = Marshal.load(Marshal.dump(@sort_params))
22
36
  end
23
37
 
24
38
  def build_data
25
- OpenStruct.new(css: set_css, icon: set_icon, title: @title, 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)
26
41
  end
27
42
 
28
43
  def revert_order
29
44
  column_index = @sort_params[:order].find_index(@column)
30
- direction = @column == @sort_params[:order].detect { |e| e == @column } &&
31
- @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
32
51
  @sort_params[:order][column_index + 1] = direction
33
52
  end
34
53
 
@@ -37,6 +56,19 @@ class Sortable
37
56
  @sort_params[:order] << DEFAULT_ORDER
38
57
  end
39
58
 
59
+ def set_clear_params
60
+ column_index = @clear_params[:order].find_index(@column)
61
+ 2.times { |_x| @clear_params[:order].delete_at(column_index) }
62
+ end
63
+
64
+ def reset_clear_params
65
+ @clear_params = nil
66
+ end
67
+
68
+ def set_position
69
+ @column_position = @sort_params[:order].each_slice(2).map(&:first).find_index(@column) + 1
70
+ end
71
+
40
72
  def set_css
41
73
  return nil unless @params[:order]
42
74
 
@@ -44,8 +76,20 @@ class Sortable
44
76
  end
45
77
 
46
78
  def set_icon
47
- if @params[:order] && @params[:order].detect { |e| e == @column } == @column && @params[:order][ @params[:order].find_index(@column) + 1 ]
48
- @column == @params[:order].detect { |e| e == @column } && @params[:order][ @params[:order].find_index(@column) + 1 ] == 'asc' ? 'fa fa-sort-up' : 'fa fa-sort-desc'
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
49
85
  end
50
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
51
95
  end
data/lib/sort_n_params.rb CHANGED
@@ -1,14 +1,24 @@
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'
4
6
 
5
7
  module SortNParams
8
+ class << self
9
+ attr_accessor :badge_main_class,
10
+ :badge_secondary_class,
11
+ :sort_asc_class,
12
+ :sort_desc_class,
13
+ :sort_clear_class
14
+ end
15
+
6
16
  class Engine < ::Rails::Engine
7
17
  require 'sort_n_params/concerns/scopes'
8
18
 
9
19
  initializer 'sort_n_params.initialize' do |_app|
10
20
  ActiveSupport.on_load :action_view do
11
- ActionView::Base.send :include, SortNParams::SortHelpers
21
+ ActionView::Base.include SortNParams::SortHelpers
12
22
  end
13
23
  end
14
24
  end
@@ -1,38 +1,42 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Gem::Specification.new do |s|
2
4
  s.name = 'sort_n_params'
3
- s.version = '1.0.4'
4
- s.date = '2019-05-07'
5
- s.summary = "Sort N Params"
6
- s.description = "Make your html <tables> sortables with N <th> parameters this gem."
7
- s.authors = ["Juan Francisco Ferrari"]
5
+ s.version = '1.2.3'
6
+ s.date = '2022-06-22'
7
+ s.summary = 'Sort N Params'
8
+ s.description = 'Make your html <tables> sortables with N <th> parameters this gem.'
9
+ s.authors = ['Juan Francisco Ferrari']
8
10
  s.email = 'juannferrari@gmail.com'
9
- s.require_paths = ["lib"]
10
- s.files = [
11
- ".travis.yml",
12
- "Gemfile",
13
- "LICENSE",
14
- "Rakefile",
15
- "sort_n_params.gemspec",
16
- "lib/sort_n_params.rb",
17
- "lib/sort_n_params/sortable.rb",
18
- "lib/sort_n_params/sort_helpers.rb",
19
- "lib/sort_n_params/concerns/scopes.rb",
20
- "spec/concerns/scopes_spec.rb",
21
- "spec/spec_helper.rb",
22
- "spec/sortable_spec.rb"
23
- ]
24
- s.homepage =
11
+ s.require_paths = ['lib']
12
+ s.files = [
13
+ 'Gemfile',
14
+ 'LICENSE',
15
+ 'Rakefile',
16
+ 'sort_n_params.gemspec',
17
+ 'lib/sort_n_params.rb',
18
+ 'lib/sort_n_params/sortable.rb',
19
+ 'lib/sort_n_params/sort_helpers.rb',
20
+ 'lib/sort_n_params/concerns/scopes.rb',
21
+ 'spec/concerns/scopes_spec.rb',
22
+ 'spec/spec_helper.rb',
23
+ 'spec/sortable_spec.rb'
24
+ ]
25
+ s.homepage =
25
26
  'https://github.com/JuannFerrari/sort_n_params'
26
- s.license = 'MIT'
27
-
27
+ s.license = 'MIT'
28
+ s.required_ruby_version = Gem::Requirement.new('>= 2.6.0')
28
29
 
29
- s.add_development_dependency "bundler"
30
- s.add_development_dependency "factory_bot", "~> 4.0"
31
- s.add_development_dependency "pry-byebug"
32
- s.add_development_dependency "rake", ">= 12.3.3"
33
- s.add_development_dependency "rspec", "~> 3.0"
30
+ s.add_development_dependency 'bundler'
31
+ s.add_development_dependency 'factory_bot', '~> 4.0'
32
+ s.add_development_dependency 'pry', '~> 0.13.1'
33
+ s.add_development_dependency 'pry-byebug'
34
+ s.add_development_dependency 'rake', '>= 12.3.3'
35
+ s.add_development_dependency 'rspec', '~> 3.0'
36
+ s.add_development_dependency 'rubocop', '~> 1.30'
37
+ s.add_development_dependency 'rubocop-rails'
34
38
 
35
- s.add_dependency(%q<rails>.freeze, ["~> 5.0"])
36
- s.add_dependency(%q<nokogiri>.freeze, [">= 0"])
37
- s.add_dependency(%q<rake>.freeze, [">= 12.3.3"])
39
+ s.add_dependency('nokogiri', ['>= 0'])
40
+ s.add_dependency('rails', ['>= 7.0'])
41
+ s.add_dependency('rake', ['>= 12.3.3'])
38
42
  end
@@ -1,25 +1,31 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'sort_n_params/concerns/scopes'
2
4
 
5
+ CustomTable = Struct.new(:custom_field) do
6
+ include SortNParams::Scopes
7
+ end
8
+
3
9
  RSpec.describe SortNParams::Scopes do
4
10
  let(:test_class) do
5
- CustomTable = Struct.new(:custom_field) do
6
- include SortNParams::Scopes
7
- end
11
+ CustomTable
8
12
  end
9
13
 
10
- context 'when you pass only an ordering array' do
11
- subject { test_class.parse_array(["test_field","asc"]) }
14
+ describe '#parse_array' do
15
+ context 'when you pass only an ordering array' do
16
+ subject { test_class.parse_array(%w[test_field asc]) }
12
17
 
13
- it "builds the array correctly without the table_name param passed" do
14
- expect(subject).to eq("custom_tables.test_field asc")
18
+ it 'builds the array correctly without the table_name param passed' do
19
+ expect(subject).to eq('custom_tables.test_field asc')
20
+ end
15
21
  end
16
- end
17
22
 
18
- context 'when you pass both ordering array and table name' do
19
- subject { test_class.parse_array(["test_field","asc"], "another_table_name" ) }
23
+ context 'when you pass both ordering array and table name' do
24
+ subject { test_class.parse_array(%w[test_field asc], 'another_table_name') }
20
25
 
21
- it "builds the array correctly with the table_name param passed" do
22
- expect(subject).to eq("another_table_name.test_field asc")
26
+ it 'builds the array correctly with the table_name param passed' do
27
+ expect(subject).to eq('another_table_name.test_field asc')
28
+ end
23
29
  end
24
30
  end
25
- end
31
+ end
@@ -1,4 +1,7 @@
1
- require 'pry'
1
+ # frozen_string_literal: true
2
+
3
+ require 'sort_n_params'
4
+
2
5
  RSpec.describe Sortable do
3
6
  subject(:data) { Sortable.new('id', 'code', {}).call }
4
7
 
@@ -54,7 +57,7 @@ RSpec.describe Sortable do
54
57
  end
55
58
 
56
59
  it 'returns fa-sort-up class for icon' do
57
- expect(already_ordered.icon).to eq 'fa fa-sort-up'
60
+ expect(already_ordered.icon).to eq SortNParams.sort_asc_class
58
61
  end
59
62
 
60
63
  it 'returns title of passed param' do
@@ -87,7 +90,7 @@ RSpec.describe Sortable do
87
90
  end
88
91
 
89
92
  it 'returns fa-sort-down class for icon' do
90
- expect(twice_ordered.icon).to eq 'fa fa-sort-desc'
93
+ expect(twice_ordered.icon).to eq SortNParams.sort_desc_class
91
94
  end
92
95
  end
93
96
  end
data/spec/spec_helper.rb CHANGED
@@ -1,8 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'factory_bot'
2
4
  require 'sort_n_params/sortable'
3
5
 
4
6
  RSpec.configure do |config|
5
7
  config.include FactoryBot::Syntax::Methods
6
8
  FactoryBot.find_definitions
7
-
8
9
  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.0.4
4
+ version: 1.2.3
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-22 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,33 @@ dependencies:
81
95
  - !ruby/object:Gem::Version
82
96
  version: '3.0'
83
97
  - !ruby/object:Gem::Dependency
84
- name: rails
98
+ name: rubocop
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '5.0'
90
- type: :runtime
103
+ version: '1.30'
104
+ type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: '5.0'
110
+ version: '1.30'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop-rails
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
97
125
  - !ruby/object:Gem::Dependency
98
126
  name: nokogiri
99
127
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +136,20 @@ dependencies:
108
136
  - - ">="
109
137
  - !ruby/object:Gem::Version
110
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rails
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '7.0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '7.0'
111
153
  - !ruby/object:Gem::Dependency
112
154
  name: rake
113
155
  requirement: !ruby/object:Gem::Requirement
@@ -128,7 +170,6 @@ executables: []
128
170
  extensions: []
129
171
  extra_rdoc_files: []
130
172
  files:
131
- - ".travis.yml"
132
173
  - Gemfile
133
174
  - LICENSE
134
175
  - Rakefile
@@ -152,14 +193,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
152
193
  requirements:
153
194
  - - ">="
154
195
  - !ruby/object:Gem::Version
155
- version: '0'
196
+ version: 2.6.0
156
197
  required_rubygems_version: !ruby/object:Gem::Requirement
157
198
  requirements:
158
199
  - - ">="
159
200
  - !ruby/object:Gem::Version
160
201
  version: '0'
161
202
  requirements: []
162
- rubygems_version: 3.0.3
203
+ rubygems_version: 3.3.7
163
204
  signing_key:
164
205
  specification_version: 4
165
206
  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