-
Notifications
You must be signed in to change notification settings - Fork 35
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix cannot load complex into simple error when loading marshal dump (Fixes #20) #21
Conversation
…ixes ruby#20) This problem exists because Marshal.load calls Date.allocate, which uses a SimpleDateData. There doesn't seem to be any support for taking an existing Date instance and converting it from SimpleDateData to ComplexDateData. Work around this issue by making Date.allocate use a ComplexDateData. This causes problems in Date#initialize, so remove the Date#initialize method (keeping the date_initialize function, used internally for Date.civil). Alias Date.new to Date.civil, since they do the same thing.
431b9d3
to
2776e67
Compare
Thanks, I will release 3.0.1 after merging this. |
By adding a |
Well, I agree that a Date with a fractional day makes very little sense. However, those have always been allowed, so we would have to drop backwards compatibility if we want to prevent Dates with fractional days. That's a much more involved change than this patch. |
In a fraction case, it should be a |
I think this is an analogue to the relationship between |
So one of?: Date.jd 1/2r
# => #<DateTime: -4712-01-01T12:00:00+00:00 ((0j,43200s,0n),+0s,2299161j)>
# => #<Date: -4712-01-01 ((0j,0s,0n),+0s,2299161j)> |
Yes, ...but it sounds also curious that a class method to create a |
Well if we can agree on behavior, I can work on implementing them in preparation for date 4.0.0. However, in terms of fixing date 3.0.0, I think the pull request should be merged. |
In the long term, I'd love to drop date. |
DateTime doesn't add that much value anymore, since Ruby 2.6 at least, though some people may prefer it's date-based API as opposed to Time's second-based API. However, Date itself fills a very common need and I can't imagine dropping it from stdlib. |
In short term, we should remove |
I believe the reason for |
Just for
Seems not significant. |
Regarding the original issue, I think “a fractional date” should be warned at least. |
I'm fine warning for fractional date, especially if we plan to remove support for it in the next major version. |
Similar results.
|
@nobu if you remove |
@jeremyevans how does boost deal with dates? |
Why not just make |
@nobu I reviewed your promote-to-complex tree and am fine using that approach instead of the one in this pull request. The only suggestion I would make is dropping the warning. If we want to warn for fractional dates, we should do that in a separate commit that handles all cases, not just when marshalling. |
I agree that the warning is not useful. BTW, is it intentional that the added test can pass even if the unmarshaled object is not an instance of RTYPEDDATA(self)->data = dat;
+ RB_OBJ_WRITE(self, &RBASIC(self)->klass, cDateTime);
goto complex_data; |
We could add |
It didn't work at all as |
And I tried auto conversion, making |
@nobu how is it going? Any chances of getting |
No description provided.