Module: Anoubis::HasManualOrder::LocalInstanceMethods
- Defined in:
- lib/anoubis.rb
Instance Method Summary collapse
-
#manual_order_after_destroy ⇒ Object
Recalculate positions after destroy element.
-
#manual_order_after_save_element ⇒ Object
Recalculate position of elements after set current position.
-
#manual_order_before_create_element ⇒ Object
Check presence of position.
- #manual_order_before_update_element ⇒ Object
-
#manual_order_changed_group ⇒ Object
Check if element’s position changed in current order group.
-
#manual_order_changed_orders ⇒ Object
Check if element’s position was changed (or changed order group).
-
#manual_order_check_order_position(id) ⇒ Object
Check manual order position.
- #manual_order_get_where ⇒ Object
- #manual_order_get_where_was ⇒ Object
Instance Method Details
#manual_order_after_destroy ⇒ Object
Recalculate positions after destroy element
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/anoubis.rb', line 140 def manual_order_after_destroy position = self.[:field].to_sym # set order field for simplicity order_where = manual_order_get_where pos = self[position] order_where[position] = [pos..Float::INFINITY] self.class.where(order_where).order(position).all.each do |element| element[position] = pos begin element.current_user = self.current_user rescue puts 'Cant set current_user' end element.save pos += 1 end end |
#manual_order_after_save_element ⇒ Object
Recalculate position of elements after set current position
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/anoubis.rb', line 95 def manual_order_after_save_element if manual_order_changed_orders # puts self.id.to_s+'> manual_order_after_save_element' position = self.[:field].to_sym # set order field for simplicity order_where = manual_order_get_where order_where[position] = self[position] count = 0 self.class.where(order_where).where.not(:id => self.id).find_each do |element| # puts self.id.to_s+'> Increment element position: '+element.id.to_s element[position] = self[position]+1 begin element.current_user = self.current_user rescue puts 'Cant set current_user' end element.save count += 1 end if manual_order_changed_group order_where = manual_order_get_where_was pos = eval('self.'+position.to_s+'_was').to_i order_where[position] = [pos..Float::INFINITY] self.class.where(order_where).order(position).all.each do |element| element[position] = pos begin element.current_user = self.current_user rescue puts 'Cant set current_user' end element.save pos += 1 end end #if count == 0 # order_where[position] = [self[position]+2..Float::INFINITY] # data = self.class.where(order_where).where.not(:id => self.id).order(position).first # if data # data[position] = self[position]+1 # data.save # end # end end end |
#manual_order_before_create_element ⇒ Object
Check presence of position
28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/anoubis.rb', line 28 def manual_order_before_create_element # puts 'manual_order_before_create_element' position = self.[:field].to_sym # set order field for simplicity if !self[position] data = self.class.where(manual_order_get_where).maximum(position) data = if data then data + 1 else 0 end self[position] = data else self[position] = 0 if self[position].to_i < 0 # position must be 0 or greater manual_order_check_order_position 0 end end |
#manual_order_before_update_element ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/anoubis.rb', line 41 def manual_order_before_update_element # puts self.id.to_s+'> manual_order_before_update_element' if manual_order_changed_orders position = self.[:field].to_sym # set order field for simplicity if !manual_order_changed_group # puts self.id.to_s+'> Group was not changed' was_position = eval('self.'+position.to_s+'_was') # puts self.id.to_s+'> Position changed: '+was_position.to_s+' -> '+self[position].to_s if self[position] > was_position order_where = manual_order_get_where order_where[position] = was_position.to_i data = self.class.where(order_where).where.not(:id => self.id).first if !data # puts self.id.to_s+'> Update attributes' self.update_columns position => self[position] order_where[position] = [was_position.to_i..self[position].to_i] self.class.where(order_where).where.not(:id => self.id).order(position).all.each do |element| # puts self.id.to_s+'> Element id: '+element.id.to_s+' -> '+element[position].to_s element[position] -= 1 begin element.current_user = self.current_user rescue puts 'Cant set current_user' end element.save end end end end if self[self.[:field].to_sym] != 0 manual_order_check_order_position self.id end end end |
#manual_order_changed_group ⇒ Object
Check if element’s position changed in current order group
171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/anoubis.rb', line 171 def manual_order_changed_group changed = false if self..key? :groups self.[:groups].each do |key| # puts 'self.'+key.to_s+'_changed?' changed = eval('self.'+key.to_s+'_changed?') if !changed end end # puts 'manual_order_changed_group: '+changed.to_s return changed end |
#manual_order_changed_orders ⇒ Object
Check if element’s position was changed (or changed order group)
158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/anoubis.rb', line 158 def manual_order_changed_orders changed = eval('self.'+self.[:field].to_s+'_changed?') if self..key? :groups self.[:groups].each do |key| # puts 'self.'+key.to_s+'_changed?' changed = eval('self.'+key.to_s+'_changed?') if !changed end end # puts 'manual_order_changed_orders: '+changed.to_s return changed end |
#manual_order_check_order_position(id) ⇒ Object
Check manual order position
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/anoubis.rb', line 78 def manual_order_check_order_position (id) # puts self.id.to_s+'> manual_order_check_order_position' position = self.[:field].to_sym # set order field for simplicity if self[position].to_i > 0 order_where = manual_order_get_where # Check if elements present for order conditions (before current element position) order_where[position] = [0..self[position].to_i-1] data = self.class.where(order_where).where.not(:id => id).maximum(position) if !data self[position] = 0 # if elements not found then position equal 0 else self[position] = data+1 if self[position] != data+1 # if previous elements ends before position-1 then correct current position end end end |
#manual_order_get_where ⇒ Object
183 184 185 186 187 188 189 190 191 |
# File 'lib/anoubis.rb', line 183 def manual_order_get_where where = {} if self..key? :groups self.[:groups].each do |key| where[key.to_sym] = self[key.to_sym] end end return where end |
#manual_order_get_where_was ⇒ Object
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/anoubis.rb', line 193 def manual_order_get_where_was where = {} if self..key? :groups self.[:groups].each do |key| str = 'self.class.'+key.to_s.pluralize begin # puts str+'[(self.'+key.to_s+'_was).to_sym]' where[key.to_sym] = eval(str+'[(self.'+key.to_s+'_was).to_sym]') rescue # puts 'self.'+key.to_s+'_was' where[key.to_sym] = eval('self.'+key.to_s+'_was') end end end return where end |