Class: ZID

Inherits:
Object
  • Object
show all
Defined in:
lib/sixarm_ruby_zid/zid.rb

Class Method Summary collapse

Class Method Details

.generateObject

Generate a new ZID string.

Example:

string = ZID.generate
#=> "4bb88af57d4ddc224fecad688442423d"

Return: [String] A new ZID string



20
21
22
# File 'lib/sixarm_ruby_zid/zid.rb', line 20

def self.generate
  SecureRandom.hex
end

.parse(object) ⇒ Object

Parse any object to an ZID string.

This does these steps:

* Convert the object to a string by calling `#to_s`.
* Convert the string to lower case by calling `#downcase`.
* Delete any non-hex characters.
* Take the first 32 characters.

Example:

string = ZID.parse("***FFAD30A1-BE5E-B511-9ED8-976CAB0281B6***")
#=> "ffad30a1be5eb5119ed8976cab0281b6"

Return: [ZID] A new ZID

Raises:

  • (ArgumentError)


59
60
61
62
63
# File 'lib/sixarm_ruby_zid/zid.rb', line 59

def self.parse(object)
  zid = object.to_s.downcase.gsub(/[^0-9a-f]/,'')[0...32]
  raise ArgumentError if !ZID.valid?(zid)
  zid
end

.valid?(string) ⇒ Boolean

Is a given ZID string valid?

Example:

ZID.valid?("4bb88af57d4ddc224fecad688442423d") #=> true
ZID.valid?("hello") #=> false

Implemenation note: this method tests the string class, then size, then regex. The test of the string size comes before the regex because the test of the size runs faster, and is an optimization for fast-fail because when the string is not size 32, then the regex doesn’t need to be run.

Return: [true/false]

Returns:

  • (Boolean)


39
40
41
# File 'lib/sixarm_ruby_zid/zid.rb', line 39

def self.valid?(string)
  !!(string && string.is_a?(String) && string.size == 32 && string =~ /\A[0-9a-f]+\z/)
end