module Azure::Storage::Table::EdmType

Public Class Methods

deserialize_value(value, type) click to toggle source

Public: Convert a serialized value into an typed object

value - String. The Edm value type - String. The Edm datatype

Returns an typed object

# File lib/azure/storage/table/edmtype.rb, line 109
def self.deserialize_value(value, type)
  case type
  when "Edm.DateTime"
    Time.parse(value)
  when "Edm.Double"
    Float(value)
  when "Edm.Int32", "Edm.Int64"
    Integer(value)
  when "Edm.Boolean"
    value == true || value == "true" ? true : false
  when "Edm.Guid"
    GUID.new(value.to_s)
  when "Edm.Binary"
    Base64.decode64(value.to_s).force_encoding("BINARY")
  else
    value == "" ? nil : value.to_s
  end
end
property_type(value) click to toggle source

Public: Get the Edm type of an object

value - Object. An typed instance

Returns the Edm type as a String

# File lib/azure/storage/table/edmtype.rb, line 37
def self.property_type(value)
  case value
  when Float
    "Edm.Double"
  when Date, Time, DateTime
    "Edm.DateTime"
  when Integer
    value.abs < 2**31 ? "Edm.Int32" : "Edm.Int64"
  when TrueClass, FalseClass
    "Edm.Boolean"
  when GUID
    "Edm.Guid"
  when IO, File
    "Edm.Binary"
  when String
    value.encoding.names.include?("BINARY") ? "Edm.Binary" : ""
  else
    value.kind_of?(IO) ? "Edm.Binary" : ""
  end
end
serialize_query_value(value) click to toggle source

Public: Serializes EDM value into proper value to be used in query.

value - String. The value to serialize.

Returns the serialized value

# File lib/azure/storage/table/edmtype.rb, line 81
def self.serialize_query_value(value)
  case value
  when Date, Time, DateTime
    "datetime'#{value.iso8601}'"
  when TrueClass, FalseClass
    value ? "true" : "false"
  when Float, Integer
    value.abs < 2**31 ? value.to_s : value.to_s + "L"
  when GUID
    "guid'#{value.to_s}'"
  when IO, File
    "X'" + value.to_s.unpack("H*").join("") + "'"
  else
    if value != nil && value.encoding.names.include?("BINARY")
      "X'" + value.to_s.unpack("H*").join("") + "'"
    else
      # NULL also is treated as EdmType::STRING
      value.to_s.gsub("'", "''");
    end
  end
end
serialize_value(type, value) click to toggle source

Public: Get the value of a property in a serialized way

value - Object. An typed instance

Returns the Edm type as a String

# File lib/azure/storage/table/edmtype.rb, line 63
def self.serialize_value(type, value)
  case type
  when "Edm.Double", "Edm.Int32", "Edm.Int64", "Edm.Guid", "Edm.String", nil
    value.to_s
  when "Edm.Binary"
    Base64.encode64(value.to_s).chomp("\n")
  when "Edm.DateTime"
    to_edm_time(value)
  else
    value.to_s
  end
end
to_edm_time(value) click to toggle source
# File lib/azure/storage/table/edmtype.rb, line 128
def self.to_edm_time(value)
  date = value.is_a?(Time) ? value : Time.parse(value)
  date.utc.strftime("%Y-%m-%dT%H:%M:%S.%6N0Z")
end