Problems Extending DateTime

M

Matthew Lipper

Howdy,

I'm writing my first Ruby application and have a few super-newbie
questions, so bear with me...I'm trying to add date precision to the
existing Date and DateTime classes.

My first attempt involves a module with a simple nested value class and
a standalone subclass of DateTime:

require 'date'

module Runt
module DatePrecision

YEAR=0
...
HOUR_OF_DAY=3
...etc.

HOUR_OF_DAY_PREC = Precision.new(HOUR_OF_DAY)

def to_hour_of_day(arg)
#DateTimes are immutable
HOUR_OF_DAY_PREC.to_p(
DateTime,
*[arg.year,arg.mon,arg.day,arg.hour,0,0])
end

class Precision
include Comparable
attr :precision

def initialize(prec)
@precision = prec
end

def <=>(other)
self.precision <=> other.precision
end

def to_p(klass, *args)
klass.new(*args)
end
end
end
end
--
require 'date'

class DateWithPrecision < DateTime

include Runt::DatePrecision

attr :precision

def initialize(*args)
@precision = args.pop
super(*args)
end

#This doesn't work either?!
def initialize(yr=1,mon=1,day=1,hr=0,min=0,sec=0)
super(yr,mon,day,hr,min,sec)
end
end

However when I do something like this:

day_precise
= DateWithPrecision.new(1998,12,12,14,58,32,HOUR_OF_DAY_PREC)

or even this

day_precise = DateWithPrecision.new(1998,12,12,14,58,32)

I get errors like the following:

ArgumentError: wrong number of arguments(6 for 3)
dateprecisiontest.rb:116:in `initialize'
dateprecisiontest.rb:116:in `initialize'
/usr/lib/ruby/1.8/date.rb:1175:in `new0'
/usr/lib/ruby/1.8/date.rb:1175:in `new'
dateprecisiontest.rb:56:in `test_to_precision'

4 tests, 16 assertions, 0 failures, 1 errors

I can't seem to call Date/DateTime's constructor from my subclass; even
when I don't add or change arguments.

Is it, in fact, a bad idea to have a module create instance variables?
Is there another, simpler/better way of doing this?

I'm running Ruby 1.8.1 on RedHat 9.

Any feedback is greatly appreciated.

Thanks!

Matt
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,777
Messages
2,569,604
Members
45,218
Latest member
JolieDenha

Latest Threads

Top