Advertisement
Azure

Xchat servlist_.conf parser

Aug 15th, 2011
417
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.52 KB | None | 0 0
  1. require 'active_support/core_ext/object/blank'
  2.  
  3. class String
  4.   def is_i?
  5.     !!(self =~ /^[-+]?[0-9]+$/)
  6.   end
  7. end
  8.  
  9.   class XchatServerlistParser
  10.   attr_accessor :filepath
  11.  
  12.   def initialize filepath
  13.   @filepath = filepath
  14.   end
  15.  
  16.   def parse! params={}
  17.     params = {
  18.       filepath: @filepath,
  19.       only_favorites: false
  20.     }.merge params
  21.  
  22.     network_count = 0
  23.     is_server = false
  24.     servers = [{}]
  25.  
  26.     file = open(filepath)
  27.     file.each {|line|
  28.       line.strip!
  29.       if line.empty?
  30.         network_count = network_count.next
  31.         servers[network_count] = {}
  32.         next
  33.       else
  34.         item = line.split("=")
  35.         if item[0] == "S"
  36.           if is_server == false
  37.             servers[network_count].merge Hash[*[item[0].to_sym].zip([])]
  38.             servers[network_count][:S] = [] << (item[1].is_i? ? item[1].to_i : item[1]);
  39.             #servers[network_count][:S] = [] << item[1];
  40.             is_server = true
  41.           else
  42.             servers[network_count][:S] << (item[1].is_i? ? item[1].to_i : item[1]);
  43.             #servers[network_count][:S] << item[1];
  44.           end
  45.         else
  46.           is_server = false
  47.           servers[network_count].merge Hash[*[item[0].to_sym].zip([])]
  48.           servers[network_count][item[0].to_sym] = (item[1].is_i? ? item[1].to_i : item[1]);
  49.           #servers[network_count][item[0].to_sym] = item[1];
  50.         end
  51.       end
  52.     }
  53.  
  54.     servers.delete_if {|item| params[:only_favorites] && item[:F] == 19 }
  55.  
  56.     return servers
  57.   end
  58.  
  59. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement