filter_io 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +24 -0
- data/VERSION +1 -1
- data/lib/filter_io.rb +5 -0
- data/test/filter_io_test.rb +21 -11
- metadata +5 -7
data/.gitignore
CHANGED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
activesupport (3.0.0)
|
5
|
+
gemcutter (0.6.1)
|
6
|
+
git (1.2.5)
|
7
|
+
i18n (0.4.1)
|
8
|
+
jeweler (1.4.0)
|
9
|
+
gemcutter (>= 0.1.0)
|
10
|
+
git (>= 1.2.5)
|
11
|
+
rubyforge (>= 2.0.0)
|
12
|
+
json_pure (1.4.6)
|
13
|
+
rubyforge (2.0.4)
|
14
|
+
json_pure (>= 1.1.7)
|
15
|
+
test-unit (2.1.1)
|
16
|
+
|
17
|
+
PLATFORMS
|
18
|
+
ruby
|
19
|
+
|
20
|
+
DEPENDENCIES
|
21
|
+
activesupport (>= 2.3.9)
|
22
|
+
i18n (>= 0.4.1)
|
23
|
+
jeweler
|
24
|
+
test-unit
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.5
|
data/lib/filter_io.rb
CHANGED
@@ -279,6 +279,11 @@ class FilterIO
|
|
279
279
|
|
280
280
|
data = [data] unless data.is_a? Array
|
281
281
|
raise 'Block must have 1 or 2 values' unless data.size <= 2
|
282
|
+
if @buffer.respond_to?(:encoding) && @buffer.encoding != data[0].encoding
|
283
|
+
if [@buffer, data[0]].any? { |x| x.encoding.to_s == 'ASCII-8BIT' }
|
284
|
+
data[0] = data[0].dup.force_encoding @buffer.encoding
|
285
|
+
end
|
286
|
+
end
|
282
287
|
@buffer << data[0]
|
283
288
|
if data[1]
|
284
289
|
if @io.respond_to?(:internal_encoding) && @io.internal_encoding
|
data/test/filter_io_test.rb
CHANGED
@@ -242,6 +242,16 @@ class FilterIOTest < ActiveSupport::TestCase
|
|
242
242
|
end
|
243
243
|
end
|
244
244
|
|
245
|
+
test "block returning mix of UTF-8 and ASCII-8BIT" do
|
246
|
+
input = "X\xE2\x80\x94Y\xe2\x80\x99"
|
247
|
+
input.force_encoding 'ASCII-8BIT'
|
248
|
+
io = FilterIO.new(StringIO.new(input), :block_size => 4) do |data, state|
|
249
|
+
data.force_encoding data[0] == 'Y' ? 'UTF-8' : 'ASCII-8BIT'
|
250
|
+
data
|
251
|
+
end
|
252
|
+
assert_equal input, io.read
|
253
|
+
end
|
254
|
+
|
245
255
|
end
|
246
256
|
|
247
257
|
test "read" do
|
@@ -431,7 +441,7 @@ class FilterIOTest < ActiveSupport::TestCase
|
|
431
441
|
|
432
442
|
test "need more data" do
|
433
443
|
input = '1ab123456cde78f9ghij0'
|
434
|
-
expected = input.gsub
|
444
|
+
expected = input.gsub(/\d+/, '[\0]')
|
435
445
|
(1..5).each do |block_size|
|
436
446
|
expected_size = 0
|
437
447
|
io = FilterIO.new(StringIO.new(input), :block_size => block_size) do |data, state|
|
@@ -439,7 +449,7 @@ class FilterIOTest < ActiveSupport::TestCase
|
|
439
449
|
raise FilterIO::NeedMoreData if data =~ /\d\z/ && !state.eof?
|
440
450
|
assert_equal expected_size, data.size unless state.eof?
|
441
451
|
expected_size = 0
|
442
|
-
data.gsub
|
452
|
+
data.gsub(/\d+/, '[\0]')
|
443
453
|
end
|
444
454
|
assert_equal expected, io.read
|
445
455
|
end
|
@@ -451,7 +461,7 @@ class FilterIOTest < ActiveSupport::TestCase
|
|
451
461
|
(1..5).each do |block_size|
|
452
462
|
io = FilterIO.new(StringIO.new(input), :block_size => block_size) do |data, state|
|
453
463
|
raise FilterIO::NeedMoreData if data =~ /[\r\n]\z/ && !state.eof?
|
454
|
-
data.gsub
|
464
|
+
data.gsub(/\r\n|\r|\n/, "\n")
|
455
465
|
end
|
456
466
|
assert_equal expected, io.read
|
457
467
|
end
|
@@ -459,10 +469,10 @@ class FilterIOTest < ActiveSupport::TestCase
|
|
459
469
|
|
460
470
|
test "dropping characters" do
|
461
471
|
input = "ab1cde23f1g4hijklmno567pqr8stu9vw0xyz"
|
462
|
-
expected = input.gsub
|
472
|
+
expected = input.gsub(/\d+/, '')
|
463
473
|
(1..5).each do |block_size|
|
464
474
|
io = FilterIO.new(StringIO.new(input), :block_size => block_size) do |data|
|
465
|
-
data.gsub
|
475
|
+
data.gsub(/\d+/, '')
|
466
476
|
end
|
467
477
|
assert_equal 0, io.pos
|
468
478
|
assert_equal expected, io.read
|
@@ -621,19 +631,19 @@ class FilterIOTest < ActiveSupport::TestCase
|
|
621
631
|
assert_equal 'c', io.read(1)
|
622
632
|
assert_equal 3, io.pos
|
623
633
|
assert_raise Errno::EINVAL do
|
624
|
-
io.seek
|
634
|
+
io.seek(-1, IO::SEEK_CUR)
|
625
635
|
end
|
626
636
|
assert_equal 3, io.pos
|
627
637
|
|
628
638
|
# forwards fail
|
629
639
|
assert_equal 3, io.pos
|
630
640
|
assert_raise Errno::EINVAL do
|
631
|
-
io.seek
|
641
|
+
io.seek(2, IO::SEEK_CUR)
|
632
642
|
end
|
633
643
|
assert_equal 3, io.pos
|
634
644
|
|
635
645
|
# beginning
|
636
|
-
io.seek
|
646
|
+
io.seek(-io.pos, IO::SEEK_CUR)
|
637
647
|
assert_equal 0, io.pos
|
638
648
|
|
639
649
|
end
|
@@ -641,13 +651,13 @@ class FilterIOTest < ActiveSupport::TestCase
|
|
641
651
|
test "seek end" do
|
642
652
|
io = FilterIO.new(StringIO.new("abcdef"))
|
643
653
|
assert_raise Errno::EINVAL do
|
644
|
-
io.seek
|
654
|
+
io.seek(0, IO::SEEK_END)
|
645
655
|
end
|
646
656
|
assert_raise Errno::EINVAL do
|
647
|
-
io.seek
|
657
|
+
io.seek(6, IO::SEEK_END)
|
648
658
|
end
|
649
659
|
assert_raise Errno::EINVAL do
|
650
|
-
io.seek
|
660
|
+
io.seek(-6, IO::SEEK_END)
|
651
661
|
end
|
652
662
|
end
|
653
663
|
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: filter_io
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 19
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
8
|
+
- 5
|
9
|
+
version: 0.1.5
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Jason Weathered
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2010-
|
17
|
+
date: 2010-09-13 00:00:00 +10:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -26,7 +25,6 @@ dependencies:
|
|
26
25
|
requirements:
|
27
26
|
- - ">="
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
28
|
segments:
|
31
29
|
- 0
|
32
30
|
version: "0"
|
@@ -43,6 +41,8 @@ extra_rdoc_files:
|
|
43
41
|
- README.markdown
|
44
42
|
files:
|
45
43
|
- .gitignore
|
44
|
+
- Gemfile
|
45
|
+
- Gemfile.lock
|
46
46
|
- LICENSE
|
47
47
|
- README.markdown
|
48
48
|
- Rakefile
|
@@ -64,7 +64,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
64
64
|
requirements:
|
65
65
|
- - ">="
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
hash: 3
|
68
67
|
segments:
|
69
68
|
- 0
|
70
69
|
version: "0"
|
@@ -73,7 +72,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
72
|
requirements:
|
74
73
|
- - ">="
|
75
74
|
- !ruby/object:Gem::Version
|
76
|
-
hash: 3
|
77
75
|
segments:
|
78
76
|
- 0
|
79
77
|
version: "0"
|