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.
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Ygoprodeck
2
- VERSION = "1.0.6"
2
+ VERSION = "1.0.7"
3
3
  end
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.6
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-14 00:00:00.000000000 Z
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