perobs 4.5.0 → 4.6.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/test/Array_spec.rb CHANGED
@@ -1,5 +1,5 @@
1
- # encoding: UTF-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Copyright (c) 2015, 2016 by Chris Schlaeger <chris@taskjuggler.org>
4
4
  #
5
5
  # This file contains tests for Array that are similar to the tests for the
@@ -27,12 +27,11 @@
27
27
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28
28
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29
29
 
30
- require 'spec_helper'
30
+ require_relative 'spec_helper'
31
31
 
32
- require 'perobs'
32
+ require_relative '../lib/perobs'
33
33
 
34
34
  class PO < PEROBS::Object
35
-
36
35
  attr_persist :name
37
36
 
38
37
  def initialize(store, name = nil)
@@ -43,11 +42,9 @@ class PO < PEROBS::Object
43
42
  def get_self
44
43
  self # Never do this in real user code!
45
44
  end
46
-
47
45
  end
48
46
 
49
47
  describe PEROBS::Array do
50
-
51
48
  before(:all) do
52
49
  @db_name = generate_db_name(__FILE__)
53
50
  end
@@ -99,14 +96,14 @@ describe PEROBS::Array do
99
96
  a[0] = 'A'
100
97
  a[1] = 'B'
101
98
  a[2] = 'C'
102
- vs = ''
99
+ vs = String.new
103
100
  a.each { |v| vs << v }
104
101
  expect(vs).to eq('ABC')
105
102
  @store.exit
106
103
 
107
104
  @store = PEROBS::Store.new(@db_name)
108
105
  a = @store['a']
109
- vs = ''
106
+ vs = String.new
110
107
  a[3] = @store.new(PO, 'D')
111
108
  a.each { |v| vs << (v.is_a?(String) ? v : v.name) }
112
109
  expect(vs).to eq('ABCD')
@@ -127,125 +124,125 @@ describe PEROBS::Array do
127
124
  end
128
125
 
129
126
  it 'should support reading methods' do
130
- expect(cpa([ 1, 1, 3, 5 ]) & cpa([ 1, 2, 3 ])).to eq([ 1, 3 ])
131
- expect(cpa & cpa([ 1, 2, 3 ])).to eq([])
127
+ expect(cpa([1, 1, 3, 5]) & cpa([1, 2, 3])).to eq([1, 3])
128
+ expect(cpa & cpa([1, 2, 3])).to eq([])
132
129
 
133
130
  expect(cpa.empty?).to be true
134
- expect(cpa([ 0 ]).empty?).to be false
131
+ expect(cpa([0]).empty?).to be false
135
132
 
136
- x = cpa([ 'it', 'came', 'to', 'pass', 'that', '...'])
133
+ x = cpa(['it', 'came', 'to', 'pass', 'that', '...'])
137
134
  x = x.sort.join(' ')
138
135
  expect(x).to eq('... came it pass that to')
139
136
  end
140
137
 
141
138
  it 'should support Enumberable methods' do
142
- x = cpa([ 2, 5, 3, 1, 7 ])
139
+ x = cpa([2, 5, 3, 1, 7])
143
140
  expect(x.find { |e| e == 4 }).to be_nil
144
141
  expect(x.find { |e| e == 3 }).to eq(3)
145
142
  end
146
143
 
147
144
  it 'should support re-writing methods' do
148
145
  x = cpa([2, 5, 3, 1, 7])
149
- x.sort!{ |a, b| a <=> b }
150
- pcheck { expect(@store['a']).to eq([ 1, 2, 3, 5, 7 ]) }
151
- @store['a'].sort!{ |a, b| b - a }
152
- pcheck { expect(@store['a']).to eq([ 7, 5, 3, 2, 1 ]) }
146
+ x.sort! { |a, b| a <=> b }
147
+ pcheck { expect(@store['a']).to eq([1, 2, 3, 5, 7]) }
148
+ @store['a'].sort! { |a, b| b - a }
149
+ pcheck { expect(@store['a']).to eq([7, 5, 3, 2, 1]) }
153
150
 
154
151
  @store['a'].clear
155
152
  pcheck { expect(@store['a']).to eq([]) }
156
153
  end
157
154
 
158
155
  it 'should support <<()' do
159
- a = cpa([ 0, 1, 2 ])
156
+ a = cpa([0, 1, 2])
160
157
  a << 4
161
- pcheck { expect(@store['a']).to eq([ 0, 1, 2, 4 ]) }
158
+ pcheck { expect(@store['a']).to eq([0, 1, 2, 4]) }
162
159
  end
163
160
 
164
161
  it 'should support []=' do
165
- a = cpa([ 0, nil, 2 ])
162
+ a = cpa([0, nil, 2])
166
163
  a[1] = 1
167
- pcheck { expect(@store['a']).to eq([ 0, 1, 2 ]) }
164
+ pcheck { expect(@store['a']).to eq([0, 1, 2]) }
168
165
  end
169
166
 
170
167
  it 'should support collect!()' do
171
- a = cpa([ 1, 'cat', 1..1 ])
168
+ a = cpa([1, 'cat', 1..1])
172
169
  if RUBY_VERSION < '2.2'
173
- expect(a.collect! { |e| e.class.to_s }.to_a).to eq([ 'Fixnum', 'String', 'Range' ])
174
- pcheck { expect(@store['a'].to_a).to eq([ 'Fixnum', 'String', 'Range' ]) }
170
+ expect(a.collect! { |e| e.class.to_s }.to_a).to eq(%w[Fixnum String Range])
171
+ pcheck { expect(@store['a'].to_a).to eq(%w[Fixnum String Range]) }
175
172
  else
176
- expect(a.collect! { |e| e.class.to_s }.to_a).to eq([ 'Integer', 'String', 'Range' ])
177
- pcheck { expect(@store['a'].to_a).to eq([ 'Integer', 'String', 'Range' ]) }
173
+ expect(a.collect! { |e| e.class.to_s }.to_a).to eq(%w[Integer String Range])
174
+ pcheck { expect(@store['a'].to_a).to eq(%w[Integer String Range]) }
178
175
  end
179
176
 
180
- a = cpa([ 1, 'cat', 1..1 ])
181
- expect(a.collect! { 99 }).to eq([ 99, 99, 99])
182
- pcheck { expect(@store['a']).to eq([ 99, 99, 99]) }
177
+ a = cpa([1, 'cat', 1..1])
178
+ expect(a.collect! { 99 }).to eq([99, 99, 99])
179
+ pcheck { expect(@store['a']).to eq([99, 99, 99]) }
183
180
  end
184
181
 
185
182
  it 'should support map!()' do
186
- a = cpa([ 1, 'cat', 1..1 ])
183
+ a = cpa([1, 'cat', 1..1])
187
184
  if RUBY_VERSION < '2.2'
188
- expect(a.map! { |e| e.class.to_s }.to_a).to eq([ 'Fixnum', 'String', 'Range' ])
189
- pcheck { expect(@store['a'].to_a).to eq([ 'Fixnum', 'String', 'Range' ]) }
185
+ expect(a.map! { |e| e.class.to_s }.to_a).to eq(%w[Fixnum String Range])
186
+ pcheck { expect(@store['a'].to_a).to eq(%w[Fixnum String Range]) }
190
187
  else
191
- expect(a.map! { |e| e.class.to_s }.to_a).to eq([ 'Integer', 'String', 'Range' ])
192
- pcheck { expect(@store['a'].to_a).to eq([ 'Integer', 'String', 'Range' ]) }
188
+ expect(a.map! { |e| e.class.to_s }.to_a).to eq(%w[Integer String Range])
189
+ pcheck { expect(@store['a'].to_a).to eq(%w[Integer String Range]) }
193
190
  end
194
191
 
195
- a = cpa([ 1, 'cat', 1..1 ])
196
- expect(a.map! { 99 }).to eq([ 99, 99, 99])
197
- pcheck { expect(@store['a']).to eq ([ 99, 99, 99]) }
192
+ a = cpa([1, 'cat', 1..1])
193
+ expect(a.map! { 99 }).to eq([99, 99, 99])
194
+ pcheck { expect(@store['a']).to eq([99, 99, 99]) }
198
195
  end
199
196
 
200
197
  it 'should support fill()' do
201
198
  pcheck { expect(cpa([]).fill(99)).to eq([]) }
202
199
  pcheck { expect(cpa([]).fill(99, 0)).to eq([]) }
203
- pcheck { expect(cpa([]).fill(99, 0, 1)).to eq([ 99 ]) }
200
+ pcheck { expect(cpa([]).fill(99, 0, 1)).to eq([99]) }
204
201
  end
205
202
 
206
203
  it 'should support flatten!()' do
207
- a1 = cpa([ 1, 2, 3], 'a1')
208
- a2 = cpa([ 5, 6 ], 'a2')
209
- a3 = cpa([ 4, a2 ], 'a3')
210
- a4 = cpa([ a1, a3 ], 'a4')
211
- pcheck { expect(@store['a4'].flatten).to eq([ 1, 2, 3, 4, 5, 6 ]) }
204
+ a1 = cpa([1, 2, 3], 'a1')
205
+ a2 = cpa([5, 6], 'a2')
206
+ a3 = cpa([4, a2], 'a3')
207
+ a4 = cpa([a1, a3], 'a4')
208
+ pcheck { expect(@store['a4'].flatten).to eq([1, 2, 3, 4, 5, 6]) }
212
209
  end
213
210
 
214
211
  it 'should support replace()' do
215
- a1 = cpa([ 1, 2, 3], 'a1')
212
+ a1 = cpa([1, 2, 3], 'a1')
216
213
  a_id = a1.__id__
217
- expect(a1.replace(cpa([4, 5, 6], 'a2'))).to eq([ 4, 5, 6 ])
218
- pcheck { expect(@store['a1']).to eq ([ 4, 5, 6 ]) }
214
+ expect(a1.replace(cpa([4, 5, 6], 'a2'))).to eq([4, 5, 6])
215
+ pcheck { expect(@store['a1']).to eq([4, 5, 6]) }
219
216
  end
220
217
 
221
218
  it 'should support insert()' do
222
- a = cpa([ 0 ])
219
+ a = cpa([0])
223
220
  a.insert(1)
224
- pcheck { expect(@store['a']).to eq([ 0 ]) }
221
+ pcheck { expect(@store['a']).to eq([0]) }
225
222
  @store['a'].insert(1, 1)
226
- pcheck { expect(@store['a']).to eq([ 0, 1]) }
223
+ pcheck { expect(@store['a']).to eq([0, 1]) }
227
224
  end
228
225
 
229
226
  it 'should support push()' do
230
- a = cpa([ 1, 2, 3 ])
227
+ a = cpa([1, 2, 3])
231
228
  a.push(4, 5)
232
- pcheck { expect(@store['a']).to eq([ 1, 2, 3, 4, 5 ]) }
229
+ pcheck { expect(@store['a']).to eq([1, 2, 3, 4, 5]) }
233
230
  @store['a'].push(nil)
234
- pcheck { expect(@store['a']).to eq([ 1, 2, 3, 4, 5, nil ]) }
231
+ pcheck { expect(@store['a']).to eq([1, 2, 3, 4, 5, nil]) }
235
232
  end
236
233
 
237
234
  it 'should support inspect' do
238
- a1 = cpa([ 1 ], 'a1')
239
- a2 = cpa([ 1, a1 ], 'a2')
235
+ a1 = cpa([1], 'a1')
236
+ a2 = cpa([1, a1], 'a2')
240
237
  expect(a1.inspect).to eq("<PEROBS::Array:#{a1._id}>\n[\n 1\n]\n")
241
238
  expect(a2.inspect).to eq("<PEROBS::Array:#{a2._id}>\n[\n 1,\n <PEROBS::ObjectBase:#{a1._id}>\n]\n")
242
239
  end
243
240
 
244
241
  it 'should only provide POXReference objects' do
245
- a = cpa([ @store.new(PO), @store.new(PO) ])
242
+ a = cpa([@store.new(PO), @store.new(PO)])
246
243
  expect(a[0].respond_to?(:is_poxreference?)).to be true
247
- a.each do |a|
248
- expect(a.respond_to?(:is_poxreference?)).to be true
244
+ a.each do |ai|
245
+ expect(ai.respond_to?(:is_poxreference?)).to be true
249
246
  end
250
247
  end
251
248
 
@@ -256,5 +253,4 @@ describe PEROBS::Array do
256
253
  expect { a[0] = o.get_self }.to raise_error(PEROBS::FatalError)
257
254
  PEROBS.log.open($stderr)
258
255
  end
259
-
260
256
  end
data/test/BTreeDB_spec.rb CHANGED
@@ -40,7 +40,7 @@ describe PEROBS::BTreeDB do
40
40
 
41
41
  it 'should create database' do
42
42
  @db = PEROBS::BTreeDB.new('fs_test')
43
- expect(Dir.exists?('fs_test')).to be true
43
+ expect(Dir.exist?('fs_test')).to be true
44
44
  end
45
45
 
46
46
  it 'should write and read a simple Hash' do
@@ -72,6 +72,10 @@ describe PEROBS::BTreeDB do
72
72
  it 'should support most Ruby objects types' do
73
73
  [ :marshal, :yaml ].each do |serializer|
74
74
  @db = PEROBS::BTreeDB.new('fs_test', { :serializer => serializer })
75
+ class_map = PEROBS::ClassMap.new(@db)
76
+ @db.register_class_map(class_map)
77
+ class_map.class_to_id(Time)
78
+ class_map.class_to_id(UStruct)
75
79
  expect(@db.include?(0)).to be false
76
80
  h = {
77
81
  'String' => 'What god has wrought',
@@ -1,5 +1,5 @@
1
- # encoding: UTF-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Copyright (c) 2016, 2017 by Chris Schlaeger <chris@taskjuggler.org>
4
4
  #
5
5
  # MIT License
@@ -25,12 +25,11 @@
25
25
 
26
26
  require 'fileutils'
27
27
 
28
- require 'spec_helper'
29
- require 'perobs/Store'
30
- require 'perobs/BigTree'
28
+ require_relative 'spec_helper'
29
+ require_relative '../lib/perobs/Store'
30
+ require_relative '../lib/perobs/BigTree'
31
31
 
32
32
  describe PEROBS::BigTreeNode do
33
-
34
33
  before(:all) do
35
34
  @db_name = generate_db_name(__FILE__)
36
35
  @store = PEROBS::Store.new(@db_name)
@@ -148,6 +147,4 @@ describe PEROBS::BigTreeNode do
148
147
  expect(s.leaf_nodes).to eql(3)
149
148
  expect(s.branch_nodes).to eql(1)
150
149
  end
151
-
152
150
  end
153
-
@@ -0,0 +1 @@
1
+ {"LegacyDB::Fragment":0,"PEROBS::Hash":1,"PEROBS::Array":2}
@@ -0,0 +1 @@
1
+ {"serializer":{"json_class":"Symbol","s":"json"}}
@@ -0,0 +1,5 @@
1
+ # Logfile created on 2020-03-31 21:50:02 +0200 by logger.rb/61378
2
+ 2020-03-31 21:50:02 +0200 INFO New FlatFile database 'test/database.blobs' created
3
+ 2020-03-31 21:50:02 +0200 INFO FlatFile 'test' opened
4
+ 2020-03-31 21:50:02 +0200 INFO FlatFile 'test' closed
5
+ 2020-03-31 21:50:02 +0200 INFO FlatFile 'test' opened
@@ -0,0 +1 @@
1
+ 4
data/test/spec_helper.rb CHANGED
@@ -35,7 +35,7 @@ def generate_db_name(caller_file)
35
35
  begin
36
36
  db_name = File.join(Dir.tmpdir,
37
37
  "#{File.basename(caller_file)}.#{rand(2**32)}")
38
- end while File.exists?(db_name)
38
+ end while File.exist?(db_name)
39
39
 
40
40
  db_name
41
41
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: perobs
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.5.0
4
+ version: 4.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Schlaeger
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-02 00:00:00.000000000 Z
11
+ date: 2023-07-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.3'
19
+ version: '2.2'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.3'
26
+ version: '2.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: yard
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 13.0.3
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.12'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.12'
55
69
  description: Library to provide a persistent object store
56
70
  email:
57
71
  - chris@linux.com
@@ -59,6 +73,7 @@ executables: []
59
73
  extensions: []
60
74
  extra_rdoc_files: []
61
75
  files:
76
+ - ".github/workflows/ruby.yml"
62
77
  - ".gitignore"
63
78
  - Gemfile
64
79
  - LICENSE.txt
@@ -134,6 +149,13 @@ files:
134
149
  - test/LegacyDBs/version_3/database_spaces.blobs
135
150
  - test/LegacyDBs/version_3/index.blobs
136
151
  - test/LegacyDBs/version_3/version
152
+ - test/LegacyDBs/version_4.1/class_map.json
153
+ - test/LegacyDBs/version_4.1/config.json
154
+ - test/LegacyDBs/version_4.1/database.blobs
155
+ - test/LegacyDBs/version_4.1/database_spaces.blobs
156
+ - test/LegacyDBs/version_4.1/index.blobs
157
+ - test/LegacyDBs/version_4.1/log
158
+ - test/LegacyDBs/version_4.1/version
137
159
  - test/LockFile_spec.rb
138
160
  - test/Object_spec.rb
139
161
  - test/SpaceManager_spec.rb
@@ -146,7 +168,7 @@ homepage: https://github.com/scrapper/perobs
146
168
  licenses:
147
169
  - MIT
148
170
  metadata: {}
149
- post_install_message:
171
+ post_install_message:
150
172
  rdoc_options: []
151
173
  require_paths:
152
174
  - lib
@@ -154,15 +176,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
154
176
  requirements:
155
177
  - - ">="
156
178
  - !ruby/object:Gem::Version
157
- version: '2.4'
179
+ version: '2.5'
158
180
  required_rubygems_version: !ruby/object:Gem::Requirement
159
181
  requirements:
160
182
  - - ">="
161
183
  - !ruby/object:Gem::Version
162
184
  version: '0'
163
185
  requirements: []
164
- rubygems_version: 3.2.32
165
- signing_key:
186
+ rubygems_version: 3.4.1
187
+ signing_key:
166
188
  specification_version: 4
167
189
  summary: Persistent Ruby Object Store
168
190
  test_files:
@@ -187,6 +209,13 @@ test_files:
187
209
  - test/LegacyDBs/version_3/database_spaces.blobs
188
210
  - test/LegacyDBs/version_3/index.blobs
189
211
  - test/LegacyDBs/version_3/version
212
+ - test/LegacyDBs/version_4.1/class_map.json
213
+ - test/LegacyDBs/version_4.1/config.json
214
+ - test/LegacyDBs/version_4.1/database.blobs
215
+ - test/LegacyDBs/version_4.1/database_spaces.blobs
216
+ - test/LegacyDBs/version_4.1/index.blobs
217
+ - test/LegacyDBs/version_4.1/log
218
+ - test/LegacyDBs/version_4.1/version
190
219
  - test/LockFile_spec.rb
191
220
  - test/Object_spec.rb
192
221
  - test/SpaceManager_spec.rb