zombie_battleground-api 0.1.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 +7 -0
- data/.gitignore +62 -0
- data/.rspec +3 -0
- data/.rubocop.yml +21 -0
- data/.travis.yml +5 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Dockerfile +33 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +85 -0
- data/LICENSE +21 -0
- data/LICENSE.txt +21 -0
- data/README.md +57 -0
- data/Rakefile +16 -0
- data/bin/console +12 -0
- data/bin/setup +8 -0
- data/docker-compose.yml +4 -0
- data/lib/zombie_battleground/api/client.rb +114 -0
- data/lib/zombie_battleground/api/errors.rb +24 -0
- data/lib/zombie_battleground/api/models/card.rb +46 -0
- data/lib/zombie_battleground/api/models/deck.rb +65 -0
- data/lib/zombie_battleground/api/models/match.rb +47 -0
- data/lib/zombie_battleground/api/models/simple_card.rb +27 -0
- data/lib/zombie_battleground/api/requests/get_card_request.rb +27 -0
- data/lib/zombie_battleground/api/requests/get_cards_request.rb +40 -0
- data/lib/zombie_battleground/api/requests/get_deck_request.rb +30 -0
- data/lib/zombie_battleground/api/requests/get_decks_request.rb +36 -0
- data/lib/zombie_battleground/api/requests/get_match_request.rb +30 -0
- data/lib/zombie_battleground/api/requests/get_matches_request.rb +34 -0
- data/lib/zombie_battleground/api/requests/request_helper.rb +20 -0
- data/lib/zombie_battleground/api/responses/get_card_response.rb +38 -0
- data/lib/zombie_battleground/api/responses/get_cards_response.rb +54 -0
- data/lib/zombie_battleground/api/responses/get_deck_response.rb +38 -0
- data/lib/zombie_battleground/api/responses/get_decks_response.rb +54 -0
- data/lib/zombie_battleground/api/responses/get_match_response.rb +38 -0
- data/lib/zombie_battleground/api/responses/get_matches_response.rb +54 -0
- data/lib/zombie_battleground/api/responses/response_helper.rb +28 -0
- data/lib/zombie_battleground/api/validation_helper.rb +347 -0
- data/lib/zombie_battleground/api/version.rb +7 -0
- data/lib/zombie_battleground/api.rb +40 -0
- data/zombie_battleground-api.gemspec +40 -0
- metadata +196 -0
data/bin/setup
ADDED
data/docker-compose.yml
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'faraday'
|
4
|
+
|
5
|
+
require 'zombie_battleground/api/errors'
|
6
|
+
|
7
|
+
require 'zombie_battleground/api/requests/get_decks_request'
|
8
|
+
require 'zombie_battleground/api/responses/get_decks_response'
|
9
|
+
require 'zombie_battleground/api/requests/get_deck_request'
|
10
|
+
require 'zombie_battleground/api/responses/get_deck_response'
|
11
|
+
require 'zombie_battleground/api/requests/get_matches_request'
|
12
|
+
require 'zombie_battleground/api/responses/get_matches_response'
|
13
|
+
require 'zombie_battleground/api/requests/get_match_request'
|
14
|
+
require 'zombie_battleground/api/responses/get_match_response'
|
15
|
+
require 'zombie_battleground/api/requests/get_cards_request'
|
16
|
+
require 'zombie_battleground/api/responses/get_cards_response'
|
17
|
+
require 'zombie_battleground/api/requests/get_card_request'
|
18
|
+
require 'zombie_battleground/api/responses/get_card_response'
|
19
|
+
|
20
|
+
module ZombieBattleground
|
21
|
+
class Api
|
22
|
+
##
|
23
|
+
# The API Client for Zombie Battleground
|
24
|
+
class Client
|
25
|
+
def initialize
|
26
|
+
@endpoint = 'https://api.loom.games/zb'
|
27
|
+
@api_version = 'v1'
|
28
|
+
end
|
29
|
+
|
30
|
+
def connection(uri:, params:)
|
31
|
+
Faraday.new(
|
32
|
+
url: "#{@endpoint}/#{@api_version}/#{uri}",
|
33
|
+
params: params,
|
34
|
+
headers: {
|
35
|
+
'User-Agent' => "RubyGem-zombie_battleground-api_#{VERSION}",
|
36
|
+
'Content-Type' => 'application/json'
|
37
|
+
}
|
38
|
+
)
|
39
|
+
end
|
40
|
+
|
41
|
+
def decks(**args)
|
42
|
+
request = ZombieBattleground::Api::GetDecksRequest.new
|
43
|
+
args.each { |key, val| request.send("#{key}=", val) }
|
44
|
+
raise ZombieBattleground::Api::Errors::InvalidInput, request.errors.messages unless request.valid?
|
45
|
+
|
46
|
+
response = connection(uri: request.uri, params: request.params).get
|
47
|
+
decks = ZombieBattleground::Api::GetDecksResponse.new(response)
|
48
|
+
raise ZombieBattleground::Api::Errors::InvalidResponse.new(response, decks) unless decks.valid?
|
49
|
+
|
50
|
+
decks
|
51
|
+
end
|
52
|
+
|
53
|
+
def deck(**args)
|
54
|
+
request = ZombieBattleground::Api::GetDeckRequest.new
|
55
|
+
args.each { |key, val| request.send("#{key}=", val) }
|
56
|
+
raise ZombieBattleground::Api::Errors::InvalidInput, request.errors.messages unless request.valid?
|
57
|
+
|
58
|
+
response = connection(uri: request.uri, params: request.params).get
|
59
|
+
deck = ZombieBattleground::Api::GetDeckResponse.new(response)
|
60
|
+
raise ZombieBattleground::Api::Errors::InvalidResponse.new(response, deck) unless deck.valid?
|
61
|
+
|
62
|
+
deck
|
63
|
+
end
|
64
|
+
|
65
|
+
def matches(**args)
|
66
|
+
request = ZombieBattleground::Api::GetMatchesRequest.new
|
67
|
+
args.each { |key, val| request.send("#{key}=", val) }
|
68
|
+
raise ZombieBattleground::Api::Errors::InvalidInput, request.errors.messages unless request.valid?
|
69
|
+
|
70
|
+
response = connection(uri: request.uri, params: request.params).get
|
71
|
+
matches = ZombieBattleground::Api::GetMatchesResponse.new(response)
|
72
|
+
raise ZombieBattleground::Api::Errors::InvalidResponse.new(response, matches) unless matches.valid?
|
73
|
+
|
74
|
+
matches
|
75
|
+
end
|
76
|
+
|
77
|
+
def match(**args)
|
78
|
+
request = ZombieBattleground::Api::GetMatchRequest.new
|
79
|
+
args.each { |key, val| request.send("#{key}=", val) }
|
80
|
+
raise ZombieBattleground::Api::Errors::InvalidInput, request.errors.messages unless request.valid?
|
81
|
+
|
82
|
+
response = connection(uri: request.uri, params: request.params).get
|
83
|
+
match = ZombieBattleground::Api::GetMatchResponse.new(response)
|
84
|
+
raise ZombieBattleground::Api::Errors::InvalidResponse.new(response, match) unless match.valid?
|
85
|
+
|
86
|
+
match
|
87
|
+
end
|
88
|
+
|
89
|
+
def cards(**args)
|
90
|
+
request = ZombieBattleground::Api::GetCardsRequest.new
|
91
|
+
args.each { |key, val| request.send("#{key}=", val) }
|
92
|
+
raise ZombieBattleground::Api::Errors::InvalidInput, request.errors.messages unless request.valid?
|
93
|
+
|
94
|
+
response = connection(uri: request.uri, params: request.params).get
|
95
|
+
cards = ZombieBattleground::Api::GetCardsResponse.new(response)
|
96
|
+
raise ZombieBattleground::Api::Errors::InvalidResponse.new(response, cards) unless cards.valid?
|
97
|
+
|
98
|
+
cards
|
99
|
+
end
|
100
|
+
|
101
|
+
def card(**args)
|
102
|
+
request = ZombieBattleground::Api::GetCardRequest.new
|
103
|
+
args.each { |key, val| request.send("#{key}=", val) }
|
104
|
+
raise ZombieBattleground::Api::Errors::InvalidInput, request.errors.messages unless request.valid?
|
105
|
+
|
106
|
+
response = connection(uri: request.uri, params: request.params).get
|
107
|
+
card = ZombieBattleground::Api::GetCardResponse.new(response)
|
108
|
+
raise ZombieBattleground::Api::Errors::InvalidResponse.new(response, card) unless card.valid?
|
109
|
+
|
110
|
+
card
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ZombieBattleground
|
4
|
+
class Api
|
5
|
+
class Errors
|
6
|
+
class BadRequest < StandardError; end
|
7
|
+
class InternalServerError < StandardError; end
|
8
|
+
class InvalidInput < StandardError; end
|
9
|
+
class NotFound < StandardError; end
|
10
|
+
class ServiceUnavailable < StandardError; end
|
11
|
+
class UnknownResponse < StandardError; end
|
12
|
+
|
13
|
+
##
|
14
|
+
# Creates an error with the Faraday response and the context for the error
|
15
|
+
class InvalidResponse < StandardError
|
16
|
+
def initialize(response, context)
|
17
|
+
@response = response
|
18
|
+
@context = context
|
19
|
+
super(context.errors.messages.to_s)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_record'
|
4
|
+
|
5
|
+
require 'zombie_battleground/api/validation_helper'
|
6
|
+
|
7
|
+
module ZombieBattleground
|
8
|
+
class Api
|
9
|
+
##
|
10
|
+
# Validator for Card
|
11
|
+
class Card
|
12
|
+
include ActiveModel::Validations
|
13
|
+
include ZombieBattleground::Api::ValidationHelper
|
14
|
+
|
15
|
+
attr_reader :id, :mould_id, :version, :kind, :set, :name, :description, :flavor_text,
|
16
|
+
:picture, :rank, :type, :rarity, :frame, :damage, :health, :cost,
|
17
|
+
:ability, :block_height, :image_url
|
18
|
+
|
19
|
+
validate :id_is_a_non_negative_integer
|
20
|
+
validate :mould_id_is_a_string_and_not_null
|
21
|
+
validate :version_is_a_string_and_not_null
|
22
|
+
validate :kind_is_a_string_and_not_null
|
23
|
+
validate :set_is_a_string_and_not_null
|
24
|
+
validate :name_is_a_string_and_not_null
|
25
|
+
validate :description_is_a_string_and_not_null
|
26
|
+
validate :rank_is_a_string_and_not_null
|
27
|
+
validate :type_is_a_string_and_not_null
|
28
|
+
validate :rarity_is_a_string_and_not_null
|
29
|
+
validate :frame_is_a_string_and_not_null
|
30
|
+
validate :damage_is_a_non_negative_integer_and_not_null
|
31
|
+
validate :health_is_a_non_negative_integer_and_not_null
|
32
|
+
validate :cost_is_a_non_negative_integer_and_not_null
|
33
|
+
validate :ability_is_a_string_and_not_null
|
34
|
+
validate :block_height_is_a_non_negative_integer_and_not_null
|
35
|
+
validate :image_url_is_a_string_and_not_null
|
36
|
+
|
37
|
+
def initialize(card)
|
38
|
+
card.each do |key, value|
|
39
|
+
next if value.nil? # this is an illegal response, card id 1 is bogus
|
40
|
+
|
41
|
+
instance_variable_set("@#{key}".to_sym, value)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_record'
|
4
|
+
|
5
|
+
require 'zombie_battleground/api/validation_helper'
|
6
|
+
require 'zombie_battleground/api/models/simple_card'
|
7
|
+
|
8
|
+
module ZombieBattleground
|
9
|
+
class Api
|
10
|
+
##
|
11
|
+
# Validator for Deck
|
12
|
+
class Deck
|
13
|
+
include ActiveModel::Validations
|
14
|
+
include ZombieBattleground::Api::ValidationHelper
|
15
|
+
|
16
|
+
attr_reader :id, :created_at, :updated_at, :user_id, :deck_id, :name, :hero_id,
|
17
|
+
:cards, :primary_skill_id, :secondary_skill_id, :version, :sender_address,
|
18
|
+
:block_height, :is_deleted
|
19
|
+
|
20
|
+
validate :id_is_a_non_negative_integer
|
21
|
+
validate :created_at_is_a_time_and_not_null
|
22
|
+
validate :updated_at_is_a_time_and_not_null
|
23
|
+
validate :user_id_is_a_string_and_not_null
|
24
|
+
validate :deck_id_is_a_non_negative_integer_and_not_null
|
25
|
+
validate :name_is_a_string_and_not_null
|
26
|
+
validate :hero_id_is_a_non_negative_integer_and_not_null
|
27
|
+
validate :cards_is_an_array_of_simple_card
|
28
|
+
validate :primary_skill_id_is_a_non_negative_integer_and_not_null
|
29
|
+
validate :secondary_skill_id_is_a_non_negative_integer_and_not_null
|
30
|
+
validate :version_is_a_string_and_not_null
|
31
|
+
validate :sender_address_is_a_string_and_not_null
|
32
|
+
validate :block_height_is_a_non_negative_integer_and_not_null
|
33
|
+
validates :is_deleted, inclusion: { in: [true, false] }
|
34
|
+
|
35
|
+
def initialize(deck)
|
36
|
+
deck.each do |key, value|
|
37
|
+
next if value.nil? # this is an illegal response, deck id 1 is bogus
|
38
|
+
|
39
|
+
if key == 'cards'
|
40
|
+
instance_variable_set("@#{key}".to_sym, value.map { |card| ZombieBattleground::Api::SimpleCard.new(card) })
|
41
|
+
elsif %w[created_at updated_at].include?(key)
|
42
|
+
instance_variable_set("@#{key}".to_sym, Time.parse(value))
|
43
|
+
else
|
44
|
+
instance_variable_set("@#{key}".to_sym, value)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def cards_is_an_array_of_simple_card
|
50
|
+
unless @cards.is_a?(Array)
|
51
|
+
errors.add(:cards, 'cards must be an Array')
|
52
|
+
return
|
53
|
+
end
|
54
|
+
|
55
|
+
@cards.each do |card|
|
56
|
+
next if card.is_a?(ZombieBattleground::Api::SimpleCard) &&
|
57
|
+
card.valid? &&
|
58
|
+
card.errors.size.zero?
|
59
|
+
|
60
|
+
errors.add(:cards, 'cards must be an array of SimpleCard')
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_record'
|
4
|
+
|
5
|
+
require 'zombie_battleground/api/validation_helper'
|
6
|
+
|
7
|
+
module ZombieBattleground
|
8
|
+
class Api
|
9
|
+
##
|
10
|
+
# Validator for Match
|
11
|
+
class Match
|
12
|
+
include ActiveModel::Validations
|
13
|
+
include ZombieBattleground::Api::ValidationHelper
|
14
|
+
|
15
|
+
attr_reader :id, :created_at, :updated_at, :player1_id, :player2_id, :player1_accepted,
|
16
|
+
:player2_accepted, :player1_deck_id, :player2_deck_id, :status, :version,
|
17
|
+
:random_seed, :winner_id, :block_height
|
18
|
+
|
19
|
+
validate :id_is_a_non_negative_integer
|
20
|
+
validate :created_at_is_a_time_and_not_null
|
21
|
+
validate :updated_at_is_a_time_and_not_null
|
22
|
+
validate :player1_id_is_a_string_and_not_null
|
23
|
+
validate :player2_id_is_a_string_and_not_null
|
24
|
+
validates :player1_accepted, inclusion: { in: [true, false] }
|
25
|
+
validates :player2_accepted, inclusion: { in: [true, false] }
|
26
|
+
validate :player1_deck_id_is_a_non_negative_integer
|
27
|
+
validate :player2_deck_id_is_a_non_negative_integer
|
28
|
+
validate :status_is_a_string_and_not_null
|
29
|
+
validate :version_is_a_string_and_not_null
|
30
|
+
validate :random_seed_is_a_non_negative_integer
|
31
|
+
validate :winner_id_is_a_string_and_not_null
|
32
|
+
validate :block_height_is_a_non_negative_integer_and_not_null
|
33
|
+
|
34
|
+
def initialize(match)
|
35
|
+
match.each do |key, value|
|
36
|
+
next if value.nil? # this is an illegal response, match id 1 is bogus
|
37
|
+
|
38
|
+
if %w[created_at updated_at].include?(key)
|
39
|
+
instance_variable_set("@#{key}".to_sym, Time.parse(value))
|
40
|
+
else
|
41
|
+
instance_variable_set("@#{key}".to_sym, value)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_record'
|
4
|
+
|
5
|
+
require 'zombie_battleground/api/validation_helper'
|
6
|
+
|
7
|
+
module ZombieBattleground
|
8
|
+
class Api
|
9
|
+
##
|
10
|
+
# Validator for SimpleCard (only returned from GetDeck(s))
|
11
|
+
class SimpleCard
|
12
|
+
include ActiveModel::Validations
|
13
|
+
include ZombieBattleground::Api::ValidationHelper
|
14
|
+
|
15
|
+
attr_reader :card_name, :amount
|
16
|
+
|
17
|
+
validate :card_name_is_a_string_and_not_null
|
18
|
+
validate :amount_is_a_non_negative_integer_and_not_null
|
19
|
+
|
20
|
+
def initialize(card)
|
21
|
+
card.each do |key, value|
|
22
|
+
instance_variable_set("@#{key}".to_sym, value)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_record'
|
4
|
+
|
5
|
+
require 'zombie_battleground/api/validation_helper'
|
6
|
+
require 'zombie_battleground/api/requests/request_helper'
|
7
|
+
|
8
|
+
module ZombieBattleground
|
9
|
+
class Api
|
10
|
+
##
|
11
|
+
# Request validator for GetCard
|
12
|
+
class GetCardRequest
|
13
|
+
include ActiveModel::Validations
|
14
|
+
include ZombieBattleground::Api::ValidationHelper
|
15
|
+
include ZombieBattleground::Api::RequestHelper
|
16
|
+
|
17
|
+
attr_accessor :mould_id, :version
|
18
|
+
|
19
|
+
validate :mould_id_is_a_string_and_not_null
|
20
|
+
validate :version_is_a_string_and_not_null
|
21
|
+
|
22
|
+
def uri
|
23
|
+
'card'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_record'
|
4
|
+
|
5
|
+
require 'zombie_battleground/api/validation_helper'
|
6
|
+
require 'zombie_battleground/api/requests/request_helper'
|
7
|
+
|
8
|
+
module ZombieBattleground
|
9
|
+
class Api
|
10
|
+
##
|
11
|
+
# Request validator for GetCards
|
12
|
+
class GetCardsRequest
|
13
|
+
include ActiveModel::Validations
|
14
|
+
include ZombieBattleground::Api::ValidationHelper
|
15
|
+
include ZombieBattleground::Api::RequestHelper
|
16
|
+
|
17
|
+
attr_accessor :id, :mould_id, :version, :kind, :set, :name, :rank, :type, :rarity,
|
18
|
+
:damage, :health, :cost, :page, :limit
|
19
|
+
|
20
|
+
validate :id_is_a_non_negative_integer
|
21
|
+
validate :mould_id_is_a_string
|
22
|
+
validate :version_is_a_string
|
23
|
+
validate :kind_is_a_string
|
24
|
+
validate :set_is_a_string
|
25
|
+
validate :name_is_a_string
|
26
|
+
validate :rank_is_a_string
|
27
|
+
validate :type_is_a_string
|
28
|
+
validate :rarity_is_a_string
|
29
|
+
validate :damage_is_a_non_negative_integer
|
30
|
+
validate :health_is_a_non_negative_integer
|
31
|
+
validate :cost_is_a_non_negative_integer
|
32
|
+
validate :page_is_a_non_negative_integer
|
33
|
+
validate :limit_is_a_non_negative_integer
|
34
|
+
|
35
|
+
def uri
|
36
|
+
'cards'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_record'
|
4
|
+
|
5
|
+
require 'zombie_battleground/api/validation_helper'
|
6
|
+
require 'zombie_battleground/api/requests/request_helper'
|
7
|
+
|
8
|
+
module ZombieBattleground
|
9
|
+
class Api
|
10
|
+
##
|
11
|
+
# Request validator for GetDeck
|
12
|
+
class GetDeckRequest
|
13
|
+
include ActiveModel::Validations
|
14
|
+
include ZombieBattleground::Api::ValidationHelper
|
15
|
+
include ZombieBattleground::Api::RequestHelper
|
16
|
+
|
17
|
+
attr_accessor :id
|
18
|
+
|
19
|
+
validate :id_is_a_non_negative_integer
|
20
|
+
|
21
|
+
def uri
|
22
|
+
"deck/#{id}"
|
23
|
+
end
|
24
|
+
|
25
|
+
def params
|
26
|
+
{}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|