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.
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