Class: Money::FormattingRules

Inherits:
Object
  • Object
show all
Defined in:
lib/money/money/formatting_rules.rb,
sig/lib/money/money/formatting_rules.rbs

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(currency, *raw_rules) ⇒ FormattingRules

Returns a new instance of FormattingRules.

Parameters:

  • currency (Object)
  • raw_rules (Object)


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

#currencyObject (readonly)

Returns the value of attribute currency.

Returns:

  • (Object)


29
30
31
# File 'lib/money/money/formatting_rules.rb', line 29

def currency
  @currency
end

Instance Method Details

#[](key) ⇒ Object

Parameters:

  • key (Object)

Returns:

  • (Object)


17
18
19
# File 'lib/money/money/formatting_rules.rb', line 17

def [](key)
  @rules[key]
end

#default_formatString

Returns:

  • (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_rulesHash[Symbol, untyped]

Returns:

  • (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

Parameters:

  • rules (Hash[Symbol, untyped])

Returns:

  • (::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_formatString

Returns:

  • (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

Parameters:

  • key (Object)

Returns:

  • (Boolean)


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.

Parameters:

  • rules (Hash)

Returns:

  • (Hash)


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]

Parameters:

  • rules (Hash[Symbol, untyped])

Returns:

  • (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