class SteamCodec::KeyValues

About KeyValues => developer.valvesoftware.com/wiki/KeyValues Valve's implementation => github.com/ValveSoftware/source-sdk-2013/blob/master/mp/src/tier1/KeyValues.cpp SteamKit's implementation => github.com/SteamRE/SteamKit/blob/master/SteamKit2/SteamKit2/Types/KeyValue.cs

Public Class Methods

load(data) click to toggle source
# File lib/steam_codec/key_values.rb, line 102
def self.load(data)
    json = self::Parser::toJSON(data)
    self.loadFromJSON(json)
end
loadFromFile(file) click to toggle source
# File lib/steam_codec/key_values.rb, line 96
def self.loadFromFile(file)
    raise ArgumentError, "file must respond to :read" unless file.respond_to?(:read)
    json = self::Parser::toJSON(file.read)
    self.loadFromJSON(json)
end
loadFromJSON(json) click to toggle source
# File lib/steam_codec/key_values.rb, line 90
def self.loadFromJSON(json)
    JSON.parse(json, {:object_class => self})
rescue JSON::ParserError
    nil
end

Public Instance Methods

asArray(name, seperator = '_') click to toggle source
# File lib/steam_codec/key_values.rb, line 118
def asArray(name, seperator = '_')
    data = []
    counter = 0
    cname = name+seperator+counter.to_s
    data << self[cname] if key?(cname)
    counter += 1
    cname = name+seperator+counter.to_s
    while key?(cname) do
        data << self[cname]
        counter += 1
        cname = name+seperator+counter.to_s
    end
    data
end
get(path = '', seperator = '/') click to toggle source
# File lib/steam_codec/key_values.rb, line 107
def get(path = '', seperator = '/')
    escaped = Regexp.quote(seperator)
    fields = path.gsub(/^#{escaped}|#{escaped}$/, '').split(seperator)
    current = self
    fields.each do |name|
        return nil if not current.key?(name)
        current = current[name]
    end
    current
end