phonetics 1.5.1 → 1.5.2

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
  SHA256:
3
- metadata.gz: e49461607b3cbc24a642bdad0e8d47c43ead842664842981506d5a986127c759
4
- data.tar.gz: ce687e8b47599cbdd2a6cdeaee5c9f3e4c9c790ed4aa238aa0791c9d54bbc989
3
+ metadata.gz: 551a25deff1697f690f93a1b0df33eb6c47800d4b77ac313be9a27583439d32f
4
+ data.tar.gz: 142a54e76defe55e5fbef13df79bc1d308ed46fa8cbcb8da3d4d1dde3a78447d
5
5
  SHA512:
6
- metadata.gz: 71fbf0f477dc163fe2b4e889c8fb3514270d10c1564cec59c4a7fc43b292167fb00f438748fccd2cb8e5f5eea03abc93e420ee74166bb8205f31fe11cf8a76e4
7
- data.tar.gz: 8ef9015bdda0df6c6ad079a71b69d1ced751eb1eeb68b1f839b8c3042aaf3349d7a25c7f382c5aadedccfb85bf27a43fcf46b6b65f6a1ae12cdcd70c4f645c89
6
+ metadata.gz: fa2d8c53d0536936b64e13ca6aae3ada7b75d327e399d2301424009264b53aeaacf961b1bdd39ab54af8e8f7087e2dd277b94d99f373f445e070999ba18535fa
7
+ data.tar.gz: 2b0c41e648878df94ff8b493e7484ecbee544cb430ebc0a87ea1a11323c8a546123c2d5b2e3f96211ccee2a04b7e19cdf20ab46abc5c7d6fe15ab6a13e9ed8aa
data/.gitignore CHANGED
@@ -12,3 +12,4 @@
12
12
  .ruby-version
13
13
  .ruby-version
14
14
  *.so
15
+ Gemfile.lock
data/.rubocop.yml ADDED
@@ -0,0 +1,47 @@
1
+ ---
2
+ AllCops:
3
+ Exclude:
4
+ - Rakefile
5
+
6
+ Metrics/AbcSize:
7
+ Enabled: false
8
+
9
+ Metrics/ClassLength:
10
+ Enabled: false
11
+
12
+ Metrics/BlockLength:
13
+ Enabled: false
14
+
15
+ Metrics/LineLength:
16
+ Enabled: false
17
+
18
+ Metrics/MethodLength:
19
+ Enabled: false
20
+
21
+ Naming/ConstantName:
22
+ Enabled: false
23
+
24
+ Naming/UncommunicativeMethodParamName:
25
+ Enabled: false
26
+
27
+ Style/Documentation:
28
+ Enabled: false
29
+
30
+ Style/AsciiComments:
31
+ Enabled: false
32
+
33
+ Style/ModuleFunction:
34
+ EnforcedStyle: extend_self
35
+
36
+ Style/MultilineBlockChain:
37
+ Enabled: false
38
+
39
+ Style/NumericPredicate:
40
+ Enabled: false
41
+
42
+ Style/TrailingCommaInHashLiteral:
43
+ EnforcedStyleForMultiline: consistent_comma
44
+
45
+ Layout/AlignHash:
46
+ EnforcedHashRocketStyle: separator
47
+ EnforcedColonStyle: separator
data/.travis.yml CHANGED
@@ -2,4 +2,5 @@ sudo: false
2
2
  language: ruby
3
3
  rvm:
4
4
  - 2.5.1
5
- before_install: gem install bundler -v 1.16.2
5
+ - 2.6.3
6
+ before_install: gem install bundler
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ source 'https://rubygems.org'
4
4
 
5
5
  # Specify your gem's dependencies in phonetics.gemspec
6
6
  gemspec
data/Rakefile CHANGED
@@ -1,6 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rake/extensiontask'
3
5
  require 'rspec/core/rake_task'
6
+ require 'rubocop/rake_task'
4
7
 
5
8
  Rake::ExtensionTask.new('c_levenshtein') do |extension|
6
9
  extension.ext_dir = 'ext/c_levenshtein'
@@ -22,4 +25,6 @@ task compile: 'compile:phonetic_cost'
22
25
 
23
26
  RSpec::Core::RakeTask.new(:spec)
24
27
 
25
- task :default => :spec
28
+ RuboCop::RakeTask.new
29
+
30
+ task default: [:compile, :rubocop, :spec]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5.1
1
+ 1.5.2
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Loads mkmf which is used to make makefiles for Ruby extensions
4
- require "mkmf"
4
+ require 'mkmf'
5
5
 
6
6
  # The destination
7
- dir_config("phonetics/levenshtein")
7
+ dir_config('phonetics/levenshtein')
8
8
 
9
9
  # Do the work
10
- create_makefile("phonetics/c_levenshtein")
10
+ create_makefile('phonetics/c_levenshtein')
data/lib/phonetics.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'delegate'
2
4
 
3
5
  module Phonetics
@@ -10,7 +12,6 @@ module Phonetics
10
12
  # Phonetics::String.new("wətɛvɝ").each_phoneme.to_a
11
13
  # => ["w", "ə", "t", "ɛ", "v", "ɝ"]
12
14
  class String < SimpleDelegator
13
-
14
15
  # Group all phonemes by how many characters they have. Use this to walk
15
16
  # through a string finding phonemes (looking for longest ones first)
16
17
  def self.phonemes_by_length
@@ -29,16 +30,15 @@ module Phonetics
29
30
  while idx < chars.length
30
31
  found = false
31
32
  self.class.phonemes_by_length.each do |size, phonemes|
32
- if idx + size <= chars.length
33
- candidate = chars[idx..idx+size-1].join
34
- if phonemes.include?(candidate)
35
- y.yield candidate
36
- idx += size
37
- found = true
38
- break
39
- else
40
- end
41
- end
33
+ next unless idx + size <= chars.length
34
+
35
+ candidate = chars[idx..idx + size - 1].join
36
+ next unless phonemes.include?(candidate)
37
+
38
+ y.yield candidate
39
+ idx += size
40
+ found = true
41
+ break
42
42
  end
43
43
  idx += 1 unless found
44
44
  end
@@ -76,7 +76,7 @@ module Phonetics
76
76
  'u' => { F1: 350, F2: 650, rounded: true }, # Guessing From other vowels
77
77
  'ʊ' => { F1: 350, F2: 650, rounded: true },
78
78
  # Frequencies from http://videoweb.nie.edu.sg/phonetic/vowels/measurements.html
79
- }
79
+ }.freeze
80
80
 
81
81
  def phonemes
82
82
  @phonemes ||= FormantFrequencies.keys
@@ -90,8 +90,8 @@ module Phonetics
90
90
  formants1 = FormantFrequencies.fetch(phoneme1)
91
91
  formants2 = FormantFrequencies.fetch(phoneme2)
92
92
 
93
- @minmax_f1 ||= FormantFrequencies.values.minmax {|a, b| a[:F1] <=> b[:F1] }.map {|h| h[:F1] }
94
- @minmax_f2 ||= FormantFrequencies.values.minmax {|a, b| a[:F2] <=> b[:F2] }.map {|h| h[:F2] }
93
+ @minmax_f1 ||= FormantFrequencies.values.minmax { |a, b| a[:F1] <=> b[:F1] }.map { |h| h[:F1] }
94
+ @minmax_f2 ||= FormantFrequencies.values.minmax { |a, b| a[:F2] <=> b[:F2] }.map { |h| h[:F2] }
95
95
 
96
96
  # Get an x and y value for each input phoneme scaled between 0.0 and 1.0
97
97
  # We'll use the scaled f1 as the 'x' and the scaled f2 as the 'y'
@@ -105,7 +105,7 @@ module Phonetics
105
105
 
106
106
  # When we have four values we can use the pythagorean theorem on them
107
107
  # (order doesn't matter)
108
- Math.sqrt((f1_distance ** 2) + (f2_distance ** 2))
108
+ Math.sqrt((f1_distance**2) + (f2_distance**2))
109
109
  end
110
110
  end
111
111
 
@@ -116,22 +116,24 @@ module Phonetics
116
116
  # sibilant fricatives and non-sibilant fricatives
117
117
  # TODO: this is unfinished and possibly a bad idea
118
118
  MannerDistances = {
119
- 'Nasal' => %w[continuant],
120
- 'Stop' => %w[],
121
- 'Sibilant fricative' => %w[continuant fricative],
119
+ 'Nasal' => %w[continuant],
120
+ 'Stop' => %w[],
121
+ 'Sibilant fricative' => %w[continuant fricative],
122
122
  'Non-sibilant fricative' => %w[continuant non_sibilant fricative],
123
- 'Approximant' => %w[],
124
- 'Tap/Flap' => %w[],
125
- 'Trill' => %w[],
126
- 'Lateral fricative' => %w[continuant fricative],
127
- 'Lateral approximant' => %w[],
128
- 'Lateral tap/flap' => %w[],
123
+ 'Approximant' => %w[],
124
+ 'Tap/Flap' => %w[],
125
+ 'Trill' => %w[],
126
+ 'Lateral fricative' => %w[continuant fricative],
127
+ 'Lateral approximant' => %w[],
128
+ 'Lateral tap/flap' => %w[],
129
129
  }.freeze
130
130
 
131
131
  # This chart (columns 2 through the end, anyway) is a direct port of
132
132
  # https://en.wikipedia.org/wiki/International_Phonetic_Alphabet#Letters
133
- # We # store the consonant table in this format to make updating it easier.
134
- ChartData = %Q{ | Labio-velar | Bi-labial | Labio-dental | Linguo-labial | Dental | Alveolar | Post-alveolar | Retro-flex | Palatal | Velar | Uvular | Pharyngeal | Glottal
133
+ # We store the consonant table in this format to make updating it easier.
134
+ #
135
+ # rubocop:disable Layout/TrailingWhitespace
136
+ ChartData = %( | Labio-velar | Bi-labial | Labio-dental | Linguo-labial | Dental | Alveolar | Post-alveolar | Retro-flex | Palatal | Velar | Uvular | Pharyngeal | Glottal
135
137
  Nasal | | m̥ m | ɱ | n̼ | | n̥ n | | ɳ̊ ɳ | ɲ̊ ɲ | ŋ̊ ŋ | ɴ | |
136
138
  Stop | | p b | p̪ b̪ | t̼ d̼ | | t d | | ʈ ɖ | c ɟ | k g | q ɢ | ʡ | ʔ
137
139
  Sibilant fricative | | | | | | s z | ʃ ʒ | ʂ ʐ | ɕ ʑ | | | |
@@ -142,12 +144,13 @@ module Phonetics
142
144
  Lateral fricative | | | | | | ɬ ɮ | | ɭ̊˔ ɭ˔ | ʎ̝̊ ʎ̝ | ʟ̝̊ ʟ̝ | | |
143
145
  Lateral approximant | | | | | | l̥ l | | ɭ̊ ɭ | ʎ̥ ʎ | ʟ̥ ʟ | ʟ̠ | |
144
146
  Lateral tap/flap | | | | | | ɺ | | ɭ̆ | ʎ̆ | ʟ̆ | | |
145
- }
147
+ )
148
+ # rubocop:enable Layout/TrailingWhitespace
146
149
 
147
150
  # Parse the ChartData into a lookup table where we can retrieve attributes
148
151
  # for each phoneme
149
152
  def features
150
- @features ||= begin
153
+ @features ||= begin
151
154
  header, *manners = ChartData.lines
152
155
 
153
156
  _, *positions = header.chomp.split(' | ')
@@ -165,9 +168,9 @@ module Phonetics
165
168
  manner.strip!
166
169
  positions.zip(columns).each do |position, phoneme_text|
167
170
  data = {
168
- position: position,
171
+ position: position,
169
172
  position_index: position_indexes[position],
170
- manner: manner,
173
+ manner: manner,
171
174
  }
172
175
  # If there is a character in the first byte then this articulation
173
176
  # has a voiceless phoneme. The symbol may use additional characters
@@ -218,19 +221,20 @@ module Phonetics
218
221
  Consonants.phonemes + Vowels.phonemes
219
222
  end
220
223
 
221
- Symbols = Consonants.phonemes.reduce({}) {|acc, p| acc.update p => :consonant }.merge(
224
+ Symbols = Consonants.phonemes.reduce({}) { |acc, p| acc.update p => :consonant }.merge(
222
225
  Vowels.phonemes.reduce({}) { |acc, p| acc.update p => :vowel }
223
226
  )
224
227
 
225
228
  def distance(phoneme1, phoneme2)
226
229
  return 0 if phoneme1 == phoneme2
230
+
227
231
  distance_map.fetch(phoneme1).fetch(phoneme2)
228
232
  end
229
233
 
230
234
  def distance_map
231
235
  @distance_map ||= (
232
236
  Vowels.phonemes + Consonants.phonemes
233
- ).permutation(2).each_with_object(Hash.new { |h, k| h[k] = {} } ) do |pair, scores|
237
+ ).permutation(2).each_with_object(Hash.new { |h, k| h[k] = {} }) do |pair, scores|
234
238
  p1, p2 = *pair
235
239
  score = _distance(p1, p2)
236
240
  scores[p1][p2] = score
@@ -253,7 +257,7 @@ module Phonetics
253
257
  # => 1413 (624 + (10 * 778))
254
258
  def grapheme_as_utf_8_long(grapheme)
255
259
  grapheme.unpack('U*').each_with_index.reduce(0) do |total, (byte, i)|
256
- total += (10**i) * byte
260
+ total + (10**i) * byte
257
261
  end
258
262
  end
259
263
 
@@ -299,7 +303,7 @@ module Phonetics
299
303
  distances.each do |(b, b_i), distance|
300
304
  writer.puts " case #{b_i}: // #{a}->#{b}"
301
305
  writer.puts " return (float) #{distance};"
302
- writer.puts " break;"
306
+ writer.puts ' break;'
303
307
  end
304
308
  writer.puts ' }'
305
309
  end
@@ -312,11 +316,11 @@ module Phonetics
312
316
 
313
317
  def _distance(phoneme1, phoneme2)
314
318
  types = [Symbols.fetch(phoneme1), Symbols.fetch(phoneme2)].sort
315
- if types == [:consonant, :vowel]
319
+ if types == %i[consonant vowel]
316
320
  1.0
317
- elsif types == [:vowel, :vowel]
321
+ elsif types == %i[vowel vowel]
318
322
  Vowels.distance(phoneme1, phoneme2)
319
- elsif types == [:consonant, :consonant]
323
+ elsif types == %i[consonant consonant]
320
324
  Consonants.distance(phoneme1, phoneme2)
321
325
  end
322
326
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'c_levenshtein'
2
4
  # Using the Damerau version of the Levenshtein algorithm, with phonetic feature
3
5
  # count used instead of a binary edit distance calculation
@@ -17,7 +19,7 @@ module Phonetics
17
19
  ensure_is_phonetic!(str1, str2)
18
20
  internal_phonetic_distance(
19
21
  Phonetics.as_utf_8_long(str1),
20
- Phonetics.as_utf_8_long(str2),
22
+ Phonetics.as_utf_8_long(str2)
21
23
  )
22
24
  end
23
25
 
@@ -25,11 +27,11 @@ module Phonetics
25
27
  [str1, str2].each do |string|
26
28
  string.chars.each do |char|
27
29
  unless Phonetics.phonemes.include?(char)
28
- raise ArgumentError, "#{char.inspect} is not a character in the International Phonetic Alphabet. #{self.class.name} only works with IPA-transcribed strings"
30
+ msg = "#{char.inspect} is not a character in the International Phonetic Alphabet. #{self.class.name} only works with IPA-transcribed strings"
31
+ raise ArgumentError, msg
29
32
  end
30
33
  end
31
34
  end
32
35
  end
33
-
34
36
  end
35
37
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../phonetics'
2
4
 
3
5
  # Using the Damerau version of the Levenshtein algorithm, with phonetic feature
@@ -12,7 +14,6 @@ require_relative '../phonetics'
12
14
  # https://hal.archives-ouvertes.fr/hal-01474904/document
13
15
  module Phonetics
14
16
  class RubyLevenshtein
15
-
16
17
  attr_reader :str1, :str2, :len1, :len2, :matrix
17
18
 
18
19
  def initialize(ipa_str1, ipa_str2, verbose = false)
@@ -28,6 +29,7 @@ module Phonetics
28
29
 
29
30
  def distance
30
31
  return 0 if walk.empty?
32
+
31
33
  print_matrix if @verbose
32
34
  walk.last[:distance]
33
35
  end
@@ -41,21 +43,22 @@ module Phonetics
41
43
  def ensure_is_phonetic!
42
44
  [str1, str2].each do |string|
43
45
  string.chars.each do |char|
44
- unless Phonetics.phonemes.include?(char)
45
- raise ArgumentError, "#{char.inspect} is not a character in the International Phonetic Alphabet. #{self.class.name} only works with IPA-transcribed strings"
46
- end
46
+ raise ArgumentError, "#{char.inspect} is not a character in the International Phonetic Alphabet. #{self.class.name} only works with IPA-transcribed strings" unless Phonetics.phonemes.include?(char)
47
47
  end
48
48
  end
49
49
  end
50
50
 
51
51
  def walk
52
52
  res = []
53
- i, j = len2, len1
53
+ i = len2
54
+ j = len1
54
55
  return res if i == 0 && j == 0
55
- begin
56
+
57
+ loop do
56
58
  i, j, char = char_data(i, j)
57
59
  res.unshift char
58
- end while i > 0 && j > 0
60
+ break if i == 0 || j == 0
61
+ end
59
62
  res
60
63
  end
61
64
 
@@ -67,13 +70,13 @@ module Phonetics
67
70
  options = [
68
71
  ins(i, j),
69
72
  del(i, j),
70
- subst(i, j),
73
+ subst(i, j)
71
74
  ]
72
75
  # This is where we implement the modifications to Damerau-Levenshtein
73
76
  # according to https://hal.archives-ouvertes.fr/hal-01474904/document
74
77
  phonetic_cost = Phonetics.distance(str1[j - 1], str2[i - 1])
75
78
  matrix[i][j] = options.min + phonetic_cost
76
- puts "------- #{j}/#{i} #{j + (i*(len1+1))}" if @verbose
79
+ puts "------- #{j}/#{i} #{j + (i * (len1 + 1))}" if @verbose
77
80
  print_matrix if @verbose
78
81
  end
79
82
  end
@@ -90,16 +93,16 @@ module Phonetics
90
93
 
91
94
  def find_previous(i, j)
92
95
  [
93
- [ :insert, { cost: ins(i, j), move_to: [i, j - 1] }],
94
- [ :delete, { cost: del(i, j), move_to: [i, j - 1] }],
95
- [ :substitute, { cost: subst(i, j), move_to: [i, j - 1] }],
96
- ].select do |operation, data|
96
+ [:insert, { cost: ins(i, j), move_to: [i, j - 1] }],
97
+ [:delete, { cost: del(i, j), move_to: [i, j - 1] }],
98
+ [:substitute, { cost: subst(i, j), move_to: [i, j - 1] }]
99
+ ].select do |_operation, data|
97
100
  # Don't send us out of bounds
98
101
  data[:move_to][0] >= 0 && data[:move_to][1] >= 0
99
- end.sort_by do |operation, data|
102
+ end.min_by do |_operation, data|
100
103
  # pick the cheapest one
101
104
  data[:value]
102
- end.first
105
+ end
103
106
  end
104
107
 
105
108
  # TODO: Score the edit distance lower if sonorant sounds are found in sequence.
@@ -125,20 +128,20 @@ module Phonetics
125
128
  # phoneme within the same string.
126
129
  # "aek" -> [0, 1, 1.61, 2.61]
127
130
  def initial_distances(str1, str2)
128
- if len1 == 0 || len2 == 0
129
- starting_distance = 0
130
- else
131
- starting_distance = Phonetics.distance(str1[0], str2[0])
132
- end
133
-
134
- distances1 = (1..(str1.length-1)).reduce([0, starting_distance]) do |acc, i|
135
- acc << acc.last + Phonetics.distance(str1[i-1], str1[i])
131
+ starting_distance = if len1 == 0 || len2 == 0
132
+ 0
133
+ else
134
+ Phonetics.distance(str1[0], str2[0])
135
+ end
136
+
137
+ distances1 = (1..(str1.length - 1)).reduce([0, starting_distance]) do |acc, i|
138
+ acc << acc.last + Phonetics.distance(str1[i - 1], str1[i])
136
139
  end
137
- distances2 = (1..(str2.length-1)).reduce([0, starting_distance]) do |acc, i|
138
- acc << acc.last + Phonetics.distance(str2[i-1], str2[i])
140
+ distances2 = (1..(str2.length - 1)).reduce([0, starting_distance]) do |acc, i|
141
+ acc << acc.last + Phonetics.distance(str2[i - 1], str2[i])
139
142
  end
140
143
 
141
- [ distances1, distances2 ]
144
+ [distances1, distances2]
142
145
  end
143
146
 
144
147
  def prepare_matrix
@@ -154,11 +157,11 @@ module Phonetics
154
157
  # This is a helper method for developers to use when exploring this
155
158
  # algorithm.
156
159
  def print_matrix
157
- puts " #{str1.chars.map {|c| c.ljust(9, " ") }.join}"
160
+ puts " #{str1.chars.map { |c| c.ljust(9, ' ') }.join}"
158
161
  matrix.each_with_index do |row, ridx|
159
162
  print ' ' if ridx == 0
160
163
  print "#{str2[ridx - 1]} " if ridx > 0
161
- row.each_with_index do |cell, cidx|
164
+ row.each_with_index do |cell, _cidx|
162
165
  cell ||= 0.0
163
166
  print cell.to_s[0, 8].ljust(8, '0')
164
167
  print ' '
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Phonetics
2
4
  VERSION = File.read(File.join(File.dirname(__FILE__), '../../VERSION')).chomp
3
5
  end
data/phonetics.gemspec CHANGED
@@ -1,26 +1,30 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Gem::Specification.new do |spec|
2
- spec.name = "phonetics"
4
+ spec.name = 'phonetics'
3
5
  spec.version = File.read(File.join(File.dirname(__FILE__), './VERSION'))
4
- spec.authors = ["Jack Danger"]
5
- spec.email = ["github@jackcanty.com"]
6
+ spec.authors = ['Jack Danger']
7
+ spec.email = ['github@jackcanty.com']
8
+
9
+ spec.summary = 'tools for linguistic code using the International Phonetic Alphabet'
10
+ spec.description = 'tools for linguistic code using the International Phonetic Alphabet'
11
+ spec.homepage = 'https://github.com/JackDanger/phonetics'
12
+ spec.license = 'MIT'
13
+
6
14
 
7
- spec.summary = %q{tools for linguistic code using the International Phonetic Alphabet}
8
- spec.description = %q{tools for linguistic code using the International Phonetic Alphabet}
9
- spec.homepage = "https://github.com/JackDanger/phonetics"
10
- spec.license = "MIT"
15
+ spec.extensions = ["ext/c_levenshtein/extconf.rb"]
11
16
 
12
17
  # Specify which files should be added to the gem when it is released.
13
18
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
14
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
19
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
15
20
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
21
  end
17
- spec.require_paths = ["lib"]
22
+ spec.require_paths = ['lib']
18
23
 
19
- spec.add_development_dependency "pry-byebug"
20
- spec.add_development_dependency "rake-compiler", "~> 1.0"
21
- spec.add_development_dependency "rubocop", "~> 0.52"
22
- spec.add_development_dependency "ruby-prof", "~> 0.17"
23
- spec.add_development_dependency 'bundler', '~> 1.16'
24
+ spec.add_development_dependency 'bundler'
25
+ spec.add_development_dependency 'pry-byebug'
24
26
  spec.add_development_dependency 'rake'
25
- spec.add_development_dependency 'rspec', '~> 3.0'
27
+ spec.add_development_dependency 'rake-compiler'
28
+ spec.add_development_dependency 'rspec'
29
+ spec.add_development_dependency 'rubocop'
26
30
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phonetics
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jack Danger
@@ -11,7 +11,7 @@ cert_chain: []
11
11
  date: 2019-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: pry-byebug
14
+ name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -25,63 +25,49 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake-compiler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '1.0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '1.0'
41
- - !ruby/object:Gem::Dependency
42
- name: rubocop
28
+ name: pry-byebug
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
- - - "~>"
31
+ - - ">="
46
32
  - !ruby/object:Gem::Version
47
- version: '0.52'
33
+ version: '0'
48
34
  type: :development
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
- - - "~>"
38
+ - - ">="
53
39
  - !ruby/object:Gem::Version
54
- version: '0.52'
40
+ version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
- name: ruby-prof
42
+ name: rake
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
- - - "~>"
45
+ - - ">="
60
46
  - !ruby/object:Gem::Version
61
- version: '0.17'
47
+ version: '0'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - "~>"
52
+ - - ">="
67
53
  - !ruby/object:Gem::Version
68
- version: '0.17'
54
+ version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
- name: bundler
56
+ name: rake-compiler
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
- - - "~>"
59
+ - - ">="
74
60
  - !ruby/object:Gem::Version
75
- version: '1.16'
61
+ version: '0'
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - "~>"
66
+ - - ">="
81
67
  - !ruby/object:Gem::Version
82
- version: '1.16'
68
+ version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
- name: rake
70
+ name: rspec
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - ">="
@@ -95,33 +81,34 @@ dependencies:
95
81
  - !ruby/object:Gem::Version
96
82
  version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
- name: rspec
84
+ name: rubocop
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
- - - "~>"
87
+ - - ">="
102
88
  - !ruby/object:Gem::Version
103
- version: '3.0'
89
+ version: '0'
104
90
  type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
- - - "~>"
94
+ - - ">="
109
95
  - !ruby/object:Gem::Version
110
- version: '3.0'
96
+ version: '0'
111
97
  description: tools for linguistic code using the International Phonetic Alphabet
112
98
  email:
113
99
  - github@jackcanty.com
114
100
  executables: []
115
- extensions: []
101
+ extensions:
102
+ - ext/c_levenshtein/extconf.rb
116
103
  extra_rdoc_files: []
117
104
  files:
118
105
  - ".github/workflows/gempush.yml"
119
106
  - ".gitignore"
120
107
  - ".rspec"
108
+ - ".rubocop.yml"
121
109
  - ".travis.yml"
122
110
  - CODE_OF_CONDUCT.md
123
111
  - Gemfile
124
- - Gemfile.lock
125
112
  - LICENSE.txt
126
113
  - README.md
127
114
  - Rakefile
data/Gemfile.lock DELETED
@@ -1,66 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- phonetics (1.1.1)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- ast (2.4.0)
10
- byebug (11.0.1)
11
- coderay (1.1.2)
12
- diff-lcs (1.3)
13
- jaro_winkler (1.5.2)
14
- method_source (0.9.2)
15
- parallel (1.17.0)
16
- parser (2.6.3.0)
17
- ast (~> 2.4.0)
18
- pry (0.12.2)
19
- coderay (~> 1.1.0)
20
- method_source (~> 0.9.0)
21
- pry-byebug (3.7.0)
22
- byebug (~> 11.0)
23
- pry (~> 0.10)
24
- rainbow (3.0.0)
25
- rake (12.3.2)
26
- rake-compiler (1.0.7)
27
- rake
28
- rspec (3.8.0)
29
- rspec-core (~> 3.8.0)
30
- rspec-expectations (~> 3.8.0)
31
- rspec-mocks (~> 3.8.0)
32
- rspec-core (3.8.0)
33
- rspec-support (~> 3.8.0)
34
- rspec-expectations (3.8.2)
35
- diff-lcs (>= 1.2.0, < 2.0)
36
- rspec-support (~> 3.8.0)
37
- rspec-mocks (3.8.0)
38
- diff-lcs (>= 1.2.0, < 2.0)
39
- rspec-support (~> 3.8.0)
40
- rspec-support (3.8.0)
41
- rubocop (0.69.0)
42
- jaro_winkler (~> 1.5.1)
43
- parallel (~> 1.10)
44
- parser (>= 2.6)
45
- rainbow (>= 2.2.2, < 4.0)
46
- ruby-progressbar (~> 1.7)
47
- unicode-display_width (>= 1.4.0, < 1.7)
48
- ruby-prof (0.17.0)
49
- ruby-progressbar (1.10.0)
50
- unicode-display_width (1.6.0)
51
-
52
- PLATFORMS
53
- ruby
54
-
55
- DEPENDENCIES
56
- bundler (~> 1.16)
57
- phonetics!
58
- pry-byebug
59
- rake
60
- rake-compiler (~> 1.0)
61
- rspec (~> 3.0)
62
- rubocop (~> 0.52)
63
- ruby-prof (~> 0.17)
64
-
65
- BUNDLED WITH
66
- 1.17.2