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 91 91: def at_position(p) 92: list_dataset.first(position_field => p) 93: 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 97 97: def before_create 98: unless send(position_field) 99: send("#{position_field}=", list_dataset.max(position_field).to_i+1) 100: end 101: end
Find the last position in the list containing this instance.
# File lib/sequel/plugins/list.rb, line 104 104: def last_position 105: list_dataset.max(position_field).to_i 106: end
A dataset that represents the list containing this instance.
# File lib/sequel/plugins/list.rb, line 109 109: def list_dataset 110: model.scope_proc ? model.scope_proc.call(self) : model.dataset 111: 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 115 115: def move_down(n = 1) 116: move_to(position_value + n) 117: 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 121 121: def move_to(target, lp = nil) 122: current = position_value 123: if target != current 124: checked_transaction do 125: ds = list_dataset 126: op, ds = if target < current 127: raise(Sequel::Error, "Moving too far up (target = #{target})") if target < 1 128: [:+, ds.filter(position_field=>target...current)] 129: else 130: lp ||= last_position 131: raise(Sequel::Error, "Moving too far down (target = #{target}, last_position = #{lp})") if target > lp 132: [:-, ds.filter(position_field=>(current + 1)..target)] 133: end 134: ds.update(position_field => Sequel::SQL::NumericExpression.new(op, position_field, 1)) 135: update(position_field => target) 136: end 137: end 138: self 139: end
Move this instance to the bottom (last position) of the list.
# File lib/sequel/plugins/list.rb, line 142 142: def move_to_bottom 143: lp = last_position 144: move_to(lp, lp) 145: end
Move this instance to the top (first position, position 1) of the list.
# File lib/sequel/plugins/list.rb, line 148 148: def move_to_top 149: move_to(1) 150: 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 154 154: def move_up(n = 1) 155: move_to(position_value - n) 156: 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 160 160: def next(n = 1) 161: n == 0 ? self : at_position(position_value + n) 162: end
The value of the model‘s position field for this instance.
# File lib/sequel/plugins/list.rb, line 165 165: def position_value 166: send(position_field) 167: end