Class: Ole::Types::Clsid

Inherits:
String
  • Object
show all
Defined in:
lib/ole/types/base.rb

Overview

for VT_CLSID Unlike most of the other conversions, the Guid’s are serialized/deserialized by actually doing nothing! (eg, _load & _dump are null ops) Rather, its just a string with a different inspect string, and it includes a helper method for creating a Guid from that readable form (#format).

Constant Summary collapse

SIZE =
16
PACK =
'V v v CC C6'

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from String

#each_chunk

Class Method Details

.dump(guid) ⇒ Object



176
177
178
179
180
# File 'lib/ole/types/base.rb', line 176

def self.dump guid
	return 0.chr * SIZE unless guid
	# allow use of plain strings in place of guids.
	guid['-'] ? parse(guid) : guid
end

.load(str) ⇒ Object



172
173
174
# File 'lib/ole/types/base.rb', line 172

def self.load str
	new str.to_s
end

.parse(str) ⇒ Object

Raises:

  • (ArgumentError)


182
183
184
185
186
187
188
189
190
191
192
# File 'lib/ole/types/base.rb', line 182

def self.parse str
	vals = str.scan(/[a-f\d]+/i).map(&:hex)
	if vals.length == 5
		# this is pretty ugly
		vals[3] = ('%04x' % vals[3]).scan(/../).map(&:hex)
		vals[4] = ('%012x' % vals[4]).scan(/../).map(&:hex)
		guid = new vals.flatten.pack(PACK)
		return guid if guid.format.delete('{}') == str.downcase.delete('{}')
	end
	raise ArgumentError, 'invalid guid - %p' % str
end

Instance Method Details

#formatObject



194
195
196
# File 'lib/ole/types/base.rb', line 194

def format
	"%08x-%04x-%04x-%02x%02x-#{'%02x' * 6}" % unpack(PACK)
end

#inspectObject



198
199
200
# File 'lib/ole/types/base.rb', line 198

def inspect
	"#<#{self.class}:{#{format}}>"
end