From: Matthew Lipper Date: 2004-01-04T06:24:05+09:00 Subject: Problems Extending DateTime 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