Sha256: c3386b543873945f199c34db70d5539bd8d2cc74087ef18d451f45ff08c056e7

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 KB

Contents

require 'active_support/core_ext/object/acts_like'
require 'active_support/core_ext/string/behavior'
require 'ensure_valid_encoding'
require 'gigo/rchardet'
require 'gigo/version'

module GIGO

  def self.load(data)
    return data if data.nil? || !data.acts_like?(:string)
    encoded_string = safe_detect_and_encoder(data)
    return data if data.encoding == forced_encoding && data == encoded_string
    encoded_string
  end


  protected

  def self.safe_detect_and_encoder(data)
    string = data
    begin
      encoding = CharDet.detect(string.dup)['encoding'] || string.encoding || Encoding.default_internal || forced_encoding
      string = string.force_encoding(encoding).encode forced_encoding, :undef => :replace, :invalid => :replace
    rescue Exception => e
      string = string.encode forced_encoding, :undef => :replace, :invalid => :replace
    end
    EnsureValidEncoding.ensure_valid_encoding string, invalid: :replace, replace: "?"
  end

  def self.forced_encoding
    Encoding.default_internal || Encoding::UTF_8
  end
  
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gigo-1.0.0 lib/gigo.rb