lib/ob64.rb in ob64-0.1.0 vs lib/ob64.rb in ob64-0.2.0
- old
+ new
@@ -1,44 +1,90 @@
# frozen_string_literal: true
require_relative "ob64/version"
require_relative "ob64_ext"
+# Methods for base64-encoding and -decoding strings.
module Ob64
include LibBase64
extend LibBase64
module_function
+ # Returns the Base64-encoded version of +bin+.
+ # This method complies with RFC 4648.
+ # No line feeds are added.
+ #
+ # @param bin [String]
+ # @return [String]
def encode(bin)
__encode(bin)
end
+ # Returns the Base64-decoded version of +string+.
+ # This method complies with RFC 4648.
+ # ArgumentError is raised if +string+ is incorrectly padded or contains
+ # non-alphabet characters. Note that CR or LF are also rejected.
+ #
+ # @param string [String]
+ # @return [String]
+ # @raise [ArgumentError] if +string+ cannot be decoded
def decode(string)
__decode(string)
end
+ # Returns the Base64-encoded version of +bin+.
+ # This method complies with ``Base 64 Encoding with URL and Filename Safe
+ # Alphabet'' in RFC 4648.
+ # The alphabet uses '-' instead of '+' and '_' instead of '/'.
+ # Note that the result can still contain '='.
+ # You can remove the padding by setting +padding+ as false.
+ #
+ # @param bin [String]
+ # @param padding [Boolean] - if the output must be padded
+ # @return [String]
def urlsafe_encode(bin, padding: true)
string = __encode(bin)
string.chomp!("==") || string.chomp!("=") unless padding
string.tr!("+/", "-_")
string
end
+ # Returns the Base64-decoded version of +string+.
+ # This method complies with ``Base 64 Encoding with URL and Filename Safe
+ # Alphabet'' in RFC 4648.
+ # The alphabet uses '-' instead of '+' and '_' instead of '/'.
+ #
+ # The padding character is optional.
+ # This method accepts both correctly-padded and unpadded input.
+ # Note that it still rejects incorrectly-padded input.
+ #
+ # @param string [String]
+ # @return [String]
+ # @raise [ArgumentError] if +string+ cannot be decoded
def urlsafe_decode(string)
if !string.end_with?("=") && string.length % 4 != 0
string = string.ljust((string.length + 3) & ~3, "=")
string.tr!("-_", "+/")
else
string = string.tr("-_", "+/")
end
__decode(string)
end
+ # Returns the length of the Base64-encoded version of +bin+.
+ #
+ # @param bin [String]
+ # @param paddding [Boolean] - if the Base64-encoded version of +bin+ will be padded
+ # @return [Integer]
def encoded_length_of(bin, padding: true)
__encoded_length_of(bin, padding)
end
+ # Returns the length of the Base64-decoded version of +string+.
+ #
+ # @param string [String]
+ # @return [Integer]
def decoded_length_of(string)
__decoded_length_of(string)
end
end