| Module | Sequel::Plugins::List::InstanceMethods |
| In: |
lib/sequel/plugins/list.rb
|
The model object at the given position in the list containing this instance.
# File lib/sequel/plugins/list.rb, line 86
86: def at_position(p)
87: list_dataset.first(position_field => p)
88: end
Set the value of the position_field to the maximum value plus 1 unless the position field already has a value.
# File lib/sequel/plugins/list.rb, line 92
92: def before_create
93: unless send(position_field)
94: send("#{position_field}=", list_dataset.max(position_field).to_i+1)
95: end
96: super
97: end
Find the last position in the list containing this instance.
# File lib/sequel/plugins/list.rb, line 100
100: def last_position
101: list_dataset.max(position_field).to_i
102: end
A dataset that represents the list containing this instance.
# File lib/sequel/plugins/list.rb, line 105
105: def list_dataset
106: model.scope_proc ? model.scope_proc.call(self) : model.dataset
107: end
Move this instance down the given number of places in the list, or 1 place if no argument is specified.
# File lib/sequel/plugins/list.rb, line 111
111: def move_down(n = 1)
112: move_to(position_value + n)
113: end
Move this instance to the given place in the list. Raises an exception if target is less than 1 or greater than the last position in the list.
# File lib/sequel/plugins/list.rb, line 117
117: def move_to(target, lp = nil)
118: current = position_value
119: if target != current
120: checked_transaction do
121: ds = list_dataset
122: op, ds = if target < current
123: raise(Sequel::Error, "Moving too far up (target = #{target})") if target < 1
124: [:+, ds.filter(position_field=>target...current)]
125: else
126: lp ||= last_position
127: raise(Sequel::Error, "Moving too far down (target = #{target}, last_position = #{lp})") if target > lp
128: [:-, ds.filter(position_field=>(current + 1)..target)]
129: end
130: ds.update(position_field => Sequel::SQL::NumericExpression.new(op, position_field, 1))
131: update(position_field => target)
132: end
133: end
134: self
135: end
Move this instance to the bottom (last position) of the list.
# File lib/sequel/plugins/list.rb, line 138
138: def move_to_bottom
139: lp = last_position
140: move_to(lp, lp)
141: end
Move this instance to the top (first position, position 1) of the list.
# File lib/sequel/plugins/list.rb, line 144
144: def move_to_top
145: move_to(1)
146: end
Move this instance the given number of places up in the list, or 1 place if no argument is specified.
# File lib/sequel/plugins/list.rb, line 150
150: def move_up(n = 1)
151: move_to(position_value - n)
152: end
The model instance the given number of places below this model instance in the list, or 1 place below if no argument is given.
# File lib/sequel/plugins/list.rb, line 156
156: def next(n = 1)
157: n == 0 ? self : at_position(position_value + n)
158: end
The value of the model‘s position field for this instance.
# File lib/sequel/plugins/list.rb, line 161
161: def position_value
162: send(position_field)
163: end