Module: Mongoid::Listable::Callbacks::ClassMethods
- Defined in:
- lib/mongoid/listable/callbacks.rb
Instance Method Summary collapse
-
#added(name, meta) ⇒ Object
Defines a mongoid has_many relation after_add callback.
-
#created(name) ⇒ Object
Defines a mongoid before_create callback.
-
#destroyed(name) ⇒ Object
Defines a mongoid before_destroy callback.
-
#removed(name, meta) ⇒ Object
Defines a mongoid has_many relation before_remove callback.
-
#updated(name) ⇒ Object
Defines a mongoid before_update callback.
Instance Method Details
#added(name, meta) ⇒ Object
Defines a mongoid has_many relation after_add callback. Sets the position attribute to current relations length + 1
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/mongoid/listable/callbacks.rb', line 81 def added name, callback = "#{name.to_s.singularize}_added" define_method callback do |object| return unless object.new_record? field_name = field_name() if position = object.send(field_name) objects = object.siblings(field_name).gte(field_name => position) reposition objects, field_name, position + 1 else object.set field_name, has_many_count(name) end end [:after_add] = callback self end |
#created(name) ⇒ Object
Defines a mongoid before_create callback. Sets the position field to current object count + 1
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/mongoid/listable/callbacks.rb', line 17 def created name callback = "#{name}_#{__method__}" define_method callback do position = send(name) if position.present? siblings = siblings name reposition siblings.gte(name => position), name, position + 1 else set name, siblings(name).count + 1 end end before_create callback self end |
#destroyed(name) ⇒ Object
Defines a mongoid before_destroy callback.
Resets all sibling object’s higher in the list
60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/mongoid/listable/callbacks.rb', line 60 def destroyed name callback = "#{name}_#{__method__}" define_method callback do position = send name siblings = siblings(name).gt(name => position) reposition siblings, name, position end before_destroy callback self end |
#removed(name, meta) ⇒ Object
Defines a mongoid has_many relation before_remove callback. Resets the position index on all objects that came after
106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/mongoid/listable/callbacks.rb', line 106 def removed name, field_name = field_name callback = "#{name.to_s.singularize}_removed" define_method callback do |object| position = object.send field_name reposition object.siblings(field_name).gt(field_name => position), field_name, position object.unset field_name end [:after_remove] = callback self end |
#updated(name) ⇒ Object
Defines a mongoid before_update callback.
If the position column has changed, apply the change. Hoe the change is applied varies depending on the redrection of the update.
43 44 45 46 47 48 49 50 |
# File 'lib/mongoid/listable/callbacks.rb', line 43 def updated name callback = "#{name}_#{__method__}" define_method callback do apply_change_on name if send("#{name}_changed?") end before_update callback self end |