edits 0.4.0 → 0.5.0

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: d51ead5c11a725d7c2efcdd8030098c67e20c765ae1c1d4a17843bb4f993f781
4
- data.tar.gz: dcec6dfc9b48f29050989edf108e9d930b49c66d73dbd29800466adf307b68eb
3
+ metadata.gz: e464255bd53bdeea1b7a599d4a8463518a46d4b836fca0a65be8148de7e793db
4
+ data.tar.gz: b65f244baa43185798e50bd0ee486cb40e923e200242d15f5c59ba2df02e0eec
5
5
  SHA512:
6
- metadata.gz: b7b82962d4b3fbbf84fa73d79052f449a7016529f5dd3b82960c1a9898df066f566ea3b768eec218500c65cdd55b57b34eb729f142a6fc2a0eced43415e35ef4
7
- data.tar.gz: 0a0c8e0f1593847a74e25c585c2c4265b4790a641b6ce5d9cebb5c9fda0e4d971313e03efb314e937c29eeef4b168459eb1e8c6f75fd22348635110f8467b07f
6
+ metadata.gz: e3ee90cc881ae7e73affb987052c3bc542e68c9e3538babd25f72c38d22adf76e6eda178ee8fa2b837b06cc84b610faa2695796b690336310a0219c806ea343b
7
+ data.tar.gz: 71999dca3d06c3cedba61b8ffbe4a9c844884149269b20f0e45a3f9191cdb900f465f61f0b0f3cd3cf0bf67f16a7c071cb20da474a1be88db91df4cf2e09ac33
@@ -0,0 +1,7 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: "/"
5
+ schedule:
6
+ interval: daily
7
+ open-pull-requests-limit: 10
@@ -0,0 +1,43 @@
1
+ name: Ruby Gem
2
+
3
+ on:
4
+ push:
5
+ tags: [ 'v*.*.*' ]
6
+
7
+ jobs:
8
+ build:
9
+ name: Build + Publish
10
+ runs-on: ubuntu-latest
11
+ permissions:
12
+ contents: read
13
+ packages: write
14
+
15
+ steps:
16
+ - uses: actions/checkout@v2
17
+ - name: Set up Ruby 2.7
18
+ uses: actions/setup-ruby@v1
19
+ with:
20
+ ruby-version: 2.7.x
21
+
22
+ - name: Publish to GPR
23
+ run: |
24
+ mkdir -p $HOME/.gem
25
+ touch $HOME/.gem/credentials
26
+ chmod 0600 $HOME/.gem/credentials
27
+ printf -- "---\n:github: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
28
+ gem build *.gemspec
29
+ gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
30
+ env:
31
+ GEM_HOST_API_KEY: "Bearer ${{secrets.GITHUB_TOKEN}}"
32
+ OWNER: ${{ github.repository_owner }}
33
+
34
+ - name: Publish to RubyGems
35
+ run: |
36
+ mkdir -p $HOME/.gem
37
+ touch $HOME/.gem/credentials
38
+ chmod 0600 $HOME/.gem/credentials
39
+ printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
40
+ gem build *.gemspec
41
+ gem push *.gem
42
+ env:
43
+ GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
@@ -0,0 +1,41 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ push:
12
+ pull_request:
13
+ branches: [ main ]
14
+
15
+ jobs:
16
+ test:
17
+
18
+ runs-on: ubuntu-latest
19
+ strategy:
20
+ matrix:
21
+ ruby-version: ["2.7", "3.0", "3.1"]
22
+ allow-failure: [false]
23
+ include:
24
+ - ruby-version: "ruby-head"
25
+ allow-failure: true
26
+ continue-on-error: ${{ matrix.allow-failure }}
27
+
28
+ steps:
29
+ - name: Checkout 🛎
30
+ uses: actions/checkout@v2
31
+ - name: Set up Ruby
32
+ uses: ruby/setup-ruby@v1
33
+ with:
34
+ ruby-version: ${{ matrix.ruby-version }}
35
+ bundler-cache: true
36
+ - name: Run tests
37
+ run: bundle exec rake
38
+ - name: Run codacy-coverage-reporter 📈
39
+ uses: codacy/codacy-coverage-reporter-action@v1
40
+ with:
41
+ project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
data/.rubocop.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.5
2
+ TargetRubyVersion: 2.7
3
3
  Metrics/AbcSize:
4
4
  Enabled: false
5
5
  Metrics/CyclomaticComplexity:
data/README.md CHANGED
@@ -1,14 +1,14 @@
1
1
  # Edits
2
2
 
3
- [![Gem Version](https://img.shields.io/gem/v/edits.svg)](https://rubygems.org/gems/edits)
4
- [![Build Status](https://travis-ci.org/tcrouch/edits.svg?branch=master)](https://travis-ci.org/tcrouch/edits)
5
- [![Codacy Badge](https://api.codacy.com/project/badge/Grade/64cb50b8e9ce4ec2a752d091e441b09d)](https://app.codacy.com/app/t.crouch/edits?utm_source=github.com&utm_medium=referral&utm_content=tcrouch/edits&utm_campaign=Badge_Grade_Dashboard)
6
- [![Inline docs](http://inch-ci.org/github/tcrouch/edits.svg?branch=master)](http://inch-ci.org/github/tcrouch/edits)
7
- [![Yard Docs](http://img.shields.io/badge/yard-docs-blue.svg)](http://rubydoc.info/github/tcrouch/edits)
3
+ [![Gem](https://img.shields.io/gem/v/edits)](https://rubygems.org/gems/edits)
4
+ [![GitHub Workflow Status (branch)](https://img.shields.io/github/workflow/status/tcrouch/edits/Ruby/main)](https://github.com/tcrouch/edits/actions/workflows/ruby.yml)
5
+ [![Inline docs](http://inch-ci.org/github/tcrouch/edits.svg?branch=master)](https://inch-ci.org/github/tcrouch/edits)
6
+ [![Yard Docs](https://img.shields.io/badge/yard-docs-informational)](https://rubydoc.info/github/tcrouch/edits)
8
7
 
9
8
  A collection of edit distance algorithms in Ruby.
10
9
 
11
- Includes Levenshtein, Restricted Edit (Optimal Alignment) and Damerau-Levenshtein distances, and Jaro & Jaro-Winkler similarity.
10
+ Includes Levenshtein, Restricted Edit (Optimal Alignment) and
11
+ Damerau-Levenshtein distances, and Jaro and Jaro-Winkler similarity.
12
12
 
13
13
  ## Installation
14
14
 
@@ -32,62 +32,57 @@ $ gem install edits
32
32
 
33
33
  ## Usage
34
34
 
35
- ### Levenshtein
35
+ ### Levenshtein variants
36
36
 
37
- Edit distance, accounting for deletion, addition and substitution.
37
+ Calculate the edit distance between two sequences with variants of the
38
+ Levenshtein distance algorithm.
38
39
 
39
40
  ```ruby
40
41
  Edits::Levenshtein.distance "raked", "bakers"
41
42
  # => 3
42
- Edits::Levenshtein.distance "iota", "atom"
43
- # => 4
44
- Edits::Levenshtein.distance "acer", "earn"
45
- # => 4
46
-
47
- # Max distance
48
- Edits::Levenshtein.distance_with_max "iota", "atom", 2
49
- # => 2
50
- Edits::Levenshtein.most_similar "atom", %w[tree rota toes racer]
51
- # => "toes"
43
+ Edits::RestrictedEdit.distance "iota", "atom"
44
+ # => 3
45
+ Edits::DamerauLevenshtein.distance "acer", "earn"
46
+ # => 3
52
47
  ```
53
48
 
54
- ### Restricted Edit (Optimal Alignment)
49
+ - **Levenshtein** edit distance, counting insertion, deletion and
50
+ substitution.
51
+ - **Restricted Damerau-Levenshtein** edit distance (aka **Optimal Alignment**),
52
+ counting insertion, deletion, substitution and transposition
53
+ (adjacent symbols swapped). Restricted by the condition that no substring is
54
+ edited more than once.
55
+ - **Damerau-Levenshtein** edit distance, counting insertion, deletion,
56
+ substitution and transposition (adjacent symbols swapped).
55
57
 
56
- Edit distance, accounting for deletion, addition, substitution and
57
- transposition (two adjacent characters are swapped). This variant is
58
- restricted by the condition that no sub-string is edited more than once.
58
+ | | Levenshtein | Restricted Damerau-Levenshtein | Damerau-Levenshtein |
59
+ |----------------------|-------------|--------------------------------|---------------------|
60
+ | "raked" vs. "bakers" | 3 | 3 | 3 |
61
+ | "iota" vs. "atom" | 4 | 3 | 3 |
62
+ | "acer" vs. "earn" | 4 | 4 | 3 |
59
63
 
60
- ```ruby
61
- Edits::RestrictedEdit.distance "raked", "bakers"
62
- # => 3
63
- Edits::RestrictedEdit.distance "iota", "atom"
64
- # => 3
65
- Edits::RestrictedEdit.distance "acer", "earn"
66
- # => 4
64
+ Levenshtein and Restricted Edit distances also have a bounded version.
67
65
 
66
+
67
+ ```ruby
68
68
  # Max distance
69
- Edits::RestrictedEdit.distance_with_max "iota", "atom", 2
70
- # => 2
71
- Edits::RestrictedEdit.most_similar "atom", %w[tree rota toes racer]
72
- # => "rota"
69
+ Edits::Levenshtein.distance_with_max "fghijk", "abcde", 3
70
+ # => 3
73
71
  ```
74
72
 
75
- ### Damerau-Levenshtein
76
-
77
- Edit distance, accounting for deletions, additions, substitution and
78
- transposition (two adjacent characters are swapped).
73
+ The convenience method `most_similar` searches for the best match to a
74
+ given sequence from a collection. It is similar to using `min_by`, but leverages
75
+ a maximum bound.
79
76
 
80
77
  ```ruby
81
- Edits::DamerauLevenshtein.distance "raked", "bakers"
82
- # => 3
83
- Edits::DamerauLevenshtein.distance "iota", "atom"
84
- # => 3
85
- Edits::DamerauLevenshtein.distance "acer", "earn"
86
- # => 3
78
+ Edits::RestrictedEdit.most_similar "atom", ["iota", "tome", "mown", "tame"]
79
+ # => "tome"
87
80
  ```
88
81
 
89
82
  ### Jaro & Jaro-Winkler
90
83
 
84
+ Calculate the Jaro and Jaro-Winkler similarity/distance of two sequences.
85
+
91
86
  ```ruby
92
87
  Edits::Jaro.similarity "information", "informant"
93
88
  # => 0.90235690235690236
@@ -102,6 +97,8 @@ Edits::JaroWinkler.distance "information", "informant"
102
97
 
103
98
  ### Hamming
104
99
 
100
+ Calculate the hamming distance between two sequences.
101
+
105
102
  ```ruby
106
103
  Edits::Hamming.distance("explorer", "exploded")
107
104
  # => 2
data/edits.gemspec CHANGED
@@ -25,13 +25,14 @@ Gem::Specification.new do |spec|
25
25
  spec.bindir = "exe"
26
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ["lib"]
28
+ spec.required_ruby_version = ">= 2.7"
28
29
 
29
- spec.add_development_dependency "benchmark-ips", "~> 2.7"
30
+ spec.add_development_dependency "benchmark-ips", "~> 2.8"
30
31
  spec.add_development_dependency "bundler", "~> 2.0"
31
32
  spec.add_development_dependency "rake", "~> 13.0"
32
- spec.add_development_dependency "redcarpet", "~> 3.4"
33
- spec.add_development_dependency "rspec", "~> 3.6"
34
- spec.add_development_dependency "simplecov", "~> 0.18"
33
+ spec.add_development_dependency "redcarpet", "~> 3.5"
34
+ spec.add_development_dependency "rspec", "~> 3.9"
35
+ spec.add_development_dependency "simplecov", "~> 0.21"
35
36
  spec.add_development_dependency "simplecov-lcov", "~> 0.8"
36
37
  spec.add_development_dependency "yard", "~> 0.9"
37
38
  end
data/lib/edits/compare.rb CHANGED
@@ -22,7 +22,7 @@ module Edits
22
22
  min_s = strings[0]
23
23
  min_d = distance(prototype, min_s)
24
24
 
25
- strings[1..-1].each do |s|
25
+ strings[1..].each do |s|
26
26
  return min_s if min_d.zero?
27
27
 
28
28
  d = distance_with_max(prototype, s, min_d)
data/lib/edits/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Edits
4
4
  # Current gem version
5
- VERSION = "0.4.0"
5
+ VERSION = "0.5.0"
6
6
  end
@@ -162,7 +162,7 @@ namespace :benchmark do
162
162
 
163
163
  x.report "literal, +" do
164
164
  m = []
165
- m << [rows] + Array.new(cols, 0)
165
+ m << ([rows] + Array.new(cols, 0))
166
166
  end
167
167
 
168
168
  x.compare!
@@ -195,7 +195,7 @@ namespace :benchmark do
195
195
 
196
196
  x.report "literal, +" do
197
197
  m = []
198
- m << [rows, inf] + Array.new(cols, 0)
198
+ m << ([rows, inf] + Array.new(cols, 0))
199
199
  end
200
200
 
201
201
  x.compare!
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: edits
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Crouch
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-10-18 00:00:00.000000000 Z
11
+ date: 2022-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: benchmark-ips
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.7'
19
+ version: '2.8'
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: '2.7'
26
+ version: '2.8'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -58,42 +58,42 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '3.4'
61
+ version: '3.5'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '3.4'
68
+ version: '3.5'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '3.6'
75
+ version: '3.9'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '3.6'
82
+ version: '3.9'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: simplecov
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0.18'
89
+ version: '0.21'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0.18'
96
+ version: '0.21'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: simplecov-lcov
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -132,10 +132,12 @@ executables: []
132
132
  extensions: []
133
133
  extra_rdoc_files: []
134
134
  files:
135
+ - ".github/dependabot.yml"
136
+ - ".github/workflows/gem-push.yml"
137
+ - ".github/workflows/ruby.yml"
135
138
  - ".gitignore"
136
139
  - ".rspec"
137
140
  - ".rubocop.yml"
138
- - ".travis.yml"
139
141
  - ".yardopts"
140
142
  - Gemfile
141
143
  - LICENSE.txt
@@ -167,14 +169,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
167
169
  requirements:
168
170
  - - ">="
169
171
  - !ruby/object:Gem::Version
170
- version: '0'
172
+ version: '2.7'
171
173
  required_rubygems_version: !ruby/object:Gem::Requirement
172
174
  requirements:
173
175
  - - ">="
174
176
  - !ruby/object:Gem::Version
175
177
  version: '0'
176
178
  requirements: []
177
- rubygems_version: 3.0.8
179
+ rubygems_version: 3.1.6
178
180
  signing_key:
179
181
  specification_version: 4
180
182
  summary: A collection of edit distance algorithms.
data/.travis.yml DELETED
@@ -1,35 +0,0 @@
1
- os: linux
2
- language: ruby
3
- cache: bundler
4
- rvm:
5
- - 2.4
6
- - 2.5
7
- - 2.6.5
8
- - 2.7
9
- - ruby-head
10
- - rbx-3
11
- before_install:
12
- - gem update --system
13
- - gem install bundler
14
- - sudo apt-get install jq
15
- - curl -LSs "$(curl -LSs https://api.github.com/repos/codacy/codacy-coverage-reporter/releases/latest | jq -r '.assets | map({name, browser_download_url} | select(.name | endswith(".jar"))) | .[0].browser_download_url')" -o codacy-coverage-reporter-assembly.jar
16
- after_success:
17
- - java -jar codacy-coverage-reporter-assembly.jar report -l Ruby -r coverage/lcov/edits.lcov
18
- jobs:
19
- allow_failures:
20
- - rvm: ruby-head
21
- - rvm: rbx-3
22
- fast_finish: true
23
- include:
24
- - stage: gem release
25
- if: tag IS present
26
- rvm: 2.6.5
27
- script: echo "Deploying to rubygems.org ..."
28
- deploy:
29
- provider: rubygems
30
- api_key:
31
- secure: NKUWS12yMpsMtPeKL+4X56xZ02p5y4R+HYQmgvxFNajOS42aTMXncx4eTnuHoNdKbh+x5yci+lbPr+j5t9qWo5GzJsxjqnFW4lO2V5O1ONBzcAB/g6BPDMQsWbX34eBVafCEidNoOY1HhLlKerWzlsGRq+P4q+3WKLJihrl99pyv+EQykqS11/YVCsmFjrPVa/aGk84njbnI/kIDOY5HV2gVBazARixRO5y2AUg3hRUf2+Tu/X1ke80YBD9LazW2kRUzz0Rs+1vc653JtYn6MeK/bEkGWvN2Qs/k6Q2nNr6ni4v39Y07yylu1EnYh1H/0OT/H2hehxsjMQCQhDlVKbN7NTmOV026aWXA2HdSxmVhxQCIKRGW3Nm81kBj1/edXLpJActnLeex2iCMcXJk8yAAzF0q+vSHLld0w9Jx95kIJB4tnaonWJxcaWaX58HWFbdOuYKvQhXqcflI4KmNH8xXm/O0FIM8VEJRg9dojZ5S8Us3fZpBFZxVJ3H3Fcb406AmoIqcHOsqJ1GvBM8EdWkwuaH9GsUWf8pydgKFgStYUaKk8DDmJonT748emG4yw+78uMGWPoFxf+Mc8jazRxIaRiQbjVFUcLjaRkRFlL8UT9BB9k7c1egjvKhUo/pqV7KIEsAJrrh6zZIkz4h9AwxWpZjVj9+z63Kh6NC1lUI=
32
- gem: edits
33
- on:
34
- tags: true
35
- repo: tcrouch/edits