Module: Mongoid::Listable

Extended by:
ActiveSupport::Concern
Defined in:
lib/mongoid/listable.rb,
lib/mongoid/listable/macros.rb,
lib/mongoid/listable/version.rb,
lib/mongoid/listable/accessors.rb,
lib/mongoid/listable/callbacks.rb,
lib/mongoid/listable/extensions/array.rb,
lib/mongoid/listable/extensions/object.rb

Defined Under Namespace

Modules: Accessors, Callbacks, ClassMethods, Extensions, Macros

Constant Summary collapse

VERSION =
'0.2.6'

Instance Method Summary collapse

Instance Method Details

#embedded_many?Boolean

Returns:

  • (Boolean)


58
59
60
# File 'lib/mongoid/listable.rb', line 58

def embedded_many?
  embedded? && [:relation] == Mongoid::Relations::Embedded::Many
end

#embedded_one?Boolean

Returns:

  • (Boolean)


54
55
56
# File 'lib/mongoid/listable.rb', line 54

def embedded_one?
  embedded? && [:relation] == Mongoid::Relations::Embedded::One
end

#many(name) ⇒ Object

Finds unique instances of objects for a given relation Needed because the mongoid callbacks dont update has_many relations until after invoked.

Parameters:

  • name (Symbol)

    The name of the has_many relation

Since:

  • 0.2.1



33
34
35
# File 'lib/mongoid/listable.rb', line 33

def many name
  send(name).uniq(&:id)
end

#position_field_name(meta) ⇒ Object

Proxies to the class level determine_position_field_name

Parameters:

  • meta (MetaData)

    The MetaData class

See Also:

  • Class.field_name

Since:

  • 0.0.6



22
23
24
# File 'lib/mongoid/listable.rb', line 22

def position_field_name meta
  self.class.determine_position_field_name meta
end

#siblings(field = :position) ⇒ Array

Retrieves siblings of an object in a list. Scoped by the position fiels name

Returns:

  • (Array)

Since:

  • 0.1.0



43
44
45
46
47
48
49
50
51
52
# File 'lib/mongoid/listable.rb', line 43

def siblings field=:position
  klass = if embedded_one?
            _parent.send(.key).class
          elsif embedded_many?
            _parent.send(.key)
          else                
            self.class
          end
  klass.where(field.exists => true).ne(id: id)
end