coder 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/coder/cleaner.rb +2 -1
- data/lib/coder/cleaner/builtin.rb +8 -0
- data/lib/coder/cleaner/iconv.rb +1 -1
- data/lib/coder/cleaner/java.rb +33 -0
- data/lib/coder/version.rb +1 -1
- data/spec/coder/cleaner_spec.rb +5 -0
- metadata +3 -2
data/lib/coder/cleaner.rb
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
require 'coder/cleaner/builtin'
|
|
2
2
|
require 'coder/cleaner/iconv'
|
|
3
|
+
require 'coder/cleaner/java'
|
|
3
4
|
require 'coder/cleaner/simple'
|
|
4
5
|
|
|
5
6
|
module Coder
|
|
6
7
|
module Cleaner
|
|
7
|
-
Default = [Builtin, Iconv, Simple].detect { |c| c.available? }
|
|
8
|
+
Default = [Builtin, Java, Iconv, Simple].detect { |c| c.available? }
|
|
8
9
|
|
|
9
10
|
def self.new(encoding)
|
|
10
11
|
Default.new(encoding)
|
|
@@ -6,6 +6,14 @@ module Coder
|
|
|
6
6
|
OPTIONS = { :undef => :replace, :invalid => :replace, :replace => "" }
|
|
7
7
|
|
|
8
8
|
def self.available?
|
|
9
|
+
has_encoding? and mri?
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.mri?
|
|
13
|
+
!defined?(RUBY_ENGINE) or RUBY_ENGINE == 'ruby'
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.has_encoding?
|
|
9
17
|
defined? Encoding.find and
|
|
10
18
|
defined? EncodingError and
|
|
11
19
|
String.method_defined? :encode and
|
data/lib/coder/cleaner/iconv.rb
CHANGED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'coder/error'
|
|
2
|
+
|
|
3
|
+
module Coder
|
|
4
|
+
module Cleaner
|
|
5
|
+
class Java
|
|
6
|
+
def self.available?
|
|
7
|
+
require 'java'
|
|
8
|
+
!!::Java::JavaNioCharset::Charset
|
|
9
|
+
rescue
|
|
10
|
+
false
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def initialize(encoding)
|
|
14
|
+
encoding = encoding.to_s.upcase
|
|
15
|
+
@charset = ::Java::JavaNioCharset::Charset.for_name(encoding)
|
|
16
|
+
@decoder = @charset.new_decoder
|
|
17
|
+
@decoder.on_malformed_input(::Java::JavaNioCharset::CodingErrorAction::IGNORE)
|
|
18
|
+
@decoder.on_unmappable_character(::Java::JavaNioCharset::CodingErrorAction::IGNORE)
|
|
19
|
+
rescue ::Java::JavaNioCharset::UnsupportedCharsetException
|
|
20
|
+
raise Coder::InvalidEncoding, "unknown encoding name - #{encoding}"
|
|
21
|
+
rescue Java::JavaLang::RuntimeException => e
|
|
22
|
+
raise Coder::Error, e.message, e.backtrace
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def clean(str)
|
|
26
|
+
buffer = ::Java::JavaNio::ByteBuffer.wrap(str.to_java_bytes)
|
|
27
|
+
@decoder.decode(buffer).to_s
|
|
28
|
+
rescue Java::JavaLang::RuntimeException => e
|
|
29
|
+
raise Coder::Error, e.message, e.backtrace
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
data/lib/coder/version.rb
CHANGED
data/spec/coder/cleaner_spec.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
1
2
|
require 'coder/cleaner'
|
|
2
3
|
|
|
3
4
|
shared_examples Coder::Cleaner do
|
|
@@ -24,6 +25,10 @@ describe Coder::Cleaner::Builtin do
|
|
|
24
25
|
it_behaves_like Coder::Cleaner if described_class.available?
|
|
25
26
|
end
|
|
26
27
|
|
|
28
|
+
describe Coder::Cleaner::Java do
|
|
29
|
+
it_behaves_like Coder::Cleaner if described_class.available?
|
|
30
|
+
end
|
|
31
|
+
|
|
27
32
|
describe Coder::Cleaner::Iconv do
|
|
28
33
|
it_behaves_like Coder::Cleaner if described_class.available?
|
|
29
34
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: coder
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0
|
|
4
|
+
version: 0.1.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2012-09-
|
|
12
|
+
date: 2012-09-23 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rspec
|
|
@@ -61,6 +61,7 @@ files:
|
|
|
61
61
|
- lib/coder/cleaner.rb
|
|
62
62
|
- lib/coder/cleaner/builtin.rb
|
|
63
63
|
- lib/coder/cleaner/iconv.rb
|
|
64
|
+
- lib/coder/cleaner/java.rb
|
|
64
65
|
- lib/coder/cleaner/simple.rb
|
|
65
66
|
- lib/coder/cleaner/simple/byte_buffer.rb
|
|
66
67
|
- lib/coder/cleaner/simple/encodings.rb
|