dota 0.0.7 → 0.0.8

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: 4c5d56cb8f9252cf51783dfa66983cb27e028043
4
- data.tar.gz: c4be90c14fc988fe1de4362769e9ea861b42e7a7
3
+ metadata.gz: 75461cf111d77eeb914651d773cd93d245302b3d
4
+ data.tar.gz: 55187c81f399c51cad995c0dee7720ccf79bf394
5
5
  SHA512:
6
- metadata.gz: 3cb95cd2e0deae0750644fd242a3a123ea282f7dff217b379b0b0e388575c92586d85f60dc6dbaa2057c474cb052e52ac16df5b26b21644a8c205596eec92385
7
- data.tar.gz: 9321418620eeca973a8d3984e8f927764bbc3534b71400bbcf767207a6f2a8e441b0106e8bcb25bd38c1a12fcda88e1316059255c9598e016375b026a1dcb438
6
+ metadata.gz: e3496ade2cde5f857dcd476cca08db4855fcc6b482faeb62e30c105141a2fb11bafc8c258283eaf87ac83667faccc3ece7096712da2448503c8339544ff7fc15
7
+ data.tar.gz: a3d2fe97b094882165ff0136498bd0a5fc6a65faed9a2504daa9729a9a6c5effd136e55c9de22ac9a339304114c4bf4c47600304d5c5e44531507caae6a5f650
data/README.md CHANGED
@@ -1,9 +1,23 @@
1
1
  # Dota [![Gem Version](https://badge.fury.io/rb/dota.svg)](http://badge.fury.io/rb/dota) [![Build Status](https://travis-ci.org/vinnicc/dota.svg?branch=master)](https://travis-ci.org/vinnicc/dota)
2
2
 
3
- `dota` is a Ruby client for the [Dota 2 WebAPI](https://wiki.teamfortress.com/wiki/WebAPI#Dota_2). It provides an easy way to access matches, players, heroes, items, and other public Dota 2 objects in an opinionated manner.
3
+ `dota` is a Ruby client for the [Dota 2 WebAPI](https://wiki.teamfortress.com/wiki/WebAPI#Dota_2). It provides an easy way to access matches, players, heroes, items, and other public Dota 2 objects in an opinionated manner. Check out their [documentation](https://wiki.teamfortress.com/wiki/WebAPI#Dota_2) or [this post](http://dev.dota2.com/showthread.php?t=58317) to learn more.
4
+
5
+ Currently supported endpoints:
6
+
7
+ - [GetMatchDetails](https://wiki.teamfortress.com/wiki/WebAPI/GetMatchDetails)
8
+ - [GetMatchHistory](https://wiki.teamfortress.com/wiki/WebAPI/GetMatchHistory)
4
9
 
5
10
  This gem is in alpha, keep that in mind when upgrading.
6
11
 
12
+ ## TODO
13
+
14
+ - Support for more endpoints
15
+ - Validations and error classes
16
+ - More configuration options
17
+ - Move API documentation to [readthedocs.org](https://readthedocs.org/) or somewhere else
18
+ - Better search filters
19
+ - Computed attributes such as win rates, hero usage, etc.
20
+
7
21
  ## Installation
8
22
 
9
23
  Add this line to your application's Gemfile:
@@ -28,20 +42,22 @@ Dota.configure do |config|
28
42
  end
29
43
  ```
30
44
 
31
- Get your Steam API key [here](http://steamcommunity.com/dev/apikey). What follows is a list of API methods currently available:
45
+ Get your Steam API key [here](http://steamcommunity.com/dev/apikey).
32
46
 
33
47
  ```ruby
34
48
  api = Dota.api
35
49
 
36
- api.heroes(43) # A single hero (Death Prophet)
37
- api.heroes # All heroes
50
+ api.heroes(43) # (Cached) A single hero - Death Prophet
51
+ api.heroes # (Cached) All heroes
38
52
 
39
- api.items(114) # A single item (Heart of Tarrasque)
40
- api.items # All items
53
+ api.items(114) # (Cached) A single item - Heart of Tarrasque
54
+ api.items # (Cached) All items
55
+
56
+ api.cosmetic_rarities # All cosmetic rarities
41
57
 
42
58
  api.leagues # All leagues
43
59
 
44
- api.matches(789645621) # A single match (Newbee vs Vici Gaming)
60
+ api.matches(789645621) # A single match - Newbee vs Vici Gaming
45
61
  api.matches # A list of matches
46
62
  api.matches(hero_id: 43) # Allowed options:
47
63
  #
@@ -58,11 +74,7 @@ api.matches(hero_id: 43) # Allowed options:
58
74
  # :limit - Integer, Amount of matches to return (default is 100)
59
75
  ```
60
76
 
61
- ### API Objects
62
-
63
- You won't need to instantiate on these classes directly and it's not advisable to do so as the API might change anytime. Starting with the call to `Dota.api` should be enough in most cases.
64
-
65
- #### Dota::API::Hero
77
+ #### Heroes
66
78
 
67
79
  ```ruby
68
80
  hero.id # => 43
@@ -70,7 +82,7 @@ hero.name # => "Death Prophet"
70
82
  hero.image_url # => "http://cdn.dota2.com/apps/dota2/images/heroes/death_prophet_full.png"
71
83
  ```
72
84
 
73
- #### Dota::API::Item
85
+ #### Items
74
86
 
75
87
  ```ruby
76
88
  item.id # => 114
@@ -78,7 +90,20 @@ item.name # => "Heart of Tarrasque"
78
90
  item.image_url # => "http://cdn.dota2.com/apps/dota2/images/items/heart_lg.png"
79
91
  ```
80
92
 
81
- #### Dota::API::Match
93
+ #### Leagues
94
+
95
+ ```ruby
96
+ league.id # => 600
97
+ league.name # => "The International 2014"
98
+ league.description # => "The Aegis of Champions hangs in the balance. See the world's top teams battle in the International."
99
+ league.url # => "http://www.dota2.com/international/overview/"
100
+ ```
101
+
102
+ #### Matches
103
+
104
+ Caveat: Getting a list of matches via `api.matches` will call [GetMatchHistory](https://wiki.teamfortress.com/wiki/WebAPI/GetMatchHistory) which has very few attributes for the matches returned (obviously for performance reasons), as opposed to getting info about a particular match via `api.matches(id)` which will instead call [GetMatchDetails](https://wiki.teamfortress.com/wiki/WebAPI/GetMatchDetails). In both cases, the matches returned will be instances of `Dota::API::Match`. In the future, there will be subclasses to distinguish the two.
105
+
106
+ When an instance method in a `Dota::API::Match` class returns `nil`, it most likely means the endpoint called doesn't support the value required yet.
82
107
 
83
108
  ```ruby
84
109
  match.id # => 789645621
@@ -97,7 +122,7 @@ match.first_blood # => 33
97
122
  match.positive_votes # => 34701
98
123
  match.negative_votes # => 13291
99
124
  match.season # => nil
100
- match.human_players # => 10
125
+ match.players_count # => 10
101
126
  match.cluster # => 111
102
127
  match.radiant_tower_status # => 2039
103
128
  match.dire_tower_status # => 1974
@@ -105,7 +130,7 @@ match.radiant_barracks_status # => 63
105
130
  match.dire_barracks_status # => 63
106
131
  ```
107
132
 
108
- #### Dota::API::Match::Player
133
+ #### Players
109
134
 
110
135
  ```ruby
111
136
  player.id # => 98887913
@@ -128,32 +153,24 @@ player.tower_damage # => 153
128
153
  player.hero_healing # => 526
129
154
  ```
130
155
 
131
- #### Dota::API::Match::Draft
156
+ #### Drafts
132
157
 
133
158
  ```ruby
134
- draft.hero # => Dota::API::Hero
135
159
  draft.order # => 1
136
160
  draft.pick? # => true
161
+ draft.team # => :radiant
162
+ draft.hero # => Dota::API::Hero
137
163
  ```
138
164
 
139
- #### Dota::API::League
165
+ #### Cosmetic Rarities
140
166
 
141
167
  ```ruby
142
- league.id # => 600
143
- league.name # => "The International 2014"
144
- league.description # => "The Aegis of Champions hangs in the balance. See the world's top teams battle in the International."
145
- league.url # => "http://www.dota2.com/international/overview/"
168
+ rarity.id # => 1
169
+ rarity.order # => 0
170
+ rarity.color # => "#e4ae39"
171
+ rarity.name # => "Immortal"
146
172
  ```
147
173
 
148
- ## TODO
149
-
150
- - Validations and error classes
151
- - More configuration options
152
- - Move API documentation to [readthedocs.org](https://readthedocs.org/) or somewhere else
153
- - Implement all Dota 2 WebAPI methods
154
- - Better search filters
155
- - Computed attributes such as win rates, hero usage, etc.
156
-
157
174
  ## Contributing
158
175
 
159
176
  1. [Fork it!](https://github.com/vinnicc/dota/fork)
@@ -4,12 +4,13 @@ require 'dota/version'
4
4
  require 'dota/utils/inspect'
5
5
 
6
6
  require 'dota/api/client'
7
+ require 'dota/api/cosmetic/rarity'
7
8
  require 'dota/api/hero'
8
9
  require 'dota/api/item'
9
10
  require 'dota/api/league'
10
11
  require 'dota/api/match'
11
- require 'dota/api/match/player'
12
12
  require 'dota/api/match/draft'
13
+ require 'dota/api/match/player'
13
14
 
14
15
  module Dota
15
16
  class << self
@@ -49,6 +49,13 @@ module Dota
49
49
  end
50
50
  end
51
51
 
52
+ def cosmetic_rarities
53
+ response = do_request("GetRarities", { language: "en" }, "IEconDOTA2_570")["result"]
54
+ if response && (rarities = response["rarities"])
55
+ rarities.map { |rarity| Cosmetic::Rarity.new(rarity) }
56
+ end
57
+ end
58
+
52
59
  private
53
60
 
54
61
  def do_request(method, params = {}, interface = "IDOTA2Match_570", method_version = "V001")
@@ -0,0 +1,31 @@
1
+ module Dota
2
+ module API
3
+ class Cosmetic
4
+ class Rarity
5
+ def initialize(raw)
6
+ @raw = raw
7
+ end
8
+
9
+ def id
10
+ raw["id"]
11
+ end
12
+
13
+ def order
14
+ raw["order"]
15
+ end
16
+
17
+ def color
18
+ raw["color"]
19
+ end
20
+
21
+ def name
22
+ raw["localized_name"]
23
+ end
24
+
25
+ private
26
+
27
+ attr_reader :raw
28
+ end
29
+ end
30
+ end
31
+ end
@@ -112,7 +112,7 @@ module Dota
112
112
  raw["leagueid"]
113
113
  end
114
114
 
115
- def human_players
115
+ def players_count
116
116
  raw["human_players"]
117
117
  end
118
118
 
@@ -14,6 +14,10 @@ module Dota
14
14
  raw["is_pick"]
15
15
  end
16
16
 
17
+ def team
18
+ raw["team"] == 0 ? :radiant : :dire
19
+ end
20
+
17
21
  def hero
18
22
  Hero.new(raw["hero_id"])
19
23
  end
@@ -1,3 +1,3 @@
1
1
  module Dota
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -0,0 +1,12 @@
1
+ describe Dota::API::Cosmetic::Rarity do
2
+ let(:rarity) do
3
+ VCR.use_cassette("GetRarities") do
4
+ test_client.cosmetic_rarities.last
5
+ end
6
+ end
7
+
8
+ specify("#id") { expect(rarity.id).to eq 7 }
9
+ specify("#order") { expect(rarity.order).to eq 6 }
10
+ specify("#color") { expect(rarity.color).to eq "#e4ae39" }
11
+ specify("#name") { expect(rarity.name).to eq "Immortal" }
12
+ end
@@ -9,6 +9,10 @@ describe Dota::API::Match::Draft do
9
9
  expect(draft.pick?).to eq true
10
10
  end
11
11
 
12
+ specify "#team" do
13
+ expect(draft.team).to eq :radiant
14
+ end
15
+
12
16
  specify "#order" do
13
17
  expect(draft.order).to eq 20
14
18
  end
@@ -73,8 +73,8 @@ describe Dota::API::Match do
73
73
  expect(match.season).to be_nil
74
74
  end
75
75
 
76
- specify "#human_players" do
77
- expect(match.human_players).to eq 10
76
+ specify "#players_count" do
77
+ expect(match.players_count).to eq 10
78
78
  end
79
79
 
80
80
  specify "#cluster" do
@@ -93,5 +93,12 @@ describe Dota do
93
93
  expect(league).to be_a Dota::API::League
94
94
  end
95
95
  end
96
+
97
+ specify "#cosmetic_rarities" do
98
+ VCR.use_cassette("GetRarities") do
99
+ rarities = api.cosmetic_rarities
100
+ expect(rarities.first).to be_a Dota::API::Cosmetic::Rarity
101
+ end
102
+ end
96
103
  end
97
104
  end
@@ -0,0 +1,48 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.steampowered.com/IEconDOTA2_570/GetRarities/V001/?key=2FBBA83745F494FAE688AFB8463CD4FC&language=en
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.8.9
12
+ Accept-Encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ Accept:
15
+ - "*/*"
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Expires:
22
+ - Thu, 20 Nov 2014 21:13:59 GMT
23
+ Content-Type:
24
+ - application/json; charset=UTF-8
25
+ Content-Length:
26
+ - '907'
27
+ Date:
28
+ - Thu, 20 Nov 2014 21:13:59 GMT
29
+ body:
30
+ encoding: UTF-8
31
+ string: "{\n\t\"result\": {\n\t\t\"count\": 8,\n\t\t\"rarities\": [\n\t\t\t{\n\t\t\t\t\"name\":
32
+ \"common\",\n\t\t\t\t\"id\": 1,\n\t\t\t\t\"order\": 0,\n\t\t\t\t\"color\":
33
+ \"#b0c3d9\",\n\t\t\t\t\"localized_name\": \"Common\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
34
+ \"uncommon\",\n\t\t\t\t\"id\": 2,\n\t\t\t\t\"order\": 1,\n\t\t\t\t\"color\":
35
+ \"#5e98d9\",\n\t\t\t\t\"localized_name\": \"Uncommon\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
36
+ \"rare\",\n\t\t\t\t\"id\": 3,\n\t\t\t\t\"order\": 2,\n\t\t\t\t\"color\": \"#4b69ff\",\n\t\t\t\t\"localized_name\":
37
+ \"Rare\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"mythical\",\n\t\t\t\t\"id\":
38
+ 4,\n\t\t\t\t\"order\": 3,\n\t\t\t\t\"color\": \"#8847ff\",\n\t\t\t\t\"localized_name\":
39
+ \"Mythical\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"legendary\",\n\t\t\t\t\"id\":
40
+ 5,\n\t\t\t\t\"order\": 4,\n\t\t\t\t\"color\": \"#d32ce6\",\n\t\t\t\t\"localized_name\":
41
+ \"Legendary\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ancient\",\n\t\t\t\t\"id\":
42
+ 6,\n\t\t\t\t\"order\": 5,\n\t\t\t\t\"color\": \"#eb4b4b\",\n\t\t\t\t\"localized_name\":
43
+ \"Ancient\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"immortal\",\n\t\t\t\t\"id\":
44
+ 7,\n\t\t\t\t\"order\": 6,\n\t\t\t\t\"color\": \"#e4ae39\",\n\t\t\t\t\"localized_name\":
45
+ \"Immortal\"\n\t\t\t}\n\t\t]\n\t\t,\n\t\t\"status\": 200\n\t}\n}"
46
+ http_version:
47
+ recorded_at: Thu, 20 Nov 2014 21:13:59 GMT
48
+ recorded_with: VCR 2.9.3
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dota
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vinni Carlo Caños
@@ -140,6 +140,7 @@ files:
140
140
  - dota.gemspec
141
141
  - lib/dota.rb
142
142
  - lib/dota/api/client.rb
143
+ - lib/dota/api/cosmetic/rarity.rb
143
144
  - lib/dota/api/hero.rb
144
145
  - lib/dota/api/item.rb
145
146
  - lib/dota/api/league.rb
@@ -149,6 +150,7 @@ files:
149
150
  - lib/dota/configuration.rb
150
151
  - lib/dota/utils/inspect.rb
151
152
  - lib/dota/version.rb
153
+ - spec/dota/api/cosmetic/rarity_spec.rb
152
154
  - spec/dota/api/hero_spec.rb
153
155
  - spec/dota/api/item_spec.rb
154
156
  - spec/dota/api/league_spec.rb
@@ -159,6 +161,7 @@ files:
159
161
  - spec/fixtures/vcr_cassettes/GetLeagueListing.yml
160
162
  - spec/fixtures/vcr_cassettes/GetMatchDetails.yml
161
163
  - spec/fixtures/vcr_cassettes/GetMatchHistory.yml
164
+ - spec/fixtures/vcr_cassettes/GetRarities.yml
162
165
  - spec/spec_helper.rb
163
166
  - spec/support/vcr.rb
164
167
  homepage: http://github.com/vinnicc/dota
@@ -186,6 +189,7 @@ signing_key:
186
189
  specification_version: 4
187
190
  summary: Ruby client for the Dota 2 WebAPI
188
191
  test_files:
192
+ - spec/dota/api/cosmetic/rarity_spec.rb
189
193
  - spec/dota/api/hero_spec.rb
190
194
  - spec/dota/api/item_spec.rb
191
195
  - spec/dota/api/league_spec.rb
@@ -196,5 +200,6 @@ test_files:
196
200
  - spec/fixtures/vcr_cassettes/GetLeagueListing.yml
197
201
  - spec/fixtures/vcr_cassettes/GetMatchDetails.yml
198
202
  - spec/fixtures/vcr_cassettes/GetMatchHistory.yml
203
+ - spec/fixtures/vcr_cassettes/GetRarities.yml
199
204
  - spec/spec_helper.rb
200
205
  - spec/support/vcr.rb