Class: Coder::Cleaner::Builtin

Inherits:
Object
  • Object
show all
Defined in:
lib/coder/cleaner/builtin.rb

Constant Summary collapse

OPTIONS =
{ :undef => :replace, :invalid => :replace, :replace => "" }

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(encoding) ⇒ Builtin

Returns a new instance of Builtin.



29
30
31
32
33
34
35
# File 'lib/coder/cleaner/builtin.rb', line 29

def initialize(encoding)
  @encoding = encoding.to_s.upcase
  @dummy    = @encoding == 'UTF-8' ? 'UTF-16BE' : 'UTF-8'
  @dummy  ||= @encoding

  check_encoding
end

Class Method Details

.available?Boolean

Returns:

  • (Boolean)


8
9
10
# File 'lib/coder/cleaner/builtin.rb', line 8

def self.available?
  has_encoding? and mri?
end

.has_encoding?Boolean

Returns:

  • (Boolean)


22
23
24
25
26
27
# File 'lib/coder/cleaner/builtin.rb', line 22

def self.has_encoding?
  defined? Encoding.find          and
  defined? EncodingError          and
  String.method_defined? :encode  and
  String.method_defined? :force_encoding
end

.mri?Boolean

Returns:

  • (Boolean)


12
13
14
# File 'lib/coder/cleaner/builtin.rb', line 12

def self.mri?
  !defined?(RUBY_ENGINE) or RUBY_ENGINE == 'ruby'
end

.supports?(encoding) ⇒ Boolean

Returns:

  • (Boolean)


16
17
18
19
20
# File 'lib/coder/cleaner/builtin.rb', line 16

def self.supports?(encoding)
  Encoding.find(encoding)
rescue ArgumentError
  false
end

Instance Method Details

#clean(str) ⇒ Object



37
38
39
40
41
42
# File 'lib/coder/cleaner/builtin.rb', line 37

def clean(str)
  str = str.dup.force_encoding(@encoding)
  str.encode(@dummy, OPTIONS).encode(@encoding).gsub("\0".encode(@encoding), "")
rescue EncodingError => e
  raise Coder::Error, e.message
end