5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/xively-rb/parsers/xml/key_defaults.rb', line 5
def from_xml(xml)
begin
xml = Nokogiri::XML(xml) do |config|
config.strict.nonet
end
hash = {}
hash["id"] = xml.at_xpath("//id").content if xml.at_xpath("//id")
hash["expires_at"] = xml.at_xpath("//expires-at").content if xml.at_xpath("//expires-at")
hash["key"] = xml.at_xpath("//api-key").content if xml.at_xpath("//api-key")
hash["label"] = xml.at_xpath("//label").content if xml.at_xpath("//label")
hash["user"] = xml.at_xpath("//user").content if xml.at_xpath("//user")
hash["private_access"] = xml.at_xpath("//private-access").content if xml.at_xpath("//private-access")
hash["permissions"] = xml.xpath("//key/permissions/permission").collect { |permission|
access_methods = permission.xpath("access-methods/access-method").collect { |method|
method.content.to_s.downcase
}
resources = permission.xpath("resources/resource").collect { |resource|
{ "feed_id" => resource.at_xpath("feed-id").content,
"datastream_id" => resource.at_xpath("datastream-id").content,
"datastream_trigger_id" => resource.at_xpath("datastream-trigger-id").content
}.delete_if_nil_value
}
{
"referer" => permission.at_xpath("referer").content,
"source_ip" => permission.at_xpath("source-ip").content,
"private_access" => permission.at_xpath("private-access").content,
"access_methods" => access_methods,
"resources" => resources
}.delete_if_nil_value
}
hash
rescue Nokogiri::SyntaxError => e
raise InvalidXMLError, e.message
end
end
|