Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'active_support/core_ext/object/blank'
- class String
- def is_i?
- !!(self =~ /^[-+]?[0-9]+$/)
- end
- end
- class XchatServerlistParser
- attr_accessor :filepath
- def initialize filepath
- @filepath = filepath
- end
- def parse! params={}
- params = {
- filepath: @filepath,
- only_favorites: false
- }.merge params
- network_count = 0
- is_server = false
- servers = [{}]
- file = open(filepath)
- file.each {|line|
- line.strip!
- if line.empty?
- network_count = network_count.next
- servers[network_count] = {}
- next
- else
- item = line.split("=")
- if item[0] == "S"
- if is_server == false
- servers[network_count].merge Hash[*[item[0].to_sym].zip([])]
- servers[network_count][:S] = [] << (item[1].is_i? ? item[1].to_i : item[1]);
- #servers[network_count][:S] = [] << item[1];
- is_server = true
- else
- servers[network_count][:S] << (item[1].is_i? ? item[1].to_i : item[1]);
- #servers[network_count][:S] << item[1];
- end
- else
- is_server = false
- servers[network_count].merge Hash[*[item[0].to_sym].zip([])]
- servers[network_count][item[0].to_sym] = (item[1].is_i? ? item[1].to_i : item[1]);
- #servers[network_count][item[0].to_sym] = item[1];
- end
- end
- }
- servers.delete_if {|item| params[:only_favorites] && item[:F] == 19 }
- return servers
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement