Module: Shamu::Entities::OpaqueId
- Defined in:
- lib/shamu/entities/opaque_id.rb
Overview
A collection of helper methods for building and reconstructing opaque entity ids. These ids can be used to uniquely reference a resource within the system without knowing the type or service.
See EntityLookupService for lookup up resources by opaque ID.
Constant Summary collapse
- PATTERN =
%r{\A[a-zA-Z0-9+/]+={0,3}\z}
- NUMERICAL =
%r{\A[0-9]+\z}
Class Method Summary collapse
-
.opaque_id(entity) ⇒ String
entity.
-
.opaque_id?(value) ⇒ Boolean
True if the given value is an opaque id.
-
.to_entity_path(opaque_id) ⇒ Array<[String, String]>
Decodes the id to it's EntityPath.
-
.to_model_id(opaque_id) ⇒ String, Integer
The encoded raw record id.
Class Method Details
.opaque_id(entity) ⇒ String
entity.
17 18 19 20 21 22 23 24 25 |
# File 'lib/shamu/entities/opaque_id.rb', line 17 def opaque_id( entity ) path = if entity.is_a?( String ) entity else Entity.compose_entity_path( [ entity ] ) end "#{ Base64.strict_encode64( path ).chomp( '=' ) }" end |
.opaque_id?(value) ⇒ Boolean
Returns true if the given value is an opaque id.
49 50 51 52 |
# File 'lib/shamu/entities/opaque_id.rb', line 49 def opaque_id?( value ) return unless value PATTERN =~ value && NUMERICAL !~ value end |
.to_entity_path(opaque_id) ⇒ Array<[String, String]>
Returns decodes the id to it's EntityPath.
38 39 40 41 42 43 44 45 |
# File 'lib/shamu/entities/opaque_id.rb', line 38 def to_entity_path( opaque_id ) return nil unless opaque_id && NUMERICAL !~ opaque_id id = opaque_id id += "=" * ( 4 - id.length % 4 ) if id.length % 4 > 0 Base64.strict_decode64( id ) end |
.to_model_id(opaque_id) ⇒ String, Integer
Returns the encoded raw record id.
28 29 30 31 32 33 34 35 |
# File 'lib/shamu/entities/opaque_id.rb', line 28 def to_model_id( opaque_id ) if path = to_entity_path( opaque_id ) path = EntityPath.decompose_entity_path( path ) path.first.last.to_model_id else opaque_id.to_model_id end end |