Module: Azure::Storage::Table::EdmType

Defined in:
table/lib/azure/storage/table/edmtype.rb

Class Method Summary collapse

Class Method Details

.deserialize_value(value, type) ⇒ Object

Public: Convert a serialized value into an typed object

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

Returns an typed object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'table/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) ⇒ Object

Public: Get the Edm type of an object

value - Object. An typed instance

Returns the Edm type as a String



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'table/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) ⇒ Object

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

value - String. The value to serialize.

Returns the serialized value



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'table/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) ⇒ Object

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

value - Object. An typed instance

Returns the Edm type as a String



63
64
65
66
67
68
69
70
71
72
73
74
# File 'table/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) ⇒ Object



128
129
130
131
# File 'table/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