dota 0.0.12 → 0.0.14
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 +4 -4
- data/Guardfile +1 -1
- data/README.md +145 -112
- data/data/heroes.yml +327 -0
- data/data/items.yml +714 -0
- data/lib/dota.rb +8 -1
- data/lib/dota/api/basic_match.rb +52 -0
- data/lib/dota/api/basic_player.rb +61 -0
- data/lib/dota/api/client.rb +12 -2
- data/lib/dota/api/cosmetic/rarity.rb +1 -9
- data/lib/dota/api/entity.rb +13 -0
- data/lib/dota/api/friend.rb +1 -9
- data/lib/dota/api/hero.rb +2 -111
- data/lib/dota/api/item.rb +1 -240
- data/lib/dota/api/league.rb +6 -8
- data/lib/dota/api/live_match.rb +29 -35
- data/lib/dota/api/live_match/player.rb +29 -22
- data/lib/dota/api/live_match/side.rb +25 -11
- data/lib/dota/api/match.rb +30 -117
- data/lib/dota/api/match/draft.rb +1 -9
- data/lib/dota/api/match/player.rb +7 -59
- data/lib/dota/api/match/side.rb +41 -0
- data/lib/dota/api/scheduled_match.rb +32 -0
- data/lib/dota/api/team.rb +1 -9
- data/lib/dota/version.rb +1 -1
- data/spec/dota/api/cosmetic/rarity_spec.rb +2 -2
- data/spec/dota/api/hero_spec.rb +2 -6
- data/spec/dota/api/item_spec.rb +1 -5
- data/spec/dota/api/live_match/player_spec.rb +76 -8
- data/spec/dota/api/live_match/side_spec.rb +42 -8
- data/spec/dota/api/live_match_spec.rb +5 -16
- data/spec/dota/api/match/draft_spec.rb +4 -1
- data/spec/dota/api/match/player_spec.rb +7 -3
- data/spec/dota/api/match/side_spec.rb +54 -0
- data/spec/dota/api/match_spec.rb +0 -62
- data/spec/dota/api/scheduled_match_spec.rb +36 -0
- data/spec/dota_spec.rb +56 -7
- data/spec/fixtures/vcr_cassettes/GetScheduledLeagueGames.yml +112 -0
- metadata +15 -5
- data/lib/dota/api/live_match/scoreboard.rb +0 -31
- data/spec/dota/api/live_match/scoreboard_spec.rb +0 -25
data/lib/dota/api/league.rb
CHANGED
@@ -1,13 +1,11 @@
|
|
1
1
|
module Dota
|
2
2
|
module API
|
3
|
-
class League
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
@raw = raw
|
10
|
-
end
|
3
|
+
class League < Entity
|
4
|
+
TIERS = {
|
5
|
+
1 => "Amateur",
|
6
|
+
2 => "Professional",
|
7
|
+
3 => "Premier"
|
8
|
+
}
|
11
9
|
|
12
10
|
def id
|
13
11
|
raw["leagueid"]
|
data/lib/dota/api/live_match.rb
CHANGED
@@ -1,72 +1,66 @@
|
|
1
1
|
module Dota
|
2
2
|
module API
|
3
|
-
class LiveMatch
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
3 => "Premier"
|
8
|
-
}
|
9
|
-
|
10
|
-
include Utilities::Inspectable
|
3
|
+
class LiveMatch < BasicMatch
|
4
|
+
def duration
|
5
|
+
raw["scoreboard"]["duration"]
|
6
|
+
end
|
11
7
|
|
12
|
-
|
8
|
+
def league_id
|
9
|
+
raw["league_id"]
|
10
|
+
end
|
13
11
|
|
14
|
-
def
|
15
|
-
|
12
|
+
def league_tier
|
13
|
+
League::TIERS[raw["league_tier"]]
|
16
14
|
end
|
17
15
|
|
18
16
|
def lobby_id
|
19
17
|
raw["lobby_id"]
|
20
18
|
end
|
21
19
|
|
22
|
-
def id
|
23
|
-
raw["match_id"]
|
24
|
-
end
|
25
|
-
|
26
20
|
def spectators_count
|
27
21
|
raw["spectators"]
|
28
22
|
end
|
29
23
|
|
30
|
-
def league_id
|
31
|
-
raw["league_id"]
|
32
|
-
end
|
33
|
-
|
34
24
|
def stream_delay
|
35
25
|
raw["stream_delay_s"]
|
36
26
|
end
|
37
27
|
|
38
|
-
def
|
39
|
-
raw["
|
28
|
+
def series_type
|
29
|
+
raw["series_type"]
|
40
30
|
end
|
41
31
|
|
42
|
-
def
|
43
|
-
raw["
|
32
|
+
def roshan_timer
|
33
|
+
raw["scoreboard"]["roshan_respawn_timer"]
|
44
34
|
end
|
45
35
|
|
46
36
|
def radiant
|
47
|
-
Side.new(
|
37
|
+
@radiant ||= Side.new(raw_side(:radiant))
|
48
38
|
end
|
49
39
|
|
50
40
|
def dire
|
51
|
-
Side.new(
|
41
|
+
@dire ||= Side.new(raw_side(:dire))
|
52
42
|
end
|
53
43
|
|
54
|
-
|
55
|
-
raw["series_type"]
|
56
|
-
end
|
44
|
+
private
|
57
45
|
|
58
|
-
def
|
59
|
-
|
46
|
+
def raw_side(type)
|
47
|
+
raw_side = raw["#{type}_team"]
|
48
|
+
.merge(raw["scoreboard"]["#{type}"])
|
49
|
+
.merge("series_wins" => raw["#{type}_series_wins"])
|
50
|
+
merge_player_names(raw_side)
|
60
51
|
end
|
61
52
|
|
62
|
-
def
|
63
|
-
|
64
|
-
|
53
|
+
def merge_player_names(raw_side)
|
54
|
+
raw_side["players"].map! do |player|
|
55
|
+
id = player["account_id"]
|
56
|
+
player.merge("name" => player_name_from_id(id))
|
65
57
|
end
|
58
|
+
raw_side
|
66
59
|
end
|
67
60
|
|
68
|
-
def
|
69
|
-
|
61
|
+
def player_name_from_id(id)
|
62
|
+
player = raw["players"].detect { |p| id == p["account_id"] }
|
63
|
+
player["name"]
|
70
64
|
end
|
71
65
|
end
|
72
66
|
end
|
@@ -1,38 +1,45 @@
|
|
1
1
|
module Dota
|
2
2
|
module API
|
3
3
|
class LiveMatch
|
4
|
-
class Player
|
5
|
-
|
4
|
+
class Player < BasicPlayer
|
5
|
+
def slot
|
6
|
+
raw["player_slot"]
|
7
|
+
end
|
6
8
|
|
7
|
-
|
9
|
+
def name
|
10
|
+
raw["name"]
|
11
|
+
end
|
8
12
|
|
9
|
-
def
|
10
|
-
|
13
|
+
def deaths
|
14
|
+
raw["death"]
|
11
15
|
end
|
12
16
|
|
13
|
-
def
|
14
|
-
raw["
|
17
|
+
def ultimate_state
|
18
|
+
raw["ultimate_state"]
|
15
19
|
end
|
16
20
|
|
17
|
-
def
|
18
|
-
raw["
|
21
|
+
def ultimate_cooldown
|
22
|
+
raw["ultimate_cooldown"]
|
23
|
+
end
|
24
|
+
|
25
|
+
def position_x
|
26
|
+
raw["position_x"]
|
27
|
+
end
|
28
|
+
|
29
|
+
def position_y
|
30
|
+
raw["position_y"]
|
31
|
+
end
|
32
|
+
|
33
|
+
def net_worth
|
34
|
+
raw["net_worth"]
|
19
35
|
end
|
20
36
|
|
21
|
-
def
|
22
|
-
|
37
|
+
def respawn_timer
|
38
|
+
raw["respawn_timer"]
|
23
39
|
end
|
24
40
|
|
25
|
-
def
|
26
|
-
|
27
|
-
when 0
|
28
|
-
:radiant
|
29
|
-
when 1
|
30
|
-
:dire
|
31
|
-
when 2
|
32
|
-
:broadcaster
|
33
|
-
when 4
|
34
|
-
:unassigned
|
35
|
-
end
|
41
|
+
def items
|
42
|
+
(0..5).map { |i| Item.new(raw["item#{i}"]) }
|
36
43
|
end
|
37
44
|
end
|
38
45
|
end
|
@@ -1,23 +1,15 @@
|
|
1
1
|
module Dota
|
2
2
|
module API
|
3
3
|
class LiveMatch
|
4
|
-
class Side
|
5
|
-
|
6
|
-
|
7
|
-
attr_reader :raw
|
8
|
-
|
9
|
-
def initialize(raw)
|
10
|
-
@raw = raw
|
4
|
+
class Side < Entity
|
5
|
+
def id
|
6
|
+
raw["team_id"]
|
11
7
|
end
|
12
8
|
|
13
9
|
def name
|
14
10
|
raw["team_name"]
|
15
11
|
end
|
16
12
|
|
17
|
-
def id
|
18
|
-
raw["team_id"]
|
19
|
-
end
|
20
|
-
|
21
13
|
def logo_id
|
22
14
|
raw["team_logo"]
|
23
15
|
end
|
@@ -25,6 +17,28 @@ module Dota
|
|
25
17
|
def complete?
|
26
18
|
raw["complete"]
|
27
19
|
end
|
20
|
+
|
21
|
+
def tower_status
|
22
|
+
raw["tower_state"]
|
23
|
+
end
|
24
|
+
|
25
|
+
def barracks_status
|
26
|
+
raw["barracks_state"]
|
27
|
+
end
|
28
|
+
|
29
|
+
def series_wins
|
30
|
+
raw["series_wins"]
|
31
|
+
end
|
32
|
+
|
33
|
+
def players
|
34
|
+
raw["players"].map do |raw_player|
|
35
|
+
Player.new(raw_player)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def score
|
40
|
+
raw["score"]
|
41
|
+
end
|
28
42
|
end
|
29
43
|
end
|
30
44
|
end
|
data/lib/dota/api/match.rb
CHANGED
@@ -1,57 +1,12 @@
|
|
1
1
|
module Dota
|
2
2
|
module API
|
3
|
-
class Match
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
2 => "Tournament",
|
11
|
-
3 => "Tutorial",
|
12
|
-
4 => "Co-op with Bots",
|
13
|
-
5 => "Team Match",
|
14
|
-
6 => "Solo Queue",
|
15
|
-
7 => "Ranked"
|
16
|
-
}.freeze
|
17
|
-
|
18
|
-
MODES = {
|
19
|
-
0 => "None",
|
20
|
-
1 => "All Pick",
|
21
|
-
2 => "Captain's Mode",
|
22
|
-
3 => "Random Draft",
|
23
|
-
4 => "Single Draft",
|
24
|
-
5 => "All Random",
|
25
|
-
6 => "Intro",
|
26
|
-
7 => "Diretide",
|
27
|
-
8 => "Reverse Captain's Mode",
|
28
|
-
9 => "The Greeviling",
|
29
|
-
10 => "Tutorial",
|
30
|
-
11 => "Mid Only",
|
31
|
-
12 => "Least Played",
|
32
|
-
13 => "New Player Pool",
|
33
|
-
14 => "Compendium Matchmaking",
|
34
|
-
15 => "Custom",
|
35
|
-
16 => "Captain's Draft",
|
36
|
-
17 => "Balanced Draft",
|
37
|
-
18 => "Ability Draft"
|
38
|
-
}.freeze
|
39
|
-
|
40
|
-
SKILL_LEVELS = {
|
41
|
-
0 => "Any",
|
42
|
-
1 => "Normal",
|
43
|
-
2 => "High",
|
44
|
-
3 => "Very High"
|
45
|
-
}.freeze
|
46
|
-
|
47
|
-
attr_reader :raw
|
48
|
-
|
49
|
-
def initialize(raw)
|
50
|
-
@raw = raw
|
51
|
-
end
|
52
|
-
|
53
|
-
def id
|
54
|
-
raw["match_id"]
|
3
|
+
class Match < BasicMatch
|
4
|
+
def duration
|
5
|
+
raw["duration"]
|
6
|
+
end
|
7
|
+
|
8
|
+
def league_id
|
9
|
+
raw["leagueid"]
|
55
10
|
end
|
56
11
|
|
57
12
|
def mode
|
@@ -70,18 +25,6 @@ module Dota
|
|
70
25
|
raw["lobby_type"]
|
71
26
|
end
|
72
27
|
|
73
|
-
def drafts
|
74
|
-
raw["picks_bans"].map do |raw_draft|
|
75
|
-
Draft.new(raw_draft)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def players
|
80
|
-
raw["players"].map do |raw_player|
|
81
|
-
Player.new(raw_player)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
28
|
def sequence
|
86
29
|
raw["match_seq_num"]
|
87
30
|
end
|
@@ -90,10 +33,6 @@ module Dota
|
|
90
33
|
Time.at(raw["start_time"])
|
91
34
|
end
|
92
35
|
|
93
|
-
def duration
|
94
|
-
raw["duration"]
|
95
|
-
end
|
96
|
-
|
97
36
|
def first_blood
|
98
37
|
raw["first_blood_time"]
|
99
38
|
end
|
@@ -114,10 +53,6 @@ module Dota
|
|
114
53
|
raw["season"]
|
115
54
|
end
|
116
55
|
|
117
|
-
def league_id
|
118
|
-
raw["leagueid"]
|
119
|
-
end
|
120
|
-
|
121
56
|
def players_count
|
122
57
|
raw["human_players"]
|
123
58
|
end
|
@@ -126,60 +61,38 @@ module Dota
|
|
126
61
|
raw["cluster"]
|
127
62
|
end
|
128
63
|
|
129
|
-
def
|
130
|
-
raw["
|
131
|
-
|
132
|
-
|
133
|
-
def dire_tower_status
|
134
|
-
raw["tower_status_dire"]
|
135
|
-
end
|
136
|
-
|
137
|
-
def radiant_barracks_status
|
138
|
-
raw["barracks_status_radiant"]
|
139
|
-
end
|
140
|
-
|
141
|
-
def dire_barracks_status
|
142
|
-
raw["barracks_status_dire"]
|
143
|
-
end
|
144
|
-
|
145
|
-
def radiant_id
|
146
|
-
raw["radiant_team_id"]
|
147
|
-
end
|
148
|
-
|
149
|
-
def radiant_name
|
150
|
-
raw["radiant_name"]
|
151
|
-
end
|
152
|
-
|
153
|
-
def radiant_logo_id
|
154
|
-
raw["radiant_logo"]
|
155
|
-
end
|
156
|
-
|
157
|
-
def radiant_complete?
|
158
|
-
raw["radiant_team_complete"] == 1
|
159
|
-
end
|
160
|
-
|
161
|
-
def radiant_captain_id
|
162
|
-
raw["radiant_captain"]
|
64
|
+
def drafts
|
65
|
+
@drafts ||= raw["picks_bans"].map do |raw_draft|
|
66
|
+
Draft.new(raw_draft)
|
67
|
+
end
|
163
68
|
end
|
164
69
|
|
165
|
-
def
|
166
|
-
|
70
|
+
def radiant
|
71
|
+
@radiant ||= Side.new(raw_side(:radiant))
|
167
72
|
end
|
168
73
|
|
169
|
-
def
|
170
|
-
|
74
|
+
def dire
|
75
|
+
@dire ||= Side.new(raw_side(:dire))
|
171
76
|
end
|
172
77
|
|
173
|
-
|
174
|
-
raw["dire_logo"]
|
175
|
-
end
|
78
|
+
private
|
176
79
|
|
177
|
-
def
|
178
|
-
|
80
|
+
def raw_side(type)
|
81
|
+
pattern = /^#{type}_|_#{type}$/
|
82
|
+
raw_side = raw.select { |k, v| k.to_s.match(pattern) }
|
83
|
+
raw_side = Hash[raw_side.map { |k, v| [k.sub(pattern, ""), v] }]
|
84
|
+
raw_side.merge("players" => players_for_side(type))
|
179
85
|
end
|
180
86
|
|
181
|
-
def
|
182
|
-
raw["
|
87
|
+
def players_for_side(type)
|
88
|
+
raw["players"].select do |player|
|
89
|
+
case type
|
90
|
+
when :radiant
|
91
|
+
player["player_slot"] < Player::SLOT_GAP
|
92
|
+
when :dire
|
93
|
+
player["player_slot"] >= Player::SLOT_GAP
|
94
|
+
end
|
95
|
+
end
|
183
96
|
end
|
184
97
|
end
|
185
98
|
end
|
data/lib/dota/api/match/draft.rb
CHANGED