gamespy_query 0.1.5 → 0.2.0pre
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.
- data/.gitignore +5 -0
 - data/README.md +7 -4
 - data/Rakefile +14 -0
 - data/bin/gamespy_query +8 -0
 - data/gamespy_query.gemspec +3 -3
 - data/lib/gamespy_query.rb +20 -5
 - data/lib/gamespy_query/base.rb +45 -24
 - data/lib/gamespy_query/master.rb +40 -13
 - data/lib/gamespy_query/options.rb +140 -0
 - data/lib/gamespy_query/parser.rb +29 -18
 - data/lib/gamespy_query/socket.rb +81 -45
 - data/lib/gamespy_query/socket_master.rb +49 -3
 - data/lib/gamespy_query/version.rb +2 -1
 - data/test/teststrap.rb +4 -0
 - data/test/units/base_test.rb +43 -0
 - data/test/units/master_test.rb +17 -0
 - data/test/units/options_test.rb +27 -0
 - data/test/units/parser_test.rb +47 -0
 - data/test/units/socket_master_test.rb +17 -0
 - data/test/units/socket_test.rb +73 -0
 - metadata +51 -7
 
    
        data/test/teststrap.rb
    ADDED
    
    
| 
         @@ -0,0 +1,43 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'teststrap'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            context "Base" do
         
     | 
| 
      
 4 
     | 
    
         
            +
              setup { GamespyQuery::Base.new }
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            context "Funcs" do
         
     | 
| 
      
 9 
     | 
    
         
            +
              setup { GamespyQuery::Funcs }
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              denies("TimeOutError") { topic::TimeOutError.new }.nil
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              # TODO: Or should we simply test the Base class who includes this already?
         
     | 
| 
      
 14 
     | 
    
         
            +
              context "Included" do
         
     | 
| 
      
 15 
     | 
    
         
            +
                setup { Class.new { include GamespyQuery::Funcs } }
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                context "Instance" do
         
     | 
| 
      
 18 
     | 
    
         
            +
                  setup { topic.new }
         
     | 
| 
      
 19 
     | 
    
         
            +
                  # TODO: This method doesnt do anything atm
         
     | 
| 
      
 20 
     | 
    
         
            +
                  asserts("strip_tags") { topic.strip_tags "test" }.equals "test"
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  asserts("clean integer") { topic.clean "1" }.equals 1
         
     | 
| 
      
 23 
     | 
    
         
            +
                  asserts("clean float") { topic.clean "1.5" }.equals 1.5
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  asserts("encode_string") { topic.encode_string("test encoding").encoding }.equals Encoding.find("UTF-8")
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  asserts("handle_chr") { topic.handle_chr(25 >> 8) }.equals 0
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            context "Tools" do
         
     | 
| 
      
 34 
     | 
    
         
            +
              setup { GamespyQuery::Tools }
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              denies("Logger") { topic.logger }.nil
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              # TODO: Somehow returns strange string with unescaped double quotes embedded
         
     | 
| 
      
 39 
     | 
    
         
            +
              asserts("dbg_msg") { topic.dbg_msg Exception.new }.equals "Exception: Exception\nBackTrace: \n"
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
              asserts("log_exception") { topic.log_exception Exception.new }.equals true
         
     | 
| 
      
 42 
     | 
    
         
            +
              asserts("debug") { topic.debug{"test"} }.nil
         
     | 
| 
      
 43 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'teststrap'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            context "Master" do
         
     | 
| 
      
 4 
     | 
    
         
            +
              setup { GamespyQuery::Master.new }
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              asserts("geoip_path") { topic.geoip_path }.equals File.join(Dir.pwd, "config")
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              asserts("read returns a hash") { topic.read }.is_a?(Hash)
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              asserts("process returns a hash") { topic.process }.is_a?(Hash)
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              asserts("get_params returns a string") { topic.get_params }.is_a?(String)
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              asserts("handle_data") { topic.handle_data "127.0.0.1:2302\n127.0.0.1:2305" }.same_elements ["127.0.0.1:2302", "127.0.0.1:2305"]
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              asserts("to_hash") { topic.handle_data "127.0.0.1:2302\n127.0.0.1:2305" }.is_a?(Hash)
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,27 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'teststrap'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'ostruct'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            context "Options" do
         
     | 
| 
      
 5 
     | 
    
         
            +
              context "Parser" do
         
     | 
| 
      
 6 
     | 
    
         
            +
                setup { GamespyQuery::Options }
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                asserts("Default Params") { topic.parse([]) }.raises SystemExit
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                asserts("version") { topic.parse(["--version"]) }.raises SystemExit #.equals 0
         
     | 
| 
      
 11 
     | 
    
         
            +
                asserts("help") { topic.parse(["--help"]) }.raises SystemExit #.equals 0
         
     | 
| 
      
 12 
     | 
    
         
            +
                                                                                    #asserts("no-verbose") { topic.parse([]).options.verbose? }.equals false
         
     | 
| 
      
 13 
     | 
    
         
            +
                asserts("verbose") { topic.parse(["-v"]) }.raises SystemExit
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                context "Commands" do
         
     | 
| 
      
 16 
     | 
    
         
            +
                  asserts("sync") { topic.parse(["sync", "127.0.0.1:2302"]) }.nil
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                context "Master" do
         
     | 
| 
      
 20 
     | 
    
         
            +
                  context "Commands" do
         
     | 
| 
      
 21 
     | 
    
         
            +
                    asserts("list") { any_instance_of(GamespyQuery::Master) { |c| mock(c).read { "Test data" } }; topic.parse(["master", "list"]) }.nil
         
     | 
| 
      
 22 
     | 
    
         
            +
                    asserts("process") { any_instance_of(GamespyQuery::Master) { |c| mock(c).process { "Test data" } }; topic.parse(["master", "process"]) }.nil
         
     | 
| 
      
 23 
     | 
    
         
            +
                    asserts("process_master") { mock(GamespyQuery::SocketMaster).process_master("arma2oapc", "") { "Test data" }; topic.parse(["master", "process_master"]) }.nil
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,47 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'teststrap'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            context "Parser" do
         
     | 
| 
      
 4 
     | 
    
         
            +
              DEFAULT_DATA = [
         
     | 
| 
      
 5 
     | 
    
         
            +
                "\x00\x04\x05\x06\asplitnum\x00\x00\x00gamever\x001.59.79548\x00hostname\x00-=WASP=- Warfare CO (Prime)\x00mapname\x00takistan\x00gametype\x00CTI\x00numplayers\x0046\x00numteams\x000\x00maxplayers\x0054\x00gamemode\x00openplaying\x00timelimit\x0015\x00password\x000\x00param1\x000\x00param2\x000\x00currentVersion\x00159\x00requiredVersion\x00159\x00mod\x00Arma 2;Arma 2: Operation Arrowhead;Arma 2: British Armed Forces (Lite);Arma 2: Private Military Company (Lite)\x00equalModRequired\x000\x00gameState\x007\x00dedicated\x001\x00platform\x00linux\x00language\x0065545\x00difficulty\x002\x00mission\x00[54] Warfare BE V2.069 - Takistan\x00gamename\x00arma2oapc\x00sv_battleye\x001\x00verifySignatures\x001\x00signatures\x00bi;WarFXPE;GLT_ADDONS;warFXsunlight;TGW_Zeroing;trsm_oa;soa110;SMK;jsrsfa;v2ECL;CBA_v0-7-3;ZEU_test;TRSM;TracersWAR;bi2;VopSound;cba_b158;acex_sm;WarFXLighting;gdtmod_plants2;TGW_Thermal;cba_b151;ASR;...\x00modhash\x00PMC v. 1.01;BAF v. 1.02;da39a3ee5e6b4b0d3255bfef95601890afd80709;\x00hash\x00f8c806b971abb935747da3900cab55599c0bc60c\x00\x00\x01player_\x00\x00Skilllos\x00Cool Hand\x00Viktor Reznov\x00Alchemist(HUN)\x00General Heinkel [GER]\x00Max\x00\xD0\x94\xD1\x80\xD0\xBE\xD0\xBD\xD0\xB3\xD0\xBE\x00letchik\x00Angerbode\x00TiDus\x00DrHat\x00Kermit\x00[UaS] snicka\x00Wedel\x00Dnalir [NOR]\x00Davor\x00Cateye(GER)\x00Bamse\x00Jorj\x00POMbI4\x00Daredevil\x00DrSMOKE\x00Vollpfosten\x00Maddin\x00-=[LRRP]=-Sentinel(NL)\x00Husky\x00Scumhawk\x00Bone-CH\x00Jarzah\x00I./KG40_Razor\x00Cpl.Bouiss\x00nAh\x00Tremor\x00Diamm\x00TUROCK_(FR-VODKA)\x00j.moss\x00FOKS\x00Phoenix\x00AfterShave\x00Coupe\x00Mitradis\x00Daniel\x00Flanker\x00Sig\x00_DPVf_hinkel\x00Random Sequence\x00\x00team_\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ru\x00SO\x00\x00\x00\x00\x00\x00\x00\x00TF\x00\x00\x00\x00UTGPrivates\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00score_\x00\x00",
         
     | 
| 
      
 6 
     | 
    
         
            +
                "\x00\x04\x05\x06\asplitnum\x00\x81\x01score_\x00\x00371\x00314\x00335\x0038\x00224\x0036\x0096\x0083\x0042\x00237\x0037\x00137\x00212\x0082\x0041\x0042\x0035\x0073\x0094\x0028\x00127\x0045\x00107\x0030\x00-2\x0083\x002\x0026\x0023\x0034\x0010\x0056\x0016\x006\x0036\x001\x000\x001\x000\x003\x000\x002\x001\x000\x0020\x000\x00\x00deaths_\x00\x0024\x0017\x0018\x0015\x0028\x0025\x0027\x0029\x007\x0010\x008\x0011\x008\x0011\x0016\x0015\x0016\x006\x0010\x0023\x0038\x003\x0017\x003\x002\x007\x002\x001\x004\x0014\x002\x004\x002\x000\x0019\x005\x001\x004\x004\x000\x003\x002\x000\x000\x008\x000\x00\x00\x00\x02\x00"
         
     | 
| 
      
 7 
     | 
    
         
            +
              ]
         
     | 
| 
      
 8 
     | 
    
         
            +
              setup { GamespyQuery::Parser.new(DEFAULT_DATA) }
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              asserts("Packets assigned") { topic.packets }.same_elements DEFAULT_DATA
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              context "Parsed Output" do
         
     | 
| 
      
 13 
     | 
    
         
            +
                setup { topic.parse }
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                context "Game Data" do
         
     | 
| 
      
 16 
     | 
    
         
            +
                  setup { topic[:game] }
         
     | 
| 
      
 17 
     | 
    
         
            +
                  denies("Game data") { topic }.empty
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  asserts("gamever") { topic["gamever"] }.equals "1.59.79548"
         
     | 
| 
      
 20 
     | 
    
         
            +
                  asserts("sv_battleye") { topic["sv_battleye"] }.equals "1"
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                context "Players data" do
         
     | 
| 
      
 24 
     | 
    
         
            +
                  setup { topic[:players] }
         
     | 
| 
      
 25 
     | 
    
         
            +
                  denies("Players data") { topic }.empty
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  denies("Names") { topic[:names] }.empty
         
     | 
| 
      
 28 
     | 
    
         
            +
                  denies("Teams") { topic[:teams] }.empty
         
     | 
| 
      
 29 
     | 
    
         
            +
                  denies("Scores") { topic[:scores] }.empty
         
     | 
| 
      
 30 
     | 
    
         
            +
                  denies("Deaths") { topic[:deaths] }.empty
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  context "First element" do
         
     | 
| 
      
 33 
     | 
    
         
            +
                    asserts("Name") { topic[:names][0] }.equals "Skilllos"
         
     | 
| 
      
 34 
     | 
    
         
            +
                    asserts("Team") { topic[:teams][0] }.equals ""
         
     | 
| 
      
 35 
     | 
    
         
            +
                    asserts("Score") { topic[:scores][0] }.equals 371
         
     | 
| 
      
 36 
     | 
    
         
            +
                    asserts("Deaths") { topic[:deaths][0] }.equals 24
         
     | 
| 
      
 37 
     | 
    
         
            +
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  context "Tenth element" do
         
     | 
| 
      
 40 
     | 
    
         
            +
                    asserts("Name") { topic[:names][10] }.equals "DrHat"
         
     | 
| 
      
 41 
     | 
    
         
            +
                    asserts("Team") { topic[:teams][10] }.equals ""
         
     | 
| 
      
 42 
     | 
    
         
            +
                    asserts("Score") { topic[:scores][10] }.equals 37
         
     | 
| 
      
 43 
     | 
    
         
            +
                    asserts("Deaths") { topic[:deaths][10] }.equals 8
         
     | 
| 
      
 44 
     | 
    
         
            +
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'teststrap'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            context "SocketMaster" do
         
     | 
| 
      
 4 
     | 
    
         
            +
              DEFAULT_ADDRS = [
         
     | 
| 
      
 5 
     | 
    
         
            +
                  "127.0.0.1:2302",
         
     | 
| 
      
 6 
     | 
    
         
            +
                  "127.0.0.1:2306"
         
     | 
| 
      
 7 
     | 
    
         
            +
              ]
         
     | 
| 
      
 8 
     | 
    
         
            +
              setup { GamespyQuery::SocketMaster }
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              context "Instance" do
         
     | 
| 
      
 11 
     | 
    
         
            +
                setup { topic.new DEFAULT_ADDRS }
         
     | 
| 
      
 12 
     | 
    
         
            +
                asserts("Process") { topic.process! }.size 2
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              asserts("Process master") { topic.process_master }.is_a?(Array)
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,73 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'teststrap'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            context "Socket" do
         
     | 
| 
      
 4 
     | 
    
         
            +
              DEFAULT_DATA = [
         
     | 
| 
      
 5 
     | 
    
         
            +
                  "\x00\x04\x05\x06\asplitnum\x00\x00\x00gamever\x001.59.79548\x00hostname\x00-=WASP=- Warfare CO (Prime)\x00mapname\x00takistan\x00gametype\x00CTI\x00numplayers\x0046\x00numteams\x000\x00maxplayers\x0054\x00gamemode\x00openplaying\x00timelimit\x0015\x00password\x000\x00param1\x000\x00param2\x000\x00currentVersion\x00159\x00requiredVersion\x00159\x00mod\x00Arma 2;Arma 2: Operation Arrowhead;Arma 2: British Armed Forces (Lite);Arma 2: Private Military Company (Lite)\x00equalModRequired\x000\x00gameState\x007\x00dedicated\x001\x00platform\x00linux\x00language\x0065545\x00difficulty\x002\x00mission\x00[54] Warfare BE V2.069 - Takistan\x00gamename\x00arma2oapc\x00sv_battleye\x001\x00verifySignatures\x001\x00signatures\x00bi;WarFXPE;GLT_ADDONS;warFXsunlight;TGW_Zeroing;trsm_oa;soa110;SMK;jsrsfa;v2ECL;CBA_v0-7-3;ZEU_test;TRSM;TracersWAR;bi2;VopSound;cba_b158;acex_sm;WarFXLighting;gdtmod_plants2;TGW_Thermal;cba_b151;ASR;...\x00modhash\x00PMC v. 1.01;BAF v. 1.02;da39a3ee5e6b4b0d3255bfef95601890afd80709;\x00hash\x00f8c806b971abb935747da3900cab55599c0bc60c\x00\x00\x01player_\x00\x00Skilllos\x00Cool Hand\x00Viktor Reznov\x00Alchemist(HUN)\x00General Heinkel [GER]\x00Max\x00\xD0\x94\xD1\x80\xD0\xBE\xD0\xBD\xD0\xB3\xD0\xBE\x00letchik\x00Angerbode\x00TiDus\x00DrHat\x00Kermit\x00[UaS] snicka\x00Wedel\x00Dnalir [NOR]\x00Davor\x00Cateye(GER)\x00Bamse\x00Jorj\x00POMbI4\x00Daredevil\x00DrSMOKE\x00Vollpfosten\x00Maddin\x00-=[LRRP]=-Sentinel(NL)\x00Husky\x00Scumhawk\x00Bone-CH\x00Jarzah\x00I./KG40_Razor\x00Cpl.Bouiss\x00nAh\x00Tremor\x00Diamm\x00TUROCK_(FR-VODKA)\x00j.moss\x00FOKS\x00Phoenix\x00AfterShave\x00Coupe\x00Mitradis\x00Daniel\x00Flanker\x00Sig\x00_DPVf_hinkel\x00Random Sequence\x00\x00team_\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ru\x00SO\x00\x00\x00\x00\x00\x00\x00\x00TF\x00\x00\x00\x00UTGPrivates\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00score_\x00\x00",
         
     | 
| 
      
 6 
     | 
    
         
            +
                  "\x00\x04\x05\x06\asplitnum\x00\x81\x01score_\x00\x00371\x00314\x00335\x0038\x00224\x0036\x0096\x0083\x0042\x00237\x0037\x00137\x00212\x0082\x0041\x0042\x0035\x0073\x0094\x0028\x00127\x0045\x00107\x0030\x00-2\x0083\x002\x0026\x0023\x0034\x0010\x0056\x0016\x006\x0036\x001\x000\x001\x000\x003\x000\x002\x001\x000\x0020\x000\x00\x00deaths_\x00\x0024\x0017\x0018\x0015\x0028\x0025\x0027\x0029\x007\x0010\x008\x0011\x008\x0011\x0016\x0015\x0016\x006\x0010\x0023\x0038\x003\x0017\x003\x002\x007\x002\x001\x004\x0014\x002\x004\x002\x000\x0019\x005\x001\x004\x004\x000\x003\x002\x000\x000\x008\x000\x00\x00\x00\x02\x00"
         
     | 
| 
      
 7 
     | 
    
         
            +
              ]
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              setup { GamespyQuery::Socket.new "127.0.0.1:2302" }
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              denies("Confirm valid") { topic.valid? }
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              asserts("handle_write") { topic.state = 0; topic.handle_write }.nil
         
     | 
| 
      
 14 
     | 
    
         
            +
              asserts("handle_read") { topic.state = 1; topic.handle_read }.nil
         
     | 
| 
      
 15 
     | 
    
         
            +
              asserts("handle_write") { topic.state = 2; topic.handle_write }.nil
         
     | 
| 
      
 16 
     | 
    
         
            +
              asserts("handle_read") { topic.state = 3; topic.handle_read }.nil
         
     | 
| 
      
 17 
     | 
    
         
            +
              asserts("handle_read") { topic.state = 4; topic.handle_read }.nil
         
     | 
| 
      
 18 
     | 
    
         
            +
              asserts("Set state 5, confirm valid") { topic.state = 5; topic.valid? }
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              denies("handle_write") { topic.state = 1; topic.handle_write }
         
     | 
| 
      
 21 
     | 
    
         
            +
              denies("handle_read") { topic.state = 0; topic.handle_read }
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              # TODO
         
     | 
| 
      
 25 
     | 
    
         
            +
              #asserts("handle_exc") { topic.handle_exc }
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              asserts("handle_splitnum") { topic.handle_splitnum "" }
         
     | 
| 
      
 28 
     | 
    
         
            +
              asserts("handle_challenge") { topic.handle_challenge "" }
         
     | 
| 
      
 29 
     | 
    
         
            +
              asserts("handle_state (Write)") { topic.state = 0; topic.handle_state }
         
     | 
| 
      
 30 
     | 
    
         
            +
              denies("handle_state (Read)") { topic.state = 1; topic.handle_state }
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              asserts("fetch") { topic.fetch }.nil
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              asserts("sync") { topic.sync }
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              context "Sync custom" do
         
     | 
| 
      
 37 
     | 
    
         
            +
                setup { topic.sync(DEFAULT_DATA) }
         
     | 
| 
      
 38 
     | 
    
         
            +
                asserts("Is a hash") { topic }.is_a?(Hash)
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                context "Players" do
         
     | 
| 
      
 41 
     | 
    
         
            +
                  setup { topic["players"] }
         
     | 
| 
      
 42 
     | 
    
         
            +
                  asserts("Players defined") { topic }.is_a?(Hash)
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                  context "Player 0" do
         
     | 
| 
      
 45 
     | 
    
         
            +
                    setup { topic[0] }
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                    asserts("name") { topic[:name] }.equals "-=[LRRP]=-Sentinel(NL)"
         
     | 
| 
      
 48 
     | 
    
         
            +
                    asserts("team") { topic[:team] }.equals ""
         
     | 
| 
      
 49 
     | 
    
         
            +
                    asserts("score") { topic[:score] }.equals -2
         
     | 
| 
      
 50 
     | 
    
         
            +
                    asserts("deaths") { topic[:deaths] }.equals 2
         
     | 
| 
      
 51 
     | 
    
         
            +
                  end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                  context "Player 10" do
         
     | 
| 
      
 54 
     | 
    
         
            +
                    setup { topic[10] }
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                    asserts("name") { topic[:name] }.equals "Coupe"
         
     | 
| 
      
 57 
     | 
    
         
            +
                    asserts("team") { topic[:team] }.equals ""
         
     | 
| 
      
 58 
     | 
    
         
            +
                    asserts("score") { topic[:score] }.equals 3
         
     | 
| 
      
 59 
     | 
    
         
            +
                    asserts("deaths") { topic[:deaths] }.equals 0
         
     | 
| 
      
 60 
     | 
    
         
            +
                  end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                end
         
     | 
| 
      
 63 
     | 
    
         
            +
                asserts("Hostname defined") { topic["hostname"] }.is_a?(String)
         
     | 
| 
      
 64 
     | 
    
         
            +
                asserts("Hostname") { topic["hostname"] }.equals "-=WASP=- Warfare CO (Prime)"
         
     | 
| 
      
 65 
     | 
    
         
            +
                asserts("Modhash") { topic["modhash"] }.equals "PMC v. 1.01;BAF v. 1.02;da39a3ee5e6b4b0d3255bfef95601890afd80709;"
         
     | 
| 
      
 66 
     | 
    
         
            +
              end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
              # TODO
         
     | 
| 
      
 69 
     | 
    
         
            +
              context "MultiSocket" do
         
     | 
| 
      
 70 
     | 
    
         
            +
                setup { GamespyQuery::MultiSocket }
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
              end
         
     | 
| 
      
 73 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,20 +1,54 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: gamespy_query
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
       5 
     | 
    
         
            -
              prerelease: 
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.2.0pre
         
     | 
| 
      
 5 
     | 
    
         
            +
              prerelease: 5
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
       8 
8 
     | 
    
         
             
            - Patrick Roza
         
     | 
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2012- 
     | 
| 
       13 
     | 
    
         
            -
            dependencies: 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2012-03-07 00:00:00.000000000 Z
         
     | 
| 
      
 13 
     | 
    
         
            +
            dependencies:
         
     | 
| 
      
 14 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 15 
     | 
    
         
            +
              name: cri
         
     | 
| 
      
 16 
     | 
    
         
            +
              requirement: &7261020 !ruby/object:Gem::Requirement
         
     | 
| 
      
 17 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 18 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 19 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 20 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 21 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 22 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 23 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 24 
     | 
    
         
            +
              version_requirements: *7261020
         
     | 
| 
      
 25 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 26 
     | 
    
         
            +
              name: riot
         
     | 
| 
      
 27 
     | 
    
         
            +
              requirement: &7260060 !ruby/object:Gem::Requirement
         
     | 
| 
      
 28 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 29 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 30 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 31 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 32 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 33 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 34 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 35 
     | 
    
         
            +
              version_requirements: *7260060
         
     | 
| 
      
 36 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 37 
     | 
    
         
            +
              name: yard
         
     | 
| 
      
 38 
     | 
    
         
            +
              requirement: &7259340 !ruby/object:Gem::Requirement
         
     | 
| 
      
 39 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 40 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 41 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 42 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 43 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 44 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 45 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 46 
     | 
    
         
            +
              version_requirements: *7259340
         
     | 
| 
       14 
47 
     | 
    
         
             
            description: ''
         
     | 
| 
       15 
48 
     | 
    
         
             
            email:
         
     | 
| 
       16 
49 
     | 
    
         
             
            - sb@dev-heaven.net
         
     | 
| 
       17 
     | 
    
         
            -
            executables: 
     | 
| 
      
 50 
     | 
    
         
            +
            executables:
         
     | 
| 
      
 51 
     | 
    
         
            +
            - gamespy_query
         
     | 
| 
       18 
52 
     | 
    
         
             
            extensions: []
         
     | 
| 
       19 
53 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       20 
54 
     | 
    
         
             
            files:
         
     | 
| 
         @@ -22,14 +56,23 @@ files: 
     | 
|
| 
       22 
56 
     | 
    
         
             
            - Gemfile
         
     | 
| 
       23 
57 
     | 
    
         
             
            - README.md
         
     | 
| 
       24 
58 
     | 
    
         
             
            - Rakefile
         
     | 
| 
      
 59 
     | 
    
         
            +
            - bin/gamespy_query
         
     | 
| 
       25 
60 
     | 
    
         
             
            - gamespy_query.gemspec
         
     | 
| 
       26 
61 
     | 
    
         
             
            - lib/gamespy_query.rb
         
     | 
| 
       27 
62 
     | 
    
         
             
            - lib/gamespy_query/base.rb
         
     | 
| 
       28 
63 
     | 
    
         
             
            - lib/gamespy_query/master.rb
         
     | 
| 
      
 64 
     | 
    
         
            +
            - lib/gamespy_query/options.rb
         
     | 
| 
       29 
65 
     | 
    
         
             
            - lib/gamespy_query/parser.rb
         
     | 
| 
       30 
66 
     | 
    
         
             
            - lib/gamespy_query/socket.rb
         
     | 
| 
       31 
67 
     | 
    
         
             
            - lib/gamespy_query/socket_master.rb
         
     | 
| 
       32 
68 
     | 
    
         
             
            - lib/gamespy_query/version.rb
         
     | 
| 
      
 69 
     | 
    
         
            +
            - test/teststrap.rb
         
     | 
| 
      
 70 
     | 
    
         
            +
            - test/units/base_test.rb
         
     | 
| 
      
 71 
     | 
    
         
            +
            - test/units/master_test.rb
         
     | 
| 
      
 72 
     | 
    
         
            +
            - test/units/options_test.rb
         
     | 
| 
      
 73 
     | 
    
         
            +
            - test/units/parser_test.rb
         
     | 
| 
      
 74 
     | 
    
         
            +
            - test/units/socket_master_test.rb
         
     | 
| 
      
 75 
     | 
    
         
            +
            - test/units/socket_test.rb
         
     | 
| 
       33 
76 
     | 
    
         
             
            homepage: http://dev-heaven.net
         
     | 
| 
       34 
77 
     | 
    
         
             
            licenses: []
         
     | 
| 
       35 
78 
     | 
    
         
             
            post_install_message: 
         
     | 
| 
         @@ -45,9 +88,9 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       45 
88 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       46 
89 
     | 
    
         
             
              none: false
         
     | 
| 
       47 
90 
     | 
    
         
             
              requirements:
         
     | 
| 
       48 
     | 
    
         
            -
              - - ! ' 
     | 
| 
      
 91 
     | 
    
         
            +
              - - ! '>'
         
     | 
| 
       49 
92 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       50 
     | 
    
         
            -
                  version:  
     | 
| 
      
 93 
     | 
    
         
            +
                  version: 1.3.1
         
     | 
| 
       51 
94 
     | 
    
         
             
            requirements: []
         
     | 
| 
       52 
95 
     | 
    
         
             
            rubyforge_project: gamespy_query
         
     | 
| 
       53 
96 
     | 
    
         
             
            rubygems_version: 1.8.15
         
     | 
| 
         @@ -55,3 +98,4 @@ signing_key: 
     | 
|
| 
       55 
98 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
       56 
99 
     | 
    
         
             
            summary: Ruby library for accessing Gamespy services
         
     | 
| 
       57 
100 
     | 
    
         
             
            test_files: []
         
     | 
| 
      
 101 
     | 
    
         
            +
            has_rdoc: 
         
     |