dota 0.0.3 → 0.0.4

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: 0b2c0cb87ae13e1584220df1350829581c98e471
4
- data.tar.gz: 332f94513d8eed6a81b51bdb63c12d7dadb40472
3
+ metadata.gz: 11288c0fc061bc33de74cf9379a13804e8bcd107
4
+ data.tar.gz: 8b5d300d111c113ad9dfd47b81049a09255fcca7
5
5
  SHA512:
6
- metadata.gz: 8ffb46d56580f2d2d2823741bc1b4773230635d23b4810932a8c9d531f8e1d2ce43d2fec192c92ba05664b6ddb66eea2284a552158f28ab3d7346e6d239b0b2d
7
- data.tar.gz: 4be9b68938de3355995a16cf492f2ced60ac56905ac96c4ced18bbf5624432e2c69c5207a2c577c54cd1f3201aa99153da127c0529f51a9d2864e0509071ac72
6
+ metadata.gz: 35e922c63323700c2ee13150a6c15f3b180fab00ea3be03b180b251537a3816771c6b5f618b28dcb4d1cc88f998bddf6692af70973e38b0cc4dae64e32dd19a6
7
+ data.tar.gz: 986209bba2d1454a4ab413d19727f0e8c02da98996e72a344920ad8de8de84705dbdf34655ddf9edbaaff2efa063327b3d14e0b231f4356cab31187cb7bdba00
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - 2.1.2
6
+ - jruby
7
+ - rbx
8
+ install: "bundle install --retry=3"
data/Guardfile CHANGED
@@ -1,5 +1,5 @@
1
1
  guard :rspec, cmd: "bundle exec rspec" do
2
2
  watch(%r{^spec/.+_spec\.rb$})
3
- watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
3
+ watch(%r{^lib/(.+)\.rb$}) { "spec" } # or { |m| "spec/#{m[1]}_spec.rb" }
4
4
  watch("spec/spec_helper.rb") { "spec" }
5
5
  end
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # Dota
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.
4
4
 
5
- This gem is in alpha, keep that in mind when upgrading. Documentation is also still lacking. In the meantime, just do `SomeClass.instance_methods(false)` to see what methods are exposed.
5
+ This gem is in alpha, keep that in mind when upgrading.
6
6
 
7
7
  ## Installation
8
8
 
@@ -64,6 +64,10 @@ item.image_url # => "http://cdn.dota2.com/apps/dota2/images/items/heart_lg.png"
64
64
  ```ruby
65
65
  match.id # => 789645621
66
66
  match.league_id # => 600
67
+ match.type # => "Tournament"
68
+ match.type_id # => 2
69
+ match.mode # => "Captain's Mode"
70
+ match.mode_id # => 2
67
71
  match.drafts # => [Dota::API::Match::Draft, ...]
68
72
  match.players # => [Dota::API::Match::Player, ...]
69
73
  match.sequence # => 709365483
@@ -76,8 +80,6 @@ match.negative_votes # => 13291
76
80
  match.season # => nil
77
81
  match.human_players # => 10
78
82
  match.cluster # => 111
79
- match.mode # => 2
80
- match.lobby # => 2
81
83
  match.radiant_tower_status # => 2039
82
84
  match.dire_tower_status # => 1974
83
85
  match.radiant_barracks_status # => 63
@@ -110,9 +112,9 @@ player.hero_healing # => 526
110
112
  #### Dota::API::Match::Draft
111
113
 
112
114
  ```ruby
113
- player.hero # => Dota::API::Hero
114
- player.order # => 1
115
- player.pick? # => true
115
+ draft.hero # => Dota::API::Hero
116
+ draft.order # => 1
117
+ draft.pick? # => true
116
118
  ```
117
119
 
118
120
  #### Dota::API::League
@@ -128,15 +130,14 @@ league.url # => "http://www.dota2.com/international/overview/"
128
130
 
129
131
  - Validations and error classes
130
132
  - More configuration options
131
- - Move API documentation to https://readthedocs.org/ or somewhere else
133
+ - Move API documentation to [readthedocs.org](https://readthedocs.org/) or somewhere else
132
134
  - Implement all Dota 2 WebAPI methods
133
135
  - Better search filters
134
136
  - Computed attributes such as win rates, hero usage, etc.
135
- - ???
136
137
 
137
138
  ## Contributing
138
139
 
139
- 1. [Fork It](https://github.com/vinnicc/dota/fork)
140
+ 1. [Fork it!](https://github.com/vinnicc/dota/fork)
140
141
  2. Create your feature branch (`git checkout -b my-new-feature`)
141
142
  3. Commit your changes (`git commit -am 'Add some feature'`)
142
143
  4. Push to the branch (`git push origin my-new-feature`)
@@ -21,8 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency "faraday", "~> 0.9.0"
22
22
  spec.add_dependency "faraday_middleware", "~> 0.9.1"
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.7"
25
- spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "rake"
26
25
  spec.add_development_dependency "rspec"
27
26
  spec.add_development_dependency "guard-rspec"
28
27
  spec.add_development_dependency "pry"
@@ -16,10 +16,18 @@ module Dota
16
16
  Hero.new(id)
17
17
  end
18
18
 
19
+ def heroes
20
+ Hero.all
21
+ end
22
+
19
23
  def item(id)
20
24
  Item.new(id)
21
25
  end
22
26
 
27
+ def items
28
+ Item.all
29
+ end
30
+
23
31
  def match(id)
24
32
  response = do_request("GetMatchDetails", match_id: id)["result"]
25
33
  Match.new(response) if response
@@ -114,6 +114,10 @@ module Dota
114
114
 
115
115
  attr_reader :id, :name
116
116
 
117
+ def self.all
118
+ MAPPING.keys.map { |id| new(id) }
119
+ end
120
+
117
121
  def initialize(id)
118
122
  @id = id
119
123
  @internal_name = MAPPING[id][0]
@@ -2,255 +2,265 @@ module Dota
2
2
  module API
3
3
  class Item
4
4
  MAPPING = {
5
- 0 => "empty",
6
- 1 => "blink",
7
- 2 => "blades_of_attack",
8
- 3 => "broadsword",
9
- 4 => "chainmail",
10
- 5 => "claymore",
11
- 6 => "helm_of_iron_will",
12
- 7 => "javelin",
13
- 8 => "mithril_hammer",
14
- 9 => "platemail",
15
- 10 => "quarterstaff",
16
- 11 => "quelling_blade",
17
- 12 => "ring_of_protection",
18
- 13 => "gauntlets",
19
- 14 => "slippers",
20
- 15 => "mantle",
21
- 16 => "branches",
22
- 17 => "belt_of_strength",
23
- 18 => "boots_of_elves",
24
- 19 => "robe",
25
- 20 => "circlet",
26
- 21 => "ogre_axe",
27
- 22 => "blade_of_alacrity",
28
- 23 => "staff_of_wizardry",
29
- 24 => "ultimate_orb",
30
- 25 => "gloves",
31
- 26 => "lifesteal",
32
- 27 => "ring_of_regen",
33
- 28 => "sobi_mask",
34
- 29 => "boots",
35
- 30 => "gem",
36
- 31 => "cloak",
37
- 32 => "talisman_of_evasion",
38
- 33 => "cheese",
39
- 34 => "magic_stick",
40
- 35 => "recipe_magic_wand",
41
- 36 => "magic_wand",
42
- 37 => "ghost",
43
- 38 => "clarity",
44
- 39 => "flask",
45
- 40 => "dust",
46
- 41 => "bottle",
47
- 42 => "ward_observer",
48
- 43 => "ward_sentry",
49
- 44 => "tango",
50
- 45 => "courier",
51
- 46 => "tpscroll",
52
- 47 => "recipe_travel_boots",
53
- 48 => "travel_boots",
54
- 49 => "recipe_phase_boots",
55
- 50 => "phase_boots",
56
- 51 => "demon_edge",
57
- 52 => "eagle",
58
- 53 => "reaver",
59
- 54 => "relic",
60
- 55 => "hyperstone",
61
- 56 => "ring_of_health",
62
- 57 => "void_stone",
63
- 58 => "mystic_staff",
64
- 59 => "energy_booster",
65
- 60 => "point_booster",
66
- 61 => "vitality_booster",
67
- 62 => "recipe_power_treads",
68
- 63 => "power_treads",
69
- 64 => "recipe_hand_of_midas",
70
- 65 => "hand_of_midas",
71
- 66 => "recipe_oblivion_staff",
72
- 67 => "oblivion_staff",
73
- 68 => "recipe_pers",
74
- 69 => "pers",
75
- 70 => "recipe_poor_mans_shield",
76
- 71 => "poor_mans_shield",
77
- 72 => "recipe_bracer",
78
- 73 => "bracer",
79
- 74 => "recipe_wraith_band",
80
- 75 => "wraith_band",
81
- 76 => "recipe_null_talisman",
82
- 77 => "null_talisman",
83
- 78 => "recipe_mekansm",
84
- 79 => "mekansm",
85
- 80 => "recipe_vladmir",
86
- 81 => "vladmir",
87
- 84 => "flying_courier",
88
- 85 => "recipe_buckler",
89
- 86 => "buckler",
90
- 87 => "recipe_ring_of_basilius",
91
- 88 => "ring_of_basilius",
92
- 89 => "recipe_pipe",
93
- 90 => "pipe",
94
- 91 => "recipe_urn_of_shadows",
95
- 92 => "urn_of_shadows",
96
- 93 => "recipe_headdress",
97
- 94 => "headdress",
98
- 95 => "recipe_sheepstick",
99
- 96 => "sheepstick",
100
- 97 => "recipe_orchid",
101
- 98 => "orchid",
102
- 99 => "recipe_cyclone",
103
- 100 => "cyclone",
104
- 101 => "recipe_force_staff",
105
- 102 => "force_staff",
106
- 103 => "recipe_dagon",
107
- 197 => "recipe_dagon_2",
108
- 198 => "recipe_dagon_3",
109
- 199 => "recipe_dagon_4",
110
- 200 => "recipe_dagon_5",
111
- 104 => "dagon",
112
- 201 => "dagon_2",
113
- 202 => "dagon_3",
114
- 203 => "dagon_4",
115
- 204 => "dagon_5",
116
- 105 => "recipe_necronomicon",
117
- 191 => "recipe_necronomicon_2",
118
- 192 => "recipe_necronomicon_3",
119
- 106 => "necronomicon",
120
- 193 => "necronomicon_2",
121
- 194 => "necronomicon_3",
122
- 107 => "recipe_ultimate_scepter",
123
- 108 => "ultimate_scepter",
124
- 109 => "recipe_refresher",
125
- 110 => "refresher",
126
- 111 => "recipe_assault",
127
- 112 => "assault",
128
- 113 => "recipe_heart",
129
- 114 => "heart",
130
- 115 => "recipe_black_king_bar",
131
- 116 => "black_king_bar",
132
- 117 => "aegis",
133
- 118 => "recipe_shivas_guard",
134
- 119 => "shivas_guard",
135
- 120 => "recipe_bloodstone",
136
- 121 => "bloodstone",
137
- 122 => "recipe_sphere",
138
- 123 => "sphere",
139
- 124 => "recipe_vanguard",
140
- 125 => "vanguard",
141
- 126 => "recipe_blade_mail",
142
- 127 => "blade_mail",
143
- 128 => "recipe_soul_booster",
144
- 129 => "soul_booster",
145
- 130 => "recipe_hood_of_defiance",
146
- 131 => "hood_of_defiance",
147
- 132 => "recipe_rapier",
148
- 133 => "rapier",
149
- 134 => "recipe_monkey_king_bar",
150
- 135 => "monkey_king_bar",
151
- 136 => "recipe_radiance",
152
- 137 => "radiance",
153
- 138 => "recipe_butterfly",
154
- 139 => "butterfly",
155
- 140 => "recipe_greater_crit",
156
- 141 => "greater_crit",
157
- 142 => "recipe_basher",
158
- 143 => "basher",
159
- 144 => "recipe_bfury",
160
- 145 => "bfury",
161
- 146 => "recipe_manta",
162
- 147 => "manta",
163
- 148 => "recipe_lesser_crit",
164
- 149 => "lesser_crit",
165
- 150 => "recipe_armlet",
166
- 151 => "armlet",
167
- 183 => "recipe_invis_sword",
168
- 152 => "invis_sword",
169
- 153 => "recipe_sange_and_yasha",
170
- 154 => "sange_and_yasha",
171
- 155 => "recipe_satanic",
172
- 156 => "satanic",
173
- 157 => "recipe_mjollnir",
174
- 158 => "mjollnir",
175
- 159 => "recipe_skadi",
176
- 160 => "skadi",
177
- 161 => "recipe_sange",
178
- 162 => "sange",
179
- 163 => "recipe_helm_of_the_dominator",
180
- 164 => "helm_of_the_dominator",
181
- 165 => "recipe_maelstrom",
182
- 166 => "maelstrom",
183
- 167 => "recipe_desolator",
184
- 168 => "desolator",
185
- 169 => "recipe_yasha",
186
- 170 => "yasha",
187
- 171 => "recipe_mask_of_madness",
188
- 172 => "mask_of_madness",
189
- 173 => "recipe_diffusal_blade",
190
- 195 => "recipe_diffusal_blade_2",
191
- 174 => "diffusal_blade",
192
- 196 => "diffusal_blade_2",
193
- 175 => "recipe_ethereal_blade",
194
- 176 => "ethereal_blade",
195
- 177 => "recipe_soul_ring",
196
- 178 => "soul_ring",
197
- 179 => "recipe_arcane_boots",
198
- 180 => "arcane_boots",
199
- 181 => "orb_of_venom",
200
- 182 => "stout_shield",
201
- 184 => "recipe_ancient_janggo",
202
- 185 => "ancient_janggo",
203
- 186 => "recipe_medallion_of_courage",
204
- 187 => "medallion_of_courage",
205
- 188 => "smoke_of_deceit",
206
- 189 => "recipe_veil_of_discord",
207
- 190 => "veil_of_discord",
208
- 205 => "recipe_rod_of_atos",
209
- 206 => "rod_of_atos",
210
- 207 => "recipe_abyssal_blade",
211
- 208 => "abyssal_blade",
212
- 209 => "recipe_heavens_halberd",
213
- 210 => "heavens_halberd",
214
- 211 => "recipe_ring_of_aquila",
215
- 212 => "ring_of_aquila",
216
- 213 => "recipe_tranquil_boots",
217
- 214 => "tranquil_boots",
218
- 215 => "shadow_amulet",
219
- 216 => "halloween_candy_corn",
220
- 217 => "mystery_hook",
221
- 218 => "mystery_arrow",
222
- 219 => "mystery_missile",
223
- 220 => "mystery_toss",
224
- 221 => "mystery_vacuum",
225
- 226 => "halloween_rapier",
226
- 228 => "greevil_whistle",
227
- 235 => "greevil_whistle_toggle",
228
- 227 => "present",
229
- 229 => "winter_stocking",
230
- 230 => "winter_skates",
231
- 231 => "winter_cake",
232
- 232 => "winter_cookie",
233
- 233 => "winter_coco",
234
- 234 => "winter_ham",
235
- 236 => "winter_kringle",
236
- 237 => "winter_mushroom",
237
- 238 => "winter_greevil_treat",
238
- 239 => "winter_greevil_garbage",
239
- 240 => "winter_greevil_chewy",
240
- 241 => "tango_single",
241
- 242 => "crimson_guard"
5
+ 0 => ["empty", "Empty"],
6
+ 1 => ["blink", "Blink Dagger"],
7
+ 2 => ["blades_of_attack", "Blades of Attack"],
8
+ 3 => ["broadsword", "Broadsword"],
9
+ 4 => ["chainmail", "Chainmail"],
10
+ 5 => ["claymore", "Claymore"],
11
+ 6 => ["helm_of_iron_will", "Helm of Iron Will"],
12
+ 7 => ["javelin", "Javelin"],
13
+ 8 => ["mithril_hammer", "Mithril Hammer"],
14
+ 9 => ["platemail", "Platemail"],
15
+ 10 => ["quarterstaff", "Quarterstaff"],
16
+ 11 => ["quelling_blade", "Quelling Blade"],
17
+ 12 => ["ring_of_protection", "Ring of Protection"],
18
+ 13 => ["gauntlets", "Gauntlets of Strength"],
19
+ 14 => ["slippers", "Slippers of Agility"],
20
+ 15 => ["mantle", "Mantle of Intelligence"],
21
+ 16 => ["branches", "Iron Branch"],
22
+ 17 => ["belt_of_strength", "Belt of Strength"],
23
+ 18 => ["boots_of_elves", "Band of Elvenskin"],
24
+ 19 => ["robe", "Robe of the Magi"],
25
+ 20 => ["circlet", "Circlet"],
26
+ 21 => ["ogre_axe", "Ogre Club"],
27
+ 22 => ["blade_of_alacrity", "Blade of Alacrity"],
28
+ 23 => ["staff_of_wizardry", "Staff of Wizardry"],
29
+ 24 => ["ultimate_orb", "Ultimate Orb"],
30
+ 25 => ["gloves", "Gloves of Haste"],
31
+ 26 => ["lifesteal", "Morbid Mask"],
32
+ 27 => ["ring_of_regen", "Ring of Regen"],
33
+ 28 => ["sobi_mask", "Sage's Mask"],
34
+ 29 => ["boots", "Boots of Speed"],
35
+ 30 => ["gem", "Gem of True Sight"],
36
+ 31 => ["cloak", "Cloak"],
37
+ 32 => ["talisman_of_evasion", "Talisman of Evasion"],
38
+ 33 => ["cheese", "Cheese"],
39
+ 34 => ["magic_stick", "Magic Stick"],
40
+ 35 => ["recipe_magic_wand", "Recipe: Magic Wand"],
41
+ 36 => ["magic_wand", "Magic Wand"],
42
+ 37 => ["ghost", "Ghost Scepter"],
43
+ 38 => ["clarity", "Clarity"],
44
+ 39 => ["flask", "Healing Salve"],
45
+ 40 => ["dust", "Dust of Appearance"],
46
+ 41 => ["bottle", "Bottle"],
47
+ 42 => ["ward_observer", "Observer Ward"],
48
+ 43 => ["ward_sentry", "Sentry Ward"],
49
+ 44 => ["tango", "Tango"],
50
+ 45 => ["courier", "Animal Courier"],
51
+ 46 => ["tpscroll", "Town Portal Scroll"],
52
+ 47 => ["recipe_travel_boots", "Recipe: Boots of Travel"],
53
+ 48 => ["travel_boots", "Boots of Travel"],
54
+ 49 => ["recipe_phase_boots", "Recipe: Phase Boots"],
55
+ 50 => ["phase_boots", "Phase Boots"],
56
+ 51 => ["demon_edge", "Demon Edge"],
57
+ 52 => ["eagle", "Eaglesong"],
58
+ 53 => ["reaver", "Reaver"],
59
+ 54 => ["relic", "Sacred Relic"],
60
+ 55 => ["hyperstone", "Hyperstone"],
61
+ 56 => ["ring_of_health", "Ring of Health"],
62
+ 57 => ["void_stone", "Void Stone"],
63
+ 58 => ["mystic_staff", "Mystic Staff"],
64
+ 59 => ["energy_booster", "Energy Booster"],
65
+ 60 => ["point_booster", "Point Booster"],
66
+ 61 => ["vitality_booster", "Vitality Booster"],
67
+ 62 => ["recipe_power_treads", "Recipe: Power Treads"],
68
+ 63 => ["power_treads", "Power Treads"],
69
+ 64 => ["recipe_hand_of_midas", "Recipe: Hand of Midas"],
70
+ 65 => ["hand_of_midas", "Hand of Midas"],
71
+ 66 => ["recipe_oblivion_staff", "Recipe: Oblivion Staff"],
72
+ 67 => ["oblivion_staff", "Oblivion Staff"],
73
+ 68 => ["recipe_pers", "Recipe: Perseverance"],
74
+ 69 => ["pers", "Perseverance"],
75
+ 70 => ["recipe_poor_mans_shield", "Recipe: Poor Man's Shield"],
76
+ 71 => ["poor_mans_shield", "Poor Man's Shield"],
77
+ 72 => ["recipe_bracer", "Recipe: Bracer"],
78
+ 73 => ["bracer", "Bracer"],
79
+ 74 => ["recipe_wraith_band", "Recipe: Wraith Band"],
80
+ 75 => ["wraith_band", "Wraith Band"],
81
+ 76 => ["recipe_null_talisman", "Recipe: Null Talisman"],
82
+ 77 => ["null_talisman", "Null Talisman"],
83
+ 78 => ["recipe_mekansm", "Recipe: Mekansm"],
84
+ 79 => ["mekansm", "Mekansm"],
85
+ 80 => ["recipe_vladmir", "Recipe: Vladmir's Offering"],
86
+ 81 => ["vladmir", "Vladmir's Offering"],
87
+ 84 => ["flying_courier", "Flying Courier"],
88
+ 85 => ["recipe_buckler", "Recipe: Buckler"],
89
+ 86 => ["buckler", "Buckler"],
90
+ 87 => ["recipe_ring_of_basilius", "Recipe: Ring of Basilius"],
91
+ 88 => ["ring_of_basilius", "Ring of Basilius"],
92
+ 89 => ["recipe_pipe", "Recipe: Pipe of Insight"],
93
+ 90 => ["pipe", "Pipe of Insight"],
94
+ 91 => ["recipe_urn_of_shadows", "Recipe: Urn of Shadows"],
95
+ 92 => ["urn_of_shadows", "Urn of Shadows"],
96
+ 93 => ["recipe_headdress", "Recipe: Headdress"],
97
+ 94 => ["headdress", "Headdress"],
98
+ 95 => ["recipe_sheepstick", "Recipe: Scythe of Vyse"],
99
+ 96 => ["sheepstick", "Scythe of Vyse"],
100
+ 97 => ["recipe_orchid", "Recipe: Orchid Malevolence"],
101
+ 98 => ["orchid", "Orchid Malevolence"],
102
+ 99 => ["recipe_cyclone", "Recipe: Eul's Scepter of Divinity"],
103
+ 100 => ["cyclone", "Eul's Scepter of Divinity"],
104
+ 101 => ["recipe_force_staff", "Recipe: Force Staff"],
105
+ 102 => ["force_staff", "Force Staff"],
106
+ 103 => ["recipe_dagon", "Recipe: Dagon"],
107
+ 104 => ["dagon", "Dagon"],
108
+ 105 => ["recipe_necronomicon", "Recipe: Necronomicon"],
109
+ 106 => ["necronomicon", "Necronomicon"],
110
+ 107 => ["recipe_ultimate_scepter", "Recipe: Aghanim's Scepter"],
111
+ 108 => ["ultimate_scepter", "Aghanim's Scepter"],
112
+ 109 => ["recipe_refresher", "Recipe: Refresher Orb"],
113
+ 110 => ["refresher", "Refresher Orb"],
114
+ 111 => ["recipe_assault", "Recipe: Assault Cuirass"],
115
+ 112 => ["assault", "Assault Cuirass"],
116
+ 113 => ["recipe_heart", "Recipe: Heart of Tarrasque"],
117
+ 114 => ["heart", "Heart of Tarrasque"],
118
+ 115 => ["recipe_black_king_bar", "Recipe: Black King Bar"],
119
+ 116 => ["black_king_bar", "Black King Bar"],
120
+ 117 => ["aegis", "Aegis of the Immortal"],
121
+ 118 => ["recipe_shivas_guard", "Recipe: Shiva's Guard"],
122
+ 119 => ["shivas_guard", "Shiva's Guard"],
123
+ 120 => ["recipe_bloodstone", "Recipe: Bloodstone"],
124
+ 121 => ["bloodstone", "Bloodstone"],
125
+ 122 => ["recipe_sphere", "Recipe: Linken's Sphere"],
126
+ 123 => ["sphere", "Linken's Sphere"],
127
+ 124 => ["recipe_vanguard", "Recipe: Vanguard"],
128
+ 125 => ["vanguard", "Vanguard"],
129
+ 126 => ["recipe_blade_mail", "Recipe: Blade Mail"],
130
+ 127 => ["blade_mail", "Blade Mail"],
131
+ 128 => ["recipe_soul_booster", "Recipe: Soul Booster"],
132
+ 129 => ["soul_booster", "Soul Booster"],
133
+ 130 => ["recipe_hood_of_defiance", "Recipe: Hood of Defiance"],
134
+ 131 => ["hood_of_defiance", "Hood of Defiance"],
135
+ 132 => ["recipe_rapier", "Recipe: Divine Rapier"],
136
+ 133 => ["rapier", "Divine Rapier"],
137
+ 134 => ["recipe_monkey_king_bar", "Recipe: Monkey King Bar"],
138
+ 135 => ["monkey_king_bar", "Monkey King Bar"],
139
+ 136 => ["recipe_radiance", "Recipe: Radiance"],
140
+ 137 => ["radiance", "Radiance"],
141
+ 138 => ["recipe_butterfly", "Recipe: Butterfly"],
142
+ 139 => ["butterfly", "Butterfly"],
143
+ 140 => ["recipe_greater_crit", "Recipe: Daedalus"],
144
+ 141 => ["greater_crit", "Daedalus"],
145
+ 142 => ["recipe_basher", "Recipe: Skull Basher"],
146
+ 143 => ["basher", "Skull Basher"],
147
+ 144 => ["recipe_bfury", "Recipe: Battle Fury"],
148
+ 145 => ["bfury", "Battle Fury"],
149
+ 146 => ["recipe_manta", "Recipe: Manta Style"],
150
+ 147 => ["manta", "Manta Style"],
151
+ 148 => ["recipe_lesser_crit", "Recipe: Crystalys"],
152
+ 149 => ["lesser_crit", "Crystalys"],
153
+ 150 => ["recipe_armlet", "Recipe: Armlet of Mordiggian"],
154
+ 151 => ["armlet", "Armlet of Mordiggian"],
155
+ 152 => ["invis_sword", "Shadow Blade"],
156
+ 153 => ["recipe_sange_and_yasha", "Recipe: Sange and Yasha"],
157
+ 154 => ["sange_and_yasha", "Sange and Yasha"],
158
+ 155 => ["recipe_satanic", "Recipe: Satanic"],
159
+ 156 => ["satanic", "Satanic"],
160
+ 157 => ["recipe_mjollnir", "Recipe: Mjollnir"],
161
+ 158 => ["mjollnir", "Mjollnir"],
162
+ 159 => ["recipe_skadi", "Recipe: Eye of Skadi"],
163
+ 160 => ["skadi", "Eye of Skadi"],
164
+ 161 => ["recipe_sange", "Recipe: Sange"],
165
+ 162 => ["sange", "Sange"],
166
+ 163 => ["recipe_helm_of_the_dominator", "Recipe: Helm of the Dominator"],
167
+ 164 => ["helm_of_the_dominator", "Helm of the Dominator"],
168
+ 165 => ["recipe_maelstrom", "Recipe: Maelstrom"],
169
+ 166 => ["maelstrom", "Maelstrom"],
170
+ 167 => ["recipe_desolator", "Recipe: Desolator"],
171
+ 168 => ["desolator", "Desolator"],
172
+ 169 => ["recipe_yasha", "Recipe: Yasha"],
173
+ 170 => ["yasha", "Yasha"],
174
+ 171 => ["recipe_mask_of_madness", "Recipe: Mask of Madness"],
175
+ 172 => ["mask_of_madness", "Mask of Madness"],
176
+ 173 => ["recipe_diffusal_blade", "Recipe: Diffusal Blade"],
177
+ 174 => ["diffusal_blade", "Diffusal Blade"],
178
+ 175 => ["recipe_ethereal_blade", "Recipe: Ethereal Blade"],
179
+ 176 => ["ethereal_blade", "Ethereal Blade"],
180
+ 177 => ["recipe_soul_ring", "Recipe: Soul Ring"],
181
+ 178 => ["soul_ring", "Soul Ring"],
182
+ 179 => ["recipe_arcane_boots", "Recipe: Arcane Boots"],
183
+ 180 => ["arcane_boots", "Arcane Boots"],
184
+ 181 => ["orb_of_venom", "Orb of Venom"],
185
+ 182 => ["stout_shield", "Stout Shield"],
186
+ 183 => ["recipe_invis_sword", "Recipe: Shadow Blade"],
187
+ 184 => ["recipe_ancient_janggo", "Recipe: Drum of Endurance"],
188
+ 185 => ["ancient_janggo", "Drum of Endurance"],
189
+ 186 => ["recipe_medallion_of_courage", "Recipe: Medallion of Courage"],
190
+ 187 => ["medallion_of_courage", "Medallion of Courage"],
191
+ 188 => ["smoke_of_deceit", "Smoke of Deceit"],
192
+ 189 => ["recipe_veil_of_discord", "Recipe: Veil of Discord"],
193
+ 190 => ["veil_of_discord", "Veil of Discord"],
194
+ 191 => ["recipe_necronomicon_2", "Recipe: Necronomicon"],
195
+ 192 => ["recipe_necronomicon_3", "Recipe: Necronomicon"],
196
+ 193 => ["necronomicon_2", "Necronomicon"],
197
+ 194 => ["necronomicon_3", "Necronomicon"],
198
+ 195 => ["recipe_diffusal_blade_2", "Recipe: Diffusal Blade"],
199
+ 196 => ["diffusal_blade_2", "Diffusal Blade"],
200
+ 197 => ["recipe_dagon_2", "Recipe: Dagon"],
201
+ 198 => ["recipe_dagon_3", "Recipe: Dagon"],
202
+ 199 => ["recipe_dagon_4", "Recipe: Dagon"],
203
+ 200 => ["recipe_dagon_5", "Recipe: Dagon"],
204
+ 201 => ["dagon_2", "Dagon"],
205
+ 202 => ["dagon_3", "Dagon"],
206
+ 203 => ["dagon_4", "Dagon"],
207
+ 204 => ["dagon_5", "Dagon"],
208
+ 205 => ["recipe_rod_of_atos", "Recipe: Rod of Atos"],
209
+ 206 => ["rod_of_atos", "Rod of Atos"],
210
+ 207 => ["recipe_abyssal_blade", "Recipe: Abyssal Blade"],
211
+ 208 => ["abyssal_blade", "Abyssal Blade"],
212
+ 209 => ["recipe_heavens_halberd", "Recipe: Heaven's Halberd"],
213
+ 210 => ["heavens_halberd", "Heaven's Halberd"],
214
+ 211 => ["recipe_ring_of_aquila", "Recipe: Ring of Aquila"],
215
+ 212 => ["ring_of_aquila", "Ring of Aquila"],
216
+ 213 => ["recipe_tranquil_boots", "Recipe: Tranquil Boots"],
217
+ 214 => ["tranquil_boots", "Tranquil Boots"],
218
+ 215 => ["shadow_amulet", "Shadow Amulet"],
219
+ 216 => ["halloween_candy_corn", "Greevil Taffy"],
220
+ 217 => ["mystery_hook", "DOTA_Tooltip_Ability_item_mystery_hook"],
221
+ 218 => ["mystery_arrow", "DOTA_Tooltip_Ability_item_mystery_arrow"],
222
+ 219 => ["mystery_missile", "DOTA_Tooltip_Ability_item_mystery_missile"],
223
+ 220 => ["mystery_toss", "DOTA_Tooltip_Ability_item_mystery_toss"],
224
+ 221 => ["mystery_vacuum", "DOTA_Tooltip_Ability_item_mystery_vacuum"],
225
+ 226 => ["halloween_rapier", "DOTA_Tooltip_Ability_item_halloween_rapier"],
226
+ 227 => ["present", "A Gift!"],
227
+ 228 => ["greevil_whistle", "Greevil Whistle"],
228
+ 229 => ["winter_stocking", "Xmas Stocking"],
229
+ 230 => ["winter_skates", "Speed Skates"],
230
+ 231 => ["winter_cake", "Fruit-bit Cake"],
231
+ 232 => ["winter_cookie", "Wizard Cookie"],
232
+ 233 => ["winter_coco", "Cocoa with Marshmallows"],
233
+ 234 => ["winter_ham", "Clove Studded Ham"],
234
+ 235 => ["greevil_whistle_toggle", "Greevil Whistle"],
235
+ 236 => ["winter_kringle", "Kringle"],
236
+ 237 => ["winter_mushroom", "Snow Mushroom"],
237
+ 238 => ["winter_greevil_treat", "Greevil Treat"],
238
+ 239 => ["winter_greevil_garbage", "Greevil Chow"],
239
+ 240 => ["winter_greevil_chewy", "Greevil Blink Bone"],
240
+ 241 => ["tango_single", "Tango (Shared)"],
241
+ 242 => ["crimson_guard", "Crimson Guard"],
242
+ 243 => ["recipe_crimson_guard", "Recipe: Crimson Guard"],
242
243
  }.freeze
243
244
 
244
245
  attr_reader :id, :name
245
246
 
247
+ def self.all
248
+ MAPPING.keys.map { |id| new(id) }
249
+ end
250
+
246
251
  def initialize(id)
247
252
  @id = id
248
- @name = MAPPING[id]
253
+ @internal_name = MAPPING[id][0]
254
+ @name = MAPPING[id][1]
249
255
  end
250
256
 
251
257
  def image_url(type = :lg)
252
- "http://cdn.dota2.com/apps/dota2/images/items/#{name}_#{type}.png"
258
+ "http://cdn.dota2.com/apps/dota2/images/items/#{internal_name}_#{type}.png"
253
259
  end
260
+
261
+ private
262
+
263
+ attr_reader :internal_name
254
264
  end
255
265
  end
256
266
  end
@@ -3,6 +3,36 @@ module Dota
3
3
  class Match
4
4
  include Utilities::Inspectable
5
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
+ }.freeze
16
+
17
+ MODES = {
18
+ 0 => "None",
19
+ 1 => "All Pick",
20
+ 2 => "Captain's Mode",
21
+ 3 => "Random Draft",
22
+ 4 => "Single Draft",
23
+ 5 => "All Random",
24
+ 6 => "Intro",
25
+ 7 => "Diretide",
26
+ 8 => "Reverse Captain's Mode",
27
+ 9 => "The Greeviling",
28
+ 10 => "Tutorial",
29
+ 11 => "Mid Only",
30
+ 12 => "Least Played",
31
+ 13 => "New Player Pool",
32
+ 14 => "Compendium Matchmaking",
33
+ 16 => "Captain's Draft"
34
+ }.freeze
35
+
6
36
  def initialize(raw)
7
37
  @raw = raw
8
38
  end
@@ -11,6 +41,34 @@ module Dota
11
41
  raw["match_id"]
12
42
  end
13
43
 
44
+ def mode
45
+ MODES[raw["game_mode"]]
46
+ end
47
+
48
+ def mode_id
49
+ raw["game_mode"]
50
+ end
51
+
52
+ def type
53
+ TYPES[raw["lobby_type"]]
54
+ end
55
+
56
+ def type_id
57
+ raw["lobby_type"]
58
+ end
59
+
60
+ def drafts
61
+ raw["picks_bans"].map do |raw_draft|
62
+ Draft.new(raw_draft)
63
+ end
64
+ end
65
+
66
+ def players
67
+ raw["players"].map do |raw_player|
68
+ Player.new(raw_player)
69
+ end
70
+ end
71
+
14
72
  def sequence
15
73
  raw["match_seq_num"]
16
74
  end
@@ -55,14 +113,6 @@ module Dota
55
113
  raw["cluster"]
56
114
  end
57
115
 
58
- def mode
59
- raw["game_mode"]
60
- end
61
-
62
- def lobby
63
- raw["lobby_type"]
64
- end
65
-
66
116
  def radiant_tower_status
67
117
  raw["tower_status_radiant"]
68
118
  end
@@ -79,18 +129,6 @@ module Dota
79
129
  raw["barracks_status_dire"]
80
130
  end
81
131
 
82
- def players
83
- raw["players"].map do |raw_player|
84
- Player.new(raw_player)
85
- end
86
- end
87
-
88
- def drafts
89
- raw["picks_bans"].map do |raw_draft|
90
- Draft.new(raw_draft)
91
- end
92
- end
93
-
94
132
  private
95
133
 
96
134
  attr_reader :raw
@@ -1,3 +1,3 @@
1
1
  module Dota
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -1,19 +1,25 @@
1
1
  describe Dota::API::Hero do
2
- let(:item) do
2
+ let(:hero) do
3
3
  VCR.use_cassette("GetMatchDetails") do
4
4
  test_client.match(sample_match_id).players.first.hero
5
5
  end
6
6
  end
7
7
 
8
+ specify ".all" do
9
+ heroes = described_class.all
10
+ expect(heroes.first).to be_a described_class
11
+ expect(heroes.count).to eq 108
12
+ end
13
+
8
14
  specify "#id" do
9
- expect(item.id).to eq 69
15
+ expect(hero.id).to eq 69
10
16
  end
11
17
 
12
18
  specify "#name" do
13
- expect(item.name).to eq "Doom"
19
+ expect(hero.name).to eq "Doom"
14
20
  end
15
21
 
16
22
  specify "#image_url" do
17
- expect(item.image_url).to eq "http://cdn.dota2.com/apps/dota2/images/heroes/doom_bringer_full.png"
23
+ expect(hero.image_url).to eq "http://cdn.dota2.com/apps/dota2/images/heroes/doom_bringer_full.png"
18
24
  end
19
25
  end
@@ -5,12 +5,18 @@ describe Dota::API::Item do
5
5
  end
6
6
  end
7
7
 
8
+ specify ".all" do
9
+ items = described_class.all
10
+ expect(items.first).to be_a described_class
11
+ expect(items.count).to eq 238
12
+ end
13
+
8
14
  specify "#id" do
9
15
  expect(item.id).to eq 1
10
16
  end
11
17
 
12
18
  specify "#name" do
13
- expect(item.name).to eq "blink"
19
+ expect(item.name).to eq "Blink Dagger"
14
20
  end
15
21
 
16
22
  specify "#image_url" do
@@ -9,6 +9,38 @@ describe Dota::API::Match do
9
9
  expect(match.id).to eq sample_match_id
10
10
  end
11
11
 
12
+ specify "#league_id" do
13
+ expect(match.league_id).to eq 600
14
+ end
15
+
16
+ specify "#type" do
17
+ expect(match.type).to eq "Tournament"
18
+ end
19
+
20
+ specify "#type_id" do
21
+ expect(match.type_id).to eq 2
22
+ end
23
+
24
+ specify "#mode" do
25
+ expect(match.mode).to eq "Captain's Mode"
26
+ end
27
+
28
+ specify "#mode_id" do
29
+ expect(match.mode_id).to eq 2
30
+ end
31
+
32
+ specify "#players" do
33
+ players = match.players
34
+ expect(players.count).to eq 10
35
+ expect(players.first).to be_a Dota::API::Match::Player
36
+ end
37
+
38
+ specify "#drafts" do
39
+ drafts = match.drafts
40
+ expect(drafts.count).to eq 20
41
+ expect(drafts.first).to be_a Dota::API::Match::Draft
42
+ end
43
+
12
44
  specify "#sequence" do
13
45
  expect(match.sequence).to eq 709365483
14
46
  end
@@ -49,18 +81,6 @@ describe Dota::API::Match do
49
81
  expect(match.cluster).to eq 111
50
82
  end
51
83
 
52
- specify "#mode" do
53
- expect(match.mode).to eq 2
54
- end
55
-
56
- specify "#lobby" do
57
- expect(match.lobby).to eq 2
58
- end
59
-
60
- specify "#league_id" do
61
- expect(match.league_id).to eq 600
62
- end
63
-
64
84
  specify "#radiant_tower_status" do
65
85
  expect(match.radiant_tower_status).to eq 2039
66
86
  end
@@ -76,16 +96,4 @@ describe Dota::API::Match do
76
96
  specify "#dire_barracks_status" do
77
97
  expect(match.dire_barracks_status).to eq 63
78
98
  end
79
-
80
- specify "#players" do
81
- players = match.players
82
- expect(players.count).to eq 10
83
- expect(players.first).to be_a Dota::API::Match::Player
84
- end
85
-
86
- specify "#drafts" do
87
- drafts = match.drafts
88
- expect(drafts.count).to eq 20
89
- expect(drafts.first).to be_a Dota::API::Match::Draft
90
- end
91
99
  end
@@ -18,13 +18,23 @@ describe Dota do
18
18
  end
19
19
 
20
20
  specify "#hero" do
21
- match = api.hero(43)
22
- expect(match).to be_a Dota::API::Hero
21
+ hero = api.hero(43)
22
+ expect(hero).to be_a Dota::API::Hero
23
+ end
24
+
25
+ specify "#heroes" do
26
+ hero = api.heroes.first
27
+ expect(hero).to be_a Dota::API::Hero
23
28
  end
24
29
 
25
30
  specify "#item" do
26
- match = api.item(114)
27
- expect(match).to be_a Dota::API::Item
31
+ item = api.item(114)
32
+ expect(item).to be_a Dota::API::Item
33
+ end
34
+
35
+ specify "#items" do
36
+ item = api.items.first
37
+ expect(item).to be_a Dota::API::Item
28
38
  end
29
39
 
30
40
  specify "#match" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dota
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vinni Carlo Caños
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-18 00:00:00.000000000 Z
11
+ date: 2014-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -38,34 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.9.1
41
- - !ruby/object:Gem::Dependency
42
- name: bundler
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '1.7'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '1.7'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rake
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
- - - "~>"
45
+ - - ">="
60
46
  - !ruby/object:Gem::Version
61
- version: '10.0'
47
+ version: '0'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - "~>"
52
+ - - ">="
67
53
  - !ruby/object:Gem::Version
68
- version: '10.0'
54
+ version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rspec
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -145,6 +131,7 @@ extra_rdoc_files: []
145
131
  files:
146
132
  - ".gitignore"
147
133
  - ".rspec"
134
+ - ".travis.yml"
148
135
  - Gemfile
149
136
  - Guardfile
150
137
  - LICENSE.txt