class RSpec::Support::EncodedString

@private

Constants

MRI_UNICODE_UNKOWN_CHARACTER

Attributes

source_encoding[R]

Public Class Methods

new(string, encoding = nil) click to toggle source
# File lib/rspec/support/encoded_string.rb, line 8
def initialize(string, encoding = nil)
  @encoding = encoding
  @source_encoding = detect_source_encoding(string)
  @string = matching_encoding(string)
end

Public Instance Methods

<<(string) click to toggle source
# File lib/rspec/support/encoded_string.rb, line 20
def <<(string)
  @string << matching_encoding(string)
end
split(regex_or_string) click to toggle source
# File lib/rspec/support/encoded_string.rb, line 24
def split(regex_or_string)
  @string.split(matching_encoding(regex_or_string))
end
to_s() click to toggle source
# File lib/rspec/support/encoded_string.rb, line 28
def to_s
  @string
end
Also aliased as: to_str
to_str()
Alias for: to_s

Private Instance Methods

detect_source_encoding(string) click to toggle source
# File lib/rspec/support/encoded_string.rb, line 52
def detect_source_encoding(string)
  string.encoding
end
matching_encoding(string) click to toggle source
# File lib/rspec/support/encoded_string.rb, line 36
def matching_encoding(string)
  string.encode(@encoding)
rescue Encoding::UndefinedConversionError, Encoding::InvalidByteSequenceError
  normalize_missing(string.encode(@encoding, :invalid => :replace, :undef => :replace))
rescue Encoding::ConverterNotFoundError
  normalize_missing(string.force_encoding(@encoding).encode(:invalid => :replace))
end
normalize_missing(string) click to toggle source
# File lib/rspec/support/encoded_string.rb, line 44
def normalize_missing(string)
  if @encoding.to_s == "UTF-8"
    string.gsub(MRI_UNICODE_UNKOWN_CHARACTER.force_encoding(@encoding), "?")
  else
    string
  end
end