dota 0.0.12 → 0.0.14
Sign up to get free protection for your applications and to get access to all the features.
- 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