Class: ZID
- Inherits:
-
Object
- Object
- ZID
- Defined in:
- lib/sixarm_ruby_zid/zid.rb
Class Method Summary collapse
-
.generate ⇒ Object
Generate a new ZID string.
-
.parse(object) ⇒ Object
Parse any object to an ZID string.
-
.valid?(string) ⇒ Boolean
Is a given ZID string valid?.
Class Method Details
.generate ⇒ Object
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
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]
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 |