mtg_db 1.0.1 → 1.0.2
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/mtg_db.rb +9 -6
- data/lib/mtg_db/cli.rb +2 -2
- data/lib/mtg_db/constants.rb +2 -2
- data/lib/mtg_db/downloaders.rb +3 -2
- data/lib/mtg_db/parsers.rb +3 -8
- data/lib/mtg_db/version.rb +1 -1
- data/sql/{cards.schema.sql → db.schema.sql} +0 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9af0d25de61f99984ee45a012fa4fac54d209ba435f9c1193af8a50f055f33e2
|
4
|
+
data.tar.gz: 4da2fa65165d73305f82ca20c5ac2f5e1602a566b7c2e3d499aded6f79174070
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ccfcd97dcba46b64c0c021d5db43e22c1a8a659d855a574336fe0726bbd9c819cda854fa303053c101363a53f0babd8754af609597395d6ba64d06057e74ed3
|
7
|
+
data.tar.gz: dff5f78de48d6297931fdf6b3efdab2c26378f71bbae6623234a742c83fe5ee22671066312c949fb3ea538e725047dd775e517c0d198a52b60b388d3eaab1c3d
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
# MtgDb
|
1
|
+
# MtgDb [](https://travis-ci.org/Hammit/mtg-database)
|
2
2
|
|
3
|
-
A ruby
|
3
|
+
A ruby program that creates an SQLite3 database containing Magic: The Gathering
|
4
4
|
card information collected from [The Gatherer](http://gatherer.wizards.com/ "The Gatherer").
|
5
5
|
|
6
6
|
## Installation
|
@@ -29,7 +29,7 @@ Downloading card information from [The Gatherer](http://gatherer.wizards.com/ "T
|
|
29
29
|
can take a long time. Be prepared to wait a while when creating the db.
|
30
30
|
|
31
31
|
## Misc
|
32
|
-
* Schema for the Db is in sql/
|
32
|
+
* Schema for the Db is in sql/db.schema.sql
|
33
33
|
* bundle exec bin/mtg_db help
|
34
34
|
|
35
35
|
## Contributing
|
data/lib/mtg_db.rb
CHANGED
@@ -9,11 +9,11 @@ require 'tempfile'
|
|
9
9
|
# Top level module
|
10
10
|
module MtgDb
|
11
11
|
TMP_DIR = File.join(Dir.tmpdir, 'mtg')
|
12
|
-
ALL_CARDS_DIR = 'standard'
|
13
|
-
DOUBLE_FACED_DIR = 'double-faced'
|
14
|
-
SCHEMA_FILENAME = File.join(__dir__, '..', 'sql', '
|
12
|
+
ALL_CARDS_DIR = 'standard'
|
13
|
+
DOUBLE_FACED_DIR = 'double-faced'
|
14
|
+
SCHEMA_FILENAME = File.join(__dir__, '..', 'sql', 'db.schema.sql')
|
15
15
|
SQLITE3_HEADER_STRING_LENGTH = 15
|
16
|
-
SQLITE3_HEADER_STRING =
|
16
|
+
SQLITE3_HEADER_STRING = 'SQLite format 3'
|
17
17
|
|
18
18
|
# TODO: Remove the accessor as it's only required for debugging purposes
|
19
19
|
class << self; attr_accessor :standard_files_downloaded end
|
@@ -107,7 +107,7 @@ module MtgDb
|
|
107
107
|
db.disconnect
|
108
108
|
end
|
109
109
|
|
110
|
-
# Downloading
|
110
|
+
# Downloading Double-Faced Cards
|
111
111
|
def self.download_double_faced_cards(db_filename, tmp_dir)
|
112
112
|
tmp_dir ||= TMP_DIR
|
113
113
|
tmp_dir = File.join(tmp_dir, DOUBLE_FACED_DIR)
|
@@ -125,8 +125,11 @@ module MtgDb
|
|
125
125
|
puts "#{card.name}, #{multiverse_id}"
|
126
126
|
downloader.start(card.name.parameterize, multiverse_id)
|
127
127
|
end
|
128
|
+
|
129
|
+
db.disconnect
|
128
130
|
end
|
129
131
|
|
132
|
+
# Adding Downloaded Double-Faced Cards to Db
|
130
133
|
def self.add_double_faced_cards_to_db(db_filename, tmp_dir)
|
131
134
|
tmp_dir ||= TMP_DIR
|
132
135
|
tmp_dir = File.join(tmp_dir, DOUBLE_FACED_DIR)
|
@@ -173,7 +176,7 @@ module MtgDb
|
|
173
176
|
SQLITE3_HEADER_STRING_LENGTH.times do
|
174
177
|
header += (Random.rand(26) + 48).chr
|
175
178
|
end
|
176
|
-
|
179
|
+
|
177
180
|
File.open(db_filename, 'r+b') do |file|
|
178
181
|
file.seek(0, IO::SEEK_SET)
|
179
182
|
file.print(header)
|
data/lib/mtg_db/cli.rb
CHANGED
@@ -33,13 +33,13 @@ module MtgDb
|
|
33
33
|
MtgDb.add_double_faced_cards_to_db(name, tmp_dir)
|
34
34
|
end
|
35
35
|
|
36
|
-
desc
|
36
|
+
desc 'mangle NAME', 'mangle the SQLite3 Db file header'
|
37
37
|
def mangle(name)
|
38
38
|
name = File.expand_path(name)
|
39
39
|
if not MtgDb.is_sqlite3?(name)
|
40
40
|
puts "File is either already mangled or not an SQLite3 database: #{name}"
|
41
41
|
else
|
42
|
-
puts
|
42
|
+
puts 'Mangling the SQLite3 file header'
|
43
43
|
MtgDb.mangle(name)
|
44
44
|
end
|
45
45
|
end
|
data/lib/mtg_db/constants.rb
CHANGED
@@ -32,8 +32,8 @@ module MtgDb
|
|
32
32
|
'Phyrexian Red': '(R/P)',
|
33
33
|
'Phyrexian Green': '(G/P)',
|
34
34
|
|
35
|
-
'Variable Colorless': 'X'
|
36
|
-
}
|
35
|
+
'Variable Colorless': 'X'
|
36
|
+
}
|
37
37
|
|
38
38
|
# TODO: See if we can (?DEFINE) subroutines in the regex as per Perl/PCRE
|
39
39
|
# http://www.regular-expressions.info/subroutine.html
|
data/lib/mtg_db/downloaders.rb
CHANGED
@@ -3,8 +3,9 @@ require 'mechanize'
|
|
3
3
|
|
4
4
|
module MtgDb
|
5
5
|
module Downloaders
|
6
|
+
# Base class for all downloaders
|
6
7
|
class DownloaderBase
|
7
|
-
DEFAULT_OUTPUT_DIR = 'output'
|
8
|
+
DEFAULT_OUTPUT_DIR = 'output'
|
8
9
|
attr_reader :agent
|
9
10
|
attr_accessor :output_dir
|
10
11
|
|
@@ -65,7 +66,7 @@ module MtgDb
|
|
65
66
|
# Useful for double-faced cards, where we can associate the face-up and face-down cards, both on this page
|
66
67
|
class CardDetailsDownloader < DownloaderBase
|
67
68
|
DEBUG = true
|
68
|
-
CARD_DETAILS_URL = 'http://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=<PARAM_0>'
|
69
|
+
CARD_DETAILS_URL = 'http://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=<PARAM_0>'
|
69
70
|
|
70
71
|
def start(card_name, card_multiverse_id)
|
71
72
|
url = CARD_DETAILS_URL
|
data/lib/mtg_db/parsers.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# require 'pry'
|
2
1
|
require_relative 'constants'
|
3
2
|
require 'mechanize'
|
4
3
|
require 'uri'
|
@@ -14,10 +13,10 @@ module MtgDb
|
|
14
13
|
def initialize(uri = nil, response = nil, body = nil, code = nil)
|
15
14
|
super(uri, response, body, code)
|
16
15
|
@cards = parse_cards
|
17
|
-
# p @cards
|
18
16
|
end
|
19
17
|
|
20
|
-
|
18
|
+
private
|
19
|
+
|
21
20
|
# Each page in standard format has a bunch of cards
|
22
21
|
def parse_cards
|
23
22
|
cards = []
|
@@ -161,7 +160,7 @@ module MtgDb
|
|
161
160
|
set = match['SET']
|
162
161
|
rarity = match['RARITY']
|
163
162
|
|
164
|
-
{ :
|
163
|
+
{ multiverse_id: multiverse_id, set: set, rarity: rarity, set_abbreviation: set_abbreviation }
|
165
164
|
end
|
166
165
|
end
|
167
166
|
end
|
@@ -177,7 +176,6 @@ module MtgDb
|
|
177
176
|
@cards = parse_cards
|
178
177
|
@faceup_card_name = @cards.first
|
179
178
|
@facedown_card_name = @cards.last
|
180
|
-
#p @cards
|
181
179
|
end
|
182
180
|
|
183
181
|
private
|
@@ -185,7 +183,6 @@ module MtgDb
|
|
185
183
|
def parse_cards
|
186
184
|
cards = []
|
187
185
|
card_nodes = search('.cardDetails')
|
188
|
-
# binding.pry
|
189
186
|
# Each page has 2 cards if it's transformable
|
190
187
|
if card_nodes.size == 2
|
191
188
|
face_up_name = name(card_nodes.first)
|
@@ -196,7 +193,6 @@ module MtgDb
|
|
196
193
|
# face_down_card = Card.where(:name => face_down_name).first
|
197
194
|
cards << face_down_name
|
198
195
|
end
|
199
|
-
# p cards if DEBUG
|
200
196
|
|
201
197
|
cards
|
202
198
|
end
|
@@ -254,6 +250,5 @@ module MtgDb
|
|
254
250
|
subtype
|
255
251
|
end
|
256
252
|
end
|
257
|
-
|
258
253
|
end
|
259
254
|
end
|
data/lib/mtg_db/version.rb
CHANGED
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mtg_db
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Byron Hammond
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -189,7 +189,7 @@ files:
|
|
189
189
|
- lib/mtg_db/parsers.rb
|
190
190
|
- lib/mtg_db/version.rb
|
191
191
|
- mtg_db.gemspec
|
192
|
-
- sql/
|
192
|
+
- sql/db.schema.sql
|
193
193
|
- test/files/double-faced/aberrant-researcher.html
|
194
194
|
- test/files/double-faced/abolisher-of-bloodlines.html
|
195
195
|
- test/files/double-faced/accursed-witch.html
|