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 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