dotka 1.2.1 → 1.2.2

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