Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Date::today not defined?

Tags:

date

class

ruby

Why are only some methods of the Date class loaded without an explicit:

require 'date'

line?

For example:

irb(main):002:0> Date.today
NoMethodError: undefined method `today' for Date:Class
from (irb):2
from /Users/mwlang/.rvm/rubies/ruby-2.0.0-p0/bin/irb:16:in `<main>'

And then...

irb(main):003:0> require 'date'
=> true

leads to...

irb(main):004:0> Date.today
=> #<Date: 2013-04-12 ((2456395j,0s,0n),+0s,2299161j)>

The documentation at http://ruby-doc.org/stdlib-2.0/libdoc/date/rdoc/Date.html seems to offer no explicit explanation for this behavior. Comments on #irc say its a stdlib rather than core library, but core doesn't even have Date class defined and launching irc with -f (suppress reading .irbrc) to get a minimal load still appears to load some sort of base/core Date class.

Would like a technical explanation of what's going on and references to the Ruby docs that explain this so I understand for other such encounters as I switch from Ruby 1.8.7 to Ruby 2.0.0.

like image 335
Michael Lang Avatar asked Apr 12 '13 13:04

Michael Lang


People also ask

Why datetime is not defined?

The Python "NameError: name 'datetime' is not defined" occurs when we use the datetime module without importing it first. To solve the error, import the datetime module before using it - import datetime . Here is an example of how the error occurs. Copied!

How do you insert today's date in python?

today() method to get the current local date. By the way, date. today() returns a date object, which is assigned to the today variable in the above program. Now, you can use the strftime() method to create a string representing date in different formats.

Is not defined in Python?

The Python "NameError: function is not defined" occurs when we try to call a function that is not declared or before it is declared. To solve the error, make sure you haven't misspelled the function's name and call it after it has been declared. Here is an example of how the error occurs.

How do I change datetime format in Python?

Use datetime. strftime(format) to convert a datetime object into a string as per the corresponding format . The format codes are standard directives for mentioning in which format you want to represent datetime. For example, the %d-%m-%Y %H:%M:%S codes convert date to dd-mm-yyyy hh:mm:ss format.


2 Answers

The Date class you are seeing is defined in lib/rubygems/specification.rb for compatibility reasons:

# date.rb can't be loaded for `make install` due to miniruby
# Date is needed for old gems that stored #date as Date instead of Time.
class Date; end

It's an empty class definition and it doesn't provide any methods or functionality.

If starting IRB without RubyGems, that Date class is gone:

$ ruby --disable-gems -S irb
irb(main):001:0> Date
NameError: uninitialized constant Date

Update

The empty Date class was removed in RubyGems 2.4.0:

  • RubyGems no longer defines an empty Date class. Pull Request #948 by Benoit Daloze.
like image 142
Stefan Avatar answered Oct 24 '22 16:10

Stefan


Complementing @Stefan answer:

Please note that This has been removed, in later version of rubygems.

  • Changelog here
  • Merge Request here
like image 20
astreal Avatar answered Oct 24 '22 18:10

astreal