class RuboCop::Cop::Style::DateTime

This cop checks for consistent usage of the `DateTime` class over the `Time` class. This cop is disabled by default since these classes, although highly overlapping, have particularities that make them not replaceable in certain situations when dealing with multiple timezones and/or DST.

@example

# bad - uses `DateTime` for current time
DateTime.now

# good - uses `Time` for current time
Time.now

# bad - uses `DateTime` for modern date
DateTime.iso8601('2016-06-29')

# good - uses `Time` for modern date
Time.iso8601('2016-06-29')

# good - uses `DateTime` with start argument for historical date
DateTime.iso8601('1751-04-23', Date::ENGLAND)

@example AllowCoercion: false (default)

# bad - coerces to `DateTime`
something.to_datetime

# good - coerces to `Time`
something.to_time

@example AllowCoercion: true

# good
something.to_datetime

# good
something.to_time

Constants

CLASS_MSG
COERCION_MSG

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/style/date_time.rb, line 60
def on_send(node)
  return unless date_time?(node) ||
                (to_datetime?(node) && disallow_coercion?)
  return if historic_date?(node)

  message = to_datetime?(node) ? COERCION_MSG : CLASS_MSG
  add_offense(node, message: message)
end

Private Instance Methods

disallow_coercion?() click to toggle source
# File lib/rubocop/cop/style/date_time.rb, line 71
def disallow_coercion?
  !cop_config['AllowCoercion']
end