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 +4 -4
- data/lib/string_to_number/to_number.rb +43 -18
- data/lib/string_to_number/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 344ba3e9aaef1e44c05dd7e76f4ba19f0f10ad1c
|
4
|
+
data.tar.gz: 531faee1be5f9feb4935389f74aa47f84ca5fa44
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
97
|
-
|
98
|
-
|
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
|
-
|
104
|
-
|
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
|
-
|
107
|
-
|
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
|
-
|
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
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
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
|
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.
|
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-
|
11
|
+
date: 2018-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|