123456789_123456789_123456789_123456789_123456789_

Module: Mongoid::Timestamps::Timeless::ClassMethods

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Extended In:
Defined in: lib/mongoid/timestamps/timeless.rb

Instance Attribute Summary

Instance Method Summary

Instance Attribute Details

#timeless?true | false (readonly)

Returns whether the current class should skip timestamping. This is true when either a block-based timeless scope is active on the current thread/fiber, or the deprecated per-class counter is set.

Returns:

  • (true | false)

    Whether the current class should skip timestamping.

[ GitHub ]

  
# File 'lib/mongoid/timestamps/timeless.rb', line 190

def timeless?
  Timeless.suppressing_timestamps? || !!Timeless[name]
end

Instance Method Details

#clear_timeless_optiontrue

Removes the timeless option on the current class.

Returns:

  • (true)

    Always true.

[ GitHub ]

  
# File 'lib/mongoid/timestamps/timeless.rb', line 153

def clear_timeless_option
  if counter = Timeless[name]
    counter -= 1
    set_timeless_counter(counter)
  end
  true
end

#clear_timeless_option_on_updatetrue

Sets to remove the timeless option when the next instance of the current class is updated.

Returns:

  • (true)

    Always true.

[ GitHub ]

  
# File 'lib/mongoid/timestamps/timeless.rb', line 165

def clear_timeless_option_on_update
  return unless counter = Timeless[name]

  counter -= 1 if self < Mongoid::Timestamps::Created
  counter -= 1 if self < Mongoid::Timestamps::Updated
  set_timeless_counter(counter)
end

#set_timeless_counter(counter) ⇒ Integer | nil

Clears the timeless counter for the current class if the value has reached zero.

Parameters:

  • counter (Integer)

    The counter value.

Returns:

  • (Integer | nil)

    The counter value, or nil if the counter was cleared.

[ GitHub ]

  
# File 'lib/mongoid/timestamps/timeless.rb', line 180

def set_timeless_counter(counter)
  Timeless[name] = (counter == 0) ? nil : counter
end

#timeless(&block) ⇒ Object | Class (readonly)

Skip timestamping for the duration of the given block, or (in the deprecated, block-less form) for the next persistence operation.

Examples:

Create a document but don't timestamp (block form).

Person.timeless { Person.create(title: "Sir") }

Create a document but don't timestamp (deprecated form).

Person.timeless.create(:title => "Sir")

Returns:

  • (Object | Class)

    The return value of the block, or (in the block-less form) the class this was called on.

[ GitHub ]

  
# File 'lib/mongoid/timestamps/timeless.rb', line 128

def timeless(&block)
  return Timeless.with_timeless(&block) if block

  locations = caller_locations

  # if this is called from the #timeless instance method, look up one
  # level higher for the call site
  locations.shift if locations[0].path == __FILE__

  Mongoid.deprecation_warning(
    :timeless_sans_block,
    'Calling #timeless without a block is deprecated; pass a block ' \
    'instead, e.g. `record.timeless { record.save }`.',
    locations
  )
  counter = 0
  counter += 1 if self < Mongoid::Timestamps::Created
  counter += 1 if self < Mongoid::Timestamps::Updated
  Timeless[name] = counter
  self
end