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 +4 -4
- data/README.md +11 -12
- data/app/controllers/sortable_controller.rb +2 -0
- data/app/models/rails_sortable/model.rb +10 -3
- data/lib/rails_sortable/version.rb +1 -1
- data/spec/dummy/app/assets/images/.keep +0 -0
- data/spec/dummy/app/models/validated_item.rb +4 -0
- data/spec/models/rails_sortable/model_spec.rb +32 -1
- metadata +37 -22
- data/app/helpers/sortable_helper.rb +0 -7
- data/spec/helpers/sortable_helper_spec.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c44dbc38b1087772a6f32c4db9aa581b453635e689934c4997e60c4ccd1eb11d
|
4
|
+
data.tar.gz: 947a084a93b82ceda59f03ca652e6d3faa147a3bb8246e7a3f6cb04e662efc88
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
49
|
-
#
|
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
|
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
|
114
|
-
$
|
115
|
-
$
|
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
|
-
$
|
117
|
+
$ RAILS_ENV=test spec/dummy/bin/rails db:migrate
|
118
|
+
$ spec/dummy/bin/rails db:seed
|
118
119
|
|
119
|
-
# Run
|
120
|
-
$
|
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 {
|
25
|
+
without_updating_timestamps { save_as_desired }
|
25
26
|
elsif self.class.sortable_options[:without_updating_timestamps]
|
26
|
-
without_updating_timestamps {
|
27
|
+
without_updating_timestamps { save_as_desired }
|
27
28
|
else
|
28
|
-
|
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 }
|
File without changes
|
@@ -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.
|
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:
|
11
|
+
date: 2022-03-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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.
|
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.
|
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:
|
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:
|
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:
|
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:
|
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.
|
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
|