Module: StringToNumber

Defined in:
lib/string_to_number.rb,
lib/string_to_number/parser.rb,
lib/string_to_number/version.rb,
lib/string_to_number/to_number.rb

Defined Under Namespace

Classes: Parser, ToNumber

Constant Summary collapse

VERSION =
'0.2.1'

Class Method Summary collapse

Class Method Details

.cache_statsHash

Get cache performance statistics

Examples:

stats = StringToNumber.cache_stats
puts "Cache hit ratio: #{stats[:cache_hit_ratio]}"

Returns:

  • (Hash)

    Cache statistics including sizes and hit ratios



72
73
74
# File 'lib/string_to_number.rb', line 72

def cache_stats
  Parser.cache_stats
end

.clear_caches!void

This method returns an undefined value.

Clear all internal caches

Useful for testing, memory management, or when processing large volumes of unique inputs.



61
62
63
# File 'lib/string_to_number.rb', line 61

def clear_caches!
  Parser.clear_caches!
end

.in_numbers(sentence, use_optimized: true) ⇒ Integer

Convert French text to number

Examples:

Standard usage

in_numbers('vingt et un') #=> 21

Using original implementation

in_numbers('cent', use_optimized: false) #=> 100

Parameters:

  • sentence (String)

    French number text to convert

  • use_optimized (Boolean) (defaults to: true)

    Whether to use optimized parser (default: true)

Returns:

  • (Integer)

    The numeric value

Raises:

  • (ArgumentError)

    if sentence is not convertible to string



38
39
40
41
42
43
44
45
# File 'lib/string_to_number.rb', line 38

def in_numbers(sentence, use_optimized: true)
  if use_optimized
    Parser.convert(sentence)
  else
    # Fallback to original implementation for compatibility testing
    ToNumber.new(sentence).to_number
  end
end

.in_numbers_original(sentence) ⇒ Integer

Convert using original implementation (for compatibility testing)

Parameters:

  • sentence (String)

    French text to convert

Returns:

  • (Integer)

    The numeric value



51
52
53
# File 'lib/string_to_number.rb', line 51

def in_numbers_original(sentence)
  ToNumber.new(sentence).to_number
end

.valid_french_number?(text) ⇒ Boolean

Check if a string contains valid French number words

Parameters:

  • text (String)

    Text to validate

Returns:

  • (Boolean)

    true if text appears to contain French numbers



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/string_to_number.rb', line 81

def valid_french_number?(text)
  return false unless text.respond_to?(:to_s)

  normalized = text.to_s.downcase.strip
  return false if normalized.empty?

  # Check if any words are recognized French number words
  words = normalized.tr('-', ' ').split(/\s+/)
  recognized_words = words.count do |word|
    word == 'et' ||
      Parser::WORD_VALUES.key?(word) ||
      Parser::MULTIPLIERS.key?(word)
  end

  # Require at least 50% recognized words for validation
  recognized_words.to_f / words.size >= 0.5
end