mtg_sdk 1.1.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|