class BinData::String
def _snapshot
def _snapshot # override to ensure length and optionally trim padding result = super if has_parameter?(:length) result = truncate_or_pad_to_length(result) end if get_parameter(:trim_padding) == true result = trim_padding(result) end result end
def deprecate!(params, old_key, new_key) #:nodoc:
def deprecate!(params, old_key, new_key) #:nodoc: if params.has_parameter?(old_key) warn ":#{old_key} is deprecated. Replacing with :#{new_key}" params[new_key] = params.delete(old_key) end end
def read_and_return_value(io)
def read_and_return_value(io) len = eval_parameter(:read_length) || eval_parameter(:length) || 0 io.readbytes(len) end
def sanitize_parameters!(params, sanitizer) #:nodoc:
def sanitize_parameters!(params, sanitizer) #:nodoc: deprecate!(params, :trim_value, :trim_padding) orig_sanitize_parameters!(params, sanitizer) end
def sanitize_parameters!(params, sanitizer)
def sanitize_parameters!(params, sanitizer) warn_replacement_parameter(params, :initial_length, :read_length) if params.has_parameter?(:pad_char) ch = params[:pad_char] params[:pad_char] = sanitized_pad_char(ch) end end
def sanitized_pad_char(ch)
def sanitized_pad_char(ch) result = ch.respond_to?(:chr) ? ch.chr : ch.to_s if result.length > 1 raise ArgumentError, ":pad_char must not contain more than 1 char" end result end
def sensible_default
def sensible_default "" end
def trim_padding(str)
def trim_padding(str) str.sub(/#{eval_parameter(:pad_char)}*$/, "") end
def truncate_or_pad_to_length(str)
def truncate_or_pad_to_length(str) len = eval_parameter(:length) || str.length if str.length == len str elsif str.length > len str.slice(0, len) else str + (eval_parameter(:pad_char) * (len - str.length)) end end
def value_to_binary_string(val)
def value_to_binary_string(val) truncate_or_pad_to_length(val) end