string_to_number 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
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