module CompositePrimaryKeys::Utils

Public Class Methods

cpk_as_array?(value, pk_size) click to toggle source
# File lib/composite_primary_keys/composite_arrays.rb, line 75
def cpk_as_array?(value, pk_size)
  # We don't permit Array to be an element of CPK.
  value.is_a?(Array) && value.size == pk_size && value.none? { |item| item.is_a?(Array) }
end
cpk_as_string?(value, pk_size) click to toggle source
# File lib/composite_primary_keys/composite_arrays.rb, line 80
def cpk_as_string?(value, pk_size)
  value.is_a?(String) && value.count(ID_SEP) == pk_size - 1
end
escape_string_key(key) click to toggle source
# File lib/composite_primary_keys/composite_arrays.rb, line 62
def escape_string_key(key)
  key.gsub(Regexp.union(ESCAPE_CHAR, ID_SEP)) do |unsafe|
    "#{ESCAPE_CHAR}#{unsafe.ord.to_s(16).upcase}"
  end
end
unescape_string_key(key) click to toggle source
# File lib/composite_primary_keys/composite_arrays.rb, line 68
def unescape_string_key(key)
  key.gsub(/#{Regexp.escape(ESCAPE_CHAR)}[0-9a-fA-F]{2}/) do |escaped|
    char = escaped.slice(1, 2).hex.chr
    (char == ESCAPE_CHAR || char == ID_SEP) ? char : escaped
  end
end