Methods
Public Instance
Public Instance methods
When destroying an instance, move all entries after the instance down one position, so that there aren’t any gaps
# File lib/sequel/plugins/list.rb 104 def after_destroy 105 super 106 107 f = Sequel[position_field] 108 list_dataset.where(f > position_value).update(f => f - 1) 109 end
The model object at the given position in the list containing this instance.
# File lib/sequel/plugins/list.rb 98 def at_position(p) 99 list_dataset.first(position_field => p) 100 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 187 def before_validation 188 unless get_column_value(position_field) 189 set_column_value("#{position_field}=", list_dataset.max(position_field).to_i+1) 190 end 191 super 192 end
Find the last position in the list containing this instance.
# File lib/sequel/plugins/list.rb 112 def last_position 113 list_dataset.max(position_field).to_i 114 end
A dataset that represents the list containing this instance.
# File lib/sequel/plugins/list.rb 117 def list_dataset 118 model.scope_proc ? model.scope_proc.call(self) : model.dataset 119 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 123 def move_down(n = 1) 124 move_to(position_value + n) 125 end
Move this instance to the given place in the list. If lp is not given or greater than the last list position, uses the last list position. If lp is less than the top list position, uses the top list position.
# File lib/sequel/plugins/list.rb 131 def move_to(target, lp = nil) 132 current = position_value 133 if target != current 134 checked_transaction do 135 ds = list_dataset 136 op, ds = if target < current 137 target = model.top_of_list if target < model.top_of_list 138 [:+, ds.where(position_field=>target...current)] 139 else 140 lp ||= last_position 141 target = lp if target > lp 142 [:-, ds.where(position_field=>(current + 1)..target)] 143 end 144 ds.update(position_field => Sequel::SQL::NumericExpression.new(op, position_field, 1)) 145 update(position_field => target) 146 end 147 end 148 self 149 end
Move this instance to the bottom (last position) of the list.
# File lib/sequel/plugins/list.rb 152 def move_to_bottom 153 lp = last_position 154 move_to(lp, lp) 155 end
Move this instance to the top (first position, usually position 1) of the list.
# File lib/sequel/plugins/list.rb 158 def move_to_top 159 move_to(model.top_of_list) 160 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 164 def move_up(n = 1) 165 move_to(position_value - n) 166 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 170 def next(n = 1) 171 n == 0 ? self : at_position(position_value + n) 172 end
The value of the model’s position field for this instance.
# File lib/sequel/plugins/list.rb 175 def position_value 176 get_column_value(position_field) 177 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 181 def prev(n = 1) 182 self.next(n * -1) 183 end