ygoprodeck 1.0.6 → 1.0.7
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/README.md +3 -3
- data/lib/ygoprodeck/search/assets/names_card.json +13719 -0
- data/lib/ygoprodeck/search/match.rb +35 -0
- data/lib/ygoprodeck/version.rb +1 -1
- data/lib/ygoprodeck.rb +3 -0
- data/ygoprodeck.gemspec +2 -1
- metadata +18 -2
@@ -0,0 +1,35 @@
|
|
1
|
+
module Ygoprodeck
|
2
|
+
class Match
|
3
|
+
def self.normalize(text)
|
4
|
+
text.downcase.gsub(/[^a-z0-9\s\-]/, '').strip
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.is(name_card)
|
8
|
+
json_path = File.expand_path('assets/names_card.json', __dir__)
|
9
|
+
names = JSON.parse(File.read(json_path))
|
10
|
+
|
11
|
+
normalized_input = normalize(name_card)
|
12
|
+
input_words = normalized_input.split
|
13
|
+
|
14
|
+
substring_matches = names.select { |name| normalize(name).include?(normalized_input) }
|
15
|
+
|
16
|
+
if !substring_matches.empty?
|
17
|
+
best_match = substring_matches.min_by { |name| normalize(name).length }
|
18
|
+
else
|
19
|
+
word_matches = names.select do |name|
|
20
|
+
name_words = normalize(name).split
|
21
|
+
input_words.all? { |word| name_words.any? { |nw| nw.include?(word) } }
|
22
|
+
end
|
23
|
+
|
24
|
+
if !word_matches.empty?
|
25
|
+
best_match = word_matches.min_by { |name| normalize(name).length }
|
26
|
+
else
|
27
|
+
matcher = Levenshtein.new(normalized_input)
|
28
|
+
best_match = names.min_by { |name| matcher.match(normalize(name)) }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
best_match
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/ygoprodeck/version.rb
CHANGED
data/lib/ygoprodeck.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'open-uri'
|
2
2
|
require 'net/http'
|
3
3
|
require 'json'
|
4
|
+
require 'amatch'
|
4
5
|
require 'ygoprodeck/version'
|
5
6
|
require 'ygoprodeck/errors'
|
6
7
|
require 'ygoprodeck/search/client/endpoint'
|
@@ -10,10 +11,12 @@ require 'ygoprodeck/search/card_sets'
|
|
10
11
|
require 'ygoprodeck/search/random'
|
11
12
|
require 'ygoprodeck/search/name'
|
12
13
|
require 'ygoprodeck/search/list'
|
14
|
+
require 'ygoprodeck/search/match'
|
13
15
|
require 'ygoprodeck/search/fuzzy_name'
|
14
16
|
require 'ygoprodeck/search/archetype'
|
15
17
|
require 'ygoprodeck/search/banlist'
|
16
18
|
require 'ygoprodeck/search/check_db_version'
|
19
|
+
include Amatch
|
17
20
|
|
18
21
|
module Ygoprodeck
|
19
22
|
end
|
data/ygoprodeck.gemspec
CHANGED
@@ -18,7 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
20
|
spec.required_ruby_version = '>= 2.0.0'
|
21
|
-
|
21
|
+
|
22
|
+
spec.add_dependency "amatch", "~> 0.4.1"
|
22
23
|
spec.add_development_dependency "bundler", "~> 2.5.23"
|
23
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
24
25
|
spec.add_development_dependency "rspec", "~> 3.0"
|
metadata
CHANGED
@@ -1,14 +1,28 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ygoprodeck
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rokhimin Wahid
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-05-
|
10
|
+
date: 2025-05-15 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
|
+
- !ruby/object:Gem::Dependency
|
13
|
+
name: amatch
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - "~>"
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: 0.4.1
|
19
|
+
type: :runtime
|
20
|
+
prerelease: false
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - "~>"
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: 0.4.1
|
12
26
|
- !ruby/object:Gem::Dependency
|
13
27
|
name: bundler
|
14
28
|
requirement: !ruby/object:Gem::Requirement
|
@@ -124,6 +138,7 @@ files:
|
|
124
138
|
- lib/ygoprodeck/errors.rb
|
125
139
|
- lib/ygoprodeck/search/all_card.rb
|
126
140
|
- lib/ygoprodeck/search/archetype.rb
|
141
|
+
- lib/ygoprodeck/search/assets/names_card.json
|
127
142
|
- lib/ygoprodeck/search/banlist.rb
|
128
143
|
- lib/ygoprodeck/search/card_sets.rb
|
129
144
|
- lib/ygoprodeck/search/check_db_version.rb
|
@@ -131,6 +146,7 @@ files:
|
|
131
146
|
- lib/ygoprodeck/search/client/image_gapis.rb
|
132
147
|
- lib/ygoprodeck/search/fuzzy_name.rb
|
133
148
|
- lib/ygoprodeck/search/list.rb
|
149
|
+
- lib/ygoprodeck/search/match.rb
|
134
150
|
- lib/ygoprodeck/search/name.rb
|
135
151
|
- lib/ygoprodeck/search/random.rb
|
136
152
|
- lib/ygoprodeck/version.rb
|