Similar as previous change made for Date methods.
In most cases, this is solved by using rb_obj_class(self) instead of hard coding rhrd_class. This does require an API change for rhrd__from_hash, which now takes the class as the first argument.
Previously, Date was hard coded in a few places, so that if you did Class.new(Date).new + 1, you got an instance of Date back, instead of an instance of the subclass. This adds specs for many cases to ensure that the correct class is used. In some cases, these specs pass without code changes, in others the following commit is required. Problem pointed out by aquasync (ruby-ole gem author) as a comment on issue #15.
If it is hard coded, you know it will fit in a Fixnum, so INT2FIX is safe. Many other places in the library LONG2NUM is used where INT2FIX may also work, but I'd have to check each case to be sure.
In certain cases, `home_run --install` or `home_run command` is necessary on 1.9. Projects like Bundler that manipulate the load path and load things in a certain order may break when used with home_run unless you use one of the above. Add a special note about Rails 3, in order to help some users that need to use "require 'home_run'".
Previously, it had the 1.8 behavior of returning the fraction of the second as a fraction of the day, even on 1.9. This increases compatibility with the 1.9 stdlib. This also adds a spec for the :sec_fraction entry of Date._parse, though that is the fraction of the second on both 1.8 and 1.9.
This removes the use of the %hhi format specifier, by using the %i format specifier and manually casting to int. Other changes involve explicit casting and the use of literal doubles instead of integers. This also fixes a couple of places where Data_Get_Struct would be passed in expression where it would be evaluated twice.
Previously, strptime grabbed an arbitrary number of digits for the %Y and %G formats. Now it operates like the standard library, checking to see if %Y or %G is followed by a numeric literal or format, and restricting the number of digits to 4 if so.
Previously, it wasn't handling the order of operations properly, only multipling the fractional part by the negative.
… C files Switch to the standard C way of doing things, with a shared header file. This bloats the code a bit as we have to add prototypes that were unnecessary before, as well as add extern for some static variables. However, it's probably better to do things in a standard way. Thanks to Luis Lavena for suggesting this.