Merged
Conversation
There was a problem hiding this comment.
Pull Request Overview
Introduces a global configuration for caching that lets users enable/disable cache and customize rounding precision, and applies it throughout the library.
- Add
Astronoby.configurationAPI to toggle cache and set per-feature precision - Implement
CacheKey.generateandNullCachefor precision-based caching - Update core modules (precession, nutation, RTS calculator, moon phases, geometric) and specs to use the new configuration
Reviewed Changes
Copilot reviewed 24 out of 24 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| lib/astronoby/configuration.rb | Add global configuration class for enabling/disabling cache and setting precisions |
| lib/astronoby/cache.rb | Introduce NullCache and CacheKey.generate for precision-aware cache keys |
| lib/astronoby/precession.rb | Refactor to use Astronoby.cache and flat cache keys via CacheKey.generate |
| lib/astronoby/nutation.rb | Refactor to use Astronoby.cache and CacheKey.generate |
| lib/astronoby/events/rise_transit_set_calculator.rb | Replace inline cache logic with global config + CacheKey.generate integration |
| lib/astronoby/events/moon_phases.rb | Use Astronoby.cache for moon phases with configurable precision |
| lib/astronoby/bodies/solar_system_body.rb | Integrate global cache and CacheKey.generate in geometric position calculations |
| lib/astronoby.rb | Require the new configuration file |
| spec/astronoby/configuration_spec.rb | Add tests for cache enable/disable and precision settings |
| spec/astronoby/cache_spec.rb | Update cache tests to clear state after each example |
| spec/astronoby/bodies/*_spec.rb (venus, uranus, sun, saturn, etc.) | Update expected values and add with cache enabled contexts |
lib/astronoby/configuration.rb
Outdated
Comment on lines
+58
to
+59
| @cache_instance = nil | ||
| Cache.instance.clear if cache_enabled |
There was a problem hiding this comment.
In reset_cache!, @cache_instance is unused and clearing via Cache.instance.clear may bypass NullCache. Consider removing @cache_instance, calling cache.clear (which respects NullCache), and simplifying the reset logic.
Suggested change
| @cache_instance = nil | |
| Cache.instance.clear if cache_enabled | |
| cache.clear |
698ce14 to
d986fa2
Compare
d986fa2 to
d913757
Compare
Merged
rhannequin
added a commit
that referenced
this pull request
Sep 1, 2025
## 0.8.0 - 2025-09-01 _If you are upgrading: please see [UPGRADING.md]._ ### Bug fixes * Fix UPGRADING documentation ([#178]) * Fix possible division by zero in RTS ([#185]) ### Features * Introduce performance benchmark ([#183]) * Cache positions in RTS calculator ([#182]) * Internal global LRU cache ([#186]) * Global configuration ([#187]) * Compute the constellation a body is in ([#199]) * Add `#phase_angle` and `#illuminated_fraction` to planets ([#200]) * Apparent magnitude ([#201]) * Add #events_between to TwilightCalculator with better accuracy ([#204]) * `#angular_diameter` on Solar System bodies ([#207]) * Fix constellation boundaries near 24h right ascension ([#209]) ### Improvements * Bump standard from 1.49.0 to 1.50.0 by @dependabot ([#177]) * Bump ephem from 0.3.0 to 0.4.1 by @dependabot ([#181], [#191]) * Bump irb from 1.14.3 to 1.15.2 by @dependabot ([#184]) * Bump rspec from 3.13.0 to 3.13.1 by @dependabot ([#188]) * Bump benchmark from 0.4.0 to 0.4.1 by @dependabot ([#189]) * Bump rake from 13.2.1 to 13.3.0 by @dependabot ([#190]) * Bump matrix from 0.4.2 to 0.4.3 by @dependabot ([#193]) * Update rubyzip requirement from ~> 2.3 to ~> 3.0 by @dependabot ([#194]) * Bump rubyzip from 3.0.0 to 3.0.2 by @dependabot ([#202], [#206]) * Exclude benchmarks from release ([#196]) * `Epoch` refactoring into `JulianDate` ([#197]) * Support Ruby 3.4.4 ([#198]) * Bump actions/checkout from 4 to 5 ([#203]) * Internal documentation ([#205]) ### Backward-incompatible changes * `Epoch` refactoring into `JulianDate` ([#197]) * `#angular_diameter` on Solar System bodies ([#207]) * Rename "epoch" ([#208]) ### Closed issues * Consider adding typical usage/deployment info ([#179]) * Performance degradation in v0.7 ([#180]) **Full Changelog**: v0.7.0...v0.8.0 [#177]: #177 [#178]: #178 [#179]: #179 [#180]: #180 [#181]: #181 [#182]: #182 [#183]: #183 [#184]: #184 [#185]: #185 [#186]: #186 [#187]: #187 [#188]: #188 [#189]: #189 [#190]: #190 [#191]: #191 [#193]: #193 [#194]: #194 [#196]: #196 [#197]: #197 [#198]: #198 [#199]: #199 [#200]: #200 [#201]: #201 [#202]: #202 [#203]: #203 [#204]: #204 [#205]: #205 [#206]: #206 [#207]: #207 [#208]: #208 [#209]: #209 [UPGRADING.md]: https://github.com/rhannequin/astronoby/blob/main/UPGRADING.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
With #186, global cache was introduced to increase the performance of the library on the main features. However, because this caching implementation goes with a small reduction of precision (instants are rounded to increase the chance of hitting it), it felt odd to force the user to use it, and to use it exclusively of the author decided.
This introduces a global configuration with a nice API to let the user customise it.
Usage
Currently, the configuration has two purposes:
This will enable caching globally and geometric positions will be cached based on a rounding of 0.00001 on the instant. As the instant is stored as a Julian Day, this represents 0.1 seconds: the same geometric position won't be re-computed if its instant falls into 0.1 seconds of a previously computed one.
Defaults
By default, caching is disabled. I want to avoid new users discovering the library and having unexpected results. The default behaviour is to compute everything from scratch constantly, except positions in the RTS calculator during computation.
Performance
With no cache by default, the performance is back to a few commits before, even slightly less performant due to the new added complexity. However, with cache enabled, we're back to interesting performance, with the added bonus of customisable configuration.