obuf 1.2.1 → 1.3.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: fa3b88e54826b092f950417a62093b64d0e169485f1012494ea3c3b27be0f282
4
+ data.tar.gz: 236df7e063be0b1f0df54eed367c2e8ee33c2e954446f72fdf47b5cb9e1ee6a6
5
+ SHA512:
6
+ metadata.gz: e8d88d93d9cc11dde2fad0a4db79749fa9f2273c7df2dc1dc4f65afc34cafc305f29e55a762ac3129343b6e4d3236192e98f7bea20be388fbe86110813340dda
7
+ data.tar.gz: 7ae7806c4d5d3ee6cd2d5143a7e48708746ef07b6b815c82de2d575be38ea9a768673a420dddbf468bd639faa186e78ffe01b7acd6565925b4b3076cd59783ee
data/History.txt CHANGED
@@ -1,3 +1,12 @@
1
+ === 1.3.1 / 2026-10-02
2
+
3
+ * Add frozen_string_literal magic comments to all library files
4
+
5
+ === 1.3.0 / 2026-10-02
6
+
7
+ * Make Obuf usable from within Ractors (Ruby 4.0+)
8
+ * Replace Jeweler with a plain gemspec
9
+
1
10
  === 1.2.0 / 2015-04-17
2
11
 
3
12
  * Add Obuf::Lens to provide access to externally managed IO objects and files
data/lib/obuf/lens.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+ # shareable_constant_value: literal
1
3
  require 'thread'
2
4
 
3
5
  # Provides a per-object iterator on top of any IO object or pipe
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'thread'
2
3
 
3
4
  # Similar to Obuf::Lens but protects all the operations that change the IO offset
data/lib/obuf.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "tempfile"
2
3
  require "thread" # required for ruby 18
3
4
 
@@ -19,7 +20,7 @@ require "thread" # required for ruby 18
19
20
  #
20
21
  # Both reading and writing aim to be threadsafe
21
22
  class Obuf
22
- VERSION = "1.2.1"
23
+ VERSION = "1.3.1"
23
24
  require File.dirname(__FILE__) + "/obuf/lens"
24
25
  require File.dirname(__FILE__) + "/obuf/protected_lens"
25
26
 
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.2.1
5
- prerelease:
4
+ version: 1.3.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Julik Tarkhanov
9
- autorequire:
10
8
  bindir: bin
11
9
  cert_chain: []
12
- date: 2015-04-17 00:00:00.000000000 Z
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: flexmock
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.8'
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.8'
39
+ version: '0'
46
40
  - !ruby/object:Gem::Dependency
47
- name: rake
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: jeweler
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: 1.8.4
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: 1.8.4
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
- - obuf.gemspec
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
- post_install_message:
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: '0'
109
- segments:
110
- - 0
111
- hash: 4000191137531519975
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
- rubyforge_project:
120
- rubygems_version: 1.8.23.2
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
@@ -1,7 +0,0 @@
1
- rvm:
2
- - 1.8.7
3
- - 1.9.3
4
- - 2.0.0
5
- - 2.1.1
6
- - 2.2.0
7
- - jruby
data/Gemfile DELETED
@@ -1,8 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- group :development do
4
- gem "bundler"
5
- gem "flexmock", "~>0.8"
6
- gem "rake"
7
- gem "jeweler", '1.8.4' # Last one without the stupid nokogiri dependency
8
- end
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.1"
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,201 +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
- assert_raise Obuf::Lens::NothingToRecover do
136
- lens.recover_object
137
- end
138
-
139
- mock_io.rewind
140
- recovered = lens.recover_object
141
- assert_equal "Hi there!", recovered
142
- end
143
-
144
- def test_lens_each
145
- mock_io = StringIO.new
146
-
147
- writing_lens = Obuf::Lens.new(mock_io)
148
- writing_lens << "Hi there!"
149
- writing_lens << 98121
150
- writing_lens << [123, :a]
151
-
152
- mock_io.rewind
153
-
154
- reading_lens = Obuf::Lens.new(mock_io)
155
- items = []
156
- reading_lens.each do | item |
157
- items << item
158
- end
159
-
160
- assert_equal "Hi there!", items[0]
161
- assert_equal 98121, items[1]
162
- assert_equal [123, :a], items[2]
163
- end
164
-
165
- def test_lens_to_a
166
- mock_io = StringIO.new
167
-
168
- writing_lens = Obuf::Lens.new(mock_io)
169
- writing_lens << "Hi there!"
170
- writing_lens << 98121
171
- writing_lens << [123, :a]
172
-
173
- mock_io.rewind
174
-
175
- reading_lens = Obuf::Lens.new(mock_io)
176
- items = reading_lens.to_a
177
- assert_equal 3, items.length
178
- assert_equal "Hi there!", items[0]
179
- end
180
-
181
- def test_lens_recover_at
182
- mock_io = StringIO.new
183
-
184
- writing_lens = Obuf::Lens.new(mock_io)
185
- writing_lens << "Hi there!"
186
- writing_lens << 98121
187
- writing_lens << [123, :a]
188
-
189
- reading_lens = Obuf::Lens.new(mock_io)
190
- # Also try to recover object at index 3, which does not exist in the underlying buffer
191
- objects_at_positions = (0..3).to_a.reverse.map do | i |
192
- reading_lens.recover_at(i)
193
- end
194
-
195
- assert_nil objects_at_positions[0]
196
- assert_equal [123, :a], objects_at_positions[1]
197
- assert_equal 98121, objects_at_positions[2]
198
- assert_equal "Hi there!", objects_at_positions[3]
199
- end
200
-
201
- end