numbers_in_words 0.3.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +2 -0
  3. data/.gitignore +1 -0
  4. data/.rspec +1 -0
  5. data/.rubocop.yml +35 -1148
  6. data/.travis.yml +14 -4
  7. data/Gemfile +4 -1
  8. data/README.md +6 -43
  9. data/Rakefile +3 -1
  10. data/bin/spec +0 -0
  11. data/lib/numbers_in_words.rb +44 -19
  12. data/lib/numbers_in_words/duck_punch.rb +12 -8
  13. data/lib/numbers_in_words/exceptional_numbers.rb +115 -0
  14. data/lib/numbers_in_words/fraction.rb +136 -0
  15. data/lib/numbers_in_words/number_group.rb +34 -25
  16. data/lib/numbers_in_words/parsing/fraction_parsing.rb +34 -0
  17. data/lib/numbers_in_words/parsing/number_parser.rb +98 -0
  18. data/lib/numbers_in_words/parsing/pair_parsing.rb +64 -0
  19. data/lib/numbers_in_words/parsing/parse_fractions.rb +45 -0
  20. data/lib/numbers_in_words/parsing/parse_individual_number.rb +68 -0
  21. data/lib/numbers_in_words/parsing/parse_status.rb +17 -0
  22. data/lib/numbers_in_words/parsing/special.rb +67 -0
  23. data/lib/numbers_in_words/parsing/to_number.rb +77 -0
  24. data/lib/numbers_in_words/powers_of_ten.rb +49 -0
  25. data/lib/numbers_in_words/to_word.rb +78 -13
  26. data/lib/numbers_in_words/version.rb +3 -1
  27. data/lib/numbers_in_words/writer.rb +69 -0
  28. data/numbers_in_words.gemspec +14 -13
  29. data/spec/exceptional_numbers_spec.rb +26 -0
  30. data/spec/fraction_spec.rb +152 -0
  31. data/spec/fractions_spec.rb +31 -0
  32. data/spec/non_monkey_patch_spec.rb +40 -15
  33. data/spec/number_group_spec.rb +12 -12
  34. data/spec/number_parser_spec.rb +31 -0
  35. data/spec/numbers_in_words_spec.rb +63 -70
  36. data/spec/numerical_strings_spec.rb +35 -0
  37. data/spec/spec_helper.rb +24 -4
  38. data/spec/to_word_spec.rb +18 -0
  39. data/spec/words_in_numbers_spec.rb +133 -116
  40. data/spec/writer_spec.rb +26 -0
  41. data/spec/years_spec.rb +27 -0
  42. metadata +49 -27
  43. data/lib/numbers_in_words/english/constants.rb +0 -93
  44. data/lib/numbers_in_words/english/language_writer_english.rb +0 -109
  45. data/lib/numbers_in_words/language_writer.rb +0 -31
  46. data/lib/numbers_in_words/number_parser.rb +0 -81
  47. data/lib/numbers_in_words/to_number.rb +0 -82
  48. data/spec/language_writer_spec.rb +0 -23
@@ -1,82 +0,0 @@
1
- class NumbersInWords::ToNumber
2
- delegate :to_s, to: :that
3
- delegate :powers_of_ten_to_i, :exceptions_to_i, to: :language
4
- attr_reader :that, :language
5
-
6
- def initialize that, language=NumbersInWords.language
7
- @that = that
8
- @language = language
9
- end
10
-
11
- def language
12
- if @language.is_a? Module
13
- @language
14
- else
15
- @language = NumbersInWords.const_get(@language)
16
- end
17
- end
18
-
19
- def handle_negative text
20
- -1 * (text.gsub(/^minus /, "")).in_numbers if text =~ /^minus /
21
- end
22
-
23
- def in_numbers
24
- text = to_s
25
-
26
- text = strip_punctuation text
27
- i = handle_negative text
28
- return i if i
29
-
30
- h = handle_decimals text
31
- return h if h
32
-
33
- integers = word_array_to_integers text.split(" ")
34
-
35
- NumbersInWords::NumberParser.parse integers
36
- end
37
-
38
- def strip_punctuation text
39
- text = text.downcase.gsub(/[^a-z ]/, " ")
40
- to_remove = true
41
-
42
- to_remove = text.gsub! " ", " " while to_remove
43
-
44
- text
45
- end
46
-
47
- def handle_decimals text
48
- match = text.match(/\spoint\s/)
49
- if match
50
- integer = match.pre_match.in_numbers
51
-
52
- decimal = decimal_portion match.post_match
53
-
54
- integer + decimal
55
- end
56
- end
57
-
58
-
59
- def decimal_portion text
60
- words = text.split " "
61
- integers = word_array_to_integers words
62
- decimal = "0." + integers.join()
63
- decimal.to_f
64
- end
65
-
66
- #handles simple single word numbers
67
- #e.g. one, seven, twenty, eight, thousand etc
68
- def word_to_integer word
69
- text = word.to_s.chomp.strip
70
-
71
- exception = exceptions_to_i[text]
72
- return exception if exception
73
-
74
- power = powers_of_ten_to_i[text]
75
- return 10 ** power if power
76
- end
77
-
78
- def word_array_to_integers words
79
- words.map { |i| word_to_integer i }.compact
80
- end
81
- end
82
-
@@ -1,23 +0,0 @@
1
- require './spec/spec_helper'
2
-
3
- describe NumbersInWords::English::LanguageWriterEnglish do
4
- it "should display numbers grouped" do
5
- count = 0
6
- @writer = NumbersInWords::English::LanguageWriterEnglish.new(2111)
7
- @writer.group_words(3) do |power, name, digits|
8
- case count
9
- when 0
10
- expect(power).to eq(3)
11
- expect(name).to eq("thousand")
12
- expect(digits).to eq(2)
13
- when 1
14
- expect(power).to eq(0)
15
- expect(name).to eq("one")
16
- expect(digits).to eq(111)
17
- end
18
- count += 1
19
- end
20
- end
21
- end
22
-
23
-