Module: Mongoid::Listable::Callbacks::ClassMethods

Defined in:
lib/mongoid/listable/callbacks.rb

Instance Method Summary collapse

Instance Method Details

#added(name, meta) ⇒ Object

Defines a mongoid 1-n relation after_add callback. Sets the position attribute to current relations length + 1

Parameters:

  • name (Symbol)

    The name of the has_many relation

  • meta (MetaData)

    The MetaData class

Returns:

  • (Object)

    self

Since:

  • 0.0.6



68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/mongoid/listable/callbacks.rb', line 68

def added name, meta
  register_callback name, :after_add do |object|
    return unless object.new_record?
    field_name = position_field_name meta
    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, many(name).count
    end
  end
end

#created(name) ⇒ Object

Defines a mongoid before_create callback. Sets the position field to current object count + 1

Parameters:

  • The (Symbol)

    name of the position field

Returns:

  • (Object)

    self

Since:

  • 0.1.0



17
18
19
20
21
22
23
24
25
26
# File 'lib/mongoid/listable/callbacks.rb', line 17

def created name
  register_callback name, :before_create do
    if position = send(name)
      objects = siblings(name).gte(name => position)
      reposition objects, name, position + 1
    else
      set name, siblings(name).count + 1
    end
  end
end

#destroyed(name) ⇒ Object

Defines a mongoid before_destroy callback.

Resets all sibling object’s higher in the list

Parameters:

  • The (Symbol)

    name of the position field

Returns:

  • (Object)

    self

Since:

  • 0.1.0



52
53
54
55
56
57
# File 'lib/mongoid/listable/callbacks.rb', line 52

def destroyed name
  register_callback name, :before_destroy do
    siblings = siblings(name).gt(name => send(name))
    reposition siblings, name, send(name)
  end
end

#removed(name, meta) ⇒ Object

Defines a mongoid 1-n relation before_remove callback. Resets the position index on all objects that came after

Parameters:

  • name (Symbol)

    The name of the has_many relation

  • meta (MetaData)

    The MetaData class

Returns:

  • (Object)

    self

Since:

  • 0.0.6



90
91
92
93
94
95
96
97
98
# File 'lib/mongoid/listable/callbacks.rb', line 90

def removed name, meta                
  register_callback name, :before_remove do |object|
    field_name = position_field_name meta
    objects    = object.siblings(field_name)
      .gt(field_name => object.send(field_name))
    reposition objects, field_name, object.send(field_name)
    object.unset field_name            
  end
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.

Parameters:

  • The (Symbol)

    name of the position field

Returns:

  • (Object)

    self

Since:

  • 0.1.0



38
39
40
41
42
# File 'lib/mongoid/listable/callbacks.rb', line 38

def updated name
  register_callback name, :before_update do
    apply_change_on name if send("#{name}_changed?")
  end
end