activesorting 0.8.0 → 0.8.1
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 -1
- data/lib/active_sorting/model.rb +17 -11
- data/lib/active_sorting/version.rb +1 -1
- metadata +2 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25b153abfd8dcdce3eb5441f7c4cb69b7c1de7c9
|
4
|
+
data.tar.gz: 9820bbde81b0b13ec2eadcace27aea620f3899fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 61c7e122234c614add381a063b9bfd6642b8e6b8fe0536e8ac3964aa60b7829893b0d797d32550a197f93e661eb51d9f508a31821906942652021753769a8595
|
7
|
+
data.tar.gz: c8ea678bee8c09ce83486826ed8a73edb4f5f3ed1fed33f958477e411df0c942369de5cd618492cc5a6397a1b1047823ca058bfa688e7fcba62250b3819304dc
|
data/README.md
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
# ActiveSorting
|
2
|
-
|
2
|
+
|
3
|
+
## Status
|
4
|
+
|
5
|
+
[](http://rubygems.org/gems/activesorting)
|
3
6
|
[](https://travis-ci.org/owahab/active_sorting)
|
4
7
|
[](https://coveralls.io/github/owahab/active_sorting?branch=master)
|
8
|
+
[](https://codeclimate.com/github/owahab/active_sorting)
|
5
9
|
[](http://inch-ci.org/github/owahab/active_sorting)
|
6
10
|
[](https://hakiri.io/github/owahab/active_sorting/master)
|
11
|
+
[](http://rubygems.org/gems/activesorting)
|
12
|
+
[](https://github.com/owahab/active_sorting/issues)
|
7
13
|
|
8
14
|
Allows sorting Rails models using a custom field.
|
9
15
|
|
@@ -61,3 +67,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
61
67
|
Please see CONTRIBUTING.md for details.
|
62
68
|
|
63
69
|
## Credits
|
70
|
+
|
71
|
+
[](http://eventtus.com)
|
72
|
+
|
73
|
+
Project is sponsored by [Eventtus](http://eventtus.com).
|
data/lib/active_sorting/model.rb
CHANGED
@@ -34,10 +34,10 @@ module ActiveSorting
|
|
34
34
|
raise ArgumentError, "Sortable list should not be empty" unless new_list.count
|
35
35
|
conditions = {}
|
36
36
|
conditions[id_column] = new_list
|
37
|
-
old_list = unscoped.where(conditions).pluck(
|
37
|
+
old_list = unscoped.where(conditions).pluck(id_column)
|
38
38
|
raise ArgumentError, "Sortable list should be persisted to database" unless old_list.count
|
39
39
|
changes = active_sorting_changes_required(old_list, new_list)
|
40
|
-
active_sorting_make_changes(new_list, changes)
|
40
|
+
active_sorting_make_changes(new_list, changes, id_column)
|
41
41
|
end
|
42
42
|
|
43
43
|
# Default sorting options
|
@@ -107,26 +107,26 @@ module ActiveSorting
|
|
107
107
|
end
|
108
108
|
|
109
109
|
# Commit changes to database
|
110
|
-
def active_sorting_make_changes(new_list, changes)
|
110
|
+
def active_sorting_make_changes(new_list, changes, id_column)
|
111
111
|
new_list.each_with_index do |id, index|
|
112
112
|
next unless changes.include?(id)
|
113
113
|
if index == new_list.count.pred
|
114
114
|
# We're moving an item to last position,
|
115
115
|
# increase the count of last item's position
|
116
116
|
# by the step
|
117
|
-
n1 =
|
117
|
+
n1 = active_sorting_find_by(id_column, new_list[index.pred]).active_sorting_value
|
118
118
|
n2 = n1 + active_sorting_step
|
119
119
|
elsif index == 0
|
120
120
|
# We're moving an item to first position
|
121
121
|
# Calculate the gap between following 2 items
|
122
|
-
n1 =
|
123
|
-
n2 =
|
122
|
+
n1 = active_sorting_find_by(id_column, new_list[index.next]).active_sorting_value
|
123
|
+
n2 = active_sorting_find_by(id_column, new_list[index.next]).active_sorting_value
|
124
124
|
else
|
125
125
|
# We're moving a non-terminal item
|
126
|
-
n1 =
|
127
|
-
n2 =
|
126
|
+
n1 = active_sorting_find_by(id_column, new_list[index.pred]).active_sorting_value
|
127
|
+
n2 = active_sorting_find_by(id_column, new_list[index.next]).active_sorting_value
|
128
128
|
end
|
129
|
-
|
129
|
+
active_sorting_find_by(id_column, id).active_sorting_center_item(n1, n2)
|
130
130
|
end
|
131
131
|
end
|
132
132
|
|
@@ -145,6 +145,12 @@ module ActiveSorting
|
|
145
145
|
def active_sorting_scope
|
146
146
|
active_sorting_options[:scope]
|
147
147
|
end
|
148
|
+
|
149
|
+
def active_sorting_find_by(id_column, value)
|
150
|
+
conditions = {}
|
151
|
+
conditions[id_column] = value
|
152
|
+
find_by(conditions)
|
153
|
+
end
|
148
154
|
end
|
149
155
|
|
150
156
|
def active_sorting_value
|
@@ -180,8 +186,8 @@ module ActiveSorting
|
|
180
186
|
.unscoped
|
181
187
|
.where(conditions)
|
182
188
|
.maximum(self.class.active_sorting_field)
|
183
|
-
# First value will always
|
184
|
-
return
|
189
|
+
# First value will always equal step
|
190
|
+
return self.class.active_sorting_step if max.nil?
|
185
191
|
# Increment by the step value configured
|
186
192
|
max + self.class.active_sorting_step
|
187
193
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activesorting
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Omar Abdel-Wahab
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -195,4 +195,3 @@ signing_key:
|
|
195
195
|
specification_version: 4
|
196
196
|
summary: Adds ability to sort models using a custom field
|
197
197
|
test_files: []
|
198
|
-
has_rdoc:
|