Enables infinite precision on Money attributes based on column type#1
Open
marcusmateus wants to merge 4 commits intomasterfrom
Open
Enables infinite precision on Money attributes based on column type#1marcusmateus wants to merge 4 commits intomasterfrom
marcusmateus wants to merge 4 commits intomasterfrom
Conversation
Uses work on `money` gem (ShippingEasy/money#2) and the `monetize` gem (ShippingEasy/monetize#1) to add infinite_precision support at the instance level. Leveraging that work these changes set the precision on the Money instance for a model attribute based on that attributes backing column type. If it is backed by a :decimal column an infinite precision Money instance is created. Otherwise a normal precision instance is created.
Also provides a setting `infer_precision` that will tell `monetize` to
base the precision on the backing column type if it is not explicitly
provided.
For backwards compatability the feature works as follows:
1. If an explicit option is provided to `monetize` that is used
2. If no explicit option, and `infer_precision` is not set (defaults
to false), then use the global `default_infinite_precision`.
3. If no explicit option, and `infer_precision` *is* set, use
`infinite_precision` if the attribute's column type is `:decimal`.
If `options[:infinite_precision]` is not set the default will automatically be used. There is no need to assign it explicitely.
Precision inference only works if the model's backing table already exists. If it does not, we are likely in a migration.
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.
Uses work on
moneygem (ShippingEasy/money#2) and themonetizegem (ShippingEasy/monetize#1) to add infinite_precision support at the instance level. Leveraging that work these changes set the precision on the Money instance for a model attribute based on that attributes backing column type. If it is backed by a:decimalcolumn an infinite precision Money instance is created. Otherwise a normal precision instance is created.I considered allowing the precision to be passed as an option on
monetize, but it seemed awkward to have the precision not match the backing column type. If you suddenly want more / less precision, you can simply change the column. Perhaps that was overly prescriptive though. Similarly, the current approach does not respect the global setting for precisionMoney.default_infinite_precisionand instead favors the precision implied by the backing column type.