dota 0.0.3 → 0.0.4

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