Module Sequel::Plugins::List::InstanceMethods
In: lib/sequel/plugins/list.rb

Methods

Public Instance methods

The model object at the given position in the list containing this instance.

[Source]

    # 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.

[Source]

    # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # File lib/sequel/plugins/list.rb, line 161
161:         def position_value
162:           send(position_field)
163:         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.

[Source]

     # File lib/sequel/plugins/list.rb, line 167
167:         def prev(n = 1)
168:           self.next(n * -1)
169:         end

[Validate]