string_to_number 0.1.2 → 0.1.4

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