Sha256: 640f89c6e3025d0bf4c600b47c961f1afe3ae45e2687ac4e52af6ff4c02d4c29

Contents?: true

Size: 1.07 KB

Versions: 61

Compression:

Stored size: 1.07 KB

Contents

# frozen_string_literal: true

module BetterRecord
  class Encoder
    def initialize(str)
      @str = str
    end

    def to_utf8
      return @str if is_utf8?
      encoding = find_encoding
      @str.force_encoding(encoding).encode('utf-8', invalid: :replace, undef: :replace)
    end

    def find_encoding
      puts 'utf-8' if is_utf8?
      return 'utf-8' if is_utf8?
      puts 'iso-8859-1' if is_iso8859?
      return 'iso-8859-1' if is_iso8859?
      puts 'Windows-1252' if is_windows?
      return 'Windows-1252' if is_windows?
      raise ArgumentError.new "Invalid Encoding"
    end

    def is_utf8?
      is_encoding?(Encoding::UTF_8)
    end

    def is_iso8859?
      is_encoding?(Encoding::ISO_8859_1)
    end

    def is_windows?(str)
      is_encoding?(Encoding::Windows_1252)
    end

    def is_encoding?(encoding_check)
      case @str.encoding
      when encoding_check
        @str.valid_encoding?
      when Encoding::ASCII_8BIT, Encoding::US_ASCII
        @str.dup.force_encoding(encoding_check).valid_encoding?
      else
        false
      end
    end
  end
end

Version data entries

61 entries across 61 versions & 1 rubygems

Version Path
better_record-0.20.2 lib/better_record/encoder.rb
better_record-0.19.10 lib/better_record/encoder.rb
better_record-0.19.9 lib/better_record/encoder.rb
better_record-0.19.8 lib/better_record/encoder.rb
better_record-0.19.7 lib/better_record/encoder.rb
better_record-0.19.6 lib/better_record/encoder.rb
better_record-0.19.4 lib/better_record/encoder.rb
better_record-0.19.2 lib/better_record/encoder.rb
better_record-0.19.1 lib/better_record/encoder.rb
better_record-0.19.0 lib/better_record/encoder.rb
better_record-0.18.3 lib/better_record/encoder.rb
better_record-0.18.2 lib/better_record/encoder.rb
better_record-0.18.1 lib/better_record/encoder.rb
better_record-0.18.0 lib/better_record/encoder.rb
better_record-0.17.9 lib/better_record/encoder.rb
better_record-0.17.8 lib/better_record/encoder.rb
better_record-0.17.4 lib/better_record/encoder.rb
better_record-0.17.3 lib/better_record/encoder.rb
better_record-0.17.1 lib/better_record/encoder.rb
better_record-0.17.0 lib/better_record/encoder.rb