zombie_battleground-api 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +4 -0
- data/Gemfile.lock +29 -11
- data/README.md +4 -0
- data/Rakefile +62 -5
- data/lib/zombie_battleground/api.rb +108 -8
- data/lib/zombie_battleground/api/client.rb +157 -23
- data/lib/zombie_battleground/api/errors.rb +28 -0
- data/lib/zombie_battleground/api/models/card.rb +272 -32
- data/lib/zombie_battleground/api/models/deck.rb +234 -46
- data/lib/zombie_battleground/api/models/match.rb +211 -33
- data/lib/zombie_battleground/api/models/simple_card.rb +47 -11
- data/lib/zombie_battleground/api/requests/get_card_request.rb +45 -10
- data/lib/zombie_battleground/api/requests/get_cards_request.rb +203 -27
- data/lib/zombie_battleground/api/requests/get_deck_request.rb +43 -13
- data/lib/zombie_battleground/api/requests/get_decks_request.rb +141 -23
- data/lib/zombie_battleground/api/requests/get_match_request.rb +43 -13
- data/lib/zombie_battleground/api/requests/get_matches_request.rb +125 -21
- data/lib/zombie_battleground/api/requests/request_helper.rb +24 -10
- data/lib/zombie_battleground/api/responses/get_card_response.rb +50 -16
- data/lib/zombie_battleground/api/responses/get_cards_response.rb +103 -33
- data/lib/zombie_battleground/api/responses/get_deck_response.rb +49 -17
- data/lib/zombie_battleground/api/responses/get_decks_response.rb +103 -33
- data/lib/zombie_battleground/api/responses/get_match_response.rb +49 -17
- data/lib/zombie_battleground/api/responses/get_matches_response.rb +103 -33
- data/lib/zombie_battleground/api/responses/response_helper.rb +32 -16
- data/lib/zombie_battleground/api/validation_helper.rb +497 -0
- data/lib/zombie_battleground/api/version.rb +5 -1
- data/zombie_battleground-api.gemspec +6 -0
- metadata +71 -1
@@ -2,18 +2,32 @@
|
|
2
2
|
|
3
3
|
module ZombieBattleground
|
4
4
|
class Api
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
class Requests
|
6
|
+
##
|
7
|
+
# Provides generic methods for request validator classes
|
8
|
+
module RequestHelper
|
9
|
+
##
|
10
|
+
# Instance variables to skip when computing the model's query paramaters
|
11
|
+
BLACKLISTED_INSTANCE_VARIABLES = %w[errors validation_context].freeze
|
9
12
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
13
|
+
##
|
14
|
+
# Computes the model's query paramaters
|
15
|
+
#
|
16
|
+
# @return [Hash]
|
17
|
+
#
|
18
|
+
# @example
|
19
|
+
# query_params = model.params
|
20
|
+
# query_params # => Hash
|
21
|
+
#
|
22
|
+
# @api public
|
23
|
+
def params
|
24
|
+
instance_variables.map do |var|
|
25
|
+
normalized_var = var.to_s.gsub(/^@/, '')
|
26
|
+
next if BLACKLISTED_INSTANCE_VARIABLES.include?(normalized_var)
|
14
27
|
|
15
|
-
|
16
|
-
|
28
|
+
[normalized_var, instance_variable_get(var)]
|
29
|
+
end.compact.to_h
|
30
|
+
end
|
17
31
|
end
|
18
32
|
end
|
19
33
|
end
|
@@ -10,28 +10,62 @@ require 'zombie_battleground/api/responses/response_helper'
|
|
10
10
|
module ZombieBattleground
|
11
11
|
class Api
|
12
12
|
##
|
13
|
-
#
|
14
|
-
class
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
# Namespace for Responses
|
14
|
+
class Responses
|
15
|
+
##
|
16
|
+
# Response validator for GetCard
|
17
|
+
class GetCardResponse
|
18
|
+
include ActiveModel::Validations
|
19
|
+
include ZombieBattleground::Api::ValidationHelper
|
20
|
+
include ZombieBattleground::Api::Responses::ResponseHelper
|
18
21
|
|
19
|
-
|
22
|
+
##
|
23
|
+
# @!attribute [r] card
|
24
|
+
# the card
|
25
|
+
#
|
26
|
+
# @return [ZombieBattleground::Api::Deck]
|
27
|
+
#
|
28
|
+
# @example
|
29
|
+
# response.card #=> ZombieBattleground::Api::Deck
|
30
|
+
#
|
31
|
+
# @api public
|
32
|
+
attr_reader :card
|
20
33
|
|
21
|
-
|
34
|
+
validate :card_is_a_card
|
22
35
|
|
23
|
-
|
24
|
-
|
36
|
+
##
|
37
|
+
# Creates a new GetCardResponse
|
38
|
+
#
|
39
|
+
# @param response [Faraday::Response] Faraday response from endpoint
|
40
|
+
#
|
41
|
+
# @return [ZombieBattleground::Api::GetCardResponse]
|
42
|
+
#
|
43
|
+
# @example
|
44
|
+
# response = ZombieBattleground::Api::GetCardResponse.new(faraday_response)
|
45
|
+
# # => ZombieBattleground::Api::GetCardResponse
|
46
|
+
#
|
47
|
+
# @api public
|
48
|
+
def initialize(response)
|
49
|
+
handle_errors(response)
|
25
50
|
|
26
|
-
|
27
|
-
|
51
|
+
@card = ZombieBattleground::Api::Models::Card.new(JSON.parse(response.body))
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
28
55
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
56
|
+
##
|
57
|
+
# Validator for card attribute
|
58
|
+
#
|
59
|
+
# @return [void]
|
60
|
+
#
|
61
|
+
# @api private
|
62
|
+
def card_is_a_card
|
63
|
+
return if @card.is_a?(ZombieBattleground::Api::Models::Card) &&
|
64
|
+
@card.valid? &&
|
65
|
+
@card.errors.size.zero?
|
33
66
|
|
34
|
-
|
67
|
+
errors.add(:card, 'card must be a Card')
|
68
|
+
end
|
35
69
|
end
|
36
70
|
end
|
37
71
|
end
|
@@ -9,44 +9,114 @@ require 'zombie_battleground/api/responses/response_helper'
|
|
9
9
|
|
10
10
|
module ZombieBattleground
|
11
11
|
class Api
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
12
|
+
class Responses
|
13
|
+
##
|
14
|
+
# Response validator for GetCards
|
15
|
+
class GetCardsResponse
|
16
|
+
include ActiveModel::Validations
|
17
|
+
include ZombieBattleground::Api::ValidationHelper
|
18
|
+
include ZombieBattleground::Api::Responses::ResponseHelper
|
19
|
+
|
20
|
+
##
|
21
|
+
# @!attribute [r] total
|
22
|
+
# the total number of results available
|
23
|
+
#
|
24
|
+
# @return [Integer]
|
25
|
+
#
|
26
|
+
# @example
|
27
|
+
# response.total #=> 1505
|
28
|
+
#
|
29
|
+
# @api public
|
30
|
+
attr_reader :total
|
31
|
+
|
32
|
+
##
|
33
|
+
# @!attribute [r] page
|
34
|
+
# the page number of the results
|
35
|
+
#
|
36
|
+
# @return [Integer]
|
37
|
+
#
|
38
|
+
# @example
|
39
|
+
# response.page #=> 1
|
40
|
+
#
|
41
|
+
# @api public
|
42
|
+
attr_reader :page
|
43
|
+
|
44
|
+
##
|
45
|
+
# @!attribute [r] limit
|
46
|
+
# the limit of results for the page
|
47
|
+
#
|
48
|
+
# @return [Integer]
|
49
|
+
#
|
50
|
+
# @example
|
51
|
+
# response.limit #=> 100
|
52
|
+
#
|
53
|
+
# @api public
|
54
|
+
attr_reader :limit
|
55
|
+
|
56
|
+
##
|
57
|
+
# @!attribute [r] cards
|
58
|
+
# the deck found for the page and limit
|
59
|
+
#
|
60
|
+
# @return [Array<ZombieBattleground::Api::Models::Card>]
|
61
|
+
#
|
62
|
+
# @example
|
63
|
+
# response.deck #=> [ZombieBattleground::Api::Models::Card]
|
64
|
+
#
|
65
|
+
# @api public
|
66
|
+
attr_reader :cards
|
67
|
+
|
68
|
+
validate :total_is_a_non_negative_integer
|
69
|
+
validate :page_is_a_non_negative_integer
|
70
|
+
validate :limit_is_a_non_negative_integer
|
71
|
+
validate :cards_is_an_array_of_card
|
72
|
+
|
73
|
+
##
|
74
|
+
# Creates a new GetCardsResponse
|
75
|
+
#
|
76
|
+
# @param response [Faraday::Response] Faraday response from endpoint
|
77
|
+
#
|
78
|
+
# @return [ZombieBattleground::Api::GetCardsResponse]
|
79
|
+
#
|
80
|
+
# @example
|
81
|
+
# response = ZombieBattleground::Api::GetCardsResponse.new(faraday_response)
|
82
|
+
# # => ZombieBattleground::Api::GetCardsResponse
|
83
|
+
#
|
84
|
+
# @api public
|
85
|
+
def initialize(response)
|
86
|
+
handle_errors(response)
|
87
|
+
|
88
|
+
JSON.parse(response.body).each do |key, value|
|
89
|
+
if key == 'cards'
|
90
|
+
instance_variable_set(
|
91
|
+
"@#{key}".to_sym, value.map { |card| ZombieBattleground::Api::Models::Card.new(card) }
|
92
|
+
)
|
93
|
+
else
|
94
|
+
instance_variable_set("@#{key}".to_sym, value)
|
95
|
+
end
|
34
96
|
end
|
35
97
|
end
|
36
|
-
end
|
37
98
|
|
38
|
-
|
39
|
-
unless @cards.is_a?(Array)
|
40
|
-
errors.add(:cards, 'Cards must be an array')
|
41
|
-
return
|
42
|
-
end
|
99
|
+
private
|
43
100
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
101
|
+
##
|
102
|
+
# Validator for cards attribute
|
103
|
+
#
|
104
|
+
# @return [void]
|
105
|
+
#
|
106
|
+
# @api private
|
107
|
+
def cards_is_an_array_of_card
|
108
|
+
unless @cards.is_a?(Array)
|
109
|
+
errors.add(:cards, 'Cards must be an array')
|
110
|
+
return
|
111
|
+
end
|
112
|
+
|
113
|
+
@cards.each do |card|
|
114
|
+
next if card.is_a?(ZombieBattleground::Api::Models::Card) &&
|
115
|
+
card.valid? &&
|
116
|
+
card.errors.size.zero?
|
48
117
|
|
49
|
-
|
118
|
+
errors.add(:cards, 'cards must be an array of Card')
|
119
|
+
end
|
50
120
|
end
|
51
121
|
end
|
52
122
|
end
|
@@ -9,29 +9,61 @@ require 'zombie_battleground/api/responses/response_helper'
|
|
9
9
|
|
10
10
|
module ZombieBattleground
|
11
11
|
class Api
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
class Responses
|
13
|
+
##
|
14
|
+
# Response validator for GetDeck
|
15
|
+
class GetDeckResponse
|
16
|
+
include ActiveModel::Validations
|
17
|
+
include ZombieBattleground::Api::ValidationHelper
|
18
|
+
include ZombieBattleground::Api::Responses::ResponseHelper
|
18
19
|
|
19
|
-
|
20
|
+
##
|
21
|
+
# @!attribute [r] deck
|
22
|
+
# the deck
|
23
|
+
#
|
24
|
+
# @return [ZombieBattleground::Api::Models::Deck]
|
25
|
+
#
|
26
|
+
# @example
|
27
|
+
# response.deck #=> ZombieBattleground::Api::Models::Deck
|
28
|
+
#
|
29
|
+
# @api public
|
30
|
+
attr_reader :deck
|
20
31
|
|
21
|
-
|
32
|
+
validate :deck_is_a_deck
|
22
33
|
|
23
|
-
|
24
|
-
|
34
|
+
##
|
35
|
+
# Creates a new GetDeckResponse
|
36
|
+
#
|
37
|
+
# @param response [Faraday::Response] Faraday response from endpoint
|
38
|
+
#
|
39
|
+
# @return [ZombieBattleground::Api::GetDeckResponse]
|
40
|
+
#
|
41
|
+
# @example
|
42
|
+
# response = ZombieBattleground::Api::GetDeckResponse.new(faraday_response)
|
43
|
+
# # => ZombieBattleground::Api::GetDeckResponse
|
44
|
+
#
|
45
|
+
# @api public
|
46
|
+
def initialize(response)
|
47
|
+
handle_errors(response)
|
25
48
|
|
26
|
-
|
27
|
-
|
49
|
+
@deck = ZombieBattleground::Api::Models::Deck.new(JSON.parse(response.body))
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
28
53
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
54
|
+
##
|
55
|
+
# Validator for deck attribute
|
56
|
+
#
|
57
|
+
# @return [void]
|
58
|
+
#
|
59
|
+
# @api private
|
60
|
+
def deck_is_a_deck
|
61
|
+
return if @deck.is_a?(ZombieBattleground::Api::Models::Deck) &&
|
62
|
+
@deck.valid? &&
|
63
|
+
@deck.errors.size.zero?
|
33
64
|
|
34
|
-
|
65
|
+
errors.add(:deck, 'deck must be a Deck')
|
66
|
+
end
|
35
67
|
end
|
36
68
|
end
|
37
69
|
end
|
@@ -9,44 +9,114 @@ require 'zombie_battleground/api/responses/response_helper'
|
|
9
9
|
|
10
10
|
module ZombieBattleground
|
11
11
|
class Api
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
12
|
+
class Responses
|
13
|
+
##
|
14
|
+
# Response validator for GetDecks
|
15
|
+
class GetDecksResponse
|
16
|
+
include ActiveModel::Validations
|
17
|
+
include ZombieBattleground::Api::ValidationHelper
|
18
|
+
include ZombieBattleground::Api::Responses::ResponseHelper
|
19
|
+
|
20
|
+
##
|
21
|
+
# @!attribute [r] total
|
22
|
+
# the total number of results available
|
23
|
+
#
|
24
|
+
# @return [Integer]
|
25
|
+
#
|
26
|
+
# @example
|
27
|
+
# response.total #=> 1505
|
28
|
+
#
|
29
|
+
# @api public
|
30
|
+
attr_reader :total
|
31
|
+
|
32
|
+
##
|
33
|
+
# @!attribute [r] page
|
34
|
+
# the page number of the results
|
35
|
+
#
|
36
|
+
# @return [Integer]
|
37
|
+
#
|
38
|
+
# @example
|
39
|
+
# response.page #=> 1
|
40
|
+
#
|
41
|
+
# @api public
|
42
|
+
attr_reader :page
|
43
|
+
|
44
|
+
##
|
45
|
+
# @!attribute [r] limit
|
46
|
+
# the limit of results for the page
|
47
|
+
#
|
48
|
+
# @return [Integer]
|
49
|
+
#
|
50
|
+
# @example
|
51
|
+
# response.limit #=> 100
|
52
|
+
#
|
53
|
+
# @api public
|
54
|
+
attr_reader :limit
|
55
|
+
|
56
|
+
##
|
57
|
+
# @!attribute [r] decks
|
58
|
+
# the deck found for the page and limit
|
59
|
+
#
|
60
|
+
# @return [Array<ZombieBattleground::Api::Models::Deck>]
|
61
|
+
#
|
62
|
+
# @example
|
63
|
+
# response.deck #=> [ZombieBattleground::Api::Models::Deck]
|
64
|
+
#
|
65
|
+
# @api public
|
66
|
+
attr_reader :decks
|
67
|
+
|
68
|
+
validate :total_is_a_non_negative_integer
|
69
|
+
validate :page_is_a_non_negative_integer
|
70
|
+
validate :limit_is_a_non_negative_integer
|
71
|
+
validate :decks_is_an_array_of_deck
|
72
|
+
|
73
|
+
##
|
74
|
+
# Creates a new GetDecksResponse
|
75
|
+
#
|
76
|
+
# @param response [Faraday::Response] Faraday response from endpoint
|
77
|
+
#
|
78
|
+
# @return [ZombieBattleground::Api::GetDecksResponse]
|
79
|
+
#
|
80
|
+
# @example
|
81
|
+
# response = ZombieBattleground::Api::GetDecksResponse.new(faraday_response)
|
82
|
+
# # => ZombieBattleground::Api::GetDecksResponse
|
83
|
+
#
|
84
|
+
# @api public
|
85
|
+
def initialize(response)
|
86
|
+
handle_errors(response)
|
87
|
+
|
88
|
+
JSON.parse(response.body).each do |key, value|
|
89
|
+
if key == 'decks'
|
90
|
+
instance_variable_set(
|
91
|
+
"@#{key}".to_sym, value.map { |deck| ZombieBattleground::Api::Models::Deck.new(deck) }
|
92
|
+
)
|
93
|
+
else
|
94
|
+
instance_variable_set("@#{key}".to_sym, value)
|
95
|
+
end
|
34
96
|
end
|
35
97
|
end
|
36
|
-
end
|
37
98
|
|
38
|
-
|
39
|
-
unless @decks.is_a?(Array)
|
40
|
-
errors.add(:decks, 'Decks must be an array')
|
41
|
-
return
|
42
|
-
end
|
99
|
+
private
|
43
100
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
101
|
+
##
|
102
|
+
# Validator for decks attribute
|
103
|
+
#
|
104
|
+
# @return [void]
|
105
|
+
#
|
106
|
+
# @api private
|
107
|
+
def decks_is_an_array_of_deck
|
108
|
+
unless @decks.is_a?(Array)
|
109
|
+
errors.add(:decks, 'Decks must be an array')
|
110
|
+
return
|
111
|
+
end
|
112
|
+
|
113
|
+
@decks.each do |deck|
|
114
|
+
next if deck.is_a?(ZombieBattleground::Api::Models::Deck) &&
|
115
|
+
deck.valid? &&
|
116
|
+
deck.errors.size.zero?
|
48
117
|
|
49
|
-
|
118
|
+
errors.add(:decks, 'decks must be an array of Deck')
|
119
|
+
end
|
50
120
|
end
|
51
121
|
end
|
52
122
|
end
|