Module: Azure::Table::EdmType

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

Class Method Summary collapse

Class Method Details

.property_type(value) ⇒ Object

Public: Get the Edm type of an object

value - Object. An typed instance

Returns the Edm type as a String



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/azure/table/edmtype.rb', line 29

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



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/azure/table/edmtype.rb', line 79

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



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/azure/table/edmtype.rb', line 55

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"
    value.xmlschema(7)
  when "Edm.Boolean"
    if value.nil?
      ''
    else
      value == true ? '1' : '0'
    end
  else
    value.to_s
  end
end

.unserialize_query_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



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/azure/table/edmtype.rb', line 107

def self.unserialize_query_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"
    /true/i === value
  when "Edm.Guid"
    GUID.new(value.to_s)
  when "Edm.Binary"
    Base64.decode64(value.to_s).force_encoding("BINARY")
  else
    value.to_s
  end
end