rails_sortable 1.3.2 → 1.5.0

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: e82a388afb0fcd3f8b3965d5c66da761a8820a27309a7461f57394c02e032f4e
4
- data.tar.gz: 9a7b8c0b9ccd02384105268fb2fd13aeb0559aea2a75fafb00f60c71afd5dde7
3
+ metadata.gz: c44dbc38b1087772a6f32c4db9aa581b453635e689934c4997e60c4ccd1eb11d
4
+ data.tar.gz: 947a084a93b82ceda59f03ca652e6d3faa147a3bb8246e7a3f6cb04e662efc88
5
5
  SHA512:
6
- metadata.gz: 8be3de6f518fc1c101cf11113568fbcb19a6e4003bbfe4edb4ebeaa25ee82bb7b171f57c0a10dd01d6cdd545bea7b066a22a7954c5a8372b2a941754455e02b3
7
- data.tar.gz: 10c557eaab04018d69553a4f3ab19f54376b4359bef5c81c0b0f8e084fb7cd5f3c662919de0a79e210385044e7a1c2bd27a05b601663ad05a088763bfb1c616e
6
+ metadata.gz: 30d37231a74a61c303360dd18dabe5708614bc8378816327f67e4fcad51c3b0c893bb457cf95cf28c4c49f3f4e8935a48d844dee15b68677705f75829f5895c5
7
+ data.tar.gz: bfb2153e6ccee626fffff36bbc6ca1418755d4643eabc96fe31d68e509c6e7406be63d583eb0cfb886a4e9b9676e59fa37bf0fbacd3040a859acd1a90207fac0
data/README.md CHANGED
@@ -45,8 +45,9 @@ and `Item` model as
45
45
  class Item < ApplicationRecord
46
46
  include RailsSortable::Model
47
47
  set_sortable :sort # Indicate a sort column
48
- # If you do NOT want timestamps to be updated on sorting, use the following option.
49
- # set_sortable :sort, without_updating_timestamps: true
48
+ # without_updating_timestamps: true, # If you do NOT want timestamps to be updated on sorting
49
+ # without_validations: true # If you do NOT want validations to be run on sorting
50
+
50
51
  end
51
52
  ```
52
53
  and `ItemsController` as
@@ -102,24 +103,22 @@ see the [http://api.jqueryui.com/sortable/](http://api.jqueryui.com/sortable/) t
102
103
 
103
104
  Fork it, then install required gems like below.
104
105
  ```bash
105
- $ bundle install --path=vendor/bundle
106
- $ bundle exec appraisal install
106
+ $ bundle install
107
107
  ```
108
108
 
109
109
  Please give me a PR freely.
110
110
 
111
111
  ### Testing
112
112
  ```bash
113
- # Test with a dummy application (rails42, rails50 and rails51 are also available)
114
- $ bundle exec appraisal rails52 spec/dummy/bin/rake db:migrate
115
- $ bundle exec appraisal rails52 spec/dummy/bin/rails s
113
+ # Test with a dummy application
114
+ $ spec/dummy/bin/rails db:migrate
115
+ $ spec/dummy/bin/rails s
116
116
  # Insert test data
117
- $ bundle exec appraisal rails52 spec/dummy/bin/rake db:seed
117
+ $ RAILS_ENV=test spec/dummy/bin/rails db:migrate
118
+ $ spec/dummy/bin/rails db:seed
118
119
 
119
- # Run rspecs
120
- $ RAILS_ENV=test bundle exec appraisal rails52 spec/dummy/bin/rake db:migrate
121
- $ bundle exec appraisal rspec # for all rails versions
122
- $ bundle exec appraisal rails52 rspec # for specific version
120
+ # Run specs
121
+ $ bundle exec rspec
123
122
  ```
124
123
 
125
124
  # Licence
@@ -12,6 +12,8 @@ class SortableController < ApplicationController
12
12
  def reorder
13
13
  ActiveRecord::Base.transaction do
14
14
  params['rails_sortable'].each_with_index do |token, new_sort|
15
+ next unless token.present?
16
+
15
17
  model = find_model(token)
16
18
  current_sort = model.read_attribute(model.class.sort_attribute)
17
19
  model.update_sort!(new_sort) if current_sort != new_sort
@@ -19,13 +19,14 @@ module RailsSortable
19
19
 
20
20
  def update_sort!(new_value)
21
21
  write_attribute sort_attribute, new_value
22
+
22
23
  if self.class.sortable_options[:silence_recording_timestamps]
23
24
  warn "[DEPRECATION] `silence_recording_timestamps` is deprecated. Please use `without_updating_timestamps` instead."
24
- without_updating_timestamps { save! }
25
+ without_updating_timestamps { save_as_desired }
25
26
  elsif self.class.sortable_options[:without_updating_timestamps]
26
- without_updating_timestamps { save! }
27
+ without_updating_timestamps { save_as_desired }
27
28
  else
28
- save!
29
+ save_as_desired
29
30
  end
30
31
  end
31
32
 
@@ -52,6 +53,10 @@ module RailsSortable
52
53
  (self.class.maximum(sort_attribute) || 0) + 1
53
54
  end
54
55
 
56
+ def save_as_desired
57
+ self.class.sortable_options[:without_validations] ? save(validate: false) : save!
58
+ end
59
+
55
60
  def sort_attribute
56
61
  self.class.sort_attribute
57
62
  end
@@ -61,6 +66,8 @@ module RailsSortable
61
66
  # allowed options
62
67
  # - without_updating_timestamps
63
68
  # When it is true, timestamp(updated_at) will be NOT touched on reordering.
69
+ # - without_validations
70
+ # When it is true, validations will be skipped
64
71
  #
65
72
  def set_sortable(attribute, options = {})
66
73
  self.define_singleton_method(:sort_attribute) { attribute }
@@ -1,3 +1,3 @@
1
1
  module RailsSortable
2
- VERSION = '1.3.2'
2
+ VERSION = '1.5.0'
3
3
  end
File without changes
@@ -0,0 +1,4 @@
1
+ class ValidatedItem < Item
2
+ self.table_name = "items"
3
+ validates_presence_of :title
4
+ end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe RailsSortable::Model, type: :model do
4
-
5
4
  describe "before_create" do
6
5
  context "when sort is nil" do
7
6
  it "should be automatically set maximum sort value" do
@@ -51,6 +50,38 @@ describe RailsSortable::Model, type: :model do
51
50
  end
52
51
  end
53
52
  end
53
+
54
+ describe "without_validations" do
55
+ context "when optional value is true" do
56
+ before do
57
+ ValidatedItem.class_eval do
58
+ set_sortable :sort, without_validations: true
59
+ end
60
+ end
61
+
62
+ it "will skip validations" do
63
+ item = ValidatedItem.create!(title: "Title")
64
+ item.update_attribute(:title, nil)
65
+ expect { item.update_sort!(1000) }.not_to raise_error
66
+ end
67
+ end
68
+
69
+ context "when optional value is false" do
70
+ before do
71
+ ValidatedItem.class_eval do
72
+ set_sortable :sort, without_validations: false
73
+ end
74
+ end
75
+
76
+ it "will require validations" do
77
+ item = ValidatedItem.create!(title: "Title")
78
+ item.update_attribute(:title, nil)
79
+ expect do
80
+ item.update_sort!(1000)
81
+ end.to raise_error(ActiveRecord::RecordInvalid, /Title can't be blank/)
82
+ end
83
+ end
84
+ end
54
85
  end
55
86
 
56
87
  describe "sortable_id" do
metadata CHANGED
@@ -1,99 +1,113 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_sortable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - itmammoth
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-24 00:00:00.000000000 Z
11
+ date: 2022-03-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: appraisal
14
+ name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.2'
19
+ version: 6.0.0
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.2'
26
+ version: 6.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: jquery-rails
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '4.3'
33
+ version: 4.3.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '4.3'
40
+ version: 4.3.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: jquery-ui-rails
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '6.0'
47
+ version: 6.0.0
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: '6.0'
54
+ version: 6.0.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: sqlite3
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.3.6
61
+ version: 1.4.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.3.6
68
+ version: 1.4.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec-rails
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '3.5'
75
+ version: 3.9.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '3.5'
82
+ version: 3.9.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: pry-rails
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0.3'
89
+ version: 0.3.0
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0.3'
96
+ version: 0.3.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: puma
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 5.6.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 5.6.0
97
111
  description: rails_sortable provides easy drag & drop sorting for rails 4 and 5.
98
112
  email:
99
113
  - itmammoth@gmail.com
@@ -105,7 +119,6 @@ files:
105
119
  - README.md
106
120
  - Rakefile
107
121
  - app/controllers/sortable_controller.rb
108
- - app/helpers/sortable_helper.rb
109
122
  - app/models/rails_sortable/model.rb
110
123
  - config/routes.rb
111
124
  - lib/rails_sortable.rb
@@ -117,6 +130,7 @@ files:
117
130
  - spec/dummy/README.rdoc
118
131
  - spec/dummy/Rakefile
119
132
  - spec/dummy/app/assets/config/manifest.js
133
+ - spec/dummy/app/assets/images/.keep
120
134
  - spec/dummy/app/assets/javascripts/application.js
121
135
  - spec/dummy/app/assets/javascripts/items.js
122
136
  - spec/dummy/app/assets/javascripts/multiple_classes.js
@@ -134,6 +148,7 @@ files:
134
148
  - spec/dummy/app/models/item.rb
135
149
  - spec/dummy/app/models/second_item.rb
136
150
  - spec/dummy/app/models/sequenced_item.rb
151
+ - spec/dummy/app/models/validated_item.rb
137
152
  - spec/dummy/app/views/items/_form.html.erb
138
153
  - spec/dummy/app/views/items/edit.html.erb
139
154
  - spec/dummy/app/views/items/index.html.erb
@@ -176,7 +191,6 @@ files:
176
191
  - spec/dummy/public/422.html
177
192
  - spec/dummy/public/500.html
178
193
  - spec/dummy/public/favicon.ico
179
- - spec/helpers/sortable_helper_spec.rb
180
194
  - spec/models/rails_sortable/model_spec.rb
181
195
  - spec/spec_helper.rb
182
196
  - vendor/assets/javascripts/plugin.js
@@ -185,7 +199,7 @@ homepage: https://github.com/itmammoth/rails_sortable
185
199
  licenses:
186
200
  - MIT
187
201
  metadata: {}
188
- post_install_message:
202
+ post_install_message:
189
203
  rdoc_options: []
190
204
  require_paths:
191
205
  - lib
@@ -200,8 +214,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
214
  - !ruby/object:Gem::Version
201
215
  version: '0'
202
216
  requirements: []
203
- rubygems_version: 3.0.6
204
- signing_key:
217
+ rubygems_version: 3.3.8
218
+ signing_key:
205
219
  specification_version: 4
206
220
  summary: Easy drag & drop sorting for rails.
207
221
  test_files:
@@ -209,6 +223,7 @@ test_files:
209
223
  - spec/dummy/README.rdoc
210
224
  - spec/dummy/Rakefile
211
225
  - spec/dummy/app/assets/config/manifest.js
226
+ - spec/dummy/app/assets/images/.keep
212
227
  - spec/dummy/app/assets/javascripts/application.js
213
228
  - spec/dummy/app/assets/javascripts/items.js
214
229
  - spec/dummy/app/assets/javascripts/multiple_classes.js
@@ -226,6 +241,7 @@ test_files:
226
241
  - spec/dummy/app/models/item.rb
227
242
  - spec/dummy/app/models/second_item.rb
228
243
  - spec/dummy/app/models/sequenced_item.rb
244
+ - spec/dummy/app/models/validated_item.rb
229
245
  - spec/dummy/app/views/items/_form.html.erb
230
246
  - spec/dummy/app/views/items/edit.html.erb
231
247
  - spec/dummy/app/views/items/index.html.erb
@@ -268,6 +284,5 @@ test_files:
268
284
  - spec/dummy/public/422.html
269
285
  - spec/dummy/public/500.html
270
286
  - spec/dummy/public/favicon.ico
271
- - spec/helpers/sortable_helper_spec.rb
272
287
  - spec/models/rails_sortable/model_spec.rb
273
288
  - spec/spec_helper.rb
@@ -1,7 +0,0 @@
1
- module SortableHelper
2
- def sortable_fetch(models, &block)
3
- warn "[DEPRECATION] `sortable_fetch` is deprecated. Please use Enumerable#each_with_sortable_id instead."
4
- raise "Must be called with block!" unless block_given?
5
- models.each_with_sortable_id(&block)
6
- end
7
- end
@@ -1,21 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe SortableHelper, type: :helper do
4
-
5
- describe "#sortable_fetch" do
6
-
7
- context "with no block" do
8
- it { expect { helper.sortable_fetch(Array.new) }.to raise_error('Must be called with block!') }
9
- end
10
-
11
- context "with block" do
12
- it "should yield item and its object id" do
13
- new_item = Item.create!
14
- sortable_fetch([ new_item ]) do |item, id|
15
- expect(item).to eq new_item
16
- expect(id).to eq SortableController::VERIFIER.generate("class=Item,id=#{new_item.id}")
17
- end
18
- end
19
- end
20
- end
21
- end