sortability 0.0.3 → 0.1.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 +18 -2
- data/lib/sortability/active_record/base.rb +25 -10
- data/lib/sortability/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8de084b141765cc5613a436a6573b6a370d535c3
|
4
|
+
data.tar.gz: 20c7a9f1951fa31c5840cb12c8046d2c734536ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d1313f9b10346d6f2dd1d5506ab6b9a24cba540ff0fdef6b388ed32631e4aaa7cb2c9b5a0949971a6dd7e19e26020d2023a18a78036d7f0e8f4d066398d3ced
|
7
|
+
data.tar.gz: a9fb6ac2194be7a270f51d5bdf6a48a781389f3365d4c14b239d3ab028cbaed4952e8ae449766349a8674037bb0be6c548e0ed001e96055b470bd41c1308b1c0
|
data/README.md
CHANGED
@@ -87,10 +87,16 @@ sortable_belongs_to :container, inverse_of: :records,
|
|
87
87
|
scope: :container_id # , on: :sort_position
|
88
88
|
```
|
89
89
|
|
90
|
+
You can also specify a custom association scope:
|
91
|
+
|
92
|
+
```rb
|
93
|
+
sortable_belongs_to :container, -> { with_deleted },
|
94
|
+
inverse_of: :records, scope: :container_id # , on: :sort_position
|
95
|
+
```
|
96
|
+
|
90
97
|
It is highly recommended that you specify the `inverse_of` and `scope` options.
|
91
98
|
|
92
|
-
If `records` are sorted globally, without a `container`,
|
93
|
-
use the `sortable_class` method instead:
|
99
|
+
If `records` are sorted globally, without a `container`, use the `sortable_class` method instead:
|
94
100
|
|
95
101
|
```rb
|
96
102
|
sortable_class # on: :sort_position, scope: :sort_group_number
|
@@ -104,6 +110,16 @@ Simply replace the `has_many :records` relation in your `Container` model with:
|
|
104
110
|
sortable_has_many :records, inverse_of: :container # , on: :sort_position
|
105
111
|
```
|
106
112
|
|
113
|
+
You can also specify a custom association scope,
|
114
|
+
but in that case you have to order the records yourself:
|
115
|
+
|
116
|
+
```rb
|
117
|
+
sortable_has_many :records, ->{ with_deleted.order(:sort_position) },
|
118
|
+
inverse_of: :container # , on: :sort_position
|
119
|
+
```
|
120
|
+
|
121
|
+
Once again, it is highly recommended that you specify the `inverse_of` option.
|
122
|
+
|
107
123
|
## Usage
|
108
124
|
|
109
125
|
Once you have run the migrations and modified your models according to the installation instructions, you are ready to start sorting the `records`.
|
@@ -26,9 +26,10 @@ module Sortability
|
|
26
26
|
|
27
27
|
# Returns all the sort peers for this record, including self
|
28
28
|
define_method peers_mname do |force_scope_load = false|
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
unless force_scope_load || container.nil? || inverse_of.nil?
|
30
|
+
cont = send(container)
|
31
|
+
return cont.send(inverse_of) unless cont.nil?
|
32
|
+
end
|
32
33
|
|
33
34
|
relation = self.class.unscoped
|
34
35
|
scope_array.each do |s|
|
@@ -122,20 +123,24 @@ module Sortability
|
|
122
123
|
end
|
123
124
|
|
124
125
|
# Defines a sortable has_many relation on the container
|
125
|
-
def sortable_has_many(records,
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
126
|
+
def sortable_has_many(records, scope_or_options = nil, options_with_scope = {}, &extension)
|
127
|
+
scope, options = extract_association_params(scope_or_options, options_with_scope)
|
128
|
+
if scope.nil?
|
129
|
+
on = options[:on] || :sort_position
|
130
|
+
scope = -> { order(on) }
|
130
131
|
end
|
132
|
+
|
133
|
+
class_exec { has_many records, scope, options.except(:on), &extension }
|
131
134
|
end
|
132
135
|
|
133
136
|
# Defines a sortable belongs_to relation on the child records
|
134
|
-
def sortable_belongs_to(container,
|
137
|
+
def sortable_belongs_to(container, scope_or_options = nil,
|
138
|
+
options_with_scope = {}, &extension)
|
139
|
+
scope, options = extract_association_params(scope_or_options, options_with_scope)
|
135
140
|
on = options[:on] || :sort_position
|
136
141
|
|
137
142
|
class_exec do
|
138
|
-
belongs_to container, options.except(:on, :scope)
|
143
|
+
belongs_to container, scope, options.except(:on, :scope), &extension
|
139
144
|
|
140
145
|
reflection = reflect_on_association(container)
|
141
146
|
options[:scope] ||= reflection.polymorphic? ? \
|
@@ -170,6 +175,16 @@ module Sortability
|
|
170
175
|
|
171
176
|
sortable_methods(options)
|
172
177
|
end
|
178
|
+
|
179
|
+
protected
|
180
|
+
|
181
|
+
def extract_association_params(scope_or_options, options_with_scope)
|
182
|
+
if scope_or_options.is_a?(Hash)
|
183
|
+
[nil, scope_or_options]
|
184
|
+
else
|
185
|
+
[scope_or_options, options_with_scope]
|
186
|
+
end
|
187
|
+
end
|
173
188
|
end
|
174
189
|
end
|
175
190
|
end
|
data/lib/sortability/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sortability
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dante Soares
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-05-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -144,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
144
|
version: '0'
|
145
145
|
requirements: []
|
146
146
|
rubyforge_project:
|
147
|
-
rubygems_version: 2.4.5
|
147
|
+
rubygems_version: 2.4.5.1
|
148
148
|
signing_key:
|
149
149
|
specification_version: 4
|
150
150
|
summary: Rails gem that provides easy to use ordered records
|