steam-condenser 1.2.1 → 1.3.0

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