obuf 1.2.0 → 1.3.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.
- checksums.yaml +7 -0
- data/History.txt +5 -0
- data/README.md +2 -0
- data/lib/obuf/lens.rb +10 -2
- data/lib/obuf.rb +1 -1
- metadata +24 -47
- data/.autotest +0 -23
- data/.travis.yml +0 -8
- data/Gemfile +0 -8
- data/Rakefile +0 -27
- data/obuf.gemspec +0 -58
- data/test/test_obuf.rb +0 -184
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: fc239f32a9cde898a530806bbbb6906b17776b8f0b07fe7e4eec030faec31437
|
|
4
|
+
data.tar.gz: e9027146f1aada7f15f56f1cd70e31183e0394983352e1dc8790b67ae1b89a9b
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: eadd96014ba7b94ecce3ee76a68184e41b49028bc0c78b35e346f76c1c7ee80945633411109b01c020d9b38ef10de004a5be3ed2a6f21e967e0b8047a0ba48e0
|
|
7
|
+
data.tar.gz: 759e120b23fbd309812f4c8e93ca73a082249c1a9f5de6d6fd5c6123574a267b264c0d425c3d1e90e6c86c387eb95a5d1d550e8c28a2ae09734775f6e55c504e
|
data/History.txt
CHANGED
data/README.md
CHANGED
data/lib/obuf/lens.rb
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
# shareable_constant_value: literal
|
|
1
2
|
require 'thread'
|
|
2
3
|
|
|
3
4
|
# Provides a per-object iterator on top of any IO object or pipe
|
|
4
5
|
class Obuf::Lens
|
|
5
6
|
include Enumerable
|
|
7
|
+
NothingToRecover = Class.new(StandardError)
|
|
6
8
|
|
|
7
9
|
DELIM = "\t"
|
|
8
10
|
END_RECORD = "\n"
|
|
@@ -32,7 +34,10 @@ class Obuf::Lens
|
|
|
32
34
|
skip_bytes = @io.gets("\t").to_i
|
|
33
35
|
@io.seek(@io.pos + skip_bytes + 1)
|
|
34
36
|
end
|
|
37
|
+
|
|
35
38
|
recover_object
|
|
39
|
+
rescue NothingToRecover # TODO: we need to honor this exception in the future
|
|
40
|
+
nil
|
|
36
41
|
end
|
|
37
42
|
|
|
38
43
|
# Recover the object at the current position in the IO. Returns +nil+
|
|
@@ -42,14 +47,17 @@ class Obuf::Lens
|
|
|
42
47
|
demarshal_bytes = @io.gets("\t").to_i
|
|
43
48
|
|
|
44
49
|
# When at end of IO return nil
|
|
45
|
-
|
|
50
|
+
raise NothingToRecover if demarshal_bytes.zero?
|
|
46
51
|
|
|
47
52
|
blob = @io.read(demarshal_bytes)
|
|
48
53
|
demarshal_object(blob)
|
|
49
54
|
end
|
|
50
55
|
|
|
51
56
|
def each
|
|
52
|
-
|
|
57
|
+
begin
|
|
58
|
+
loop { yield(recover_object) }
|
|
59
|
+
rescue NothingToRecover
|
|
60
|
+
end
|
|
53
61
|
end
|
|
54
62
|
|
|
55
63
|
private
|
data/lib/obuf.rb
CHANGED
|
@@ -19,7 +19,7 @@ require "thread" # required for ruby 18
|
|
|
19
19
|
#
|
|
20
20
|
# Both reading and writing aim to be threadsafe
|
|
21
21
|
class Obuf
|
|
22
|
-
VERSION = "1.
|
|
22
|
+
VERSION = "1.3.0"
|
|
23
23
|
require File.dirname(__FILE__) + "/obuf/lens"
|
|
24
24
|
require File.dirname(__FILE__) + "/obuf/protected_lens"
|
|
25
25
|
|
metadata
CHANGED
|
@@ -1,80 +1,70 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: obuf
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 1.3.0
|
|
6
5
|
platform: ruby
|
|
7
6
|
authors:
|
|
8
7
|
- Julik Tarkhanov
|
|
9
|
-
autorequire:
|
|
10
8
|
bindir: bin
|
|
11
9
|
cert_chain: []
|
|
12
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
13
11
|
dependencies:
|
|
14
12
|
- !ruby/object:Gem::Dependency
|
|
15
13
|
name: bundler
|
|
16
14
|
requirement: !ruby/object:Gem::Requirement
|
|
17
|
-
none: false
|
|
18
15
|
requirements:
|
|
19
|
-
- -
|
|
16
|
+
- - ">="
|
|
20
17
|
- !ruby/object:Gem::Version
|
|
21
18
|
version: '0'
|
|
22
19
|
type: :development
|
|
23
20
|
prerelease: false
|
|
24
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
-
none: false
|
|
26
22
|
requirements:
|
|
27
|
-
- -
|
|
23
|
+
- - ">="
|
|
28
24
|
- !ruby/object:Gem::Version
|
|
29
25
|
version: '0'
|
|
30
26
|
- !ruby/object:Gem::Dependency
|
|
31
|
-
name:
|
|
27
|
+
name: rake
|
|
32
28
|
requirement: !ruby/object:Gem::Requirement
|
|
33
|
-
none: false
|
|
34
29
|
requirements:
|
|
35
|
-
- -
|
|
30
|
+
- - ">="
|
|
36
31
|
- !ruby/object:Gem::Version
|
|
37
|
-
version: '0
|
|
32
|
+
version: '0'
|
|
38
33
|
type: :development
|
|
39
34
|
prerelease: false
|
|
40
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
-
none: false
|
|
42
36
|
requirements:
|
|
43
|
-
- -
|
|
37
|
+
- - ">="
|
|
44
38
|
- !ruby/object:Gem::Version
|
|
45
|
-
version: '0
|
|
39
|
+
version: '0'
|
|
46
40
|
- !ruby/object:Gem::Dependency
|
|
47
|
-
name:
|
|
41
|
+
name: test-unit
|
|
48
42
|
requirement: !ruby/object:Gem::Requirement
|
|
49
|
-
none: false
|
|
50
43
|
requirements:
|
|
51
|
-
- -
|
|
44
|
+
- - ">="
|
|
52
45
|
- !ruby/object:Gem::Version
|
|
53
46
|
version: '0'
|
|
54
47
|
type: :development
|
|
55
48
|
prerelease: false
|
|
56
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
-
none: false
|
|
58
50
|
requirements:
|
|
59
|
-
- -
|
|
51
|
+
- - ">="
|
|
60
52
|
- !ruby/object:Gem::Version
|
|
61
53
|
version: '0'
|
|
62
54
|
- !ruby/object:Gem::Dependency
|
|
63
|
-
name:
|
|
55
|
+
name: flexmock
|
|
64
56
|
requirement: !ruby/object:Gem::Requirement
|
|
65
|
-
none: false
|
|
66
57
|
requirements:
|
|
67
|
-
- -
|
|
58
|
+
- - ">="
|
|
68
59
|
- !ruby/object:Gem::Version
|
|
69
|
-
version:
|
|
60
|
+
version: '0'
|
|
70
61
|
type: :development
|
|
71
62
|
prerelease: false
|
|
72
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
-
none: false
|
|
74
64
|
requirements:
|
|
75
|
-
- -
|
|
65
|
+
- - ">="
|
|
76
66
|
- !ruby/object:Gem::Version
|
|
77
|
-
version:
|
|
67
|
+
version: '0'
|
|
78
68
|
description: Stores marshaled temporary objects on-disk in a simple Enumerable
|
|
79
69
|
email: me@julik.nl
|
|
80
70
|
executables: []
|
|
@@ -82,43 +72,30 @@ extensions: []
|
|
|
82
72
|
extra_rdoc_files:
|
|
83
73
|
- README.md
|
|
84
74
|
files:
|
|
85
|
-
- .autotest
|
|
86
|
-
- .travis.yml
|
|
87
|
-
- Gemfile
|
|
88
75
|
- History.txt
|
|
89
76
|
- README.md
|
|
90
|
-
- Rakefile
|
|
91
77
|
- lib/obuf.rb
|
|
92
78
|
- lib/obuf/lens.rb
|
|
93
79
|
- lib/obuf/protected_lens.rb
|
|
94
|
-
|
|
95
|
-
- test/test_obuf.rb
|
|
96
|
-
homepage: http://github.com/julik/obuf
|
|
80
|
+
homepage: https://github.com/julik/obuf
|
|
97
81
|
licenses:
|
|
98
82
|
- MIT
|
|
99
|
-
|
|
83
|
+
metadata: {}
|
|
100
84
|
rdoc_options: []
|
|
101
85
|
require_paths:
|
|
102
86
|
- lib
|
|
103
87
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
104
|
-
none: false
|
|
105
88
|
requirements:
|
|
106
|
-
- -
|
|
89
|
+
- - ">="
|
|
107
90
|
- !ruby/object:Gem::Version
|
|
108
|
-
version: '
|
|
109
|
-
segments:
|
|
110
|
-
- 0
|
|
111
|
-
hash: 4056659205467737583
|
|
91
|
+
version: '2.6'
|
|
112
92
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
113
|
-
none: false
|
|
114
93
|
requirements:
|
|
115
|
-
- -
|
|
94
|
+
- - ">="
|
|
116
95
|
- !ruby/object:Gem::Version
|
|
117
96
|
version: '0'
|
|
118
97
|
requirements: []
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
signing_key:
|
|
122
|
-
specification_version: 3
|
|
98
|
+
rubygems_version: 4.0.3
|
|
99
|
+
specification_version: 4
|
|
123
100
|
summary: Ruby disk-backed object buffer
|
|
124
101
|
test_files: []
|
data/.autotest
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# -*- ruby -*-
|
|
2
|
-
|
|
3
|
-
require 'autotest/restart'
|
|
4
|
-
|
|
5
|
-
# Autotest.add_hook :initialize do |at|
|
|
6
|
-
# at.extra_files << "../some/external/dependency.rb"
|
|
7
|
-
#
|
|
8
|
-
# at.libs << ":../some/external"
|
|
9
|
-
#
|
|
10
|
-
# at.add_exception 'vendor'
|
|
11
|
-
#
|
|
12
|
-
# at.add_mapping(/dependency.rb/) do |f, _|
|
|
13
|
-
# at.files_matching(/test_.*rb$/)
|
|
14
|
-
# end
|
|
15
|
-
#
|
|
16
|
-
# %w(TestA TestB).each do |klass|
|
|
17
|
-
# at.extra_class_map[klass] = "test/test_misc.rb"
|
|
18
|
-
# end
|
|
19
|
-
# end
|
|
20
|
-
|
|
21
|
-
# Autotest.add_hook :run_command do |at|
|
|
22
|
-
# system "rake build"
|
|
23
|
-
# end
|
data/.travis.yml
DELETED
data/Gemfile
DELETED
data/Rakefile
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# -*- ruby -*-
|
|
2
|
-
require 'rubygems'
|
|
3
|
-
require 'jeweler'
|
|
4
|
-
require './lib/obuf'
|
|
5
|
-
|
|
6
|
-
Jeweler::Tasks.new do |gem|
|
|
7
|
-
gem.version = Obuf::VERSION
|
|
8
|
-
gem.name = "obuf"
|
|
9
|
-
gem.summary = "Ruby disk-backed object buffer"
|
|
10
|
-
gem.description = "Stores marshaled temporary objects on-disk in a simple Enumerable"
|
|
11
|
-
gem.email = "me@julik.nl"
|
|
12
|
-
gem.homepage = "http://github.com/julik/obuf"
|
|
13
|
-
gem.authors = ["Julik Tarkhanov"]
|
|
14
|
-
gem.license = 'MIT'
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
Jeweler::RubygemsDotOrgTasks.new
|
|
18
|
-
|
|
19
|
-
require 'rake/testtask'
|
|
20
|
-
desc "Run all tests"
|
|
21
|
-
Rake::TestTask.new("test") do |t|
|
|
22
|
-
t.libs << "test"
|
|
23
|
-
t.pattern = 'test/**/test_*.rb'
|
|
24
|
-
t.verbose = true
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
task :default => [ :test ]
|
data/obuf.gemspec
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
# Generated by jeweler
|
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
|
-
# -*- encoding: utf-8 -*-
|
|
5
|
-
|
|
6
|
-
Gem::Specification.new do |s|
|
|
7
|
-
s.name = "obuf"
|
|
8
|
-
s.version = "1.2.0"
|
|
9
|
-
|
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
|
-
s.authors = ["Julik Tarkhanov"]
|
|
12
|
-
s.date = "2015-04-17"
|
|
13
|
-
s.description = "Stores marshaled temporary objects on-disk in a simple Enumerable"
|
|
14
|
-
s.email = "me@julik.nl"
|
|
15
|
-
s.extra_rdoc_files = [
|
|
16
|
-
"README.md"
|
|
17
|
-
]
|
|
18
|
-
s.files = [
|
|
19
|
-
".autotest",
|
|
20
|
-
".travis.yml",
|
|
21
|
-
"Gemfile",
|
|
22
|
-
"History.txt",
|
|
23
|
-
"README.md",
|
|
24
|
-
"Rakefile",
|
|
25
|
-
"lib/obuf.rb",
|
|
26
|
-
"lib/obuf/lens.rb",
|
|
27
|
-
"lib/obuf/protected_lens.rb",
|
|
28
|
-
"obuf.gemspec",
|
|
29
|
-
"test/test_obuf.rb"
|
|
30
|
-
]
|
|
31
|
-
s.homepage = "http://github.com/julik/obuf"
|
|
32
|
-
s.licenses = ["MIT"]
|
|
33
|
-
s.require_paths = ["lib"]
|
|
34
|
-
s.rubygems_version = "1.8.23.2"
|
|
35
|
-
s.summary = "Ruby disk-backed object buffer"
|
|
36
|
-
|
|
37
|
-
if s.respond_to? :specification_version then
|
|
38
|
-
s.specification_version = 3
|
|
39
|
-
|
|
40
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
41
|
-
s.add_development_dependency(%q<bundler>, [">= 0"])
|
|
42
|
-
s.add_development_dependency(%q<flexmock>, ["~> 0.8"])
|
|
43
|
-
s.add_development_dependency(%q<rake>, [">= 0"])
|
|
44
|
-
s.add_development_dependency(%q<jeweler>, ["= 1.8.4"])
|
|
45
|
-
else
|
|
46
|
-
s.add_dependency(%q<bundler>, [">= 0"])
|
|
47
|
-
s.add_dependency(%q<flexmock>, ["~> 0.8"])
|
|
48
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
|
49
|
-
s.add_dependency(%q<jeweler>, ["= 1.8.4"])
|
|
50
|
-
end
|
|
51
|
-
else
|
|
52
|
-
s.add_dependency(%q<bundler>, [">= 0"])
|
|
53
|
-
s.add_dependency(%q<flexmock>, ["~> 0.8"])
|
|
54
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
|
55
|
-
s.add_dependency(%q<jeweler>, ["= 1.8.4"])
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
data/test/test_obuf.rb
DELETED
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
require "test/unit"
|
|
2
|
-
require "obuf"
|
|
3
|
-
require "flexmock"
|
|
4
|
-
require "flexmock/test_unit"
|
|
5
|
-
require "stringio"
|
|
6
|
-
|
|
7
|
-
# We are limited to flexmock 0.8 on Ruby 1.8
|
|
8
|
-
# http://redmine.ruby-lang.org/issues/4882
|
|
9
|
-
# https://github.com/jimweirich/flexmock/issues/4
|
|
10
|
-
# https://github.com/julik/flexmock/commit/4acea00677e7b558bd564ec7c7630f0b27d368ca
|
|
11
|
-
class FlexMock::PartialMockProxy
|
|
12
|
-
def singleton?(method_name)
|
|
13
|
-
@obj.singleton_methods.include?(method_name.to_s)
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
class TestObuf < Test::Unit::TestCase
|
|
18
|
-
|
|
19
|
-
def test_accumulator_saves_objs
|
|
20
|
-
a = Obuf.new
|
|
21
|
-
values = [3, {:foo => "bar"}, "foo"]
|
|
22
|
-
values.map(&a.method(:push))
|
|
23
|
-
|
|
24
|
-
assert_equal 3, a.size
|
|
25
|
-
assert_equal values, a.map{|e| e }, "Should return the same elements from the storage"
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def test_initialize_with_block
|
|
29
|
-
o = Obuf.new do | buf |
|
|
30
|
-
buf.push("Excitement!")
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
assert_equal 1, o.size
|
|
34
|
-
assert_equal %w( Excitement! ), o.to_a
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def test_from_enum
|
|
38
|
-
a = Obuf.new([1,2,3])
|
|
39
|
-
assert_equal [1,2,3], a.to_a
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def test_accumulator_saves_shitload_of_objs
|
|
43
|
-
a = Obuf.new
|
|
44
|
-
50_000.times { a.push("A string" => rand) }
|
|
45
|
-
assert_equal 50_000, a.size
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def test_accumulator_saves_few_strings_with_a_tab
|
|
49
|
-
a = Obuf.new
|
|
50
|
-
4.times { a.push("A \tstring") }
|
|
51
|
-
a.each {|e| assert_equal "A \tstring", e }
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def test_accumulator_empty
|
|
55
|
-
a = Obuf.new
|
|
56
|
-
assert a.empty?
|
|
57
|
-
a.push(1)
|
|
58
|
-
assert !a.empty?
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def test_accumulator_supports_nested_iteration
|
|
62
|
-
a = Obuf.new
|
|
63
|
-
("A".."Z").each{|e| a << e}
|
|
64
|
-
|
|
65
|
-
accumulated = []
|
|
66
|
-
seen_g = false
|
|
67
|
-
a.each do | first_level |
|
|
68
|
-
if first_level == "G"
|
|
69
|
-
seen_g = true
|
|
70
|
-
# Force a nested iteration and break it midway
|
|
71
|
-
a.each do | second_level |
|
|
72
|
-
accumulated.push(second_level)
|
|
73
|
-
break if second_level == "E"
|
|
74
|
-
end
|
|
75
|
-
elsif seen_g
|
|
76
|
-
assert_equal "H", first_level
|
|
77
|
-
return
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
def test_random_access
|
|
83
|
-
a = Obuf.new
|
|
84
|
-
letters = ("A".."Z").map{|e| "#{e}\r\nWow!"}.to_a
|
|
85
|
-
letters.map(&a.method(:push))
|
|
86
|
-
|
|
87
|
-
assert_equal "B\r\nWow!", a[1]
|
|
88
|
-
assert_equal "E\r\nWow!", a[4]
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
def test_random_access_out_of_bounds
|
|
92
|
-
a = Obuf.new
|
|
93
|
-
letters = ("A".."Z").map{|e| "#{e}\r\nWow!"}.to_a
|
|
94
|
-
letters.map(&a.method(:push))
|
|
95
|
-
assert_equal nil, a[27]
|
|
96
|
-
|
|
97
|
-
b = Obuf.new
|
|
98
|
-
assert_nil b[0]
|
|
99
|
-
assert_nil b[-1]
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
def test_clear_calls_close_on_buffer
|
|
103
|
-
io = Tempfile.new("testing")
|
|
104
|
-
flexmock(io).should_receive(:close!).once
|
|
105
|
-
flexmock(Tempfile).should_receive(:new).once.with("obuf").and_return(io)
|
|
106
|
-
|
|
107
|
-
a = Obuf.new
|
|
108
|
-
40.times { a.push("A string" => rand) }
|
|
109
|
-
assert_equal 40, a.size
|
|
110
|
-
a.clear
|
|
111
|
-
assert_equal 0, a.size
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
class TestLens < Test::Unit::TestCase
|
|
116
|
-
def test_lens_write
|
|
117
|
-
mock_io = flexmock()
|
|
118
|
-
lens = Obuf::Lens.new(mock_io)
|
|
119
|
-
flexmock(mock_io).should_receive(:write){|written|
|
|
120
|
-
assert_kind_of Fixnum, written
|
|
121
|
-
}
|
|
122
|
-
flexmock(mock_io).should_receive(:write).with("\t")
|
|
123
|
-
flexmock(mock_io).should_receive(:write){|byte_blob|
|
|
124
|
-
assert_kind_of String, byte_blob
|
|
125
|
-
}
|
|
126
|
-
flexmock(mock_io).should_receive(:write).with("\n")
|
|
127
|
-
lens << "Hi there!"
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
def test_lens_recover_object_after_write
|
|
131
|
-
mock_io = StringIO.new
|
|
132
|
-
lens = Obuf::Lens.new(mock_io)
|
|
133
|
-
lens << "Hi there!"
|
|
134
|
-
|
|
135
|
-
recovered = lens.recover_object
|
|
136
|
-
assert_nil recovered, "The IO is at the end now"
|
|
137
|
-
|
|
138
|
-
mock_io.rewind
|
|
139
|
-
recovered = lens.recover_object
|
|
140
|
-
assert_equal "Hi there!", recovered
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
def test_lens_each
|
|
144
|
-
mock_io = StringIO.new
|
|
145
|
-
|
|
146
|
-
writing_lens = Obuf::Lens.new(mock_io)
|
|
147
|
-
writing_lens << "Hi there!"
|
|
148
|
-
writing_lens << 98121
|
|
149
|
-
writing_lens << [123, :a]
|
|
150
|
-
|
|
151
|
-
mock_io.rewind
|
|
152
|
-
|
|
153
|
-
reading_lens = Obuf::Lens.new(mock_io)
|
|
154
|
-
items = []
|
|
155
|
-
reading_lens.each do | item |
|
|
156
|
-
items << item
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
assert_equal "Hi there!", items[0]
|
|
160
|
-
assert_equal 98121, items[1]
|
|
161
|
-
assert_equal [123, :a], items[2]
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
def test_lens_recover_at
|
|
165
|
-
mock_io = StringIO.new
|
|
166
|
-
|
|
167
|
-
writing_lens = Obuf::Lens.new(mock_io)
|
|
168
|
-
writing_lens << "Hi there!"
|
|
169
|
-
writing_lens << 98121
|
|
170
|
-
writing_lens << [123, :a]
|
|
171
|
-
|
|
172
|
-
reading_lens = Obuf::Lens.new(mock_io)
|
|
173
|
-
# Also try to recover object at index 3, which does not exist in the underlying buffer
|
|
174
|
-
objects_at_positions = (0..3).to_a.reverse.map do | i |
|
|
175
|
-
reading_lens.recover_at(i)
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
assert_nil objects_at_positions[0]
|
|
179
|
-
assert_equal [123, :a], objects_at_positions[1]
|
|
180
|
-
assert_equal 98121, objects_at_positions[2]
|
|
181
|
-
assert_equal "Hi there!", objects_at_positions[3]
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
end
|