Class: Keep::Locator
- Inherits:
-
Object
- Object
- Keep::Locator
- Defined in:
- lib/arvados/keep.rb
Constant Summary collapse
- LOCATOR_REGEXP =
/^([[:xdigit:]]{32})(\+([[:digit:]]+))?((\+([[:upper:]][[:alnum:]@_-]*))+)?\z/
Instance Attribute Summary collapse
-
#hash ⇒ Object
readonly
A Locator is used to parse and manipulate Keep locator strings.
-
#hints ⇒ Object
readonly
A Locator is used to parse and manipulate Keep locator strings.
-
#size ⇒ Object
readonly
A Locator is used to parse and manipulate Keep locator strings.
Class Method Summary collapse
-
.parse(tok) ⇒ Object
Locator.parse returns a Locator object parsed from the string tok.
-
.parse!(tok) ⇒ Object
Locator.parse! returns a Locator object parsed from the string tok, raising an ArgumentError if tok cannot be parsed.
- .valid?(tok) ⇒ Boolean
Instance Method Summary collapse
-
#initialize(hasharg, sizearg, hintarg) ⇒ Locator
constructor
A new instance of Locator.
-
#signature ⇒ Object
Returns the signature hint supplied with this locator, or nil if the locator was not signed.
- #strip_hints ⇒ Object
- #strip_hints! ⇒ Object
- #to_s ⇒ Object
-
#without_signature ⇒ Object
Returns an unsigned Locator.
Constructor Details
#initialize(hasharg, sizearg, hintarg) ⇒ Locator
Returns a new instance of Locator.
27 28 29 30 31 |
# File 'lib/arvados/keep.rb', line 27 def initialize(hasharg, sizearg, hintarg) @hash = hasharg @size = sizearg @hints = hintarg end |
Instance Attribute Details
#hash ⇒ Object (readonly)
A Locator is used to parse and manipulate Keep locator strings.
Locators obey the following syntax:
locator ::= address hint*
address ::= digest size-hint
digest ::= <32 hexadecimal digits>
size-hint ::= "+" [0-9]+
hint ::= "+" hint-type hint-content
hint-type ::= [A-Z]
hint-content ::= [A-Za-z0-9@_-]+
Individual hints may have their own required format:
sign-hint ::= "+A" <40 lowercase hex digits> "@" sign-timestamp
sign-timestamp ::= <8 lowercase hex digits>
23 24 25 |
# File 'lib/arvados/keep.rb', line 23 def hash @hash end |
#hints ⇒ Object (readonly)
A Locator is used to parse and manipulate Keep locator strings.
Locators obey the following syntax:
locator ::= address hint*
address ::= digest size-hint
digest ::= <32 hexadecimal digits>
size-hint ::= "+" [0-9]+
hint ::= "+" hint-type hint-content
hint-type ::= [A-Z]
hint-content ::= [A-Za-z0-9@_-]+
Individual hints may have their own required format:
sign-hint ::= "+A" <40 lowercase hex digits> "@" sign-timestamp
sign-timestamp ::= <8 lowercase hex digits>
23 24 25 |
# File 'lib/arvados/keep.rb', line 23 def hints @hints end |
#size ⇒ Object (readonly)
A Locator is used to parse and manipulate Keep locator strings.
Locators obey the following syntax:
locator ::= address hint*
address ::= digest size-hint
digest ::= <32 hexadecimal digits>
size-hint ::= "+" [0-9]+
hint ::= "+" hint-type hint-content
hint-type ::= [A-Z]
hint-content ::= [A-Za-z0-9@_-]+
Individual hints may have their own required format:
sign-hint ::= "+A" <40 lowercase hex digits> "@" sign-timestamp
sign-timestamp ::= <8 lowercase hex digits>
23 24 25 |
# File 'lib/arvados/keep.rb', line 23 def size @size end |
Class Method Details
.parse(tok) ⇒ Object
Locator.parse returns a Locator object parsed from the string tok. Returns nil if tok could not be parsed as a valid locator.
39 40 41 42 43 44 45 |
# File 'lib/arvados/keep.rb', line 39 def self.parse(tok) begin Locator.parse!(tok) rescue ArgumentError nil end end |
.parse!(tok) ⇒ Object
Locator.parse! returns a Locator object parsed from the string tok, raising an ArgumentError if tok cannot be parsed.
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/arvados/keep.rb', line 49 def self.parse!(tok) if tok.nil? or tok.empty? raise ArgumentError.new "locator is nil or empty" end m = LOCATOR_REGEXP.match(tok) unless m raise ArgumentError.new "not a valid locator #{tok}" end tokhash, _, toksize, _, _, trailer = m[1..6] tokhints = [] if trailer trailer.split('+').each do |hint| if hint =~ /^[[:upper:]][[:alnum:]@_-]*$/ tokhints.push(hint) else raise ArgumentError.new "invalid hint #{hint}" end end end Locator.new(tokhash, toksize, tokhints) end |
.valid?(tok) ⇒ Boolean
33 34 35 |
# File 'lib/arvados/keep.rb', line 33 def self.valid? tok !!(LOCATOR_REGEXP.match tok) end |
Instance Method Details
#signature ⇒ Object
Returns the signature hint supplied with this locator, or nil if the locator was not signed.
76 77 78 |
# File 'lib/arvados/keep.rb', line 76 def signature @hints.grep(/^A/).first end |
#strip_hints ⇒ Object
85 86 87 |
# File 'lib/arvados/keep.rb', line 85 def strip_hints Locator.new(@hash, @size, []) end |
#strip_hints! ⇒ Object
89 90 91 92 |
# File 'lib/arvados/keep.rb', line 89 def strip_hints! @hints = [] self end |
#to_s ⇒ Object
94 95 96 97 98 99 100 |
# File 'lib/arvados/keep.rb', line 94 def to_s if @size [ @hash, @size, *@hints ].join('+') else [ @hash, *@hints ].join('+') end end |