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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 90c77003da7bd628fa753bfe35918d8c702b433ac5113ba9fc206f7afa114f6c
4
- data.tar.gz: c38f786cb10a040048b7d08b75c16baf034c116a3f9648ece3af7b50e7898446
3
+ metadata.gz: ab088013ef7d418174d01ec9ca992a8af41740f90e05857b58bb0f6696dcef3a
4
+ data.tar.gz: 65ec2df5c10d4725e91b8fcbaa8676a921afc11c899f179fc6895a4fb43d18c0
5
5
  SHA512:
6
- metadata.gz: 1fea934c359190c3b171c99e4dbffb3af58ec2f9dd755eedc0acb7db556f0e2471bd3c527a2910e5d8f17cd59b3f1ca4079436bc80bd11ea5d6efa60f55a54e9
7
- data.tar.gz: db71320a9672848a3e35088e7a8b3389278c987a1bea905336e3f8bfff6daeb27564724b6f9d681d364684a57ce8593021041626615dace155e1849b0944003b
6
+ metadata.gz: 83387ebc8c3b6288c54db762aa4ff22be19bbe40368fa5435a51ccefb8231d8afd4d4bdae6bb1e8920f0a89749ab1d25938fd28529e66b84e97604673b34d6e6
7
+ data.tar.gz: 1de1c7b4e10b19e6a55634980a87839b84cf22f400bb0c5b94e765056f1890f59a8253048127c912e35fc1d21dbfdba03516de24e832a3b4ccf92f6e9fecf540
@@ -0,0 +1,38 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ push:
12
+ branches: [ "master" ]
13
+ pull_request:
14
+ branches: [ "master" ]
15
+
16
+ permissions:
17
+ contents: read
18
+
19
+ jobs:
20
+ test:
21
+
22
+ runs-on: ubuntu-latest
23
+ strategy:
24
+ matrix:
25
+ ruby-version: ['2.6', '2.7', '3.0', '3.2']
26
+
27
+ steps:
28
+ - uses: actions/checkout@v3
29
+ - name: Set up Ruby
30
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
31
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
32
+ # uses: ruby/setup-ruby@v1
33
+ uses: ruby/setup-ruby@55283cc23133118229fd3f97f9336ee23a179fcf # v1.146.0
34
+ with:
35
+ ruby-version: ${{ matrix.ruby-version }}
36
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
37
+ - name: Run tests
38
+ run: bundle exec rake
data/.gitignore CHANGED
@@ -1,6 +1,5 @@
1
1
  .bundle/
2
2
  .yardoc
3
- Gemfile.lock
4
3
  _yardoc/
5
4
  coverage/
6
5
  doc/
data/Gemfile CHANGED
@@ -2,3 +2,4 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in perobs.gemspec
4
4
  gemspec
5
+
data/lib/perobs/Array.rb CHANGED
@@ -1,5 +1,5 @@
1
- # encoding: UTF-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # = Array.rb -- Persistent Ruby Object Store
4
4
  #
5
5
  # Copyright (c) 2015, 2016, 2017 by Chris Schlaeger <chris@taskjuggler.org>
@@ -25,11 +25,10 @@
25
25
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26
26
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27
27
 
28
- require 'perobs/Log'
29
- require 'perobs/ObjectBase'
28
+ require_relative 'Log'
29
+ require_relative 'ObjectBase'
30
30
 
31
31
  module PEROBS
32
-
33
32
  # An Array that is transparently persisted onto the back-end storage. It is
34
33
  # very similar to the Ruby built-in Array class but like other PEROBS
35
34
  # object classes it converts direct references to other PEROBS objects into
@@ -41,15 +40,14 @@ module PEROBS
41
40
  # with BasicObject.initialize_copy. You can use PEROBS::Array.replace()
42
41
  # instead.
43
42
  class Array < ObjectBase
44
-
45
43
  attr_reader :data
46
44
 
47
45
  # These methods do not mutate the Array but create a new PEROBS::Array
48
46
  # object. They only perform read operations.
49
- ([
50
- :|, :&, :+, :-, :collect, :compact, :drop, :drop_while,
51
- :flatten, :map, :reject, :reverse, :rotate, :select, :shuffle, :slice,
52
- :sort, :take, :take_while, :uniq, :values_at
47
+ (%i[
48
+ | & + - collect compact drop drop_while
49
+ flatten map reject reverse rotate select shuffle slice
50
+ sort take take_while uniq values_at
53
51
  ] + Enumerable.instance_methods).uniq.each do |method_sym|
54
52
  define_method(method_sym) do |*args, &block|
55
53
  @store.cache.cache_read(self)
@@ -59,12 +57,12 @@ module PEROBS
59
57
 
60
58
  # These methods do not mutate the Array and only perform read operations.
61
59
  # They do not return basic objects types.
62
- ([
63
- :==, :[], :<=>, :at, :bsearch, :bsearch_index, :count, :cycle,
64
- :each, :each_index, :empty?, :eql?, :fetch, :find_index, :first,
65
- :frozen?, :include?, :index, :join, :last, :length, :pack,
66
- :pretty_print, :pretty_print_cycle, :reverse_each, :rindex, :sample,
67
- :size, :to_a, :to_ary, :to_s
60
+ (%i[
61
+ == [] <=> at bsearch bsearch_index count cycle
62
+ each each_index empty? eql? fetch find_index first
63
+ frozen? include? index join last length pack
64
+ pretty_print pretty_print_cycle reverse_each rindex sample
65
+ size to_a to_ary to_s
68
66
  ] + Enumerable.instance_methods).uniq.each do |method_sym|
69
67
  define_method(method_sym) do |*args, &block|
70
68
  @store.cache.cache_read(self)
@@ -73,11 +71,11 @@ module PEROBS
73
71
  end
74
72
 
75
73
  # These methods mutate the Array and return self.
76
- [
77
- :<<, :clear, :collect!, :compact!, :concat,
78
- :fill, :flatten!, :insert, :keep_if, :map!, :push,
79
- :reject!, :replace, :select!, :reverse!, :rotate!, :shuffle!,
80
- :slice!, :sort!, :sort_by!, :uniq!
74
+ %i[
75
+ << clear collect! compact! concat
76
+ fill flatten! insert keep_if map! push
77
+ reject! replace select! reverse! rotate! shuffle!
78
+ slice! sort! sort_by! uniq!
81
79
  ].each do |method_sym|
82
80
  define_method(method_sym) do |*args, &block|
83
81
  @store.cache.cache_write(self)
@@ -87,8 +85,8 @@ module PEROBS
87
85
  end
88
86
 
89
87
  # These methods mutate the Array.
90
- [
91
- :delete, :delete_at, :delete_if, :shift, :pop
88
+ %i[
89
+ delete delete_at delete_if shift pop
92
90
  ].each do |method_sym|
93
91
  define_method(method_sym) do |*args, &block|
94
92
  @store.cache.cache_write(self)
@@ -104,7 +102,7 @@ module PEROBS
104
102
  # Array to initialize
105
103
  # @param default [Any] The default value that is returned when no value is
106
104
  # stored for a specific key.
107
- def initialize(p, arg1 = 0, default = nil, &block)
105
+ def initialize(p, arg1 = 0, default = nil)
108
106
  super(p)
109
107
  if arg1.is_a?(::Array)
110
108
  arg1.each { |v| _check_assignment_value(v) }
@@ -123,7 +121,7 @@ module PEROBS
123
121
 
124
122
  # Proxy for the assignment method.
125
123
  def []=(*args)
126
- if (args.length == 2)
124
+ if args.length == 2
127
125
  _check_assignment_value(args[1])
128
126
  else
129
127
  _check_assignment_value(args[2])
@@ -144,8 +142,8 @@ module PEROBS
144
142
  # @return [Array of Integer] IDs of referenced objects
145
143
  def _referenced_object_ids
146
144
  @data.each.select do |v|
147
- v && v.respond_to?(:is_poxreference?)
148
- end.map { |o| o.id }
145
+ v&.respond_to?(:is_poxreference?)
146
+ end.map(&:id)
149
147
  end
150
148
 
151
149
  # This method should only be used during store repair operations. It will
@@ -199,8 +197,5 @@ module PEROBS
199
197
  end
200
198
  end
201
199
  end
202
-
203
200
  end
204
-
205
201
  end
206
-
@@ -1,4 +1,4 @@
1
- # encoding: UTF-8
1
+ # # frozen_string_literal: true
2
2
  #
3
3
  # = BigArray.rb -- Persistent Ruby Object Store
4
4
  #
@@ -26,20 +26,16 @@
26
26
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27
27
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
28
 
29
- require 'perobs/Object'
30
- require 'perobs/BigArrayNode'
29
+ require_relative 'Object'
30
+ require_relative 'BigArrayNode'
31
31
 
32
32
  module PEROBS
33
-
34
33
  # The BigArray class implements an Array that stores the data in segments. It
35
34
  # only loads the currently needed parts of the Array into memory. To provide
36
35
  # an efficient access to the data by index a B+Tree like data structure is
37
36
  # used. Each segment is stored in a leaf node of the B+Tree.
38
37
  class BigArray < PEROBS::Object
39
-
40
- class Stats < Struct.new(:leaf_nodes, :branch_nodes, :min_depth,
41
- :max_depth)
42
- end
38
+ Stats = Struct.new(:leaf_nodes, :branch_nodes, :min_depth, :max_depth)
43
39
 
44
40
  attr_persist :node_size, :root, :first_leaf, :last_leaf, :entry_counter
45
41
 
@@ -53,12 +49,8 @@ module PEROBS
53
49
  # range to try.
54
50
  def initialize(p, node_size = 150)
55
51
  super(p)
56
- unless node_size > 3
57
- PEROBS.log.fatal "Node size (#{node_size}) must be larger than 3"
58
- end
59
- unless node_size % 2 == 0
60
- PEROBS.log.fatal "Node size (#{node_size}) must be an even number"
61
- end
52
+ PEROBS.log.fatal "Node size (#{node_size}) must be larger than 3" unless node_size > 3
53
+ PEROBS.log.fatal "Node size (#{node_size}) must be an even number" unless (node_size % 2).zero?
62
54
 
63
55
  self.node_size = node_size
64
56
  clear
@@ -146,11 +138,9 @@ module PEROBS
146
138
  # @param index [Integer] Index in the BigArray
147
139
  # @return [Object] found value or nil
148
140
  def delete_at(index)
149
- if index < 0
150
- index = @entry_counter + index
151
- end
141
+ index = @entry_counter + index if index.negative?
152
142
 
153
- return nil if index < 0 || index >= @entry_counter
143
+ return nil if index.negative? || index >= @entry_counter
154
144
 
155
145
  deleted_value = nil
156
146
  @store.transaction do
@@ -176,9 +166,7 @@ module PEROBS
176
166
  old_root = @root
177
167
  clear
178
168
  old_root.each do |k, v|
179
- if !yield(k, v)
180
- insert(k, v)
181
- end
169
+ insert(k, v) unless yield(k, v)
182
170
  end
183
171
  end
184
172
 
@@ -191,7 +179,7 @@ module PEROBS
191
179
 
192
180
  # Return true if the BigArray has no stored entries.
193
181
  def empty?
194
- @entry_counter == 0
182
+ @entry_counter.zero?
195
183
  end
196
184
 
197
185
  # Return the first entry of the Array.
@@ -215,6 +203,7 @@ module PEROBS
215
203
  node = @first_leaf
216
204
  while node
217
205
  break unless node.each(&block)
206
+
218
207
  node = node.next_sibling
219
208
  end
220
209
  end
@@ -226,6 +215,7 @@ module PEROBS
226
215
  node = @last_leaf
227
216
  while node
228
217
  break unless node.reverse_each(&block)
218
+
229
219
  node = node.prev_sibling
230
220
  end
231
221
  end
@@ -236,7 +226,7 @@ module PEROBS
236
226
  def to_a
237
227
  ary = []
238
228
  node = @first_leaf
239
- while node do
229
+ while node
240
230
  ary += node.values
241
231
  node = node.next_sibling
242
232
  end
@@ -267,10 +257,10 @@ module PEROBS
267
257
  private
268
258
 
269
259
  def validate_index_range(index)
270
- if index < 0
260
+ if index.negative?
271
261
  if -index > @entry_counter
272
- raise IndexError, "index #{index} too small for array; " +
273
- "minimum #{-@entry_counter}"
262
+ raise IndexError, "index #{index} too small for array; " \
263
+ "minimum #{-@entry_counter}"
274
264
  end
275
265
 
276
266
  index = @entry_counter + index
@@ -278,8 +268,5 @@ module PEROBS
278
268
 
279
269
  index
280
270
  end
281
-
282
271
  end
283
-
284
272
  end
285
-