lib/azure/table/serialization.rb in azure-0.5.0 vs lib/azure/table/serialization.rb in azure-0.6.0
- old
+ new
@@ -1,105 +1,108 @@
-#-------------------------------------------------------------------------
-# Copyright (c) Microsoft. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#--------------------------------------------------------------------------
-require 'azure/service/serialization'
-
-require 'azure/table/guid'
-require 'azure/table/edmtype'
-
-require "time"
-require "date"
-
-module Azure
- module Table
- module Serialization
- include Azure::Service::Serialization
-
- def self.hash_to_entry_xml(hash, id=nil, xml=Nokogiri::XML::Builder.new)
- entry_namespaces = {
- "xmlns" => "http://www.w3.org/2005/Atom",
- "xmlns:m" => "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata",
- "xmlns:d" => "http://schemas.microsoft.com/ado/2007/08/dataservices"
- }
-
- xml.entry entry_namespaces do |entry|
- id ? entry.id(id): entry.id
- entry.updated Time.now.xmlschema
- entry.title
- entry.author do |author|
- author.name
- end
- hash_to_content_xml(hash, entry)
- end
-
- xml
- end
-
- def self.hash_to_content_xml(hash, xml=Nokogiri::XML::Builder.new)
- xml.send("content", :type => "application/xml") do |content|
- content.send("m:properties") do |properties|
- hash.each do |key, val|
- type = Azure::Table::EdmType.property_type(val)
- attributes = {}
- attributes["m:type"] = type unless type.nil? || type.empty?
-
- if val.nil?
- attributes["m:null"] = "true"
- properties.send("d:#{key}", attributes)
- else
- properties.send("d:#{key}", Azure::Table::EdmType.serialize_value(type, val), attributes)
- end
- end
- end
- end
-
- xml
- end
-
- def self.entries_from_feed_xml(xml)
- xml = slopify(xml)
- expect_node("feed", xml)
-
- return nil unless (xml > "entry").any?
-
- results = []
-
- if (xml > "entry").count == 0
- results.push hash_from_entry_xml((xml > "entry"))
- else
- (xml > "entry").each do |entry|
- results.push hash_from_entry_xml(entry)
- end
- end
-
- results
- end
-
- def self.hash_from_entry_xml(xml)
- xml = slopify(xml)
- expect_node("entry", xml)
- result = {}
- result[:etag] = xml["etag"]
- result[:updated] = Time.parse((xml > "updated").text) if (xml > "updated").any?
- properties = {}
- if (xml > "content").any?
- (xml > "content").first.first_element_child.element_children.each do |prop|
- properties[prop.name] = prop.text != "" ? Azure::Table::EdmType.unserialize_query_value(prop.text, prop["m:type"]) : prop["null"] ? nil : ""
- end
- end
- result[:properties] = properties
- result
- end
- end
- end
+#-------------------------------------------------------------------------
+# # Copyright (c) Microsoft and contributors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#--------------------------------------------------------------------------
+require 'azure/service/serialization'
+
+require 'azure/table/guid'
+require 'azure/table/edmtype'
+
+require "time"
+require "date"
+
+module Azure
+ module Table
+ module Serialization
+ include Azure::Service::Serialization
+
+ def self.hash_to_entry_xml(hash, id=nil, xml=Nokogiri::XML::Builder.new(:encoding => "UTF-8"))
+ entry_namespaces = {
+ "xmlns" => "http://www.w3.org/2005/Atom",
+ "xmlns:m" => "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata",
+ "xmlns:d" => "http://schemas.microsoft.com/ado/2007/08/dataservices"
+ }
+
+ xml.entry entry_namespaces do |entry|
+ id ? entry.id(id): entry.id
+ entry.updated Time.now.xmlschema
+ entry.title
+ entry.author do |author|
+ author.name
+ end
+ hash_to_content_xml(hash, entry)
+ end
+
+ xml
+ end
+
+ def self.hash_to_content_xml(hash, xml=Nokogiri::XML::Builder.new(:encoding => "UTF-8"))
+ xml.send("content", :type => "application/xml") do |content|
+ content.send("m:properties") do |properties|
+ hash.each do |key, val|
+ key = key.encode("UTF-8") if key.is_a? String and !key.encoding.names.include?("BINARY")
+ val = val.encode("UTF-8") if val.is_a? String and !val.encoding.names.include?("BINARY")
+
+ type = Azure::Table::EdmType.property_type(val)
+ attributes = {}
+ attributes["m:type"] = type unless type.nil? || type.empty?
+
+ if val.nil?
+ attributes["m:null"] = "true"
+ properties.send("d:#{key}", attributes)
+ else
+ properties.send("d:#{key}", Azure::Table::EdmType.serialize_value(type, val), attributes)
+ end
+ end
+ end
+ end
+
+ xml
+ end
+
+ def self.entries_from_feed_xml(xml)
+ xml = slopify(xml)
+ expect_node("feed", xml)
+
+ return nil unless (xml > "entry").any?
+
+ results = []
+
+ if (xml > "entry").count == 0
+ results.push hash_from_entry_xml((xml > "entry"))
+ else
+ (xml > "entry").each do |entry|
+ results.push hash_from_entry_xml(entry)
+ end
+ end
+
+ results
+ end
+
+ def self.hash_from_entry_xml(xml)
+ xml = slopify(xml)
+ expect_node("entry", xml)
+ result = {}
+ result[:etag] = xml["etag"]
+ result[:updated] = Time.parse((xml > "updated").text) if (xml > "updated").any?
+ properties = {}
+ if (xml > "content").any?
+ (xml > "content").first.first_element_child.element_children.each do |prop|
+ properties[prop.name] = prop.text != "" ? Azure::Table::EdmType.unserialize_query_value(prop.text, prop["m:type"]) : prop["null"] ? nil : ""
+ end
+ end
+ result[:properties] = properties
+ result
+ end
+ end
+ end
end
\ No newline at end of file