Module: Saro::Dat::Util
- Defined in:
- lib/saro/dat/util.rb
Constant Summary collapse
- U64_MAX =
0xFFFFFFFFFFFFFFFF
Class Method Summary collapse
- .decode_base64_url(s) ⇒ Object
- .decode_base64_url_str(s) ⇒ Object
- .encode_base64_url(s) ⇒ Object
- .encode_base64_url_str(s) ⇒ Object
- .parse_u64(s) ⇒ Object
- .parse_u64_hex(s) ⇒ Object
Class Method Details
.decode_base64_url(s) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/saro/dat/util.rb', line 49 def decode_base64_url(s) return "".b if s.nil? if s.is_a?(String) return "".b if s.empty? end s = s.to_s rem = s.bytesize % 4 s += ("=" * (4 - rem)) if rem > 0 begin Base64.urlsafe_decode64(s).b rescue ArgumentError => e raise Saro::Dat::Error.new(Saro::Dat::ErrorCode::CONFIG_ARGUMENT_INVALID, "not a valid base64url string", cause: e) end end |
.decode_base64_url_str(s) ⇒ Object
66 67 68 |
# File 'lib/saro/dat/util.rb', line 66 def decode_base64_url_str(s) decode_base64_url(s).force_encoding('utf-8') end |
.encode_base64_url(s) ⇒ Object
35 36 37 38 39 40 41 42 43 |
# File 'lib/saro/dat/util.rb', line 35 def encode_base64_url(s) return "".b if s.nil? if s.is_a?(String) return "".b if s.empty? enc = s.encoding s = s.encode('utf-8') unless enc == Encoding::BINARY || enc == Encoding::UTF_8 end Base64.urlsafe_encode64(s, padding: false).b end |
.encode_base64_url_str(s) ⇒ Object
45 46 47 |
# File 'lib/saro/dat/util.rb', line 45 def encode_base64_url_str(s) encode_base64_url(s).force_encoding('ascii') end |
.parse_u64(s) ⇒ Object
13 14 15 16 17 18 19 20 21 22 |
# File 'lib/saro/dat/util.rb', line 13 def parse_u64(s) unless s.is_a?(String) && s.match?(/\A[0-9]+\z/) raise Saro::Dat::Error.new(Saro::Dat::ErrorCode::CONFIG_ARGUMENT_INVALID, "not an unsigned decimal integer: #{s.inspect}") end v = s.to_i if v > U64_MAX raise Saro::Dat::Error.new(Saro::Dat::ErrorCode::CONFIG_ARGUMENT_INVALID, "exceeds u64: #{s.inspect}") end v end |
.parse_u64_hex(s) ⇒ Object
24 25 26 27 28 29 30 31 32 33 |
# File 'lib/saro/dat/util.rb', line 24 def parse_u64_hex(s) unless s.is_a?(String) && s.match?(/\A[0-9a-fA-F]+\z/) raise Saro::Dat::Error.new(Saro::Dat::ErrorCode::CONFIG_ARGUMENT_INVALID, "not an unsigned hex integer: #{s.inspect}") end v = s.to_i(16) if v > U64_MAX raise Saro::Dat::Error.new(Saro::Dat::ErrorCode::CONFIG_ARGUMENT_INVALID, "exceeds u64: #{s.inspect}") end v end |