rails_sortable 1.3.2 → 1.5.0

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