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,80 +1,28 @@
1
1
  module Dota
2
2
  module API
3
3
  class Match
4
- class Player
5
- include Utilities::Inspectable
6
-
7
- attr_reader :raw
8
-
9
- def initialize(raw)
10
- @raw = raw
11
- end
12
-
13
- def id
14
- raw["account_id"]
15
- end
4
+ class Player < BasicPlayer
5
+ # See https://wiki.teamfortress.com/wiki/WebAPI/GetMatchHistory#Player_Slot
6
+ SLOT_GAP = 128
16
7
 
17
8
  def slot
18
- raw["player_slot"]
9
+ slot = raw["player_slot"]
10
+ slot -= SLOT_GAP if slot >= SLOT_GAP
11
+ slot + 1
19
12
  end
20
13
 
21
14
  def status
22
- case raw["leaver_status"]
23
- when 0
24
- :played
25
- when 1
26
- :left_safe
27
- when 2
28
- :abandoned
29
- else
30
- :bot
31
- end
32
- end
33
-
34
- def hero
35
- Hero.new(raw["hero_id"])
36
- end
37
-
38
- def level
39
- raw["level"]
40
- end
41
-
42
- def kills
43
- raw["kills"]
15
+ STATUS[raw["leaver_status"]]
44
16
  end
45
17
 
46
18
  def deaths
47
19
  raw["deaths"]
48
20
  end
49
21
 
50
- def assists
51
- raw["assists"]
52
- end
53
-
54
- def last_hits
55
- raw["last_hits"]
56
- end
57
-
58
- def denies
59
- raw["denies"]
60
- end
61
-
62
- def gold
63
- raw["gold"]
64
- end
65
-
66
22
  def gold_spent
67
23
  raw["gold_spent"]
68
24
  end
69
25
 
70
- def gpm
71
- raw["gold_per_min"]
72
- end
73
-
74
- def xpm
75
- raw["xp_per_min"]
76
- end
77
-
78
26
  def hero_damage
79
27
  raw["hero_damage"]
80
28
  end
@@ -0,0 +1,41 @@
1
+ module Dota
2
+ module API
3
+ class Match
4
+ class Side < Entity
5
+ def id
6
+ raw["team_id"]
7
+ end
8
+
9
+ def name
10
+ raw["name"]
11
+ end
12
+
13
+ def logo_id
14
+ raw["logo"]
15
+ end
16
+
17
+ def complete?
18
+ raw["team_complete"] == 1
19
+ end
20
+
21
+ def tower_status
22
+ raw["tower_status"]
23
+ end
24
+
25
+ def barracks_status
26
+ raw["barracks_status"]
27
+ end
28
+
29
+ def players
30
+ raw["players"].map do |raw_player|
31
+ Player.new(raw_player)
32
+ end
33
+ end
34
+
35
+ def captain_id
36
+ raw["captain"]
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,32 @@
1
+ module Dota
2
+ module API
3
+ class ScheduledMatch < Entity
4
+ def league_id
5
+ raw["league_id"]
6
+ end
7
+
8
+ def game_id
9
+ raw["game_id"]
10
+ end
11
+
12
+ def teams
13
+ raw["teams"].map do |raw_team|
14
+ raw_team["name"] = raw_team.delete("team_name")
15
+ Team.new(raw_team)
16
+ end
17
+ end
18
+
19
+ def starts_at
20
+ Time.at(raw["starttime"])
21
+ end
22
+
23
+ def description
24
+ raw["comment"]
25
+ end
26
+
27
+ def final?
28
+ raw["final"]
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,14 +1,6 @@
1
1
  module Dota
2
2
  module API
3
- class Team
4
- include Utilities::Inspectable
5
-
6
- attr_reader :raw
7
-
8
- def initialize(raw)
9
- @raw = raw
10
- end
11
-
3
+ class Team < Entity
12
4
  def id
13
5
  raw["team_id"]
14
6
  end
@@ -1,3 +1,3 @@
1
1
  module Dota
2
- VERSION = "0.0.12"
2
+ VERSION = "0.0.14"
3
3
  end
@@ -5,8 +5,8 @@ describe Dota::API::Cosmetic::Rarity do
5
5
  end
6
6
  end
7
7
 
8
- specify("#id") { expect(rarity.id).to eq 7 }
8
+ specify("#id") { expect(rarity.id).to eq 7 }
9
9
  specify("#order") { expect(rarity.order).to eq 6 }
10
10
  specify("#color") { expect(rarity.color).to eq "#e4ae39" }
11
- specify("#name") { expect(rarity.name).to eq "Immortal" }
11
+ specify("#name") { expect(rarity.name).to eq "Immortal" }
12
12
  end
@@ -1,14 +1,10 @@
1
1
  describe Dota::API::Hero do
2
- let(:hero) do
3
- VCR.use_cassette("GetMatchDetails") do
4
- test_client.matches(sample_match_id).players.first.hero
5
- end
6
- end
2
+ let(:hero) { described_class.new(69) }
7
3
 
8
4
  specify ".all" do
9
5
  heroes = described_class.all
10
6
  expect(heroes.first).to be_a described_class
11
- expect(heroes.count).to eq 108
7
+ expect(heroes.count).to eq 109
12
8
  end
13
9
 
14
10
  specify "#id" do
@@ -1,9 +1,5 @@
1
1
  describe Dota::API::Item do
2
- let(:item) do
3
- VCR.use_cassette("GetMatchDetails") do
4
- test_client.matches(sample_match_id).players.first.items.first
5
- end
6
- end
2
+ let(:item) { described_class.new(1) }
7
3
 
8
4
  specify ".all" do
9
5
  items = described_class.all
@@ -1,12 +1,12 @@
1
1
  describe Dota::API::LiveMatch::Player do
2
- let(:player) do
2
+ let(:live_match) do
3
3
  VCR.use_cassette("GetLiveLeagueGames") do
4
- matches = test_client.live_matches
5
- first_match = matches.first
6
- players = first_match.players
7
- players.first
4
+ test_client.live_matches.first
8
5
  end
9
6
  end
7
+ let(:player) do
8
+ live_match.radiant.players.at(3)
9
+ end
10
10
 
11
11
  specify "#id" do
12
12
  expect(player.id).to eq 34145091
@@ -20,7 +20,75 @@ describe Dota::API::LiveMatch::Player do
20
20
  expect(player.hero).to be_a Dota::API::Hero
21
21
  end
22
22
 
23
- specify "#team" do
24
- expect(player.team).to eq :radiant
23
+ specify "#kills" do
24
+ expect(player.kills).to eq 4
25
+ end
26
+
27
+ specify "#deaths" do
28
+ expect(player.deaths).to eq 6
29
+ end
30
+
31
+ specify "#assists" do
32
+ expect(player.assists).to eq 15
33
+ end
34
+
35
+ specify "#slot" do
36
+ expect(player.slot).to eq 4
37
+
38
+ expect(live_match.radiant.players.map(&:slot)).to eq [1, 2, 3, 4, 5]
39
+ expect(live_match.dire.players.map(&:slot)).to eq [1, 2, 3, 4, 5]
40
+ end
41
+
42
+ specify "#last_hits" do
43
+ expect(player.last_hits).to eq 42
44
+ end
45
+
46
+ specify "#denies" do
47
+ expect(player.denies).to eq 3
48
+ end
49
+
50
+ specify "#gold" do
51
+ expect(player.gold).to eq 3131
52
+ end
53
+
54
+ specify "#level" do
55
+ expect(player.level).to eq 19
56
+ end
57
+
58
+ specify "#gpm" do
59
+ expect(player.gpm).to eq 279
60
+ end
61
+
62
+ specify "#xpm" do
63
+ expect(player.xpm).to eq 409
64
+ end
65
+
66
+ specify "#ultimate_state" do
67
+ expect(player.ultimate_state).to eq 3
68
+ end
69
+
70
+ specify "#ultimate_cooldown" do
71
+ expect(player.ultimate_cooldown).to eq 0
72
+ end
73
+
74
+ specify "#items" do
75
+ expect(player.items.count).to eq 6
76
+ expect(player.items.first).to be_an Dota::API::Item
77
+ end
78
+
79
+ specify "#respawn_timer" do
80
+ expect(player.respawn_timer).to eq 0
81
+ end
82
+
83
+ specify "#position_x" do
84
+ expect(player.position_x).to eq -4874.2314453125
85
+ end
86
+
87
+ specify "#position_y" do
88
+ expect(player.position_y).to eq -4778.44677734375
89
+ end
90
+
91
+ specify "#net_worth" do
92
+ expect(player.net_worth).to eq 11531
25
93
  end
26
- end
94
+ end
@@ -1,25 +1,59 @@
1
1
  describe Dota::API::LiveMatch::Side do
2
- let(:side) do
2
+ let(:live_match) do
3
3
  VCR.use_cassette("GetLiveLeagueGames") do
4
- matches = test_client.live_matches
5
- first_match = matches.first
6
- first_match.dire
4
+ test_client.live_matches.first
7
5
  end
8
6
  end
7
+ let(:radiant) { live_match.radiant }
8
+ let(:dire) { live_match.dire }
9
9
 
10
10
  specify "#id" do
11
- expect(side.id).to eq 1846074
11
+ expect(radiant.id).to eq 1677303
12
+ expect(dire.id).to eq 1846074
12
13
  end
13
14
 
14
15
  specify "#name" do
15
- expect(side.name).to eq "Haunti Gaming"
16
+ expect(radiant.name).to eq "ReallyCoolGuys"
17
+ expect(dire.name).to eq "Haunti Gaming"
16
18
  end
17
19
 
18
20
  specify "#logo_id" do
19
- expect(side.logo_id).to eq 547513665869798854
21
+ expect(radiant.logo_id).to eq 29595255080842763
22
+ expect(dire.logo_id).to eq 547513665869798854
20
23
  end
21
24
 
22
25
  specify "#complete?" do
23
- expect(side.complete?).to eq false
26
+ expect(radiant.complete?).to eq false
27
+ expect(dire.complete?).to eq false
28
+ end
29
+
30
+ specify "#score" do
31
+ expect(radiant.score).to eq 42
32
+ expect(dire.score).to eq 54
33
+ end
34
+
35
+ specify "#series_wins" do
36
+ expect(radiant.series_wins).to eq 0
37
+ expect(dire.series_wins).to eq 0
38
+ end
39
+
40
+ specify "#tower_status" do
41
+ expect(radiant.tower_status).to eq 1540
42
+ expect(dire.tower_status).to eq 1958
43
+ end
44
+
45
+ specify "#barracks_status" do
46
+ expect(radiant.barracks_status).to eq 3
47
+ expect(dire.barracks_status).to eq 63
48
+ end
49
+
50
+ specify "#players" do
51
+ players = radiant.players
52
+ expect(players.count).to eq 5
53
+ expect(players.first).to be_a Dota::API::LiveMatch::Player
54
+
55
+ players = dire.players
56
+ expect(players.count).to eq 5
57
+ expect(players.first).to be_a Dota::API::LiveMatch::Player
24
58
  end
25
59
  end
@@ -1,8 +1,7 @@
1
1
  describe Dota::API::LiveMatch do
2
2
  let(:live_match) do
3
3
  VCR.use_cassette("GetLiveLeagueGames") do
4
- matches = test_client.live_matches
5
- matches.first
4
+ test_client.live_matches.first
6
5
  end
7
6
  end
8
7
 
@@ -26,14 +25,6 @@ describe Dota::API::LiveMatch do
26
25
  expect(live_match.stream_delay).to eq 120
27
26
  end
28
27
 
29
- specify "#radiant_wins" do
30
- expect(live_match.radiant_wins).to eq 0
31
- end
32
-
33
- specify "#dire_wins" do
34
- expect(live_match.dire_wins).to eq 0
35
- end
36
-
37
28
  specify "#radiant" do
38
29
  expect(live_match.radiant).to be_a Dota::API::LiveMatch::Side
39
30
  end
@@ -50,13 +41,11 @@ describe Dota::API::LiveMatch do
50
41
  expect(live_match.league_tier).to eq "Amateur"
51
42
  end
52
43
 
53
- specify "#players" do
54
- players = live_match.players
55
- expect(players.count).to eq 11
56
- expect(players.first).to be_a Dota::API::LiveMatch::Player
44
+ specify "#duration" do
45
+ expect(live_match.duration).to eq 2840.2998046875
57
46
  end
58
47
 
59
- specify "#scoreboard" do
60
- expect(live_match.scoreboard).to be_a Dota::API::LiveMatch::Scoreboard
48
+ specify "#roshan_timer" do
49
+ expect(live_match.roshan_timer).to eq 278
61
50
  end
62
51
  end
@@ -1,7 +1,10 @@
1
1
  describe Dota::API::Match::Draft do
2
2
  let(:draft) do
3
3
  VCR.use_cassette("GetMatchDetails") do
4
- test_client.matches(sample_match_id).drafts.last
4
+ test_client
5
+ .matches(sample_match_id)
6
+ .drafts
7
+ .last
5
8
  end
6
9
  end
7
10