Sha256: ac5a1513ba87279f649933ec5202bf28b8b7765921d64dca4cfe1d99e4dc5201

Contents?: true

Size: 1.23 KB

Versions: 2

Compression:

Stored size: 1.23 KB

Contents

require 'iconv'

String.class_eval do
  def set_encoding_and_add_bom encoding_to
    set_encoding(encoding_to).add_bom
  end

  def set_encoding_and_add_bom! encoding_to
    replace set_encoding_and_add_bom encoding_to
  end

  def add_bom
    raise_if_encoding_does_not_exist encoding

    BOM_LIST_hex[encoding].force_encoding(encoding) + self
  end

  def add_bom!
    replace add_bom
  end

  def set_encoding(encoding_to)
    raise_if_encoding_does_not_exist encoding_to

    Iconv.conv encoding_to, encoding.to_s, self
  end

  def set_encoding! encoding_to
    replace set_encoding encoding_to
  end

  private

  # Byte Order Mark
  BOM_LIST_hex = {
      Encoding::UTF_8 => "\xEF\xBB\xBF",
      Encoding::UTF_16BE => "\xFE\xFF",
      Encoding::UTF_16LE => "\xFF\xFE",
      Encoding::UTF_32BE => "\x00\x00\xFE\xFF",
      Encoding::UTF_32LE => "\xFE\xFF\x00\x00",
  }

  BOM_LIST_hex.freeze

  def encoding_exist? coding
    !BOM_LIST_hex[encoding_creater coding].nil?
  end

  def raise_if_encoding_does_not_exist *encoding_array
    encoding_array.each do |coding|
      raise ArgumentError, "Encoding does not exist for #{coding}" unless encoding_exist? coding
    end
  end

  def encoding_creater coding
    Encoding.find coding
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
encoding_with_bom-0.0.6 lib/encoding_with_bom/string_ext.rb
encoding_with_bom-0.0.5 lib/encoding_with_bom/string_ext.rb