mtg_sdk 1.1.1 → 2.0.0
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/.gitignore +1 -0
- data/lib/mtg_sdk.rb +1 -0
- data/lib/mtg_sdk/card.rb +17 -38
- data/lib/mtg_sdk/changelog.rb +9 -13
- data/lib/mtg_sdk/query_builder.rb +66 -0
- data/lib/mtg_sdk/set.rb +12 -29
- data/lib/mtg_sdk/subtype.rb +1 -3
- data/lib/mtg_sdk/supertype.rb +1 -3
- data/lib/mtg_sdk/type.rb +1 -3
- data/lib/mtg_sdk/version.rb +1 -1
- data/test/card_test.rb +9 -16
- data/test/set_test.rb +8 -0
- metadata +3 -27
- data/lib/mtg_sdk/resource.rb +0 -23
- data/test/fixtures/all_changelogs.yml +0 -129
- data/test/fixtures/all_filtered.yml +0 -690
- data/test/fixtures/all_subtypes.yml +0 -129
- data/test/fixtures/all_supertypes.yml +0 -59
- data/test/fixtures/all_types.yml +0 -59
- data/test/fixtures/booster.yml +0 -974
- data/test/fixtures/invalid_code.yml +0 -49
- data/test/fixtures/invalid_id.yml +0 -49
- data/test/fixtures/one_card.yml +0 -111
- data/test/fixtures/one_set.yml +0 -60
- data/test/fixtures/query_cards_pageSize.yml +0 -356
- data/test/fixtures/query_zurgo.yml +0 -336
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6710db90dfe637bdd5d2994d720efd7fa6d67a11
|
4
|
+
data.tar.gz: e2d54bf4f36a29feca515e47f681423b708d7240
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3db4337be3f5713ea869e1daa86f7c37f663376d7a196f363f1c22ef0ba845cf37e4257b9e4e24096c0a71beec34fe4adb9bed612d2ff932cb64e4dcf877d01
|
7
|
+
data.tar.gz: 4010b3ec452aec330656785b92e93ad03ceb2968c291ea5e7f64c5db93136b626d9b7a4c261bb1e27804273e9488e697a2e39631eb384839cb7c11629312091a
|
data/.gitignore
CHANGED
data/lib/mtg_sdk.rb
CHANGED
data/lib/mtg_sdk/card.rb
CHANGED
@@ -1,65 +1,44 @@
|
|
1
1
|
require_relative 'representers/card_representer'
|
2
|
-
require_relative 'resource'
|
3
2
|
|
4
3
|
module MTG
|
5
|
-
class Card
|
4
|
+
class Card
|
6
5
|
include Roar::JSON
|
7
6
|
include CardRepresenter
|
8
|
-
|
9
|
-
|
7
|
+
|
10
8
|
attr_accessor :name, :layout, :names, :mana_cost, :cmc, :colors, :type, :supertypes, :subtypes, :types,
|
11
9
|
:rarity, :text, :flavor, :artist, :number, :power, :toughness, :loyalty, :multiverse_id, :variations,
|
12
10
|
:watermark, :border, :timeshifted, :hand, :life, :reserved, :release_date, :starter,
|
13
11
|
:rulings, :foreign_names, :printings, :original_text, :original_type, :legalities,
|
14
12
|
:source, :image_url, :set, :id
|
15
|
-
|
13
|
+
|
14
|
+
# Get the resource string
|
15
|
+
#
|
16
|
+
# @return [String] The API resource string
|
17
|
+
def self.Resource
|
18
|
+
"cards"
|
19
|
+
end
|
20
|
+
|
16
21
|
# Find a single card by the card multiverse id
|
17
22
|
#
|
18
23
|
# @param id [Integer] the multiverse id
|
19
24
|
# @return [Card] the Card object response
|
20
25
|
def self.find(id)
|
21
|
-
|
22
|
-
|
23
|
-
if response.body['card'].nil?
|
24
|
-
raise ArgumentError, 'Card not found'
|
25
|
-
end
|
26
|
-
|
27
|
-
new.from_json(response.body['card'].to_json)
|
26
|
+
QueryBuilder.new(Card).find(id)
|
28
27
|
end
|
29
28
|
|
30
29
|
# Get all cards from a query by paging through data
|
31
30
|
#
|
32
31
|
# @return [Array<Card>] Array of Card objects
|
33
32
|
def self.all
|
34
|
-
|
35
|
-
page = 0
|
36
|
-
|
37
|
-
while true
|
38
|
-
where(page: page += 1)
|
39
|
-
response = RestClient.get('cards', query[:parameters])
|
40
|
-
data = response.body['cards']
|
41
|
-
data.empty? ? break : data.each {|card| cards << new.from_json(card.to_json)}
|
42
|
-
end
|
43
|
-
|
44
|
-
@query = nil
|
45
|
-
cards
|
33
|
+
QueryBuilder.new(Card).all
|
46
34
|
end
|
47
35
|
|
48
|
-
#
|
49
|
-
# into a list of Card objects
|
36
|
+
# Adds a parameter to the hash of query parameters
|
50
37
|
#
|
51
|
-
# @
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
data = response.body['cards']
|
56
|
-
|
57
|
-
data.each do |card|
|
58
|
-
cards << new.from_json(card.to_json)
|
59
|
-
end
|
60
|
-
|
61
|
-
@query = nil
|
62
|
-
cards
|
38
|
+
# @param args [Hash] the query parameter
|
39
|
+
# @return [QueryBuilder] the QueryBuilder
|
40
|
+
def self.where(args)
|
41
|
+
QueryBuilder.new(Card).where(args)
|
63
42
|
end
|
64
43
|
end
|
65
44
|
end
|
data/lib/mtg_sdk/changelog.rb
CHANGED
@@ -1,28 +1,24 @@
|
|
1
1
|
require_relative 'representers/changelog_representer'
|
2
|
-
require_relative 'resource'
|
3
2
|
|
4
3
|
module MTG
|
5
|
-
class Changelog
|
4
|
+
class Changelog
|
6
5
|
include Roar::JSON
|
7
|
-
include RestClient
|
8
6
|
include ChangelogRepresenter
|
9
7
|
|
10
8
|
attr_accessor :version, :details, :release_date
|
11
9
|
|
10
|
+
# Get the resource string
|
11
|
+
#
|
12
|
+
# @return [string] The API resource string
|
13
|
+
def self.Resource
|
14
|
+
"changelogs"
|
15
|
+
end
|
16
|
+
|
12
17
|
# Get all changelogs
|
13
18
|
#
|
14
19
|
# @return [Array<Changelog>] Array of Changelog objects
|
15
20
|
def self.all
|
16
|
-
|
17
|
-
response = RestClient.get('changelogs')
|
18
|
-
data = response.body['changelogs']
|
19
|
-
|
20
|
-
data.each do |changelog|
|
21
|
-
changelogs << new.extend(ChangelogRepresenter).from_json(changelog.to_json)
|
22
|
-
end
|
23
|
-
|
24
|
-
@query = nil
|
25
|
-
changelogs
|
21
|
+
QueryBuilder.new(Changelog).all
|
26
22
|
end
|
27
23
|
end
|
28
24
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module MTG
|
2
|
+
class QueryBuilder
|
3
|
+
include RestClient
|
4
|
+
attr_accessor :type, :query
|
5
|
+
|
6
|
+
def initialize(type)
|
7
|
+
@type = type
|
8
|
+
@query = {}
|
9
|
+
end
|
10
|
+
|
11
|
+
# Adds a parameter to the hash of query parameters
|
12
|
+
#
|
13
|
+
# @param args [Hash] the query parameter
|
14
|
+
# @return [QueryBuilder] the QueryBuilder
|
15
|
+
def where(args)
|
16
|
+
@query.merge!(args)
|
17
|
+
self
|
18
|
+
end
|
19
|
+
|
20
|
+
# Find a single resource by the resource id
|
21
|
+
#
|
22
|
+
# @param id [String] the resource id
|
23
|
+
# @return [Object] the Type object response
|
24
|
+
def find(id)
|
25
|
+
response = RestClient.get("#{@type.Resource}/#{id}")
|
26
|
+
singular_resource = @type.Resource[0...-1]
|
27
|
+
if response.body[singular_resource].nil?
|
28
|
+
raise ArgumentError, 'Resource not found'
|
29
|
+
end
|
30
|
+
|
31
|
+
type.new.from_json(response.body[singular_resource].to_json)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Get all resources from a query by paging through data
|
35
|
+
#
|
36
|
+
# @return [Array<Object>] Array of resources
|
37
|
+
def all
|
38
|
+
list = []
|
39
|
+
page = 1
|
40
|
+
fetch_all = true
|
41
|
+
|
42
|
+
if @query.has_key?(:page)
|
43
|
+
page = @query[:page]
|
44
|
+
fetch_all = false
|
45
|
+
end
|
46
|
+
|
47
|
+
while true
|
48
|
+
response = RestClient.get(@type.Resource, @query)
|
49
|
+
data = response.body[@type.Resource]
|
50
|
+
if !data.empty?
|
51
|
+
data.each {|item| list << @type.new.from_json(item.to_json)}
|
52
|
+
|
53
|
+
if !fetch_all
|
54
|
+
break
|
55
|
+
else
|
56
|
+
where(page: page += 1)
|
57
|
+
end
|
58
|
+
else
|
59
|
+
break
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
return list
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/lib/mtg_sdk/set.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require_relative 'representers/set_representer'
|
2
2
|
require_relative 'card'
|
3
|
-
require_relative '
|
3
|
+
require_relative 'rest_client'
|
4
4
|
|
5
5
|
module MTG
|
6
|
-
class Set
|
6
|
+
class Set
|
7
7
|
include Roar::JSON
|
8
8
|
include SetRepresenter
|
9
9
|
include RestClient
|
@@ -12,29 +12,30 @@ module MTG
|
|
12
12
|
:release_date, :gatherer_code, :magic_cards_info_code, :booster,
|
13
13
|
:old_code, :block, :online_only
|
14
14
|
|
15
|
+
# Get the resource string
|
16
|
+
#
|
17
|
+
# @return [string] The API resource string
|
18
|
+
def self.Resource
|
19
|
+
"sets"
|
20
|
+
end
|
21
|
+
|
15
22
|
# Find a single set by the set code
|
16
23
|
#
|
17
24
|
# @param code [String] the Set code
|
18
25
|
# @return [Set] a Set object
|
19
26
|
def self.find(code)
|
20
|
-
|
21
|
-
|
22
|
-
if response.body['set'].nil?
|
23
|
-
raise ArgumentError, 'Set not found'
|
24
|
-
end
|
25
|
-
|
26
|
-
new.from_json(response.body['set'].to_json)
|
27
|
+
QueryBuilder.new(Set).find(code)
|
27
28
|
end
|
28
29
|
|
29
30
|
# Get all sets from a query
|
30
31
|
#
|
31
32
|
# @return [Array<Set>] Array of Set objects
|
32
33
|
def self.all
|
33
|
-
|
34
|
+
QueryBuilder.new(Set).all
|
34
35
|
end
|
35
36
|
|
36
37
|
# Generate a booster pack for a specific set
|
37
|
-
|
38
|
+
|
38
39
|
# @param code [String] the Set code
|
39
40
|
# @return [Array<Card>] Array of Card objects
|
40
41
|
def self.generate_booster(code)
|
@@ -46,25 +47,7 @@ module MTG
|
|
46
47
|
cards << Card.new.from_json(card.to_json)
|
47
48
|
end
|
48
49
|
|
49
|
-
@query = nil
|
50
50
|
cards
|
51
51
|
end
|
52
|
-
|
53
|
-
# Execute a query and convert the response
|
54
|
-
# into a list of Set objects
|
55
|
-
#
|
56
|
-
# @return [Array<Set>] Array of Set objects
|
57
|
-
def self.get
|
58
|
-
sets = []
|
59
|
-
response = RestClient.get('sets', query[:parameters])
|
60
|
-
data = response.body['sets']
|
61
|
-
|
62
|
-
data.each do |set|
|
63
|
-
sets << new.from_json(set.to_json)
|
64
|
-
end
|
65
|
-
|
66
|
-
@query = nil
|
67
|
-
sets
|
68
|
-
end
|
69
52
|
end
|
70
53
|
end
|
data/lib/mtg_sdk/subtype.rb
CHANGED
data/lib/mtg_sdk/supertype.rb
CHANGED
data/lib/mtg_sdk/type.rb
CHANGED
data/lib/mtg_sdk/version.rb
CHANGED
data/test/card_test.rb
CHANGED
@@ -40,34 +40,27 @@ class CardTest < Minitest::Test
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
def
|
43
|
+
def test_where_with_page_size_and_page_returns_cards
|
44
44
|
VCR.use_cassette('query_cards_pageSize') do
|
45
|
-
cards = MTG::Card.where(pageSize: 10).
|
45
|
+
cards = MTG::Card.where(pageSize: 10).where(page: 1).all
|
46
46
|
|
47
|
-
# make sure we got
|
47
|
+
# make sure we got only 10 cards back
|
48
48
|
assert cards.length == 10
|
49
49
|
assert cards.kind_of?(Array)
|
50
50
|
assert cards.first.kind_of?(MTG::Card)
|
51
51
|
end
|
52
52
|
end
|
53
|
-
|
54
|
-
def test_where_appends_to_query
|
55
|
-
VCR.use_cassette('query_zurgo') do
|
56
|
-
name = 'zurgo'
|
57
|
-
query = MTG::Card.where(name: name).query
|
58
|
-
parameters = query[:parameters]
|
59
|
-
MTG::Card.get
|
60
|
-
assert_equal name, parameters[:name]
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
53
|
+
|
64
54
|
def test_all_returns_cards
|
65
55
|
VCR.use_cassette('all_filtered') do
|
66
56
|
cards = MTG::Card.where(supertypes: 'legendary')
|
67
57
|
.where(subtypes: 'elf,warrior')
|
68
58
|
.all
|
69
|
-
|
70
|
-
|
59
|
+
|
60
|
+
first_card = cards[0]
|
61
|
+
assert first_card.supertypes.include? 'Legendary'
|
62
|
+
assert first_card.subtypes.include? 'Elf'
|
63
|
+
assert first_card.subtypes.include? 'Warrior'
|
71
64
|
end
|
72
65
|
end
|
73
66
|
end
|
data/test/set_test.rb
CHANGED
@@ -23,6 +23,14 @@ class SetTest < Minitest::Test
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
def test_all_returns_all_sets
|
27
|
+
VCR.use_cassette('all_sets') do
|
28
|
+
sets = MTG::Set.all
|
29
|
+
|
30
|
+
assert sets.length > 100
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
26
34
|
def test_generate_booster_returns_cards
|
27
35
|
VCR.use_cassette('booster') do
|
28
36
|
cards = MTG::Set.generate_booster('ktk')
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mtg_sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Backes
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -198,13 +198,13 @@ files:
|
|
198
198
|
- lib/mtg_sdk/configuration.rb
|
199
199
|
- lib/mtg_sdk/foreign_name.rb
|
200
200
|
- lib/mtg_sdk/legality.rb
|
201
|
+
- lib/mtg_sdk/query_builder.rb
|
201
202
|
- lib/mtg_sdk/representers/card_representer.rb
|
202
203
|
- lib/mtg_sdk/representers/changelog_representer.rb
|
203
204
|
- lib/mtg_sdk/representers/foreign_name_representer.rb
|
204
205
|
- lib/mtg_sdk/representers/legality_representer.rb
|
205
206
|
- lib/mtg_sdk/representers/ruling_representer.rb
|
206
207
|
- lib/mtg_sdk/representers/set_representer.rb
|
207
|
-
- lib/mtg_sdk/resource.rb
|
208
208
|
- lib/mtg_sdk/rest_client.rb
|
209
209
|
- lib/mtg_sdk/ruling.rb
|
210
210
|
- lib/mtg_sdk/set.rb
|
@@ -216,18 +216,6 @@ files:
|
|
216
216
|
- test/card_test.rb
|
217
217
|
- test/changelog_test.rb
|
218
218
|
- test/configuration_test.rb
|
219
|
-
- test/fixtures/all_changelogs.yml
|
220
|
-
- test/fixtures/all_filtered.yml
|
221
|
-
- test/fixtures/all_subtypes.yml
|
222
|
-
- test/fixtures/all_supertypes.yml
|
223
|
-
- test/fixtures/all_types.yml
|
224
|
-
- test/fixtures/booster.yml
|
225
|
-
- test/fixtures/invalid_code.yml
|
226
|
-
- test/fixtures/invalid_id.yml
|
227
|
-
- test/fixtures/one_card.yml
|
228
|
-
- test/fixtures/one_set.yml
|
229
|
-
- test/fixtures/query_cards_pageSize.yml
|
230
|
-
- test/fixtures/query_zurgo.yml
|
231
219
|
- test/set_test.rb
|
232
220
|
- test/subtype_test.rb
|
233
221
|
- test/supertype_test.rb
|
@@ -261,18 +249,6 @@ test_files:
|
|
261
249
|
- test/card_test.rb
|
262
250
|
- test/changelog_test.rb
|
263
251
|
- test/configuration_test.rb
|
264
|
-
- test/fixtures/all_changelogs.yml
|
265
|
-
- test/fixtures/all_filtered.yml
|
266
|
-
- test/fixtures/all_subtypes.yml
|
267
|
-
- test/fixtures/all_supertypes.yml
|
268
|
-
- test/fixtures/all_types.yml
|
269
|
-
- test/fixtures/booster.yml
|
270
|
-
- test/fixtures/invalid_code.yml
|
271
|
-
- test/fixtures/invalid_id.yml
|
272
|
-
- test/fixtures/one_card.yml
|
273
|
-
- test/fixtures/one_set.yml
|
274
|
-
- test/fixtures/query_cards_pageSize.yml
|
275
|
-
- test/fixtures/query_zurgo.yml
|
276
252
|
- test/set_test.rb
|
277
253
|
- test/subtype_test.rb
|
278
254
|
- test/supertype_test.rb
|