12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/lore/behaviours/movable.rb', line 12
def move(inst, sortpos, criteria)
sortpos = sortpos.to_i
return if sortpos < 1
sortpos_old = inst.attr[@order_attr_name].to_i
if sortpos.to_i > sortpos_old then
self.update { |na|
na.set({@order_attr_name => @order_attr-1}).where(
(criteria) &
(@order_attr <= sortpos) &
(@order_attr > sortpos_old)
)
}
elsif sortpos.to_i < sortpos_old then
self.update { |na|
na.set({@order_attr_name => @order_attr+1}).where(
(criteria) &
(@order_attr >= sortpos) &
(@order_attr < sortpos_old)
)
}
end
if sortpos != sortpos_old then
inst.set_attribute_value(@order_attr_name, sortpos)
inst.commit()
end
end
|