module Utilities
# For ease of comparing with pyExcelerator output values
# python seems to automatically decode to hex values
def hex_array_to_binary_string(array_of_hex_values)
[array_of_hex_values.collect {|h| [sprintf("%02x", h)]}.join].pack('H*')
end
def binary_string_to_hex_array(binary_string)
binary_string.unpack("H*")
end
def points_to_pixels(points)
points*(4.0/3)
end
def pixels_to_points(pixels)
pixels * (3.0 / 4)
end
def twips_to_pixels(twips)
twips / 15.0
end
def pixels_to_twips(pixels)
pixels * 15.0
end
def as_excel_date(date)
date = DateTime.parse(date.strftime("%c")) if date.is_a?(Time)
excel_date = (date - Date.civil(1899, 12, 31)).to_f
excel_date += 1 if excel_date > 59 # Add a day for Excel's missing leap day in 1900
excel_date
end
def mock_unicode_string(s)
[s.length, 0].pack('vC') + s
end
def as_boolean(input)
case input
when 1, true
true
when 0, false
false
else
raise "Can't convert #{input} from excel boolean!"
end
end
def as_numeric(input)
case input
when true, 1
1
when false, 0
0
else
raise "Can't convert #{input} to excel boolean!"
end
end
# Mimic python's "hex" function 0x00
def hex(value)
"0x" + value.to_s(16)
end
end
def String.random_alphanumeric(size=16)
s = ""
size.times { s << (i = Kernel.rand(62); i += ((i < 10) ? 48 : ((i < 36) ? 55 : 61 ))).chr }
s
end
class TrueClass
def to_i
1
end
end
class FalseClass
def to_i
0
end
end
include Utilities