create a new result derived from ResultBase
# File lib/eaal/result.rb, line 102 def self.new(prefix, xml) classname = prefix + 'Result' members = [] values = {} if (xml/"eveapi/error").length > 0 error = (xml/"eveapi/error").first raise EAAL::Exception.raiseEveAPIException(error["code"], error.inner_html) end if (xml/"eveapi/result").length < 1 raise EAAL::Exception::EAALError.new("Unknown API error, no result element was found") end elements = (xml/"eveapi/result").first.containers elements.each {|element| el = EAAL::Result::ResultElement.parse_element(prefix, element) members << el.name if el.kind_of? EAAL::Rowset::RowsetBase values.merge!({el.name => el}) else values.merge!({el.name => el.value}) end } if not Object.const_defined? classname klass = Object.const_set(classname, Class.new(EAAL::Result::ResultBase)) klass.class_eval do attr_accessor(*members) end else klass = Object.const_get(classname) end result = klass.new result.request_time = (xml/"eveapi/currentTime").first.inner_html result.cached_until = (xml/"eveapi/cachedUntil").first.inner_html values.each { |key,value| # This class may have been set up with some missing keys if the original # response that trigged its creation didn't contain certain elements # For example, some CharacterSheets don't have an "allianceName" element # if the character isn't in an alliance. This adds them if they're missing if(!result.respond_to?("#{key}=".to_sym)) result.class.class_eval do attr_accessor key.to_sym end end result.send(key + "=", value) } result end