Sha256: 4c6b121babe84d50bb5cd0a5e17714aa6ace917d0cc85e381651a3dd9ba57563

Contents?: true

Size: 1.05 KB

Versions: 2

Compression:

Stored size: 1.05 KB

Contents

require 'active_support/all'
require 'active_support/version'
require 'ensure_valid_encoding'
require 'gigo/transcoders'
require 'gigo/transcoders/charlock_holmes' if ActiveSupport::VERSION::STRING < '3.0'
require 'gigo/transcoders/active_support'
require 'gigo/transcoders/blind'
require 'gigo/version'

module GIGO

  mattr_accessor :encoding

  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

  def self.reset_encoding!
    self.encoding = Encoding.default_internal || Encoding::UTF_8
  end
  reset_encoding!


  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

2 entries across 2 versions & 1 rubygems

Version Path
gigo-2.2.0 lib/gigo.rb
gigo-2.1.0 lib/gigo.rb