string_to_number 0.1.2 → 0.1.4

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
- SHA1:
3
- metadata.gz: 1529435ca326617af2103ea0e602fa592b6b6d8b
4
- data.tar.gz: 13a49542ece3604da2e20cc5fc5e3196ca1c6ab2
2
+ SHA256:
3
+ metadata.gz: a276cf6011ac538555479dc8d7c9bac9a7407260dda2eb19c19aa4d8a0f2a5d6
4
+ data.tar.gz: 28a0572f134a4bad54891c5ee2090b443173086eb839bbb54e8bf22cfc13a968
5
5
  SHA512:
6
- metadata.gz: 5bb7ebf2501371113385f20ee0ace0dd97a78a647d10bbafddf3c89462b90f85f03e3fc4f99bb1eff7f6a4504c96220d20a5753a711d65f02cdff417e70e25d3
7
- data.tar.gz: 0ee4819962593291d193b75ad5ba8f28d0b8001b71f94b13bdb4d4012e3518e561094bd4ce276538569b5c4335203bab6f76585278469811787dfdb8db748be2
6
+ metadata.gz: ce7e72e418010126c0c6c5e65476346c0632a1e0dd86bf64e384cbcd6141c18b9a9001de8f86d64e3b28ff909d7782a24f9d52a140a13266b4b6a1d72af9dd54
7
+ data.tar.gz: a4ee07e83cca8044f5719e7741b246c85fef4051f766e40a22b97cb75451c9dbe6b5607ef7232c7fa101204cdd7e62ad8cb0dbbd7b3f973d1e9b13359b8de0f3
data/.gitignore CHANGED
@@ -1,6 +1,5 @@
1
1
  /.bundle/
2
2
  /.yardoc
3
- /Gemfile.lock
4
3
  /_yardoc/
5
4
  /coverage/
6
5
  /doc/
data/Gemfile.lock ADDED
@@ -0,0 +1,35 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ string_to_number (0.1.4)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ diff-lcs (1.5.0)
10
+ rake (13.0.6)
11
+ rspec (3.11.0)
12
+ rspec-core (~> 3.11.0)
13
+ rspec-expectations (~> 3.11.0)
14
+ rspec-mocks (~> 3.11.0)
15
+ rspec-core (3.11.0)
16
+ rspec-support (~> 3.11.0)
17
+ rspec-expectations (3.11.1)
18
+ diff-lcs (>= 1.2.0, < 2.0)
19
+ rspec-support (~> 3.11.0)
20
+ rspec-mocks (3.11.1)
21
+ diff-lcs (>= 1.2.0, < 2.0)
22
+ rspec-support (~> 3.11.0)
23
+ rspec-support (3.11.1)
24
+
25
+ PLATFORMS
26
+ x86_64-linux
27
+
28
+ DEPENDENCIES
29
+ bundler
30
+ rake
31
+ rspec
32
+ string_to_number!
33
+
34
+ BUNDLED WITH
35
+ 2.3.23
@@ -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.4'.freeze
3
3
  end
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
32
  spec.require_paths = ['lib']
33
33
 
34
- spec.add_development_dependency 'bundler', '~> 1.13'
35
- spec.add_development_dependency 'rake', '~> 10.0'
36
- spec.add_development_dependency 'rspec', '~> 3.0'
34
+ spec.add_development_dependency 'bundler'
35
+ spec.add_development_dependency 'rake'
36
+ spec.add_development_dependency 'rspec'
37
37
  end
metadata CHANGED
@@ -1,57 +1,57 @@
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.4
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: 2022-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.13'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.13'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '3.0'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '3.0'
54
+ version: '0'
55
55
  description: A ruby gem to convert French words into numbers.
56
56
  email:
57
57
  - fab.piette@gmail.com
@@ -64,6 +64,7 @@ files:
64
64
  - ".travis.yml"
65
65
  - CODE_OF_CONDUCT.md
66
66
  - Gemfile
67
+ - Gemfile.lock
67
68
  - LICENSE.txt
68
69
  - README.md
69
70
  - Rakefile
@@ -93,8 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
94
  - !ruby/object:Gem::Version
94
95
  version: '0'
95
96
  requirements: []
96
- rubyforge_project:
97
- rubygems_version: 2.6.14
97
+ rubygems_version: 3.1.6
98
98
  signing_key:
99
99
  specification_version: 4
100
100
  summary: A ruby gem to convert French words into numbers.