id_pack 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 134634ca7135fe231b5317f490e79e3257d831d8dc5fa00f4f9e16b9f5c8fdc7
4
- data.tar.gz: b5261d22f3a7361b91bef98f9a00c4c09b9537bd291154904bb29590da33c840
3
+ metadata.gz: b5f37248d6d0c731cfece926768123b9a96f521cb34cf2f76fcb04fb4efcf99a
4
+ data.tar.gz: 1c7b08b0947629ddeaba409668aa5da5762635686dcb4b6a88b98e4783056125
5
5
  SHA512:
6
- metadata.gz: e3e8c529a0f80b61653e82a1166de3376c62b5ff055c39c5a62db44a47ee3b7f2feb46a3cab375726b16a7db35aaa87d8aa87c93b16496d7d524cec5558be215
7
- data.tar.gz: df3eb9252f3c0cbed434381d2c986ea7b1e2a98b8809646144d13baff4b65b38f866c9ee154abe0b35c79f1bbc3842039ce6a2fba516e6bfedb51ad9c8fc5600
6
+ metadata.gz: f8bf4a8baab41a56e9700fe8c527f5af2035eb9ad153dd8de04519717c3ab3c44edc18d53da24b6f7a48b4c9ad4a6e2c0b6167b4c651dec90ea8fef2c412b65b
7
+ data.tar.gz: 982e99cb3380b8de9ede487dea40cd33d6199df1e777bc7e49d5c5da011176241622c195c4724d3f9d8440ed028c5062868c6d599e9481ef214b0af41ee58e4d
@@ -22,7 +22,7 @@ jobs:
22
22
  ruby-version: ['2.6', '2.7', '3.0']
23
23
 
24
24
  steps:
25
- - uses: actions/checkout@v2
25
+ - uses: actions/checkout@v3
26
26
  - name: Set up Ruby
27
27
  # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
28
28
  # change this to (see https://github.com/ruby/setup-ruby#versioning):
@@ -99,20 +99,315 @@
99
99
  isExcludeNull: true,
100
100
  outputCharset: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-",
101
101
 
102
+ range: function(start, length) {
103
+
104
+ /** convert arguments to numbers */
105
+ if (typeof start != 'number') {
106
+ start = parseInt(start, 10);
107
+ }
108
+ if (typeof length != 'number') {
109
+ length = parseInt(length, 10);
110
+ }
111
+ this.start = !$.isNumeric(start) ? 0 : start;
112
+ this.length = !$.isNumeric(length) ? 0 : length;
113
+
114
+ // range functions
115
+
116
+ /**
117
+ * var range = IdPacker.range(0, 5);
118
+ * range.clone();
119
+ * => IdPacker.range(0, 5)
120
+ */
121
+ this.clone = function() {
122
+ return IdPacker.range(this.start, this.length);
123
+ };
124
+
125
+ /**
126
+ * var range = IdPacker.range(0, 5);
127
+ * range.end();
128
+ * => 4
129
+ */
130
+ this.end = function() {
131
+ return this.start + this.length - 1;
132
+ };
133
+
134
+ /**
135
+ * var range = IdPacker.range(3, 5);
136
+ * range.roundToWindow(5);
137
+ * => IdPacker.range(0, 10)
138
+ *
139
+ * range.roundToWindow(2);
140
+ * => IdPacker.range(2, 6)
141
+ */
142
+ this.roundToWindow = function(window_size) {
143
+ var start = Math.floor(this.start / window_size) * window_size;
144
+ var length = Math.ceil((this.start + this.length - start) / window_size) * window_size;
145
+ return IdPacker.range(start, length);
146
+ };
147
+
148
+ /**
149
+ * var range = IdPacker.range(0, 5);
150
+ * range.contain(3);
151
+ * => true
152
+ *
153
+ * range.contain(8);
154
+ * => false
155
+ */
156
+ this.contain = function(n) {
157
+ return n >= this.start && n <= this.end();
158
+ };
159
+
160
+ // range-to-range functions
161
+
162
+ /**
163
+ * var range1 = IdPacker.range(0, 2);
164
+ * var range2 = IdPacker.range(2, 2);
165
+ * var range3 = IdPacker.range(3, 2);
166
+ * range1.touch(range2);
167
+ * => true
168
+ *
169
+ * range1.touch(range3);
170
+ * => false
171
+ *
172
+ * range2.touch(range3);
173
+ * => true
174
+ */
175
+ this.touch = function(range) {
176
+ var start = Math.max(this.start, range.start);
177
+ var end = Math.min(this.end(), range.end());
178
+ var length = end - start + 1;
179
+ return length >= 0;
180
+ };
181
+
182
+ /**
183
+ * var range1 = IdPacker.range(2, 2);
184
+ * var range2 = IdPacker.range(3, 2);
185
+ * range1.intersect(range2);
186
+ * => IdPacker.range(3, 1)
187
+ */
188
+ this.intersect = function(range) {
189
+ var start = Math.max(this.start, range.start);
190
+ var end = Math.min(this.end(), range.end());
191
+ var length = end - start + 1;
192
+ return (length > 0) ? IdPacker.range(start, length) : null;
193
+ };
194
+
195
+ /**
196
+ * var range1 = IdPacker.range(2, 2);
197
+ * var range2 = IdPacker.range(2, 5);
198
+ * var range3 = IdPacker.range(0, 5);
199
+ * range1.isSubsetOf(range3);
200
+ * => true
201
+ *
202
+ * range2.isSubsetOf(range3);
203
+ * => false
204
+ */
205
+ this.isSubsetOf = function(range) {
206
+ return range.contain(this.start) && range.contain(this.end());
207
+ };
208
+
209
+ /**
210
+ * var range1 = IdPacker.range(0, 5);
211
+ * var range2 = IdPacker.range(2, 5);
212
+ * range1.union(range2);
213
+ * => IdPacker.range(0, 7)
214
+ */
215
+ this.union = function(range) {
216
+ var start = Math.min(this.start, range.start);
217
+ var end = Math.max(this.end(), range.end());
218
+ var length = end - start + 1;
219
+ return IdPacker.range(start, length);
220
+ };
221
+
222
+ /**
223
+ * var range1 = IdPacker.range(0, 5);
224
+ * var range2 = IdPacker.range(2, 5);
225
+ * range1.minus(range2);
226
+ * => IdPacker.range(0, 2)
227
+ */
228
+ this.minus = function(range) {
229
+ var intersectedRange = this.intersect(range);
230
+ if (this.equal(intersectedRange)) {
231
+ return [];
232
+ } else if (this.start < intersectedRange.start && this.end() > intersectedRange.end()) {
233
+ return [(IdPacker.range(this.start, intersectedRange.start - this.start)),
234
+ (IdPacker.range(intersectedRange.end() + 1, this.end() - intersectedRange.end()))];
235
+ } else if (this.start < intersectedRange.start) {
236
+ return [IdPacker.range(this.start, intersectedRange.start - this.start)];
237
+ } else {
238
+ return [IdPacker.range(intersectedRange.end() + 1, this.end() - intersectedRange.end())];
239
+ }
240
+ };
241
+
242
+ /**
243
+ * var range1 = IdPacker.range(0, 2);
244
+ * var range2 = IdPacker.range(0, 2);
245
+ * var range3 = IdPacker.range(2, 2);
246
+ * range1.equal(range2);
247
+ * => true
248
+ *
249
+ * range1.equal(range3);
250
+ * => false
251
+ */
252
+ this.equal = function (range) {
253
+ return this.start == range.start && this.length == range.length;
254
+ };
255
+
256
+ // range-to-ranges functions
257
+
258
+ /**
259
+ * var range1 = IdPacker.range(0, 2);
260
+ * var range2 = IdPacker.range(2, 2);
261
+ * var ranges = [IdPacker.range(0, 3), IdPacker.range(5, 3)];
262
+ * range1.hasFullRange(ranges);
263
+ * => true
264
+ *
265
+ * range2.hasFullRange(ranges);
266
+ * => false
267
+ */
268
+ this.hasFullRange = function(ranges) {
269
+ for(var i = 0, l = ranges.length; i < l; i++) {
270
+ if (this.isSubsetOf(ranges[i])) {
271
+ return true;
272
+ }
273
+ }
274
+ return false;
275
+ };
276
+
277
+ /**
278
+ * var range = IdPacker.range(2, 5);
279
+ * var ranges = [IdPacker.range(0, 3), IdPacker.range(5, 3)];
280
+ * range.getOverlapRanges(ranges);
281
+ * => [IdPacker.range(2, 1), IdPacker.range(5, 2)]
282
+ */
283
+ this.getOverlapRanges = function(ranges) {
284
+ var overlapRanges = [];
285
+ for(var i = 0, l = ranges.length; i < l; i++) {
286
+ var intersectedRange = this.intersect(ranges[i]);
287
+ if (intersectedRange !== null) {
288
+ overlapRanges.push(intersectedRange);
289
+ }
290
+ }
291
+ return overlapRanges;
292
+ };
293
+
294
+ /**
295
+ * var range = IdPacker.range(2, 5);
296
+ * var ranges = [IdPacker.range(0, 3), IdPacker.range(5, 3)];
297
+ * range.getMissingRanges(ranges);
298
+ * => [IdPacker.range(3, 2)]
299
+ */
300
+ this.getMissingRanges = function(ranges) {
301
+ var overlapRanges = this.getOverlapRanges(ranges);
302
+ var missingRanges = [];
303
+ var missingRange = this;
304
+
305
+ for(var i = 0, ol = overlapRanges.length; i < ol; i++) {
306
+ var currentMissingRanges = missingRange.minus(overlapRanges[i]);
307
+ for (var j = 0, cl = currentMissingRanges.length-1; j < cl; j++) {
308
+ missingRanges.push(currentMissingRanges[j]);
309
+ }
310
+ missingRange = currentMissingRanges[currentMissingRanges.length-1];
311
+ }
312
+
313
+ if (missingRange) {
314
+ missingRanges.push(missingRange);
315
+ }
316
+ return missingRanges;
317
+ };
318
+
319
+ /**
320
+ * var range = IdPacker.range(2, 5);
321
+ * var ranges = [IdPacker.range(0, 3), IdPacker.range(5, 3)];
322
+ * range.addToRanges(ranges);
323
+ * => [IdPacker.range(0, 8)]
324
+ */
325
+ this.addToRanges = function(ranges){
326
+ if (! ranges.length) {
327
+ ranges.push(this);
328
+ return ranges;
329
+ }
330
+ var i, l;
331
+ var overlapRanges = [];
332
+ var accumulate;
333
+
334
+ for (i = 0, l = ranges.length; i < l; i++) {
335
+ if (this.touch(ranges[i])) {
336
+ overlapRanges.push(i);
337
+ }
338
+ }
339
+ if (overlapRanges.length === 0) {
340
+ for (i = 0, l = ranges.length; i < l; i++) {
341
+ if (this.start < ranges[i].start) {
342
+ Array.prototype.splice.apply(ranges, [i, 0].concat(this));
343
+ return ranges;
344
+ }
345
+ }
346
+ ranges.push(this);
347
+ return ranges;
348
+ }
349
+
350
+ accumulate = this;
351
+ for (i = 0, l = overlapRanges.length; i < l; i++) {
352
+ accumulate = accumulate.union(ranges[overlapRanges[i]]);
353
+ }
354
+
355
+ Array.prototype.splice.apply(
356
+ ranges, [overlapRanges[0], overlapRanges.length].concat(accumulate)
357
+ );
358
+ return ranges;
359
+ };
360
+
361
+ /**
362
+ * var range = IdPacker.range(2, 5);
363
+ * var ranges = [IdPacker.range(0, 3), IdPacker.range(5, 3)];
364
+ * range.deleteFromRanges(ranges);
365
+ * => [IdPacker.range(0, 2), IdPacker.range(7, 1)]
366
+ *
367
+ * @param {Array(Range)} ranges
368
+ * @return {Array(Range)}
369
+ */
370
+ this.deleteFromRanges = function(ranges) {
371
+ var i, l;
372
+ var overlapRanges = [];
373
+ var accumulate = [];
374
+
375
+ for (i = 0, l = ranges.length; i < l; i++) {
376
+ if (this.intersect(ranges[i]) !== null) {
377
+ overlapRanges.push(i);
378
+ }
379
+ }
380
+ if (overlapRanges.length === 0) {
381
+ return ranges;
382
+ }
383
+
384
+ accumulate = [];
385
+
386
+ for (i = 0, l = overlapRanges.length; i < l; i++) {
387
+ accumulate = accumulate.concat(ranges[overlapRanges[i]].minus(this));
388
+ }
389
+
390
+ Array.prototype.splice.apply(
391
+ ranges, [overlapRanges[0], overlapRanges.length].concat(accumulate)
392
+ );
393
+ return ranges;
394
+ };
395
+ },
396
+
102
397
  /**
103
398
  * [1,2,3,6,7,8]
104
- * => [IdPack.range(start: 1 length: 3), IdPack.range(start: 6 length: 3)]
399
+ * => [IdPacker.range(start: 1 length: 3), IdPacker.range(start: 6 length: 3)]
105
400
  */
106
401
  convertNumbersToRanges: function (numbers) {
107
402
  var ranges = [];
108
403
  if (numbers.length > 0) {
109
- var range = new IdPack.range(numbers[0], 1);
404
+ var range = IdPacker.range(numbers[0], 1);
110
405
  for (var i = 1; i < numbers.length; i++) {
111
406
  if (numbers[i] == numbers[i-1]+1) {
112
407
  range.length = range.length + 1;
113
408
  } else {
114
409
  ranges.push(range);
115
- range = new IdPack.range(numbers[i], 1);
410
+ range = IdPacker.range(numbers[i], 1);
116
411
  }
117
412
  }
118
413
  ranges.push(range);
@@ -121,7 +416,7 @@
121
416
  },
122
417
 
123
418
  /**
124
- * [IdPack.range(start: 1 length: 3), IdPack.range(start: 6 length: 3)]
419
+ * [IdPacker.range(start: 1 length: 3), IdPacker.range(start: 6 length: 3)]
125
420
  * => "11100111"
126
421
  */
127
422
  convertRangesToBinaryNumber: function (ranges) {
data/id_pack.gemspec CHANGED
@@ -33,7 +33,7 @@ Gem::Specification.new do |spec|
33
33
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
34
34
  spec.require_paths = ["lib"]
35
35
 
36
- spec.add_development_dependency "bundler", "~> 2.2.19"
36
+ spec.add_development_dependency "bundler", "~> 2.3.0"
37
37
  spec.add_development_dependency "rake", "~> 13.0"
38
38
  spec.add_development_dependency "rspec", "~> 3.10"
39
39
  end
@@ -1,3 +1,3 @@
1
1
  module IdPack
2
- VERSION = "1.0.2".freeze
2
+ VERSION = "1.0.3".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: id_pack
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-08 00:00:00.000000000 Z
11
+ date: 2022-06-23 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.2.19
19
+ version: 2.3.0
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.2.19
26
+ version: 2.3.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -102,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  requirements: []
105
- rubygems_version: 3.1.4
105
+ rubygems_version: 3.2.22
106
106
  signing_key:
107
107
  specification_version: 4
108
108
  summary: Compression and packing methods for singular and collection IDs and UUIDs.