string_to_number 0.1.2 → 0.1.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1529435ca326617af2103ea0e602fa592b6b6d8b
4
- data.tar.gz: 13a49542ece3604da2e20cc5fc5e3196ca1c6ab2
3
+ metadata.gz: 344ba3e9aaef1e44c05dd7e76f4ba19f0f10ad1c
4
+ data.tar.gz: 531faee1be5f9feb4935389f74aa47f84ca5fa44
5
5
  SHA512:
6
- metadata.gz: 5bb7ebf2501371113385f20ee0ace0dd97a78a647d10bbafddf3c89462b90f85f03e3fc4f99bb1eff7f6a4504c96220d20a5753a711d65f02cdff417e70e25d3
7
- data.tar.gz: 0ee4819962593291d193b75ad5ba8f28d0b8001b71f94b13bdb4d4012e3518e561094bd4ce276538569b5c4335203bab6f76585278469811787dfdb8db748be2
6
+ metadata.gz: df3acb7157af2369badd36fb71a956159a90f7b711ba6b04afdc7c23b71124429d27ee9a8510d99abf4d129c2288119f45459044b6bda7669c77d0e544d5b977
7
+ data.tar.gz: 702f06ab46ff773541df886c4a1ad074572bbbc5c02c38b22b95622d130ae4d39d01a8eb6bac8444853ed885c65a0c9a3625e25c0988dd7ea95560d553721af0
@@ -89,28 +89,45 @@ module StringToNumber
89
89
 
90
90
  private
91
91
 
92
- def extract(sentence, keys)
92
+ def extract(sentence, keys, detail: false)
93
93
  return 0 if sentence.nil? || sentence.empty?
94
94
  return EXCEPTIONS[sentence] unless EXCEPTIONS[sentence].nil?
95
95
 
96
- if m = /(\w+)?\s?(#{keys})/.match(sentence)
97
- m1_length = if !EXCEPTIONS[m[1]].nil?
98
- m[1].length
99
- else
100
- 0
101
- end
96
+ if result = /(?<f>.*?)\s?(?<m>#{keys})/.match(sentence)
97
+ # Deleting matching element
98
+ sentence.gsub!($&, '') if $&
102
99
 
103
- sentence[m.offset(1)[0], m[1].length] = '' unless EXCEPTIONS[m[1]].nil?
104
- sentence[(m.offset(2)[0] - m1_length), m[2].length] = '' unless POWERS_OF_TEN[m[2]].nil?
100
+ # Extract matching element
101
+ factor = EXCEPTIONS[result[:f]] || match(result[:f])
102
+ factor = 1 if factor.zero?
103
+ multiple_of_ten = 10**(POWERS_OF_TEN[result[:m]] || 0)
105
104
 
106
- return extract(sentence, keys) +
107
- (EXCEPTIONS[m[1]] || 1) * (10**(POWERS_OF_TEN[m[2]] || 0))
105
+ # Check if this multiple is over
106
+ if /#{higher_multiple(result[:m]).keys.join('|')}/.match(sentence)
107
+ details = extract(sentence, keys, detail: true)
108
+
109
+ factor = (factor * multiple_of_ten) + details[:factor]
110
+ multiple_of_ten = details[:multiple_of_ten]
111
+ sentence = details[:sentence]
112
+ end
113
+
114
+ if detail
115
+ return {
116
+ factor: factor,
117
+ multiple_of_ten: multiple_of_ten,
118
+ sentence: sentence
119
+ }
120
+ end
121
+
122
+ return extract(sentence, keys) + factor * multiple_of_ten
108
123
 
109
124
  elsif m = /(quatre(-|\s)vingt(s?)((-|\s)dix)?)((-|\s)?)(\w*)/.match(sentence)
110
125
  normalize_str = m[1].tr(' ', '-')
111
126
  normalize_str = normalize_str[0...-1] if normalize_str[normalize_str.length] == 's'
112
127
 
113
- return extract(sentence.gsub!(m[0], ''), keys) +
128
+ sentence.gsub!(m[0], '')
129
+
130
+ return extract(sentence, keys) +
114
131
  EXCEPTIONS[normalize_str] + (EXCEPTIONS[m[8]] || 0)
115
132
  else
116
133
  return match(sentence)
@@ -118,12 +135,20 @@ module StringToNumber
118
135
  end
119
136
 
120
137
  def match(sentence)
121
- sentence.tr('-', ' ').split(' ').reverse.inject(0) do |sum, word|
122
- sum += if EXCEPTIONS[word].nil? && POWERS_OF_TEN[word].nil?
123
- 0
124
- else
125
- (EXCEPTIONS[word] || (10 * POWERS_OF_TEN[word]))
126
- end
138
+ return if sentence.nil?
139
+
140
+ sentence.tr('-', ' ').split(' ').reverse.sum do |word|
141
+ if EXCEPTIONS[word].nil? && POWERS_OF_TEN[word].nil?
142
+ 0
143
+ else
144
+ (EXCEPTIONS[word] || (10 * POWERS_OF_TEN[word]))
145
+ end
146
+ end
147
+ end
148
+
149
+ def higher_multiple(multiple)
150
+ POWERS_OF_TEN.select do |_k, v|
151
+ v > POWERS_OF_TEN[multiple]
127
152
  end
128
153
  end
129
154
  end
@@ -1,3 +1,3 @@
1
1
  module StringToNumber
2
- VERSION = '0.1.2'.freeze
2
+ VERSION = '0.1.3'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: string_to_number
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabien Piette
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-01 00:00:00.000000000 Z
11
+ date: 2018-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler