Sha256: 8cfef9ff0e703f90e3514e8d0f948159748db88cee5406527a71fa55dabc2451

Contents?: true

Size: 904 Bytes

Versions: 1

Compression:

Stored size: 904 Bytes

Contents

require 'active_support/all'
require 'ensure_valid_encoding'
require 'gigo/transcoders'
require 'gigo/transcoders/active_support'
require 'gigo/transcoders/blind'
require 'gigo/version'

module GIGO

  mattr_accessor :encoding
  self.encoding = Encoding.default_internal || Encoding::UTF_8

  def self.load(data, options = {})
    return data if data.nil? || !data.acts_like?(:string)
    tcoders = options[:transcoders] || transcoders
    encoded_string = transcode(data, tcoders)
    return data if data.encoding == GIGO.encoding && data == encoded_string
    encoded_string
  end


  protected

  def self.transcode(data, tcoders)
    string = data
    tcoders.detect do |t|
      begin
        string = t.transcode(string)
      rescue Exception => e
        false
      end
    end
    string = EnsureValidEncoding.ensure_valid_encoding string, invalid: :replace, replace: "?"
    string
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gigo-2.0.0 lib/gigo.rb