Fully initialize TZInfo::TimezoneTransitionDefinition object before freeze #80
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
TZInfo::Timezone
objects could potentially be deep frozen before internal instances ofTZInfo::TimezoneTransitionDefinition
(which they may contain) will be fully initialized. If this happens then invokingat
method will raiseRuntimeError: can't modify frozen TZInfo::TimezoneTransitionDefinition
exception (because of lazily computed@at
instance variable).Situation can be complicated with use of
ActiveSupport::TimeWithZone
instances (in Ruby on Rails projects for example) which can share cachedTZInfo::Timezone
instances internally - so deep freezing anyActiveSupport::TimeWithZone
instance in one place of the code can cause mentioned exceptions to be raised in other, unrelated places.The solution in this PR is similar to
activesupport
gem code, see ActiveSupport::TimeWithZone#freeze for example.