Class: Money::FormattingRules
- Inherits:
-
Object
- Object
- Money::FormattingRules
- Defined in:
- lib/money/money/formatting_rules.rb,
sig/lib/money/money/formatting_rules.rbs
Instance Attribute Summary collapse
-
#currency ⇒ Object
readonly
Returns the value of attribute currency.
Instance Method Summary collapse
- #[](key) ⇒ Object
- #default_format ⇒ String
- #default_formatting_rules ⇒ Hash[Symbol, untyped]
- #delimiter_pattern_rule(rules) ⇒ ::Regexp
- #determine_format ⇒ String
-
#has_key?(key) ⇒ Boolean
rubocop:disable Naming/PredicatePrefix.
-
#initialize(currency, *raw_rules) ⇒ FormattingRules
constructor
A new instance of FormattingRules.
-
#normalize_formatting_rules(rules) ⇒ Hash
Cleans up formatting rules.
- #translate_formatting_rules(rules) ⇒ Hash[Symbol, untyped]
Constructor Details
#initialize(currency, *raw_rules) ⇒ FormattingRules
Returns a new instance of FormattingRules.
5 6 7 8 9 10 11 12 13 14 15 |
# File 'lib/money/money/formatting_rules.rb', line 5 def initialize(currency, *raw_rules) @currency = currency # support for old format parameters @rules = normalize_formatting_rules(raw_rules) @rules = default_formatting_rules.merge(@rules) unless @rules[:ignore_defaults] @rules = translate_formatting_rules(@rules) if @rules[:translate] @rules[:format] ||= determine_format @rules[:delimiter_pattern] ||= delimiter_pattern_rule(@rules) end |
Instance Attribute Details
#currency ⇒ Object (readonly)
Returns the value of attribute currency.
29 30 31 |
# File 'lib/money/money/formatting_rules.rb', line 29 def currency @currency end |
Instance Method Details
#[](key) ⇒ Object
17 18 19 |
# File 'lib/money/money/formatting_rules.rb', line 17 def [](key) @rules[key] end |
#default_format ⇒ String
77 78 79 80 81 82 83 |
# File 'lib/money/money/formatting_rules.rb', line 77 def default_format if currency.format currency.format else currency.symbol_first? ? "%u%n" : "%n %u" end end |
#default_formatting_rules ⇒ Hash[Symbol, untyped]
60 61 62 |
# File 'lib/money/money/formatting_rules.rb', line 60 def default_formatting_rules Money.default_formatting_rules || {} end |
#delimiter_pattern_rule(rules) ⇒ ::Regexp
85 86 87 88 89 90 91 92 |
# File 'lib/money/money/formatting_rules.rb', line 85 def delimiter_pattern_rule(rules) if rules[:south_asian_number_formatting] # from https://blog.revathskumar.com/2014/11/regex-comma-seperated-indian-currency-format.html /(\d+?)(?=(\d\d)+(\d)(?!\d))(\.\d+)?/ else /(\d)(?=(?:\d{3})+(?:[^\d]{1}|$))/ end end |
#determine_format ⇒ String
73 74 75 |
# File 'lib/money/money/formatting_rules.rb', line 73 def determine_format Money.locale_backend&.lookup(:format, @currency) || default_format end |
#has_key?(key) ⇒ Boolean
rubocop:disable Naming/PredicatePrefix
22 23 24 |
# File 'lib/money/money/formatting_rules.rb', line 22 def has_key?(key) @rules.has_key? key end |
#normalize_formatting_rules(rules) ⇒ Hash
Cleans up formatting rules.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/money/money/formatting_rules.rb', line 36 def normalize_formatting_rules(rules) if rules.empty? rules = {} elsif rules.size == 1 rules = rules.pop rules = rules.dup if rules.is_a?(Hash) if rules.is_a?(Symbol) warn "[DEPRECATION] Use Hash when passing rules to Money#format." rules = { rules => true } end end if !rules.include?(:decimal_mark) && rules.include?(:separator) rules[:decimal_mark] = rules[:separator] end if !rules.include?(:thousands_separator) && rules.include?(:delimiter) rules[:thousands_separator] = rules[:delimiter] end rules end |
#translate_formatting_rules(rules) ⇒ Hash[Symbol, untyped]
64 65 66 67 68 69 70 71 |
# File 'lib/money/money/formatting_rules.rb', line 64 def translate_formatting_rules(rules) begin rules[:symbol] = I18n.t currency.iso_code, scope: "number.currency.symbol", raise: true rescue I18n::MissingTranslationData # Do nothing end rules end |