ygoprodeck 1.0.5 → 1.0.6

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
2
  SHA256:
3
- metadata.gz: 790fca37e688b1429cd4a12e8d0e177162f6bd939fa1ffb6fd4340990d67037b
4
- data.tar.gz: 95bf645197bfff5d1eb4c017f9de008eb148ddaf9f82188ccc0e95c6600886cf
3
+ metadata.gz: 65e1a83a313bf96bf2f0fb16903e27702a264e280a62e80c13e7c9ff945a84d0
4
+ data.tar.gz: aadbb1e8774beb238b0d538d72cf700a129080bd99541f70eb466b563c4f55b6
5
5
  SHA512:
6
- metadata.gz: 3ef7b1072846cfb8094d756b0f985050975c73123ecf7ea40ee11c36f3dce8878518488c710a764e0210018d51ab43cf4176a70ca77eaaa4ca0fbe1c09cf2f89
7
- data.tar.gz: 26f48bb50ea2ac466c6c235bce4281400fb7fddb01a958ad55fd27c4f63d1ddb4929e71e2298d68f51f4b53149736f90886961dc54689c8c74b5ac6e2a3f6e8f
6
+ metadata.gz: 531e2861df7e647c64efeb8dfc6eac4c9e34cd90a9b6fc2773e2c5219eb7a55c477e50c81e4174e7e972b259d143bde074ebc311984a77f134d3468348f8f6b3
7
+ data.tar.gz: 1fc2c092a8b37df4d7de5430fb00409b6c41af9e9c27828de90db7ae1ad763b5b67dc4f89274fa5a374afce667934fa289d774a19bf875fc9ed4eb3e9b96d873
data/README.md CHANGED
@@ -66,6 +66,11 @@ Ygoprodeck::Banlist.ocg
66
66
  Ygoprodeck::Banlist.goat
67
67
  ```
68
68
 
69
+ Check Database Version :
70
+ ```ruby
71
+ Ygoprodeck::CheckDbVer.info
72
+ ```
73
+
69
74
  or look [examples](https://github.com/rokhimin/ygoprodeck/blob/master/examples)
70
75
 
71
76
  #### Noted
@@ -103,9 +108,9 @@ Rate Limiting on the API is enabled. The rate limit is 20 requests per 1 second
103
108
 
104
109
  ## Development
105
110
 
106
- #### Test
111
+ #### Unit Test
107
112
  ```
108
- rake spec
113
+ rspec
109
114
  ```
110
115
 
111
116
  ## Contributing
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
3
 
4
- RSpec::Core::RakeTask.new(:spec)
4
+ RSpec::Core::RakeTask.new(:spec) do |t|
5
+ t.pattern = 'spec/**/*_spec.rb'
6
+ end
5
7
 
6
- task :default => :spec
8
+ task default: :spec
@@ -1,6 +1,6 @@
1
1
  require 'ygoprodeck'
2
2
 
3
- # kaiba is example, you free to change variable name
3
+ # kaiba is example, you free to change card name
4
4
  kaiba = Ygoprodeck::Archetype.is('blue-eyes') # example I wanna search 'blue-eyes' archetype
5
5
 
6
6
  # make for looping for listing archetype
@@ -0,0 +1,5 @@
1
+ require 'ygoprodeck'
2
+
3
+ puts Ygoprodeck::Banlist.tcg
4
+ #puts Ygoprodeck::Banlist.ocg
5
+ #puts Ygoprodeck::Banlist.goat
@@ -0,0 +1,3 @@
1
+ require 'ygoprodeck'
2
+
3
+ puts Ygoprodeck::CheckDbVer.info
data/examples/list.rb ADDED
@@ -0,0 +1,3 @@
1
+ require 'ygoprodeck'
2
+
3
+ puts Ygoprodeck::List.is('dark magician')
@@ -0,0 +1,18 @@
1
+ require 'ygoprodeck'
2
+
3
+ yugi = Ygoprodeck::Card.random
4
+ puts yugi
5
+
6
+ puts '#' *10
7
+
8
+ puts yugi['id']
9
+ puts yugi['name']
10
+ puts yugi['attribute']
11
+ puts yugi['type']
12
+ puts yugi['race']
13
+ puts yugi['level']
14
+ puts yugi['desc']
15
+ puts yugi['atk']
16
+ puts yugi['def']
17
+ puts Ygoprodeck::Image.is(yugi['id'])
18
+ puts Ygoprodeck::Image_small.is(yugi['id'])
@@ -0,0 +1,27 @@
1
+ require 'ygoprodeck'
2
+
3
+ # yugi is example, you free to change name card
4
+ yugi = Ygoprodeck::Name.is('dark magician') # example I wanna search 'dark magician' using fuzzy search
5
+
6
+ case
7
+ when yugi == nil
8
+ puts "Card not found"
9
+ else
10
+ puts yugi # => get all information of dark magician (name,id,level,attr,atk,def,etc)
11
+
12
+ puts '#' *10
13
+
14
+
15
+ # => get specific information of dark magician
16
+ puts yugi['id']
17
+ puts yugi['name']
18
+ puts yugi['attribute']
19
+ puts yugi['type']
20
+ puts yugi['race']
21
+ puts yugi['level']
22
+ puts yugi['desc']
23
+ puts yugi['atk']
24
+ puts yugi['def']
25
+ puts Ygoprodeck::Image.is(yugi['id']) # => use id from yugi['id'] to get dark magician image
26
+ puts Ygoprodeck::Image_small.is(yugi['id']) # => small version
27
+ end
@@ -0,0 +1,27 @@
1
+ require 'ygoprodeck'
2
+
3
+ # yugi is example, you free to change name card
4
+ yugi = Ygoprodeck::Fname.is('dark magician') # example I wanna search 'dark magician' using fuzzy search
5
+
6
+ case
7
+ when yugi == nil
8
+ puts "Card not found"
9
+ else
10
+ puts yugi # => get all information of dark magician (name,id,level,attr,atk,def,etc)
11
+
12
+ puts '#' *10
13
+
14
+
15
+ # => get specific information of dark magician
16
+ puts yugi['id']
17
+ puts yugi['name']
18
+ puts yugi['attribute']
19
+ puts yugi['type']
20
+ puts yugi['race']
21
+ puts yugi['level']
22
+ puts yugi['desc']
23
+ puts yugi['atk']
24
+ puts yugi['def']
25
+ puts Ygoprodeck::Image.is(yugi['id']) # => use id from yugi['id'] to get dark magician image
26
+ puts Ygoprodeck::Image_small.is(yugi['id']) # => small version
27
+ end
data/examples/set.rb ADDED
@@ -0,0 +1,3 @@
1
+ require 'ygoprodeck'
2
+
3
+ puts Ygoprodeck::Card.sets
@@ -1,21 +1,28 @@
1
-
2
1
  module Ygoprodeck
3
- class Archetype
4
- attr_reader :archetype
5
- def self.is(archetype)
6
- url = "#{Ygoprodeck::Endpoint.is}cardinfo.php?archetype=#{archetype}"
7
- uri = URI(url)
8
- response = Net::HTTP.get(uri)
9
- load = JSON.parse(response)
10
-
11
- if load['data'] == nil
12
- '{"error"=>"No card matching your query was found in the database."}'
13
- else
14
- load['data']
15
- end
16
-
17
- end
18
- end
19
-
20
- end
21
-
2
+ class Archetype
3
+ attr_reader :archetype
4
+
5
+ def self.is(archetype)
6
+ url = "#{Ygoprodeck::Endpoint.is}cardinfo.php?archetype=#{URI.encode_www_form_component(archetype)}"
7
+ uri = URI(url)
8
+
9
+ begin
10
+ response = Net::HTTP.get(uri)
11
+ load = JSON.parse(response)
12
+
13
+ if load['data'].nil? || load['data'].empty?
14
+ { 'error' => 'No card matching your query was found in the database.' }
15
+ else
16
+ load['data']
17
+ end
18
+
19
+ rescue JSON::ParserError => e
20
+ { 'error' => 'Failed to parse JSON response' }
21
+ rescue SocketError => e
22
+ { 'error' => 'Network connection error' }
23
+ rescue StandardError => e
24
+ { 'error' => "An unexpected error occurred: #{e.message}" }
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,26 +1,38 @@
1
-
2
1
  module Ygoprodeck
3
- class Banlist
4
- def self.tcg
5
- url = "#{Ygoprodeck::Endpoint.is}cardinfo.php?banlist=tcg"
6
- uri = URI(url)
7
- response = Net::HTTP.get(uri)
8
- load = JSON.parse(response)
9
- load
10
- end
11
- def self.ocg
12
- url = "#{Ygoprodeck::Endpoint.is}cardinfo.php?banlist=ocg"
13
- uri = URI(url)
14
- response = Net::HTTP.get(uri)
15
- load = JSON.parse(response)
16
- load
17
- end
18
- def self.goat
19
- url = "#{Ygoprodeck::Endpoint.is}cardinfo.php?banlist=goat"
20
- uri = URI(url)
21
- response = Net::HTTP.get(uri)
22
- load = JSON.parse(response)
23
- load
24
- end
25
- end
2
+ class Banlist
3
+ def self.fetch_banlist(format)
4
+ url = "#{Ygoprodeck::Endpoint.is}cardinfo.php?banlist=#{format}"
5
+ uri = URI(url)
6
+
7
+ begin
8
+ response = Net::HTTP.get(uri)
9
+ load = JSON.parse(response)
10
+
11
+ if load.has_key?('error')
12
+ { 'error' => load['error'] }
13
+ else
14
+ load
15
+ end
16
+
17
+ rescue JSON::ParserError => e
18
+ { 'error' => 'Failed to parse JSON response' }
19
+ rescue SocketError => e
20
+ { 'error' => 'Network connection error' }
21
+ rescue StandardError => e
22
+ { 'error' => "An unexpected error occurred: #{e.message}" }
23
+ end
24
+ end
25
+
26
+ def self.tcg
27
+ fetch_banlist('tcg')
28
+ end
29
+
30
+ def self.ocg
31
+ fetch_banlist('ocg')
32
+ end
33
+
34
+ def self.goat
35
+ fetch_banlist('goat')
36
+ end
37
+ end
26
38
  end
@@ -1,12 +1,28 @@
1
-
2
1
  module Ygoprodeck
3
- class Card
4
- def self.sets
5
- url = "https://db.ygoprodeck.com/api/v7/cardsets.php"
6
- uri = URI(url)
7
- response = Net::HTTP.get(uri)
8
- load = JSON.parse(response)
9
- load
10
- end
11
- end
2
+ class Card
3
+ def self.sets
4
+ url = "https://db.ygoprodeck.com/api/v7/cardsets.php"
5
+ uri = URI(url)
6
+
7
+ begin
8
+ response = Net::HTTP.get(uri)
9
+ load = JSON.parse(response)
10
+
11
+ if load.is_a?(Hash) && load.has_key?('error')
12
+ { 'error' => load['error'] }
13
+ else
14
+ load
15
+ end
16
+
17
+ rescue JSON::ParserError => e
18
+ { 'error' => 'Failed to parse JSON response' }
19
+ rescue SocketError => e
20
+ { 'error' => 'Network connection error' }
21
+ rescue Timeout::Error => e
22
+ { 'error' => 'Request timed out' }
23
+ rescue StandardError => e
24
+ { 'error' => "An unexpected error occurred: #{e.message}" }
25
+ end
26
+ end
27
+ end
12
28
  end
@@ -1,11 +1,33 @@
1
1
  module Ygoprodeck
2
- class CheckDbVer
3
- def self.info
4
- url = "https://db.ygoprodeck.com/api/v7/checkDBVer.php"
5
- uri = URI(url)
6
- response = Net::HTTP.get(uri)
7
- load = JSON.parse(response)
8
- load
9
- end
10
- end
2
+ class CheckDbVer
3
+ def self.info
4
+ url = "https://db.ygoprodeck.com/api/v7/checkDBVer.php"
5
+ uri = URI(url)
6
+
7
+ begin
8
+ response = Net::HTTP.get_response(uri)
9
+
10
+ unless response.is_a?(Net::HTTPSuccess)
11
+ return { 'error' => "HTTP request failed with status code: #{response.code}" }
12
+ end
13
+
14
+ load = JSON.parse(response.body)
15
+
16
+ if load.is_a?(Hash) && load.has_key?('error')
17
+ { 'error' => load['error'] }
18
+ else
19
+ load
20
+ end
21
+
22
+ rescue JSON::ParserError => e
23
+ { 'error' => 'Failed to parse JSON response' }
24
+ rescue SocketError => e
25
+ { 'error' => 'Network connection error' }
26
+ rescue Net::ReadTimeout => e
27
+ { 'error' => 'Request timed out' }
28
+ rescue StandardError => e
29
+ { 'error' => "An unexpected error occurred: #{e.message}" }
30
+ end
31
+ end
32
+ end
11
33
  end
@@ -1,21 +1,20 @@
1
-
2
1
  module Ygoprodeck
3
- class Fname
4
- attr_reader :f_name
5
- def self.is(f_name)
6
- url = "#{Ygoprodeck::Endpoint.is}cardinfo.php?fname=#{f_name}"
7
- uri = URI(url)
8
- response = Net::HTTP.get(uri)
9
- load = JSON.parse(response)
10
-
11
- if load['data'][0] == nil
12
- '{"error"=>"No card matching your query was found in the database."}'
13
- else
14
- load['data'][0]
15
- end
16
-
17
- end
18
- end
19
-
20
- end
2
+ class Fname
3
+ def self.is(f_name)
4
+ url = "#{Ygoprodeck::Endpoint.is}cardinfo.php?fname=#{URI.encode_www_form_component(f_name)}"
5
+ uri = URI(url)
6
+
7
+ begin
8
+ response = Net::HTTP.get(uri)
9
+ load = JSON.parse(response)
10
+
11
+ return nil if load["data"].nil? || load["data"].empty?
12
+
13
+ load["data"][0]
21
14
 
15
+ rescue JSON::ParserError, SocketError, StandardError => e
16
+ nil
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,21 +1,47 @@
1
-
2
1
  module Ygoprodeck
3
- class List
4
- attr_reader :list
5
- def self.is(list)
6
- url = "#{Ygoprodeck::Endpoint.is}cardinfo.php?fname=#{list}"
7
- uri = URI(url)
8
- response = Net::HTTP.get(uri)
9
- load = JSON.parse(response)
10
-
11
- if load['data'] == nil
12
- '{"error"=>"No card matching your query was found in the database."}'
13
- else
14
- load['data']
15
- end
16
-
17
- end
18
- end
19
-
20
- end
21
-
2
+ class List
3
+ attr_reader :list
4
+
5
+ def self.is(list)
6
+ begin
7
+ # Encode query parameter to handle special characters properly
8
+ url = "#{Ygoprodeck::Endpoint.is}cardinfo.php?fname=#{URI.encode_www_form_component(list)}"
9
+ uri = URI(url)
10
+
11
+ # Use timeout to prevent hanging on slow connections
12
+ response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https', open_timeout: 10, read_timeout: 10) do |http|
13
+ http.get(uri.request_uri)
14
+ end
15
+
16
+ # Check HTTP status code first
17
+ case response
18
+ when Net::HTTPSuccess
19
+ load = JSON.parse(response.body)
20
+
21
+ if load.has_key?('error')
22
+ return { 'error' => load['error'] }
23
+ elsif load['data'].nil? || load['data'].empty?
24
+ return { 'error' => 'No card matching your query was found in the database.' }
25
+ else
26
+ return load['data']
27
+ end
28
+ else
29
+ return { 'error' => "HTTP request failed with status code: #{response.code}" }
30
+ end
31
+
32
+ rescue URI::InvalidURIError => e
33
+ { 'error' => 'Invalid URL or search term' }
34
+ rescue JSON::ParserError => e
35
+ { 'error' => 'Failed to parse JSON response' }
36
+ rescue Net::OpenTimeout => e
37
+ { 'error' => 'Connection timed out' }
38
+ rescue Net::ReadTimeout => e
39
+ { 'error' => 'Request timed out' }
40
+ rescue SocketError => e
41
+ { 'error' => 'Network connection error' }
42
+ rescue StandardError => e
43
+ { 'error' => "An unexpected error occurred: #{e.message}" }
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,21 +1,22 @@
1
-
2
1
  module Ygoprodeck
3
- class Name
4
- attr_reader :name
5
- def self.is(name)
6
- url = "#{Ygoprodeck::Endpoint.is}cardinfo.php?name=#{name}"
7
- uri = URI(url)
8
- response = Net::HTTP.get(uri)
9
- load = JSON.parse(response)
10
-
11
- if load['data'][0] == nil
12
- '{"error"=>"No card matching your query was found in the database."}'
13
- else
14
- load['data'][0]
15
- end
16
-
17
- end
18
- end
19
-
20
- end
2
+ class Name
3
+ attr_reader :name
4
+
5
+ def self.is(name)
6
+ url = "#{Ygoprodeck::Endpoint.is}cardinfo.php?name=#{URI.encode_www_form_component(name)}"
7
+ uri = URI(url)
8
+
9
+ begin
10
+ response = Net::HTTP.get(uri)
11
+ load = JSON.parse(response)
12
+
13
+ return nil if load["data"].nil? || load["data"].empty?
14
+
15
+ load["data"][0]
21
16
 
17
+ rescue JSON::ParserError, SocketError, StandardError => e
18
+ nil
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,12 +1,20 @@
1
-
2
1
  module Ygoprodeck
3
- class Card
4
- def self.random
5
- url = "https://db.ygoprodeck.com/api/v7/cardinfo.php?num=1&offset=0&sort=random&cachebust"
6
- uri = URI(url)
7
- response = Net::HTTP.get(uri)
8
- load = JSON.parse(response)
9
- load['data'][0]
10
- end
11
- end
2
+ class Card
3
+ def self.random
4
+ url = "https://db.ygoprodeck.com/api/v7/cardinfo.php?num=1&offset=0&sort=random&cachebust"
5
+ uri = URI(url)
6
+
7
+ begin
8
+ response = Net::HTTP.get(uri)
9
+ load = JSON.parse(response)
10
+
11
+ return nil if load["data"].nil? || load["data"].empty?
12
+
13
+ load["data"][0]
14
+
15
+ rescue JSON::ParserError, SocketError, StandardError => e
16
+ nil
17
+ end
18
+ end
19
+ end
12
20
  end
@@ -1,3 +1,3 @@
1
1
  module Ygoprodeck
2
- VERSION = "1.0.5"
2
+ VERSION = "1.0.6"
3
3
  end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,4 @@
1
- require "bundler/setup"
1
+ require "bundler"
2
2
  require "ygoprodeck"
3
3
 
4
4
  RSpec.configure do |config|
data/ygoprodeck.gemspec CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.required_ruby_version = '>= 2.0.0'
21
21
 
22
- spec.add_development_dependency "bundler", "~> 2.2.3"
22
+ spec.add_development_dependency "bundler", "~> 2.5.23"
23
23
  spec.add_development_dependency "rake", "~> 10.0"
24
24
  spec.add_development_dependency "rspec", "~> 3.0"
25
25
  spec.add_development_dependency 'rspec-prof', '~> 0.0.7'
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ygoprodeck
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rokhimin Wahid
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-12-30 00:00:00.000000000 Z
10
+ date: 2025-05-14 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bundler
@@ -16,14 +15,14 @@ dependencies:
16
15
  requirements:
17
16
  - - "~>"
18
17
  - !ruby/object:Gem::Version
19
- version: 2.2.3
18
+ version: 2.5.23
20
19
  type: :development
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - "~>"
25
24
  - !ruby/object:Gem::Version
26
- version: 2.2.3
25
+ version: 2.5.23
27
26
  - !ruby/object:Gem::Dependency
28
27
  name: rake
29
28
  requirement: !ruby/object:Gem::Requirement
@@ -113,8 +112,14 @@ files:
113
112
  - Rakefile
114
113
  - bin/console
115
114
  - bin/setup
116
- - examples/try.rb
117
- - examples/try_archetype.rb
115
+ - examples/archetype.rb
116
+ - examples/banlist.rb
117
+ - examples/check_db.rb
118
+ - examples/list.rb
119
+ - examples/random.rb
120
+ - examples/search.rb
121
+ - examples/search_fuzzy.rb
122
+ - examples/set.rb
118
123
  - lib/ygoprodeck.rb
119
124
  - lib/ygoprodeck/errors.rb
120
125
  - lib/ygoprodeck/search/all_card.rb
@@ -146,7 +151,6 @@ homepage: http://github.com/rokhimin/ygoprodeck
146
151
  licenses:
147
152
  - MIT
148
153
  metadata: {}
149
- post_install_message:
150
154
  rdoc_options: []
151
155
  require_paths:
152
156
  - lib
@@ -161,8 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
161
165
  - !ruby/object:Gem::Version
162
166
  version: '0'
163
167
  requirements: []
164
- rubygems_version: 3.2.3
165
- signing_key:
168
+ rubygems_version: 3.6.3
166
169
  specification_version: 4
167
170
  summary: ygoprodeck API wrapper for search yugioh's card
168
171
  test_files: []
data/examples/try.rb DELETED
@@ -1,21 +0,0 @@
1
- require 'ygoprodeck'
2
-
3
- # yugi is example, you free to change variable name
4
- yugi = Ygoprodeck::Fname.is('dark magician') # example I wanna search 'dark magician' using fuzzy search
5
-
6
- puts yugi # => get all information of dark magician (name,id,level,attr,atk,def,etc)
7
-
8
- puts '#' *10
9
-
10
- # => get specific information of dark magician
11
- puts yugi['id']
12
- puts yugi['name']
13
- puts yugi['attribute']
14
- puts yugi['type']
15
- puts yugi['race']
16
- puts yugi['level']
17
- puts yugi['desc']
18
- puts yugi['atk']
19
- puts yugi['def']
20
- puts Ygoprodeck::Image.is(yugi['id']) # => use id from yugi['id'] to get dark magician image
21
- puts Ygoprodeck::Image_small.is(yugi['id']) # => small version