steam-condenser 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (390) hide show
  1. data/Gemfile.lock +9 -9
  2. data/README.md +1 -0
  3. data/Rakefile +2 -2
  4. data/lib/steam-condenser/version.rb +1 -1
  5. data/lib/steam/community/alien_swarm/alien_swarm_stats.rb +1 -0
  6. data/lib/steam/community/cacheable.rb +1 -1
  7. data/lib/steam/community/css/css_stats.rb +1 -0
  8. data/lib/steam/community/defense_grid/defense_grid_stats.rb +1 -0
  9. data/lib/steam/community/dods/dods_stats.rb +1 -0
  10. data/lib/steam/community/dota2/dota2_beta_inventory.rb +4 -1
  11. data/lib/steam/community/dota2/dota2_inventory.rb +4 -1
  12. data/lib/steam/community/game_inventory.rb +68 -63
  13. data/lib/steam/community/game_item.rb +65 -22
  14. data/lib/steam/community/game_item_schema.rb +131 -0
  15. data/lib/steam/community/game_stats.rb +1 -1
  16. data/lib/steam/community/l4d/l4d2_stats.rb +3 -1
  17. data/lib/steam/community/l4d/l4d_stats.rb +3 -1
  18. data/lib/steam/community/portal2/portal2_inventory.rb +4 -1
  19. data/lib/steam/community/portal2/portal2_item.rb +8 -0
  20. data/lib/steam/community/portal2/portal2_stats.rb +1 -0
  21. data/lib/steam/community/steam_game.rb +15 -2
  22. data/lib/steam/community/steam_id.rb +39 -42
  23. data/lib/steam/community/tf2/tf2_beta_inventory.rb +4 -1
  24. data/lib/steam/community/tf2/tf2_inventory.rb +4 -1
  25. data/lib/steam/community/tf2/tf2_item.rb +8 -0
  26. data/lib/steam/community/tf2/tf2_stats.rb +1 -0
  27. data/lib/steam/community/web_api.rb +2 -1
  28. data/lib/steam/packets/c2m_checkmd5_packet.rb +1 -0
  29. data/lib/steam/packets/s2m_heartbeat2_packet.rb +1 -0
  30. data/lib/steam/servers/master_server.rb +6 -1
  31. data/lib/steam/servers/server.rb +12 -1
  32. data/lib/steam/servers/source_server.rb +12 -2
  33. data/lib/steam/sockets/master_server_socket.rb +5 -1
  34. data/lib/steam/sockets/rcon_socket.rb +9 -2
  35. data/lib/steam/sockets/steam_socket.rb +5 -1
  36. data/steam-condenser.gemspec +3 -3
  37. data/test/helper.rb +2 -2
  38. data/test/steam/{communtiy → community}/test_cacheable.rb +0 -0
  39. data/{pkg/steam-condenser-1.2.0/test/steam/communtiy → test/steam/community}/test_steam_group.rb +0 -0
  40. data/{pkg/steam-condenser-1.2.0/test/steam/communtiy → test/steam/community}/test_steam_id.rb +22 -0
  41. data/{pkg/steam-condenser-1.2.0/test/steam/communtiy → test/steam/community}/test_web_api.rb +0 -0
  42. data/test/steam/servers/test_source_server.rb +10 -2
  43. data/test/steam/sockets/test_rcon_socket.rb +3 -3
  44. metadata +112 -474
  45. data/doc/A2M_GET_SERVERS_BATCH2_Packet.html +0 -426
  46. data/doc/A2S_INFO_Packet.html +0 -260
  47. data/doc/A2S_PLAYER_Packet.html +0 -295
  48. data/doc/A2S_RULES_Packet.html +0 -296
  49. data/doc/A2S_SERVERQUERY_GETCHALLENGE_Packet.html +0 -261
  50. data/doc/AbstractL4DStats.html +0 -978
  51. data/doc/AbstractL4DWeapon.html +0 -734
  52. data/doc/Achievement.html +0 -660
  53. data/doc/AlienSwarmMission.html +0 -1557
  54. data/doc/AlienSwarmStats.html +0 -965
  55. data/doc/AlienSwarmWeapon.html +0 -640
  56. data/doc/AppNews.html +0 -1442
  57. data/doc/C2M_CHECKMD5_Packet.html +0 -341
  58. data/doc/CSSMap.html +0 -806
  59. data/doc/CSSStats.html +0 -825
  60. data/doc/CSSWeapon.html +0 -889
  61. data/doc/Cacheable.html +0 -913
  62. data/doc/Cacheable/ClassMethods.html +0 -696
  63. data/doc/DefenseGridStats.html +0 -2559
  64. data/doc/DoDSClass.html +0 -1264
  65. data/doc/DoDSStats.html +0 -486
  66. data/doc/DoDSWeapon.html +0 -806
  67. data/doc/Dota2BetaInventory.html +0 -339
  68. data/doc/Dota2Inventory.html +0 -339
  69. data/doc/Dota2Item.html +0 -388
  70. data/doc/Dota2Stats.html +0 -366
  71. data/doc/GameAchievement.html +0 -1257
  72. data/doc/GameClass.html +0 -321
  73. data/doc/GameInventory.html +0 -1363
  74. data/doc/GameItem.html +0 -1339
  75. data/doc/GameLeaderboard.html +0 -1609
  76. data/doc/GameLeaderboardEntry.html +0 -629
  77. data/doc/GameSchema.html +0 -568
  78. data/doc/GameServer.html +0 -2405
  79. data/doc/GameStats.html +0 -1461
  80. data/doc/GameWeapon.html +0 -590
  81. data/doc/GoldSrcServer.html +0 -740
  82. data/doc/GoldSrcSocket.html +0 -850
  83. data/doc/ItemSchema.html +0 -780
  84. data/doc/L4D2Map.html +0 -739
  85. data/doc/L4D2Stats.html +0 -930
  86. data/doc/L4D2Weapon.html +0 -486
  87. data/doc/L4DExplosive.html +0 -374
  88. data/doc/L4DMap.html +0 -776
  89. data/doc/L4DStats.html +0 -530
  90. data/doc/L4DWeapon.html +0 -296
  91. data/doc/M2A_SERVER_BATCH_Packet.html +0 -430
  92. data/doc/M2C_ISVALIDMD5_Packet.html +0 -383
  93. data/doc/M2S_REQUESTRESTART_Packet.html +0 -382
  94. data/doc/MasterServer.html +0 -1070
  95. data/doc/MasterServerSocket.html +0 -293
  96. data/doc/Module.html +0 -194
  97. data/doc/PacketFormatError.html +0 -257
  98. data/doc/Portal2Inventory.html +0 -339
  99. data/doc/Portal2Item.html +0 -499
  100. data/doc/Portal2Stats.html +0 -368
  101. data/doc/RCONAuthRequest.html +0 -318
  102. data/doc/RCONAuthResponse.html +0 -305
  103. data/doc/RCONBanError.html +0 -247
  104. data/doc/RCONExecRequest.html +0 -318
  105. data/doc/RCONExecResponse.html +0 -407
  106. data/doc/RCONGoldSrcRequest.html +0 -363
  107. data/doc/RCONGoldSrcResponse.html +0 -367
  108. data/doc/RCONNoAuthError.html +0 -247
  109. data/doc/RCONPacket.html +0 -548
  110. data/doc/RCONPacketFactory.html +0 -300
  111. data/doc/RCONSocket.html +0 -669
  112. data/doc/RCONTerminator.html +0 -304
  113. data/doc/RequestWithChallenge.html +0 -233
  114. data/doc/S2A_INFO2_Packet.html +0 -371
  115. data/doc/S2A_INFO_BasePacket.html +0 -357
  116. data/doc/S2A_INFO_DETAILED_Packet.html +0 -370
  117. data/doc/S2A_LOGSTRING_Packet.html +0 -373
  118. data/doc/S2A_PLAYER_Packet.html +0 -417
  119. data/doc/S2A_RULES_Packet.html +0 -411
  120. data/doc/S2C_CHALLENGE_Packet.html +0 -370
  121. data/doc/S2M_HEARTBEAT2_Packet.html +0 -444
  122. data/doc/Server.html +0 -781
  123. data/doc/SourceServer.html +0 -776
  124. data/doc/SourceSocket.html +0 -366
  125. data/doc/StatsAttribute.html +0 -514
  126. data/doc/SteamCondenser.html +0 -155
  127. data/doc/SteamCondenser/A2M_GET_SERVERS_BATCH2_Packet.html +0 -413
  128. data/doc/SteamCondenser/A2S_INFO_Packet.html +0 -249
  129. data/doc/SteamCondenser/A2S_PLAYER_Packet.html +0 -281
  130. data/doc/SteamCondenser/A2S_RULES_Packet.html +0 -282
  131. data/doc/SteamCondenser/A2S_SERVERQUERY_GETCHALLENGE_Packet.html +0 -250
  132. data/doc/SteamCondenser/AbstractL4DStats.html +0 -954
  133. data/doc/SteamCondenser/AbstractL4DWeapon.html +0 -703
  134. data/doc/SteamCondenser/AlienSwarmMission.html +0 -1494
  135. data/doc/SteamCondenser/AlienSwarmStats.html +0 -938
  136. data/doc/SteamCondenser/AlienSwarmWeapon.html +0 -614
  137. data/doc/SteamCondenser/AppNews.html +0 -1387
  138. data/doc/SteamCondenser/C2M_CHECKMD5_Packet.html +0 -327
  139. data/doc/SteamCondenser/CSSMap.html +0 -774
  140. data/doc/SteamCondenser/CSSStats.html +0 -799
  141. data/doc/SteamCondenser/CSSWeapon.html +0 -855
  142. data/doc/SteamCondenser/Cacheable.html +0 -698
  143. data/doc/SteamCondenser/Cacheable/ClassMethods.html +0 -531
  144. data/doc/SteamCondenser/Community.html +0 -134
  145. data/doc/SteamCondenser/DefenseGridStats.html +0 -2455
  146. data/doc/SteamCondenser/DoDSClass.html +0 -1209
  147. data/doc/SteamCondenser/DoDSStats.html +0 -470
  148. data/doc/SteamCondenser/DoDSWeapon.html +0 -774
  149. data/doc/SteamCondenser/Error.html +0 -156
  150. data/doc/SteamCondenser/Error/PacketFormat.html +0 -246
  151. data/doc/SteamCondenser/Error/RCONBan.html +0 -237
  152. data/doc/SteamCondenser/Error/RCONNoAuth.html +0 -236
  153. data/doc/SteamCondenser/Error/Timeout.html +0 -238
  154. data/doc/SteamCondenser/Error/WebApi.html +0 -339
  155. data/doc/SteamCondenser/GameAchievement.html +0 -1210
  156. data/doc/SteamCondenser/GameClass.html +0 -306
  157. data/doc/SteamCondenser/GameInventory.html +0 -1236
  158. data/doc/SteamCondenser/GameItem.html +0 -1282
  159. data/doc/SteamCondenser/GameLeaderboard.html +0 -1562
  160. data/doc/SteamCondenser/GameLeaderboardEntry.html +0 -604
  161. data/doc/SteamCondenser/GameServer.html +0 -2337
  162. data/doc/SteamCondenser/GameStats.html +0 -1416
  163. data/doc/SteamCondenser/GameWeapon.html +0 -566
  164. data/doc/SteamCondenser/GoldSrcServer.html +0 -716
  165. data/doc/SteamCondenser/GoldSrcSocket.html +0 -831
  166. data/doc/SteamCondenser/L4D2Map.html +0 -713
  167. data/doc/SteamCondenser/L4D2Stats.html +0 -906
  168. data/doc/SteamCondenser/L4D2Weapon.html +0 -466
  169. data/doc/SteamCondenser/L4DExplosive.html +0 -362
  170. data/doc/SteamCondenser/L4DMap.html +0 -746
  171. data/doc/SteamCondenser/L4DStats.html +0 -513
  172. data/doc/SteamCondenser/L4DWeapon.html +0 -284
  173. data/doc/SteamCondenser/M2A_SERVER_BATCH_Packet.html +0 -415
  174. data/doc/SteamCondenser/M2C_ISVALIDMD5_Packet.html +0 -368
  175. data/doc/SteamCondenser/M2S_REQUESTRESTART_Packet.html +0 -367
  176. data/doc/SteamCondenser/MasterServer.html +0 -1046
  177. data/doc/SteamCondenser/MasterServerSocket.html +0 -282
  178. data/doc/SteamCondenser/Portal2Inventory.html +0 -217
  179. data/doc/SteamCondenser/Portal2Item.html +0 -483
  180. data/doc/SteamCondenser/Portal2Stats.html +0 -353
  181. data/doc/SteamCondenser/RCONAuthRequest.html +0 -306
  182. data/doc/SteamCondenser/RCONAuthResponse.html +0 -293
  183. data/doc/SteamCondenser/RCONExecRequest.html +0 -306
  184. data/doc/SteamCondenser/RCONExecResponse.html +0 -392
  185. data/doc/SteamCondenser/RCONGoldSrcRequest.html +0 -349
  186. data/doc/SteamCondenser/RCONGoldSrcResponse.html +0 -354
  187. data/doc/SteamCondenser/RCONPacket.html +0 -530
  188. data/doc/SteamCondenser/RCONPacketFactory.html +0 -293
  189. data/doc/SteamCondenser/RCONSocket.html +0 -649
  190. data/doc/SteamCondenser/RCONTerminator.html +0 -292
  191. data/doc/SteamCondenser/RequestWithChallenge.html +0 -223
  192. data/doc/SteamCondenser/S2A_INFO2_Packet.html +0 -359
  193. data/doc/SteamCondenser/S2A_INFO_BasePacket.html +0 -342
  194. data/doc/SteamCondenser/S2A_INFO_DETAILED_Packet.html +0 -358
  195. data/doc/SteamCondenser/S2A_LOGSTRING_Packet.html +0 -358
  196. data/doc/SteamCondenser/S2A_PLAYER_Packet.html +0 -402
  197. data/doc/SteamCondenser/S2A_RULES_Packet.html +0 -396
  198. data/doc/SteamCondenser/S2C_CHALLENGE_Packet.html +0 -356
  199. data/doc/SteamCondenser/S2M_HEARTBEAT2_Packet.html +0 -430
  200. data/doc/SteamCondenser/Server.html +0 -754
  201. data/doc/SteamCondenser/Servers.html +0 -133
  202. data/doc/SteamCondenser/SourceServer.html +0 -752
  203. data/doc/SteamCondenser/SourceSocket.html +0 -355
  204. data/doc/SteamCondenser/SteamGame.html +0 -1802
  205. data/doc/SteamCondenser/SteamGroup.html +0 -969
  206. data/doc/SteamCondenser/SteamId.html +0 -4242
  207. data/doc/SteamCondenser/SteamPacket.html +0 -456
  208. data/doc/SteamCondenser/SteamPacketFactory.html +0 -521
  209. data/doc/SteamCondenser/SteamPlayer.html +0 -1696
  210. data/doc/SteamCondenser/SteamSocket.html +0 -679
  211. data/doc/SteamCondenser/TF2BetaInventory.html +0 -198
  212. data/doc/SteamCondenser/TF2Class.html +0 -1145
  213. data/doc/SteamCondenser/TF2ClassFactory.html +0 -263
  214. data/doc/SteamCondenser/TF2Engineer.html +0 -534
  215. data/doc/SteamCondenser/TF2GoldenWrench.html +0 -731
  216. data/doc/SteamCondenser/TF2Inventory.html +0 -217
  217. data/doc/SteamCondenser/TF2Item.html +0 -482
  218. data/doc/SteamCondenser/TF2Medic.html +0 -445
  219. data/doc/SteamCondenser/TF2Sniper.html +0 -357
  220. data/doc/SteamCondenser/TF2Spy.html +0 -531
  221. data/doc/SteamCondenser/TF2Stats.html +0 -670
  222. data/doc/SteamCondenser/TimeoutError.html +0 -249
  223. data/doc/SteamCondenser/WebApi.html +0 -999
  224. data/doc/SteamCondenser/XMLData.html +0 -171
  225. data/doc/SteamCondenserError.html +0 -153
  226. data/doc/SteamGame.html +0 -1859
  227. data/doc/SteamGroup.html +0 -1012
  228. data/doc/SteamId.html +0 -4369
  229. data/doc/SteamPacket.html +0 -469
  230. data/doc/SteamPacketFactory.html +0 -545
  231. data/doc/SteamPlayer.html +0 -1766
  232. data/doc/SteamSocket.html +0 -699
  233. data/doc/StringIO.html +0 -947
  234. data/doc/TF2BetaInventory.html +0 -315
  235. data/doc/TF2Class.html +0 -1194
  236. data/doc/TF2ClassFactory.html +0 -273
  237. data/doc/TF2Engineer.html +0 -558
  238. data/doc/TF2GoldenWrench.html +0 -760
  239. data/doc/TF2Inventory.html +0 -339
  240. data/doc/TF2Item.html +0 -499
  241. data/doc/TF2Medic.html +0 -465
  242. data/doc/TF2Sniper.html +0 -373
  243. data/doc/TF2Spy.html +0 -555
  244. data/doc/TF2Stats.html +0 -696
  245. data/doc/WebApi.html +0 -1021
  246. data/doc/WebApiError.html +0 -347
  247. data/doc/XMLData.html +0 -253
  248. data/doc/_index.html +0 -717
  249. data/doc/class_list.html +0 -53
  250. data/doc/css/common.css +0 -1
  251. data/doc/css/full_list.css +0 -57
  252. data/doc/css/style.css +0 -328
  253. data/doc/file.LICENSE.html +0 -100
  254. data/doc/file.README.html +0 -136
  255. data/doc/file_list.html +0 -58
  256. data/doc/frames.html +0 -28
  257. data/doc/index.html +0 -136
  258. data/doc/js/app.js +0 -214
  259. data/doc/js/full_list.js +0 -173
  260. data/doc/js/jquery.js +0 -4
  261. data/doc/method_list.html +0 -3988
  262. data/doc/methods_list.html +0 -3900
  263. data/doc/top-level-namespace.html +0 -114
  264. data/pkg/steam-condenser-1.2.0.gem +0 -0
  265. data/pkg/steam-condenser-1.2.0/Gemfile +0 -3
  266. data/pkg/steam-condenser-1.2.0/Gemfile.lock +0 -30
  267. data/pkg/steam-condenser-1.2.0/LICENSE +0 -25
  268. data/pkg/steam-condenser-1.2.0/README.md +0 -47
  269. data/pkg/steam-condenser-1.2.0/Rakefile +0 -46
  270. data/pkg/steam-condenser-1.2.0/lib/core_ext/stringio.rb +0 -91
  271. data/pkg/steam-condenser-1.2.0/lib/errors/packet_format_error.rb +0 -21
  272. data/pkg/steam-condenser-1.2.0/lib/errors/rcon_ban_error.rb +0 -22
  273. data/pkg/steam-condenser-1.2.0/lib/errors/rcon_no_auth_error.rb +0 -21
  274. data/pkg/steam-condenser-1.2.0/lib/errors/steam_condenser_error.rb +0 -11
  275. data/pkg/steam-condenser-1.2.0/lib/errors/timeout_error.rb +0 -28
  276. data/pkg/steam-condenser-1.2.0/lib/errors/web_api_error.rb +0 -57
  277. data/pkg/steam-condenser-1.2.0/lib/steam-condenser.rb +0 -18
  278. data/pkg/steam-condenser-1.2.0/lib/steam-condenser/community.rb +0 -24
  279. data/pkg/steam-condenser-1.2.0/lib/steam-condenser/servers.rb +0 -24
  280. data/pkg/steam-condenser-1.2.0/lib/steam-condenser/version.rb +0 -11
  281. data/pkg/steam-condenser-1.2.0/lib/steam/community/alien_swarm/alien_swarm_mission.rb +0 -119
  282. data/pkg/steam-condenser-1.2.0/lib/steam/community/alien_swarm/alien_swarm_stats.rb +0 -179
  283. data/pkg/steam-condenser-1.2.0/lib/steam/community/alien_swarm/alien_swarm_weapon.rb +0 -49
  284. data/pkg/steam-condenser-1.2.0/lib/steam/community/app_news.rb +0 -133
  285. data/pkg/steam-condenser-1.2.0/lib/steam/community/cacheable.rb +0 -137
  286. data/pkg/steam-condenser-1.2.0/lib/steam/community/css/css_map.rb +0 -61
  287. data/pkg/steam-condenser-1.2.0/lib/steam/community/css/css_stats.rb +0 -136
  288. data/pkg/steam-condenser-1.2.0/lib/steam/community/css/css_weapon.rb +0 -69
  289. data/pkg/steam-condenser-1.2.0/lib/steam/community/defense_grid/defense_grid_stats.rb +0 -237
  290. data/pkg/steam-condenser-1.2.0/lib/steam/community/dods/dods_class.rb +0 -90
  291. data/pkg/steam-condenser-1.2.0/lib/steam/community/dods/dods_stats.rb +0 -61
  292. data/pkg/steam-condenser-1.2.0/lib/steam/community/dods/dods_weapon.rb +0 -67
  293. data/pkg/steam-condenser-1.2.0/lib/steam/community/game_achievement.rb +0 -109
  294. data/pkg/steam-condenser-1.2.0/lib/steam/community/game_class.rb +0 -22
  295. data/pkg/steam-condenser-1.2.0/lib/steam/community/game_inventory.rb +0 -152
  296. data/pkg/steam-condenser-1.2.0/lib/steam/community/game_item.rb +0 -99
  297. data/pkg/steam-condenser-1.2.0/lib/steam/community/game_leaderboard.rb +0 -201
  298. data/pkg/steam-condenser-1.2.0/lib/steam/community/game_leaderboard_entry.rb +0 -43
  299. data/pkg/steam-condenser-1.2.0/lib/steam/community/game_stats.rb +0 -175
  300. data/pkg/steam-condenser-1.2.0/lib/steam/community/game_weapon.rb +0 -41
  301. data/pkg/steam-condenser-1.2.0/lib/steam/community/l4d/abstract_l4d_stats.rb +0 -173
  302. data/pkg/steam-condenser-1.2.0/lib/steam/community/l4d/abstract_l4d_weapon.rb +0 -56
  303. data/pkg/steam-condenser-1.2.0/lib/steam/community/l4d/l4d2_map.rb +0 -90
  304. data/pkg/steam-condenser-1.2.0/lib/steam/community/l4d/l4d2_stats.rb +0 -165
  305. data/pkg/steam-condenser-1.2.0/lib/steam/community/l4d/l4d2_weapon.rb +0 -38
  306. data/pkg/steam-condenser-1.2.0/lib/steam/community/l4d/l4d_explosive.rb +0 -34
  307. data/pkg/steam-condenser-1.2.0/lib/steam/community/l4d/l4d_map.rb +0 -65
  308. data/pkg/steam-condenser-1.2.0/lib/steam/community/l4d/l4d_stats.rb +0 -71
  309. data/pkg/steam-condenser-1.2.0/lib/steam/community/l4d/l4d_weapon.rb +0 -26
  310. data/pkg/steam-condenser-1.2.0/lib/steam/community/portal2/portal2_inventory.rb +0 -25
  311. data/pkg/steam-condenser-1.2.0/lib/steam/community/portal2/portal2_item.rb +0 -47
  312. data/pkg/steam-condenser-1.2.0/lib/steam/community/portal2/portal2_stats.rb +0 -32
  313. data/pkg/steam-condenser-1.2.0/lib/steam/community/steam_game.rb +0 -182
  314. data/pkg/steam-condenser-1.2.0/lib/steam/community/steam_group.rb +0 -135
  315. data/pkg/steam-condenser-1.2.0/lib/steam/community/steam_id.rb +0 -513
  316. data/pkg/steam-condenser-1.2.0/lib/steam/community/tf2/tf2_beta_inventory.rb +0 -22
  317. data/pkg/steam-condenser-1.2.0/lib/steam/community/tf2/tf2_class.rb +0 -92
  318. data/pkg/steam-condenser-1.2.0/lib/steam/community/tf2/tf2_class_factory.rb +0 -40
  319. data/pkg/steam-condenser-1.2.0/lib/steam/community/tf2/tf2_engineer.rb +0 -43
  320. data/pkg/steam-condenser-1.2.0/lib/steam/community/tf2/tf2_golden_wrench.rb +0 -70
  321. data/pkg/steam-condenser-1.2.0/lib/steam/community/tf2/tf2_inventory.rb +0 -25
  322. data/pkg/steam-condenser-1.2.0/lib/steam/community/tf2/tf2_item.rb +0 -47
  323. data/pkg/steam-condenser-1.2.0/lib/steam/community/tf2/tf2_medic.rb +0 -35
  324. data/pkg/steam-condenser-1.2.0/lib/steam/community/tf2/tf2_sniper.rb +0 -28
  325. data/pkg/steam-condenser-1.2.0/lib/steam/community/tf2/tf2_spy.rb +0 -41
  326. data/pkg/steam-condenser-1.2.0/lib/steam/community/tf2/tf2_stats.rb +0 -76
  327. data/pkg/steam-condenser-1.2.0/lib/steam/community/web_api.rb +0 -129
  328. data/pkg/steam-condenser-1.2.0/lib/steam/community/xml_data.rb +0 -17
  329. data/pkg/steam-condenser-1.2.0/lib/steam/packets/a2m_get_servers_batch2_packet.rb +0 -59
  330. data/pkg/steam-condenser-1.2.0/lib/steam/packets/a2s_info_packet.rb +0 -24
  331. data/pkg/steam-condenser-1.2.0/lib/steam/packets/a2s_player_packet.rb +0 -31
  332. data/pkg/steam-condenser-1.2.0/lib/steam/packets/a2s_rules_packet.rb +0 -32
  333. data/pkg/steam-condenser-1.2.0/lib/steam/packets/a2s_serverquery_getchallenge_packet.rb +0 -25
  334. data/pkg/steam-condenser-1.2.0/lib/steam/packets/c2m_checkmd5_packet.rb +0 -30
  335. data/pkg/steam-condenser-1.2.0/lib/steam/packets/m2a_server_batch_packet.rb +0 -52
  336. data/pkg/steam-condenser-1.2.0/lib/steam/packets/m2c_isvalidmd5_packet.rb +0 -34
  337. data/pkg/steam-condenser-1.2.0/lib/steam/packets/m2s_requestrestart_packet.rb +0 -34
  338. data/pkg/steam-condenser-1.2.0/lib/steam/packets/rcon/rcon_auth_request.rb +0 -28
  339. data/pkg/steam-condenser-1.2.0/lib/steam/packets/rcon/rcon_auth_response.rb +0 -30
  340. data/pkg/steam-condenser-1.2.0/lib/steam/packets/rcon/rcon_exec_request.rb +0 -28
  341. data/pkg/steam-condenser-1.2.0/lib/steam/packets/rcon/rcon_exec_response.rb +0 -37
  342. data/pkg/steam-condenser-1.2.0/lib/steam/packets/rcon/rcon_goldsrc_request.rb +0 -35
  343. data/pkg/steam-condenser-1.2.0/lib/steam/packets/rcon/rcon_goldsrc_response.rb +0 -34
  344. data/pkg/steam-condenser-1.2.0/lib/steam/packets/rcon/rcon_packet.rb +0 -57
  345. data/pkg/steam-condenser-1.2.0/lib/steam/packets/rcon/rcon_packet_factory.rb +0 -43
  346. data/pkg/steam-condenser-1.2.0/lib/steam/packets/rcon/rcon_terminator.rb +0 -29
  347. data/pkg/steam-condenser-1.2.0/lib/steam/packets/request_with_challenge.rb +0 -19
  348. data/pkg/steam-condenser-1.2.0/lib/steam/packets/s2a_info2_packet.rb +0 -62
  349. data/pkg/steam-condenser-1.2.0/lib/steam/packets/s2a_info_base_packet.rb +0 -35
  350. data/pkg/steam-condenser-1.2.0/lib/steam/packets/s2a_info_detailed_packet.rb +0 -61
  351. data/pkg/steam-condenser-1.2.0/lib/steam/packets/s2a_logstring_packet.rb +0 -30
  352. data/pkg/steam-condenser-1.2.0/lib/steam/packets/s2a_player_packet.rb +0 -44
  353. data/pkg/steam-condenser-1.2.0/lib/steam/packets/s2a_rules_packet.rb +0 -48
  354. data/pkg/steam-condenser-1.2.0/lib/steam/packets/s2c_challenge_packet.rb +0 -35
  355. data/pkg/steam-condenser-1.2.0/lib/steam/packets/s2m_heartbeat2_packet.rb +0 -71
  356. data/pkg/steam-condenser-1.2.0/lib/steam/packets/steam_packet.rb +0 -52
  357. data/pkg/steam-condenser-1.2.0/lib/steam/packets/steam_packet_factory.rb +0 -108
  358. data/pkg/steam-condenser-1.2.0/lib/steam/servers/game_server.rb +0 -392
  359. data/pkg/steam-condenser-1.2.0/lib/steam/servers/goldsrc_server.rb +0 -74
  360. data/pkg/steam-condenser-1.2.0/lib/steam/servers/master_server.rb +0 -182
  361. data/pkg/steam-condenser-1.2.0/lib/steam/servers/server.rb +0 -104
  362. data/pkg/steam-condenser-1.2.0/lib/steam/servers/source_server.rb +0 -98
  363. data/pkg/steam-condenser-1.2.0/lib/steam/sockets/goldsrc_socket.rb +0 -142
  364. data/pkg/steam-condenser-1.2.0/lib/steam/sockets/master_server_socket.rb +0 -30
  365. data/pkg/steam-condenser-1.2.0/lib/steam/sockets/rcon_socket.rb +0 -94
  366. data/pkg/steam-condenser-1.2.0/lib/steam/sockets/source_socket.rb +0 -78
  367. data/pkg/steam-condenser-1.2.0/lib/steam/sockets/steam_socket.rb +0 -86
  368. data/pkg/steam-condenser-1.2.0/lib/steam/steam_player.rb +0 -143
  369. data/pkg/steam-condenser-1.2.0/steam-condenser.gemspec +0 -25
  370. data/pkg/steam-condenser-1.2.0/test/core_ext/test_stringio.rb +0 -59
  371. data/pkg/steam-condenser-1.2.0/test/fixtures/invalid.xml +0 -2
  372. data/pkg/steam-condenser-1.2.0/test/fixtures/sonofthor.xml +0 -882
  373. data/pkg/steam-condenser-1.2.0/test/fixtures/status_goldsrc +0 -3
  374. data/pkg/steam-condenser-1.2.0/test/fixtures/status_source +0 -3
  375. data/pkg/steam-condenser-1.2.0/test/fixtures/valve-members.xml +0 -231
  376. data/pkg/steam-condenser-1.2.0/test/helper.rb +0 -45
  377. data/pkg/steam-condenser-1.2.0/test/steam/packets/test_steam_packet.rb +0 -37
  378. data/pkg/steam-condenser-1.2.0/test/steam/servers/test_game_server.rb +0 -296
  379. data/pkg/steam-condenser-1.2.0/test/steam/servers/test_goldsrc_server.rb +0 -59
  380. data/pkg/steam-condenser-1.2.0/test/steam/servers/test_master_server.rb +0 -131
  381. data/pkg/steam-condenser-1.2.0/test/steam/servers/test_server.rb +0 -72
  382. data/pkg/steam-condenser-1.2.0/test/steam/servers/test_source_server.rb +0 -126
  383. data/pkg/steam-condenser-1.2.0/test/steam/sockets/test_goldsrc_socket.rb +0 -127
  384. data/pkg/steam-condenser-1.2.0/test/steam/sockets/test_master_server_socket.rb +0 -42
  385. data/pkg/steam-condenser-1.2.0/test/steam/sockets/test_rcon_socket.rb +0 -109
  386. data/pkg/steam-condenser-1.2.0/test/steam/sockets/test_source_socket.rb +0 -77
  387. data/pkg/steam-condenser-1.2.0/test/steam/sockets/test_steam_socket.rb +0 -97
  388. data/test/steam/communtiy/test_steam_group.rb +0 -83
  389. data/test/steam/communtiy/test_steam_id.rb +0 -111
  390. data/test/steam/communtiy/test_web_api.rb +0 -98
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- steam-condenser (1.2.0)
4
+ steam-condenser (1.3.0)
5
5
  bzip2-ruby (~> 0.2.7)
6
- multi_json (~> 1.3.1)
6
+ multi_json (~> 1.5.0)
7
7
  multi_xml (~> 0.5.1)
8
8
 
9
9
  GEM
@@ -11,20 +11,20 @@ GEM
11
11
  specs:
12
12
  bzip2-ruby (0.2.7)
13
13
  metaclass (0.0.1)
14
- mocha (0.12.0)
14
+ mocha (0.13.1)
15
15
  metaclass (~> 0.0.1)
16
- multi_json (1.3.6)
16
+ multi_json (1.5.0)
17
17
  multi_xml (0.5.1)
18
- rake (0.9.2.2)
19
- shoulda-context (1.0.0)
20
- yard (0.8.2.1)
18
+ rake (10.0.3)
19
+ shoulda-context (1.0.2)
20
+ yard (0.8.3)
21
21
 
22
22
  PLATFORMS
23
23
  ruby
24
24
 
25
25
  DEPENDENCIES
26
- mocha (~> 0.12.0)
27
- rake (~> 0.9.2)
26
+ mocha (~> 0.13.0)
27
+ rake (~> 10.0.1)
28
28
  shoulda-context (~> 1.0.0)
29
29
  steam-condenser!
30
30
  yard (~> 0.8.0)
data/README.md CHANGED
@@ -40,6 +40,7 @@ included LICENSE file.
40
40
  * DeFirence – defirence(at)defirence.za.net
41
41
  * Mike Połtyn – mike(at)railslove.com
42
42
  * Sam Kinard – snkinard(at)gmail.com
43
+ * "withgod" – noname(at)withgod.jp
43
44
 
44
45
  ## See Also
45
46
 
data/Rakefile CHANGED
@@ -3,7 +3,7 @@
3
3
  # This code is free software; you can redistribute it and/or modify it under
4
4
  # the terms of the new BSD License.
5
5
  #
6
- # Copyright (c) 2008-2011, Sebastian Staudt
6
+ # Copyright (c) 2008-2012, Sebastian Staudt
7
7
 
8
8
  require 'rake/testtask'
9
9
  require 'rubygems/package_task'
@@ -27,7 +27,7 @@ begin
27
27
  # Create a rake task +:doc+ to build the documentation using YARD
28
28
  YARD::Rake::YardocTask.new do |yardoc|
29
29
  yardoc.name = 'doc'
30
- yardoc.files = [ 'lib/**/*.rb', 'LICENSE', 'README.md' ]
30
+ yardoc.files = [ 'lib/steam/community/cacheable.rb', 'lib/**/*.rb', 'LICENSE', 'README.md' ]
31
31
  yardoc.options = [ '--private', '--title', 'Metior — API Documentation' ]
32
32
  end
33
33
  rescue LoadError
@@ -6,6 +6,6 @@
6
6
  module SteamCondenser
7
7
 
8
8
  # The current version of Steam Condenser
9
- VERSION = '1.2.1'
9
+ VERSION = '1.3.0'
10
10
 
11
11
  end
@@ -32,6 +32,7 @@ class AlienSwarmStats < GameStats
32
32
  #
33
33
  # @param [String, Fixnum] steam_id The custom URL or the 64bit Steam ID of
34
34
  # the user
35
+ # @macro cacheable
35
36
  def initialize(steam_id)
36
37
  super steam_id, 'alienswarm'
37
38
 
@@ -137,7 +137,7 @@ module Cacheable
137
137
  def cache
138
138
  cache = self.class.send :cache
139
139
  cache_ids.each do |cache_id|
140
- cache[cache_id] = self
140
+ cache[cache_id] = self if cache_id
141
141
  end
142
142
 
143
143
  true
@@ -39,6 +39,7 @@ class CSSStats < GameStats
39
39
  #
40
40
  # @param [String, Fixnum] steam_id The custom URL or 64bit Steam ID of the
41
41
  # user
42
+ # @macro cacheable
42
43
  def initialize(steam_id)
43
44
  super steam_id, 'cs:s'
44
45
 
@@ -126,6 +126,7 @@ class DefenseGridStats < GameStats
126
126
  #
127
127
  # @param [String, Fixnum] steam_id The custom URL or the 64bit Steam ID of
128
128
  # the user
129
+ # @macro cacheable
129
130
  def initialize(steam_id)
130
131
  super(steam_id, 'defensegrid:awakening')
131
132
 
@@ -18,6 +18,7 @@ class DoDSStats < GameStats
18
18
  #
19
19
  # @param [String, Fixnum] steam_id The custom URL or 64bit Steam ID of the
20
20
  # user
21
+ # @macro cacheable
21
22
  def initialize(steam_id)
22
23
  super steam_id, 'DoD:S'
23
24
  end
@@ -11,6 +11,9 @@ require 'steam/community/game_inventory'
11
11
  # @author Sebastian Staudt
12
12
  class Dota2BetaInventory < GameInventory
13
13
 
14
+ # The Steam application ID of the DotA 2 beta
15
+ APP_ID = 205790
16
+
14
17
  # Creates a new inventory object for the given SteamID64 in the DotA 2 beta
15
18
  # (App ID 205790)
16
19
  #
@@ -18,7 +21,7 @@ class Dota2BetaInventory < GameInventory
18
21
  # inventory for
19
22
  # @macro cacheable
20
23
  def initialize(steam_id64)
21
- super 205790, steam_id64
24
+ super APP_ID, steam_id64
22
25
  end
23
26
 
24
27
  # The class representing DotA 2 items
@@ -11,6 +11,9 @@ require 'steam/community/game_inventory'
11
11
  # @author Sebastian Staudt
12
12
  class Dota2Inventory < GameInventory
13
13
 
14
+ # The Steam application ID of DotA 2
15
+ APP_ID = 570
16
+
14
17
  # Creates a new inventory object for the given SteamID64 in DotA 2
15
18
  # (App ID 570)
16
19
  #
@@ -18,7 +21,7 @@ class Dota2Inventory < GameInventory
18
21
  # inventory for
19
22
  # @macro cacheable
20
23
  def initialize(steam_id64)
21
- super 570, steam_id64
24
+ super APP_ID, steam_id64
22
25
  end
23
26
 
24
27
  # The class representing DotA 2 items
@@ -5,8 +5,19 @@
5
5
 
6
6
  require 'steam/community/cacheable'
7
7
  require 'steam/community/game_item'
8
+ require 'steam/community/game_item_schema'
9
+ require 'steam/community/steam_id'
8
10
  require 'steam/community/web_api'
9
11
 
12
+ class GameInventory
13
+ end
14
+
15
+ require 'steam/community/dota2/dota2_beta_inventory'
16
+ require 'steam/community/dota2/dota2_inventory'
17
+ require 'steam/community/portal2/portal2_inventory'
18
+ require 'steam/community/tf2/tf2_beta_inventory'
19
+ require 'steam/community/tf2/tf2_inventory'
20
+
10
21
  # Provides basic functionality to represent an inventory of player in a game
11
22
  #
12
23
  # @author Sebastian Staudt
@@ -30,13 +41,47 @@ class GameInventory
30
41
  # @return [SteamId] The Steam ID of the owner of this inventory
31
42
  attr_reader :user
32
43
 
33
- @@attribute_schema = {}
44
+ @@item_class = GameItem
34
45
 
35
- @@item_schema = {}
46
+ @@schema_language = 'en'
47
+
48
+ # This is a wrapper around all subclasses of `GameInventory` so that an
49
+ # instance of correct subclass is returned for a given application ID. If
50
+ # there's no specific subclass for an application ID exists, a generic
51
+ # instance of `GameInventory` is created.
52
+ #
53
+ # @param [Fixnum] app_id The application ID of the game
54
+ # @param [Fixnum] steam_id The 64bit Steam ID or vanity URL of the user
55
+ # @return [GameInventory] The inventory for the given user and game
56
+ # @raise [SteamCondenserException] if creating the inventory fails
57
+ # @macro cacheable
58
+ def self.new(app_id, steam_id, *args)
59
+ args = args.unshift steam_id
60
+ if self != GameInventory
61
+ args = args.unshift app_id
62
+ app_id = self::APP_ID
63
+ end
36
64
 
37
- @@qualities = {}
65
+ cacheable_new = Cacheable::ClassMethods.instance_method :new
66
+
67
+ case app_id
68
+ when Dota2BetaInventory::APP_ID
69
+ cacheable_new = cacheable_new.bind Dota2BetaInventory
70
+ when Dota2Inventory::APP_ID
71
+ cacheable_new = cacheable_new.bind Dota2Inventory
72
+ when Portal2Inventory::APP_ID
73
+ cacheable_new = cacheable_new.bind Portal2Inventory
74
+ when TF2BetaInventory::APP_ID
75
+ cacheable_new = cacheable_new.bind TF2BetaInventory
76
+ when TF2Inventory::APP_ID
77
+ cacheable_new = cacheable_new.bind TF2Inventory
78
+ else
79
+ cacheable_new = cacheable_new.bind GameInventory
80
+ return cacheable_new.call app_id, *args
81
+ end
38
82
 
39
- @@schema_language = 'en'
83
+ cacheable_new.call *args
84
+ end
40
85
 
41
86
  # Sets the language the schema should be fetched in (default is: `'en'`)
42
87
  #
@@ -54,7 +99,13 @@ class GameInventory
54
99
  # inventory for
55
100
  # @macro cacheable
56
101
  def initialize(app_id, steam_id64)
102
+ unless steam_id64.is_a? Fixnum
103
+ steam_id64 = SteamId.resolve_vanity_url steam_id64.to_s
104
+ raise SteamCondenserError.new 'User not found' if steam_id64.nil?
105
+ end
106
+
57
107
  @app_id = app_id
108
+ @items = []
58
109
  @steam_id64 = steam_id64
59
110
  @user = SteamId.new steam_id64, false
60
111
  end
@@ -67,22 +118,10 @@ class GameInventory
67
118
  @items[index - 1]
68
119
  end
69
120
 
70
- # Returns the attribute schema
71
- #
72
- # The schemas are fetched first if not done already
73
- #
74
- # @return [Hash<String, Hash<String, Object>>] The attribute schema for the
75
- # game this inventory belongs to
76
- # @see #update_schema
77
- def attribute_schema
78
- update_schema unless @@attribute_schema.key? app_id
79
-
80
- @@attribute_schema[app_id]
81
- end
82
-
83
- # Updates the contents of the inventory using Steam Web API
121
+ # Updates the contents of the inventory using the Steam Web API
84
122
  def fetch
85
- result = WebApi.json!("IEconItems_#@app_id", 'GetPlayerItems', 1, { :SteamID => @user.steam_id64 })
123
+ params = { :SteamID => @user.steam_id64 }
124
+ result = WebApi.json! "IEconItems_#@app_id", 'GetPlayerItems', 1, params
86
125
  item_class = self.class.send :class_variable_get, :@@item_class
87
126
 
88
127
  @items = []
@@ -94,29 +133,20 @@ class GameInventory
94
133
  end
95
134
  end
96
135
 
97
- # Returns the item schema
98
- #
99
- # The schemas are fetched first if not done already
136
+ # Returns a short, human-readable string representation of this inventory
100
137
  #
101
- # @return [Hash<Fixnum, Hash<String, Object>>] The item schema for the game
102
- # this inventory belongs to
103
- # @see #upde_schema
104
- def item_schema
105
- update_schema unless @@item_schema.key? app_id
106
-
107
- @@item_schema[app_id]
138
+ # @return [String] A string representation of this inventory
139
+ def inspect
140
+ "#<#{self.class}:#@app_id #@steam_id64 (#{size} items) - " +
141
+ "#{fetch_time || 'not fetched'}>"
108
142
  end
109
143
 
110
- # Returns the quality schema
144
+ # Returns the item schema for this inventory
111
145
  #
112
- # The schemas are fetched first if not done already
113
- #
114
- # @return [Hash<Fixnum, String>] The quality schema for this game
115
- # @see #update_schema
116
- def qualities
117
- update_schema unless @@qualities.key? app_id
118
-
119
- @@qualities[app_id]
146
+ # @return [GameItemSchema] The item schema for the game this inventory
147
+ # belongs to
148
+ def item_schema
149
+ @item_schema ||= GameItemSchema.new app_id, @@schema_language
120
150
  end
121
151
 
122
152
  # Returns the number of items in the user's inventory
@@ -126,29 +156,4 @@ class GameInventory
126
156
  @items.size
127
157
  end
128
158
 
129
- protected
130
-
131
- # Updates the item schema (this includes attributes and qualities) using the
132
- # `GetSchema` method of interface `IEconItems_[AppID]`
133
- def update_schema
134
- params = {}
135
- params[:language] = @@schema_language unless @@schema_language.nil?
136
- result = WebApi.json!("IEconItems_#{app_id}", 'GetSchema', 1, params)
137
-
138
- @@attribute_schema[app_id] = {}
139
- result[:attributes].each do |attribute_data|
140
- @@attribute_schema[app_id][attribute_data[:name]] = attribute_data
141
- end
142
-
143
- @@item_schema[app_id] = []
144
- result[:items].each do |item_data|
145
- @@item_schema[app_id][item_data[:defindex]] = item_data
146
- end
147
-
148
- @@qualities[app_id] = []
149
- result[:qualities].each do |quality, id|
150
- @@qualities[app_id][id] = quality
151
- end
152
- end
153
-
154
159
  end
@@ -1,7 +1,7 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under
2
2
  # the terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2011, Sebastian Staudt
4
+ # Copyright (c) 2011-2012, Sebastian Staudt
5
5
 
6
6
  require 'steam/community/web_api'
7
7
 
@@ -13,7 +13,7 @@ module GameItem
13
13
 
14
14
  # Return the attributes of this item
15
15
  #
16
- # @return [Hash<Symbol, Object>] The attributes of this item
16
+ # @return [Hash<Symbol, Object>, nil] The attributes of this item
17
17
  attr_reader :attributes
18
18
 
19
19
  # Returns the position of this item in the player's inventory
@@ -21,11 +21,6 @@ module GameItem
21
21
  # @return [Fixnum] The position of this item in the player's inventory
22
22
  attr_reader :backpack_position
23
23
 
24
- # Returns the class of this item
25
- #
26
- # @return [String] The class of this item
27
- attr_reader :class
28
-
29
24
  # Returns the number of items the player owns of this item
30
25
  #
31
26
  # @return [Fixnum] The quanitity of this item
@@ -41,6 +36,21 @@ module GameItem
41
36
  # @return [Fixnum] The ID of this item
42
37
  attr_reader :id
43
38
 
39
+ # Returns the inventory this items belongs to
40
+ #
41
+ # @return [GameInventory] The inventory this item belongs to
42
+ attr_reader :inventory
43
+
44
+ # Returns the class of this item
45
+ #
46
+ # @return [String] The class of this item
47
+ attr_reader :item_class
48
+
49
+ # Returns the item set this item belongs to
50
+ #
51
+ # @return [Hash<Symbol, Object>, nil] The set this item belongs to
52
+ attr_reader :item_set
53
+
44
54
  # Returns the level of this item
45
55
  #
46
56
  # @return [Fixnum] The level of this item
@@ -51,17 +61,21 @@ module GameItem
51
61
  # @return [String] The level of this item
52
62
  attr_reader :name
53
63
 
64
+ # Returns the origin of this item
65
+ #
66
+ # @return [String] The origin of this item
67
+ attr_reader :origin
68
+
69
+ # Returns the original ID of this item
70
+ #
71
+ # @return [Fixnum] The original ID of this item
72
+ attr_reader :original_id
73
+
54
74
  # Returns the quality of this item
55
75
  #
56
76
  # @return [String] The quality of this item
57
77
  attr_reader :quality
58
78
 
59
- # Returns the slot where this item can be equipped in or `nil` if this item
60
- # cannot be equipped
61
- #
62
- # @return [String] The slot where this item can be equipped in
63
- attr_reader :slot
64
-
65
79
  # Returns the type of this item
66
80
  #
67
81
  # @return [String] The type of this item
@@ -72,23 +86,52 @@ module GameItem
72
86
  # @param [GameInventory] inventory The inventory this item is contained in
73
87
  # @param [Hash<Symbol, Object>] item_data The data representing this item
74
88
  def initialize(inventory, item_data)
89
+ @inventory = inventory
90
+
75
91
  @defindex = item_data[:defindex]
76
92
  @backpack_position = item_data[:inventory] & 0xffff
77
- @class = inventory.item_schema[@defindex][:item_class]
78
93
  @count = item_data[:quantity]
94
+ @craftable = !!item_data[:flag_cannot_craft]
79
95
  @id = item_data[:id]
96
+ @item_class = schema_data[:item_class]
97
+ @item_set = inventory.item_schema.item_sets[schema_data[:item_set]]
80
98
  @level = item_data[:level]
81
- @name = inventory.item_schema[@defindex][:item_name]
82
- @quality = inventory.qualities[item_data[:quality]]
83
- @slot = inventory.item_schema[@defindex][:item_slot]
84
- @tradeable = !(item_data[:flag_cannot_trade] == true)
85
- @type = inventory.item_schema[@defindex][:item_type_name]
86
-
87
- unless inventory.item_schema[@defindex][:attributes].nil?
88
- @attributes = inventory.item_schema[@defindex][:attributes]
99
+ @name = schema_data[:item_name]
100
+ @origin = inventory.item_schema.origins[item_data[:origin]]
101
+ @original_id = item_data[:original_id]
102
+ @quality = inventory.item_schema.qualities[item_data[:quality]]
103
+ @tradeable = !!item_data[:flag_cannot_trade]
104
+ @type = schema_data[:item_type_name]
105
+
106
+ attributes_data = schema_data[:attributes] || []
107
+ attributes_data += item_data[:attributes] if item_data.key? :attributes
108
+
109
+ @attributes = []
110
+ attributes_data.each do |attribute_data|
111
+ attribute_key = attribute_data[:defindex]
112
+ attribute_key = attribute_data[:name] if attribute_key.nil?
113
+
114
+ unless attribute_key.nil?
115
+ schema_attribute_data = inventory.item_schema.attributes[attribute_key]
116
+ @attributes << attribute_data.merge(schema_attribute_data)
117
+ end
89
118
  end
90
119
  end
91
120
 
121
+ # Returns whether this item is craftable
122
+ #
123
+ # @return [Boolean] `true` if this item is craftable
124
+ def craftable?
125
+ @craftable
126
+ end
127
+
128
+ # Returns the data for this item that's defined in the item schema
129
+ #
130
+ # @return [Hash<Symbol, Object>] The schema data for this item
131
+ def schema_data
132
+ inventory.item_schema.items[@defindex]
133
+ end
134
+
92
135
  # Returns whether this item is tradeable
93
136
  #
94
137
  # @return [Boolean] `true` if this item is tradeable