dota 0.0.12 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/Guardfile +1 -1
  3. data/README.md +145 -112
  4. data/data/heroes.yml +327 -0
  5. data/data/items.yml +714 -0
  6. data/lib/dota.rb +8 -1
  7. data/lib/dota/api/basic_match.rb +52 -0
  8. data/lib/dota/api/basic_player.rb +61 -0
  9. data/lib/dota/api/client.rb +12 -2
  10. data/lib/dota/api/cosmetic/rarity.rb +1 -9
  11. data/lib/dota/api/entity.rb +13 -0
  12. data/lib/dota/api/friend.rb +1 -9
  13. data/lib/dota/api/hero.rb +2 -111
  14. data/lib/dota/api/item.rb +1 -240
  15. data/lib/dota/api/league.rb +6 -8
  16. data/lib/dota/api/live_match.rb +29 -35
  17. data/lib/dota/api/live_match/player.rb +29 -22
  18. data/lib/dota/api/live_match/side.rb +25 -11
  19. data/lib/dota/api/match.rb +30 -117
  20. data/lib/dota/api/match/draft.rb +1 -9
  21. data/lib/dota/api/match/player.rb +7 -59
  22. data/lib/dota/api/match/side.rb +41 -0
  23. data/lib/dota/api/scheduled_match.rb +32 -0
  24. data/lib/dota/api/team.rb +1 -9
  25. data/lib/dota/version.rb +1 -1
  26. data/spec/dota/api/cosmetic/rarity_spec.rb +2 -2
  27. data/spec/dota/api/hero_spec.rb +2 -6
  28. data/spec/dota/api/item_spec.rb +1 -5
  29. data/spec/dota/api/live_match/player_spec.rb +76 -8
  30. data/spec/dota/api/live_match/side_spec.rb +42 -8
  31. data/spec/dota/api/live_match_spec.rb +5 -16
  32. data/spec/dota/api/match/draft_spec.rb +4 -1
  33. data/spec/dota/api/match/player_spec.rb +7 -3
  34. data/spec/dota/api/match/side_spec.rb +54 -0
  35. data/spec/dota/api/match_spec.rb +0 -62
  36. data/spec/dota/api/scheduled_match_spec.rb +36 -0
  37. data/spec/dota_spec.rb +56 -7
  38. data/spec/fixtures/vcr_cassettes/GetScheduledLeagueGames.yml +112 -0
  39. metadata +15 -5
  40. data/lib/dota/api/live_match/scoreboard.rb +0 -31
  41. data/spec/dota/api/live_match/scoreboard_spec.rb +0 -25
@@ -1,13 +1,11 @@
1
1
  module Dota
2
2
  module API
3
- class League
4
- include Utilities::Inspectable
5
-
6
- attr_reader :raw
7
-
8
- def initialize(raw)
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"]
@@ -1,72 +1,66 @@
1
1
  module Dota
2
2
  module API
3
- class LiveMatch
4
- LEAGUE_TIERS = {
5
- 1 => "Amateur",
6
- 2 => "Professional",
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
- attr_reader :raw
8
+ def league_id
9
+ raw["league_id"]
10
+ end
13
11
 
14
- def initialize(raw)
15
- @raw = raw
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 radiant_wins
39
- raw["radiant_series_wins"]
28
+ def series_type
29
+ raw["series_type"]
40
30
  end
41
31
 
42
- def dire_wins
43
- raw["dire_series_wins"]
32
+ def roshan_timer
33
+ raw["scoreboard"]["roshan_respawn_timer"]
44
34
  end
45
35
 
46
36
  def radiant
47
- Side.new(raw["radiant_team"])
37
+ @radiant ||= Side.new(raw_side(:radiant))
48
38
  end
49
39
 
50
40
  def dire
51
- Side.new(raw["dire_team"])
41
+ @dire ||= Side.new(raw_side(:dire))
52
42
  end
53
43
 
54
- def series_type
55
- raw["series_type"]
56
- end
44
+ private
57
45
 
58
- def league_tier
59
- LEAGUE_TIERS[raw["league_tier"]]
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 players
63
- raw["players"].map do |raw_player|
64
- Player.new(raw_player)
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 scoreboard
69
- Scoreboard.new(raw["scoreboard"])
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
- include Utilities::Inspectable
4
+ class Player < BasicPlayer
5
+ def slot
6
+ raw["player_slot"]
7
+ end
6
8
 
7
- attr_reader :raw
9
+ def name
10
+ raw["name"]
11
+ end
8
12
 
9
- def initialize(raw)
10
- @raw = raw
13
+ def deaths
14
+ raw["death"]
11
15
  end
12
16
 
13
- def id
14
- raw["account_id"]
17
+ def ultimate_state
18
+ raw["ultimate_state"]
15
19
  end
16
20
 
17
- def name
18
- raw["name"]
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 hero
22
- Hero.new(raw["hero_id"])
37
+ def respawn_timer
38
+ raw["respawn_timer"]
23
39
  end
24
40
 
25
- def team
26
- case raw["team"]
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
- include Utilities::Inspectable
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
@@ -1,57 +1,12 @@
1
1
  module Dota
2
2
  module API
3
- class Match
4
- include Utilities::Inspectable
5
-
6
- TYPES = {
7
- -1 => "Invalid",
8
- 0 => "Public Matchmaking",
9
- 1 => "Practice",
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 radiant_tower_status
130
- raw["tower_status_radiant"]
131
- end
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 dire_id
166
- raw["dire_team_id"]
70
+ def radiant
71
+ @radiant ||= Side.new(raw_side(:radiant))
167
72
  end
168
73
 
169
- def dire_name
170
- raw["dire_name"]
74
+ def dire
75
+ @dire ||= Side.new(raw_side(:dire))
171
76
  end
172
77
 
173
- def dire_logo_id
174
- raw["dire_logo"]
175
- end
78
+ private
176
79
 
177
- def dire_complete?
178
- raw["dire_team_complete"] == 1
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 dire_captain_id
182
- raw["dire_captain"]
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
@@ -1,15 +1,7 @@
1
1
  module Dota
2
2
  module API
3
3
  class Match
4
- class Draft
5
- include Utilities::Inspectable
6
-
7
- attr_reader :raw
8
-
9
- def initialize(raw)
10
- @raw = raw
11
- end
12
-
4
+ class Draft < Entity
13
5
  def order
14
6
  raw["order"] + 1
15
7
  end