dotka 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 916ae98d5e10fa7638d045218510d93d81c28cb9
4
- data.tar.gz: 0bc9dbfee7c141488c5804c72d8b0cd86418b4ce
3
+ metadata.gz: 6d435bee22f3983f8dc0165ccf5b8d0cea8bbcf4
4
+ data.tar.gz: 06279f5006934dcb4bff9b686a7be8879012d43b
5
5
  SHA512:
6
- metadata.gz: 93a9ffaf034b526f0d653177e97068b00ea6679dc7dab333d44df3fb289194ef59a13c1fc00ace484f91a171c0afe339b9b1ee013f8bc984e6471f8b04766a8c
7
- data.tar.gz: ec6e797f058e2f49288258861cf9df1bd307da722cd7ef25e02e1f1d302b73a72ee51808a36b8af9b4efe16e2bb707f518cd1e0eb79db80fd4ede15f147371f5
6
+ metadata.gz: 9edf1b950ccd2a6b4c0f49fa1a7378d466d8f3c449ba4a1932704424792861a43bc6511a483b392759eb90dba111ba39cd64489c6de703592ef00e9f39425f57
7
+ data.tar.gz: 722d92f77816abf246b5fafd2af1452330af7b6c4d956e1aed8637a82641bfd8001e3860755f0402727095fd780e7fef61fc5b5e27c426aade0032b6892e463c
@@ -1,45 +1,61 @@
1
- require "rest-client"
2
1
  require_relative "dotka/match"
2
+
3
+ require "rest-client"
3
4
  require "json"
4
5
 
5
- class Dotka
6
+ class Dotka
7
+
6
8
  def initialize
7
9
  @key = nil
8
10
  end
11
+
9
12
  def set_api_key key
10
13
  @key = key
11
14
  end
15
+
12
16
  def get_api_key
13
17
  @key
14
18
  end
19
+
15
20
  def match id
21
+
16
22
  raise "Please set up the API key!" unless not @key.nil?
23
+
17
24
  response = RestClient.get(
18
25
  "https://api.steampowered.com/IDOTA2Match_570/GetMatchDetails/V001",
19
26
  {"params" => {"key" => @key, "match_id" => id}}
20
27
  )
28
+
21
29
  raise "Can not load a match with ID #{id}." unless response.code == 200
30
+
22
31
  DotkaM::Match.new(JSON.parse(response.to_str)["result"])
32
+
23
33
  end
34
+
24
35
  def matches account_id, conditions = {}
36
+
25
37
  raise "Please set up the API key!" unless not @key.nil?
38
+
26
39
  response = RestClient.get(
27
40
  "https://api.steampowered.com/IDOTA2Match_570/GetMatchHistory/V001",
28
- {
29
- "params" => {"key" => @key, "account_id" => account_id}.merge(conditions)
30
- }
41
+ {"params" => {"key" => @key, "account_id" => account_id}.merge(conditions)}
31
42
  )
43
+
32
44
  raise "Can not load matches for account ID #{account_id}." unless response.code == 200
45
+
33
46
  matches = Array.new
47
+
34
48
  JSON.parse(response.to_str)["result"]["matches"].each { |match|
35
49
  matches.push DotkaM::Match.new(match)
36
- }
50
+ }
51
+
37
52
  matches
53
+
38
54
  end
39
55
 
40
56
  # Rather than updating the gemspec every time.
41
57
  def self.version
42
- "1.2.1"
58
+ "1.2.2"
43
59
  end
44
60
 
45
61
  end
@@ -1,12 +1,17 @@
1
1
  require_relative "raw"
2
2
 
3
3
  module DotkaM
4
+
4
5
  class GameMode < Raw
6
+
5
7
  def id
6
8
  @raw["id"].to_i
7
9
  end
10
+
8
11
  def localized_name
9
12
  @raw["name"]
10
13
  end
14
+
11
15
  end
16
+
12
17
  end
@@ -1,15 +1,21 @@
1
1
  require_relative "raw"
2
2
 
3
3
  module DotkaM
4
+
4
5
  class Hero < Raw
6
+
5
7
  def id
6
8
  @raw["id"].to_i
7
9
  end
10
+
8
11
  def name
9
12
  @raw["name"]
10
13
  end
14
+
11
15
  def localized_name
12
16
  @raw["localized_name"]
13
- end
17
+ end
18
+
14
19
  end
20
+
15
21
  end
@@ -1,15 +1,21 @@
1
1
  require_relative "raw"
2
2
 
3
3
  module DotkaM
4
+
4
5
  class Item < Raw
6
+
5
7
  def id
6
8
  @raw["id"].to_i
7
9
  end
10
+
8
11
  def name
9
12
  @raw["name"]
10
13
  end
14
+
11
15
  def localized_name
12
16
  @raw["localized_name"]
13
17
  end
18
+
14
19
  end
20
+
15
21
  end
@@ -1,12 +1,17 @@
1
1
  require_relative "raw"
2
2
 
3
3
  module DotkaM
4
+
4
5
  class Lobby < Raw
6
+
5
7
  def id
6
8
  @raw["id"].to_i
7
9
  end
10
+
8
11
  def localized_name
9
12
  @raw["name"]
10
13
  end
14
+
11
15
  end
16
+
12
17
  end
@@ -7,44 +7,60 @@ require_relative "storage"
7
7
  require_relative "../dotka"
8
8
 
9
9
  module DotkaM
10
+
10
11
  class Match < Raw
12
+
11
13
  def id
12
14
  @raw["match_id"].to_i
13
15
  end
16
+
14
17
  def players
18
+
15
19
  players = Array.new
16
- @raw["players"].each { |player|
17
- players.push Player.new(player)
18
- }
20
+
21
+ @raw["players"].each { |player| players.push Player.new(player) }
22
+
19
23
  players
24
+
20
25
  end
26
+
21
27
  def player account_id
22
28
  players.select { |player| player.account_id == account_id.to_i }.first
23
29
  end
30
+
24
31
  def winner
25
32
  (!! @raw["radiant_win"]) ? "radiant" : "dire"
26
33
  end
34
+
27
35
  def duration
28
36
  @raw["duration"].to_i
29
37
  end
38
+
30
39
  def start_time
31
40
  @raw["start_time"].to_i
32
41
  end
42
+
33
43
  def lobby
34
44
  Lobby.new Storage.new.get("lobbies", {"id" => @raw["lobby_type"]})
35
45
  end
46
+
36
47
  def game_mode
37
48
  GameMode.new Storage.new.get("game_modes", {"id" => @raw["game_mode"]})
38
49
  end
50
+
39
51
  def region
40
52
  Region.new Storage.new.get("regions", {"id" => @raw["cluster"]})
41
53
  end
42
54
 
43
- # API limitation workaround
55
+ # API limitation workaround.
44
56
  def load_info dotka
57
+
45
58
  raise "Expected an instance of Dotka." unless dotka.is_a? Dotka
59
+
46
60
  @raw = dotka.match(self.id).raw
61
+
47
62
  end
48
63
 
49
64
  end
65
+
50
66
  end
@@ -4,15 +4,21 @@ require_relative "hero"
4
4
  require_relative "item"
5
5
 
6
6
  module DotkaM
7
+
7
8
  class Player < Raw
9
+
8
10
  def account_id
9
11
  @raw["account_id"].to_i
10
12
  end
13
+
11
14
  def hero
12
15
  Hero.new Storage.new.get("heroes", {"id" => @raw["hero_id"]})
13
16
  end
17
+
14
18
  def items
19
+
15
20
  storage = Storage.new
21
+
16
22
  [
17
23
  Item.new(storage.get "items", {"id" => @raw["item_0"]}),
18
24
  Item.new(storage.get "items", {"id" => @raw["item_1"]}),
@@ -21,48 +27,65 @@ module DotkaM
21
27
  Item.new(storage.get "items", {"id" => @raw["item_4"]}),
22
28
  Item.new(storage.get "items", {"id" => @raw["item_5"]})
23
29
  ]
30
+
24
31
  end
32
+
25
33
  def kills
26
34
  @raw["kills"].to_i
27
35
  end
36
+
28
37
  def deaths
29
38
  @raw["deaths"].to_i
30
39
  end
40
+
31
41
  def assists
32
42
  @raw["assists"].to_i
33
43
  end
44
+
34
45
  def abandoned?
35
46
  @raw["leaver_status"].to_i == 1
36
47
  end
48
+
37
49
  def team
38
50
  @raw["player_slot"].to_i > 4 ? "dire" : "radiant"
39
51
  end
52
+
40
53
  def gold
41
54
  @raw["gold"].to_i + @raw["gold_spent"].to_i
42
55
  end
56
+
43
57
  def last_hits
44
58
  @raw["last_hits"].to_i
45
59
  end
60
+
46
61
  def denies
47
62
  @raw["denies"].to_i
48
63
  end
64
+
49
65
  def gold_per_min
50
66
  @raw["gold_per_min"].to_i
51
67
  end
68
+
52
69
  def xp_per_min
53
70
  @raw["xp_per_min"].to_i
54
71
  end
72
+
55
73
  def hero_dmg
56
74
  @raw["hero_damage"].to_i
57
75
  end
76
+
58
77
  def tower_dmg
59
78
  @raw["tower_damage"].to_i
60
79
  end
80
+
61
81
  def hero_heal
62
82
  @raw["hero_healing"].to_i
63
83
  end
84
+
64
85
  def level
65
86
  @raw["level"].to_i
66
87
  end
88
+
67
89
  end
90
+
68
91
  end
@@ -1,8 +1,13 @@
1
1
  module DotkaM
2
+
2
3
  class Raw
4
+
3
5
  attr_accessor "raw"
6
+
4
7
  def initialize raw
5
8
  @raw = raw
6
9
  end
10
+
7
11
  end
12
+
8
13
  end
@@ -1,12 +1,17 @@
1
1
  require_relative "raw"
2
2
 
3
3
  module DotkaM
4
+
4
5
  class Region < Raw
6
+
5
7
  def id
6
8
  @raw["id"].to_i
7
9
  end
10
+
8
11
  def localized_name
9
12
  @raw["name"]
10
13
  end
14
+
11
15
  end
16
+
12
17
  end
@@ -1,16 +1,23 @@
1
1
  module DotkaM
2
+
2
3
  class Skill
4
+
3
5
  def self.any
4
6
  0
5
7
  end
8
+
6
9
  def self.normal
7
10
  1
8
11
  end
12
+
9
13
  def self.high
10
14
  2
11
15
  end
16
+
12
17
  def self.very_high
13
18
  3
14
19
  end
20
+
15
21
  end
22
+
16
23
  end
@@ -1,21 +1,33 @@
1
1
  require "json"
2
2
 
3
3
  module DotkaM
4
+
4
5
  class Storage
6
+
5
7
  def get file, conditions = {}
8
+
6
9
  rows = JSON.parse File.read("#{__dir__}/../../data/#{file}.json")
10
+
7
11
  if not conditions.empty?
12
+
8
13
  rows.select! { |row|
9
14
  selected = true
15
+
10
16
  conditions.each { |key, value|
11
17
  if not (row.has_key? key) or not (row[key] == value.to_s)
12
18
  selected = false
13
19
  end
14
20
  }
21
+
15
22
  selected
16
- }
23
+ }
24
+
17
25
  end
26
+
18
27
  rows.length == 1 ? rows.first : rows
28
+
19
29
  end
30
+
20
31
  end
32
+
21
33
  end
@@ -1,40 +1,55 @@
1
1
  require_relative "../lib/dotka"
2
2
  require_relative "../lib/dotka/match"
3
+
3
4
  require "rest-client"
4
5
 
5
6
  RSpec.describe Dotka do
6
7
 
7
8
  before :all do
9
+
8
10
  @dotka = Dotka.new
11
+
9
12
  end
10
13
 
11
14
  it "sets the API key" do
15
+
12
16
  @dotka.set_api_key "some-key"
17
+
13
18
  expect(@dotka.get_api_key).to eq("some-key")
19
+
14
20
  end
15
21
 
16
22
  it "loads a match" do
23
+
17
24
  allow(RestClient).to receive("get") {
18
25
  FakeResponse.new(200, '{"result": {"match_id": 123456789}}')
19
26
  }
27
+
20
28
  expect(match = @dotka.match(123456789)).to be_instance_of(DotkaM::Match)
21
29
  expect(match.id).to eq(123456789)
30
+
22
31
  end
23
32
 
24
33
  it "loads a list of matches" do
34
+
25
35
  allow(RestClient).to receive("get") {
26
36
  FakeResponse.new(200, '{"result": {"matches": [{"match_id": 123456789}]}}')
27
37
  }
38
+
28
39
  expect(matches = @dotka.matches(987654321)).to be_an(Array)
29
40
  expect(matches.length).to eq(1)
30
41
  expect(matches.first.id).to eq(123456789)
42
+
31
43
  end
32
44
 
33
45
  end
34
46
 
35
47
  class FakeResponse
36
- attr_reader "code", "to_str"
48
+
49
+ attr_reader "code", "to_str"
50
+
37
51
  def initialize code, body
38
52
  @code, @to_str = code, body
39
53
  end
54
+
40
55
  end
@@ -3,15 +3,19 @@ require_relative "../lib/dotka/game_mode"
3
3
  RSpec.describe DotkaM::GameMode do
4
4
 
5
5
  before :all do
6
+
6
7
  @game_mode = DotkaM::GameMode.new({
7
8
  "id" => "1",
8
9
  "name" => "All Pick"
9
10
  })
11
+
10
12
  end
11
13
 
12
14
  it "provides data getters" do
15
+
13
16
  expect(@game_mode.id).to eq(1)
14
17
  expect(@game_mode.localized_name).to eq("All Pick")
18
+
15
19
  end
16
20
 
17
21
  end
@@ -3,17 +3,21 @@ require_relative "../lib/dotka/hero"
3
3
  RSpec.describe DotkaM::Hero do
4
4
 
5
5
  before :all do
6
+
6
7
  @hero = DotkaM::Hero.new({
7
8
  "id" => "1",
8
9
  "name" => "antimage",
9
10
  "localized_name" => "Anti-Mage"
10
11
  })
12
+
11
13
  end
12
14
 
13
15
  it "provides data getters" do
16
+
14
17
  expect(@hero.id).to eq(1)
15
18
  expect(@hero.name).to eq("antimage")
16
19
  expect(@hero.localized_name).to eq("Anti-Mage")
20
+
17
21
  end
18
22
 
19
23
  end
@@ -3,17 +3,21 @@ require_relative "../lib/dotka/item"
3
3
  RSpec.describe DotkaM::Item do
4
4
 
5
5
  before :all do
6
+
6
7
  @item = DotkaM::Item.new({
7
8
  "id" => "1",
8
9
  "name" => "blink",
9
10
  "localized_name" => "Blink Dagger"
10
11
  })
12
+
11
13
  end
12
14
 
13
15
  it "provides data getters" do
16
+
14
17
  expect(@item.id).to eq(1)
15
18
  expect(@item.name).to eq("blink")
16
19
  expect(@item.localized_name).to eq("Blink Dagger")
20
+
17
21
  end
18
22
 
19
23
  end
@@ -3,15 +3,19 @@ require_relative "../lib/dotka/lobby"
3
3
  RSpec.describe DotkaM::Lobby do
4
4
 
5
5
  before :all do
6
+
6
7
  @lobby = DotkaM::Lobby.new({
7
8
  "id" => "0",
8
9
  "name" => "Public matchmaking"
9
10
  })
11
+
10
12
  end
11
13
 
12
14
  it "provides data getters" do
15
+
13
16
  expect(@lobby.id).to eq(0)
14
17
  expect(@lobby.localized_name).to eq("Public matchmaking")
18
+
15
19
  end
16
20
 
17
21
  end
@@ -4,6 +4,7 @@ require_relative "../lib/dotka"
4
4
  RSpec.describe DotkaM::Match do
5
5
 
6
6
  before :all do
7
+
7
8
  @match = DotkaM::Match.new({
8
9
  "match_id" => "123456789",
9
10
  "players" => [
@@ -16,9 +17,11 @@ RSpec.describe DotkaM::Match do
16
17
  "game_mode" => "1",
17
18
  "cluster" => "111"
18
19
  })
20
+
19
21
  end
20
22
 
21
23
  it "provides data getters" do
24
+
22
25
  expect(@match.id).to eq(123456789)
23
26
  expect(@match.players.first.account_id).to eq(1)
24
27
  expect(@match.player(1).account_id).to eq(1)
@@ -27,16 +30,22 @@ RSpec.describe DotkaM::Match do
27
30
  expect(@match.start_time).to eq(123456789)
28
31
  expect(@match.lobby.localized_name).to eq("Public matchmaking")
29
32
  expect(@match.game_mode.localized_name).to eq("All Pick")
30
- expect(@match.region.localized_name).to eq("US West")
33
+ expect(@match.region.localized_name).to eq("US West")
34
+
31
35
  end
32
36
 
33
37
  it "provides an API limitation workaround" do
38
+
34
39
  dotka = Dotka.new
40
+
35
41
  allow(dotka).to receive("match")
36
42
  .with(123456789)
37
43
  .and_return DotkaM::Match.new({"players" => [{"account_id" => 1234}]})
44
+
38
45
  @match.load_info dotka
46
+
39
47
  expect(@match.players.first.account_id).to eq(1234)
48
+
40
49
  end
41
50
 
42
51
  end
@@ -3,6 +3,7 @@ require_relative "../lib/dotka/player"
3
3
  RSpec.describe DotkaM::Player do
4
4
 
5
5
  before :all do
6
+
6
7
  @player = DotkaM::Player.new({
7
8
  "account_id" => "123456789",
8
9
  "hero_id" => "1",
@@ -27,10 +28,12 @@ RSpec.describe DotkaM::Player do
27
28
  "tower_damage" => "1000",
28
29
  "hero_healing" => "3000",
29
30
  "level" => "25"
30
- })
31
+ })
32
+
31
33
  end
32
34
 
33
35
  it "provides data getters" do
36
+
34
37
  expect(@player.account_id).to eq(123456789)
35
38
  expect(@player.hero.localized_name).to eq("Anti-Mage")
36
39
  expect(@player.items.first.localized_name).to eq("Blink Dagger")
@@ -48,6 +51,7 @@ RSpec.describe DotkaM::Player do
48
51
  expect(@player.tower_dmg).to eq(1000)
49
52
  expect(@player.hero_heal).to eq(3000)
50
53
  expect(@player.level).to eq(25)
54
+
51
55
  end
52
56
 
53
57
  end
@@ -3,15 +3,19 @@ require_relative "../lib/dotka/region"
3
3
  RSpec.describe DotkaM::Region do
4
4
 
5
5
  before :all do
6
+
6
7
  @region = DotkaM::Region.new({
7
8
  "id" => "111",
8
9
  "name" => "US West"
9
10
  })
11
+
10
12
  end
11
13
 
12
14
  it "provides data getters" do
15
+
13
16
  expect(@region.id).to eq(111)
14
- expect(@region.localized_name).to eq("US West")
17
+ expect(@region.localized_name).to eq("US West")
18
+
15
19
  end
16
20
 
17
21
  end
@@ -3,22 +3,30 @@ require_relative "../lib/dotka/storage"
3
3
  RSpec.describe DotkaM::Storage do
4
4
 
5
5
  before :all do
6
+
6
7
  @storage = DotkaM::Storage.new
8
+
7
9
  end
8
10
 
9
11
  it "returns the entire file contents" do
12
+
10
13
  items = @storage.get "items"
14
+
11
15
  expect(items).to be_truthy
12
16
  expect(items).to be_an(Array)
17
+
13
18
  end
14
19
 
15
20
  it "returns a single row" do
21
+
16
22
  item = @storage.get "items", {"id" => 1}
23
+
17
24
  expect(item).to eq({
18
25
  "id" => "1",
19
26
  "name" => "blink",
20
27
  "localized_name" => "Blink Dagger"
21
- })
28
+ })
29
+
22
30
  end
23
31
 
24
32
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dotka
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - bound1ess