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 +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
|