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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2b2532e6c12720acfd3e16467b1165d9de12f8cd
4
- data.tar.gz: 49c72b92e713b07f91c8883deb78bab134719d81
3
+ metadata.gz: 6710db90dfe637bdd5d2994d720efd7fa6d67a11
4
+ data.tar.gz: e2d54bf4f36a29feca515e47f681423b708d7240
5
5
  SHA512:
6
- metadata.gz: dbb2c15915d3a6f5aed7b59b582d350668d96996b22368ed0a416e5c36d8a26f6b38737f94d96456c35cbbbbcf9dbbd9d9e260d3f6750ed2019b19ec4027e588
7
- data.tar.gz: fa2272cc64887c3b0d8ab3f4fbdc5b0ef190062f2e02a566fe2521d932aa7680590dc02c0d122d3cd597b0c219fa54473afd740f2edc2e67ae42d40c3e6083bb
6
+ metadata.gz: f3db4337be3f5713ea869e1daa86f7c37f663376d7a196f363f1c22ef0ba845cf37e4257b9e4e24096c0a71beec34fe4adb9bed612d2ff932cb64e4dcf877d01
7
+ data.tar.gz: 4010b3ec452aec330656785b92e93ad03ceb2968c291ea5e7f64c5db93136b626d9b7a4c261bb1e27804273e9488e697a2e39631eb384839cb7c11629312091a
data/.gitignore CHANGED
@@ -14,6 +14,7 @@ rdoc
14
14
  spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
+ test/fixtures
17
18
  tmp
18
19
  *.bundle
19
20
  *.so
@@ -10,6 +10,7 @@ require "mtg_sdk/subtype"
10
10
  require "mtg_sdk/supertype"
11
11
  require "mtg_sdk/changelog"
12
12
  require "mtg_sdk/rest_client"
13
+ require "mtg_sdk/query_builder"
13
14
 
14
15
  module MTG
15
16
  API_URL = 'https://api.magicthegathering.io'
@@ -1,65 +1,44 @@
1
1
  require_relative 'representers/card_representer'
2
- require_relative 'resource'
3
2
 
4
3
  module MTG
5
- class Card < Resource
4
+ class Card
6
5
  include Roar::JSON
7
6
  include CardRepresenter
8
- include RestClient
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
- response = RestClient.get("cards/#{id}")
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
- cards = []
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
- # Execute a query and convert the response
49
- # into a list of Card objects
36
+ # Adds a parameter to the hash of query parameters
50
37
  #
51
- # @return [Array<Card>] Array of Card objects
52
- def self.get
53
- cards = []
54
- response = RestClient.get('cards', query[:parameters])
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
@@ -1,28 +1,24 @@
1
1
  require_relative 'representers/changelog_representer'
2
- require_relative 'resource'
3
2
 
4
3
  module MTG
5
- class Changelog < Resource
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
- changelogs = []
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
@@ -1,9 +1,9 @@
1
1
  require_relative 'representers/set_representer'
2
2
  require_relative 'card'
3
- require_relative 'resource'
3
+ require_relative 'rest_client'
4
4
 
5
5
  module MTG
6
- class Set < Resource
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
- response = RestClient.get("sets/#{code}")
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
- get
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
@@ -1,7 +1,5 @@
1
- require_relative 'resource'
2
-
3
1
  module MTG
4
- class Subtype < Resource
2
+ class Subtype
5
3
  include RestClient
6
4
 
7
5
  # Get all subtypes
@@ -1,7 +1,5 @@
1
- require_relative 'resource'
2
-
3
1
  module MTG
4
- class Supertype < Resource
2
+ class Supertype
5
3
  include RestClient
6
4
 
7
5
  # Get all supertypes
@@ -1,7 +1,5 @@
1
- require_relative 'resource'
2
-
3
1
  module MTG
4
- class Type < Resource
2
+ class Type
5
3
  include RestClient
6
4
 
7
5
  # Get all types
@@ -1,3 +1,3 @@
1
1
  module MTG
2
- VERSION = "1.1.1"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -40,34 +40,27 @@ class CardTest < Minitest::Test
40
40
  end
41
41
  end
42
42
 
43
- def test_where_and_get_returns_cards
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).get
45
+ cards = MTG::Card.where(pageSize: 10).where(page: 1).all
46
46
 
47
- # make sure we got a ton of cards
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
- puts cards.length
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
@@ -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: 1.1.1
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-28 00:00:00.000000000 Z
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