Module: Sequel::Plugins::List::InstanceMethods
- Defined in:
- lib/sequel/plugins/list.rb
Instance Method Summary collapse
-
#after_destroy ⇒ Object
When destroying an instance, move all entries after the instance down one position, so that there aren’t any gaps.
-
#at_position(p) ⇒ Object
The model object at the given position in the list containing this instance.
-
#before_create ⇒ Object
Set the value of the position_field to the maximum value plus 1 unless the position field already has a value.
-
#last_position ⇒ Object
Find the last position in the list containing this instance.
-
#list_dataset ⇒ Object
A dataset that represents the list containing this instance.
-
#move_down(n = 1) ⇒ Object
Move this instance down the given number of places in the list, or 1 place if no argument is specified.
-
#move_to(target, lp = nil) ⇒ Object
Move this instance to the given place in the list.
-
#move_to_bottom ⇒ Object
Move this instance to the bottom (last position) of the list.
-
#move_to_top ⇒ Object
Move this instance to the top (first position, position 1) of the list.
-
#move_up(n = 1) ⇒ Object
Move this instance the given number of places up in the list, or 1 place if no argument is specified.
-
#next(n = 1) ⇒ Object
The model instance the given number of places below this model instance in the list, or 1 place below if no argument is given.
-
#position_value ⇒ Object
The value of the model’s position field for this instance.
-
#prev(n = 1) ⇒ Object
The model instance the given number of places below this model instance in the list, or 1 place below if no argument is given.
Instance Method Details
#after_destroy ⇒ Object
When destroying an instance, move all entries after the instance down one position, so that there aren’t any gaps
101 102 103 104 105 106 |
# File 'lib/sequel/plugins/list.rb', line 101 def after_destroy super f = Sequel.expr(position_field) list_dataset.where(f > position_value).update(f => f - 1) end |
#at_position(p) ⇒ Object
The model object at the given position in the list containing this instance.
86 87 88 |
# File 'lib/sequel/plugins/list.rb', line 86 def at_position(p) list_dataset.first(position_field => p) end |
#before_create ⇒ Object
Set the value of the position_field to the maximum value plus 1 unless the position field already has a value.
92 93 94 95 96 97 |
# File 'lib/sequel/plugins/list.rb', line 92 def before_create unless get_column_value(position_field) set_column_value("#{position_field}=", list_dataset.max(position_field).to_i+1) end super end |
#last_position ⇒ Object
Find the last position in the list containing this instance.
109 110 111 |
# File 'lib/sequel/plugins/list.rb', line 109 def last_position list_dataset.max(position_field).to_i end |
#list_dataset ⇒ Object
A dataset that represents the list containing this instance.
114 115 116 |
# File 'lib/sequel/plugins/list.rb', line 114 def list_dataset model.scope_proc ? model.scope_proc.call(self) : model.dataset end |
#move_down(n = 1) ⇒ Object
Move this instance down the given number of places in the list, or 1 place if no argument is specified.
120 121 122 |
# File 'lib/sequel/plugins/list.rb', line 120 def move_down(n = 1) move_to(position_value + n) end |
#move_to(target, lp = nil) ⇒ Object
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.
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/sequel/plugins/list.rb', line 126 def move_to(target, lp = nil) current = position_value if target != current checked_transaction do ds = list_dataset op, ds = if target < current target = 1 if target < 1 [:+, ds.filter(position_field=>target...current)] else lp ||= last_position target = lp if target > lp [:-, ds.filter(position_field=>(current + 1)..target)] end ds.update(position_field => Sequel::SQL::NumericExpression.new(op, position_field, 1)) update(position_field => target) end end self end |
#move_to_bottom ⇒ Object
Move this instance to the bottom (last position) of the list.
147 148 149 150 |
# File 'lib/sequel/plugins/list.rb', line 147 def move_to_bottom lp = last_position move_to(lp, lp) end |
#move_to_top ⇒ Object
Move this instance to the top (first position, position 1) of the list.
153 154 155 |
# File 'lib/sequel/plugins/list.rb', line 153 def move_to_top move_to(1) end |
#move_up(n = 1) ⇒ Object
Move this instance the given number of places up in the list, or 1 place if no argument is specified.
159 160 161 |
# File 'lib/sequel/plugins/list.rb', line 159 def move_up(n = 1) move_to(position_value - n) end |
#next(n = 1) ⇒ Object
The model instance the given number of places below this model instance in the list, or 1 place below if no argument is given.
165 166 167 |
# File 'lib/sequel/plugins/list.rb', line 165 def next(n = 1) n == 0 ? self : at_position(position_value + n) end |
#position_value ⇒ Object
The value of the model’s position field for this instance.
170 171 172 |
# File 'lib/sequel/plugins/list.rb', line 170 def position_value get_column_value(position_field) end |
#prev(n = 1) ⇒ Object
The model instance the given number of places below this model instance in the list, or 1 place below if no argument is given.
176 177 178 |
# File 'lib/sequel/plugins/list.rb', line 176 def prev(n = 1) self.next(n * -1) end |