fractional_indexer 0.2.0 → 0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 529455a944319ae06942cb577687a1c6d06e2869316d0f715c7a03415704c0a9
4
- data.tar.gz: afccd5d154f1637648c6418637d4243a518c0774f575a4b2eea909db0f89e762
3
+ metadata.gz: c6ee81d4e4b26c262bb862ec3b52558808d483bfb67fdb4c32889a7b3cc6c822
4
+ data.tar.gz: 2bd077740a8272885e6703f04abdc1361f3171c43156a59794b40bada2c608fd
5
5
  SHA512:
6
- metadata.gz: ab6facf8bbf718cdc36fd3bfb74d27913b3f68635b1a573e72426ee70a1d132b860f0008cef13d6bca89273f24ca226c765e4a44f80591e5da058e8e9fe71518
7
- data.tar.gz: 933bf9eca9dfd21b40ba7fda2bb4951cf198fd398580e800118366fd5b58e4514b5744739ecb5192ef4b5dbea4b1a5994f692de79e7ed329a5875512f8f9d4be
6
+ metadata.gz: 7cc2e6cc619a29bcb7cfae8c2fb6e2fbbda62ee17823b217717ac357e93de4bf24830fe3ffd98ce48ba5d19f293fb68d10df4bf4926b8619a61bcfd67be0f826
7
+ data.tar.gz: ef547fa499d8bf94c57db52da6fb1b146fe6ce4ba4f14b24123c5e30e125da4e904605918dc314ec76dfebf60deff5af406ab50dbe096b1b24f288e39b4093c0
data/README.md CHANGED
@@ -61,6 +61,26 @@ FractionalIndexer.generate_key(prev_key: 'a1', next_key: 'a1')
61
61
  # => error
62
62
  ```
63
63
 
64
+ ### Generate Multiple Order keys
65
+
66
+ To generate multiple order keys, use the `FractionalIndexer.generate_keys` method.
67
+
68
+ ```ruby
69
+ require 'fractional_indexer'
70
+
71
+ # generate n order keys that sequentially follow a given prev_key.
72
+ FractionalIndexer.generate_keys(prev_key: "b11", count: 5)
73
+ # => ["b12", "b13", "b14", "b15", "b16"]
74
+
75
+ # generate n order keys that sequentially precede a given next_key.
76
+ FractionalIndexer.generate_keys(next_key: "b11", count: 5)
77
+ # => ["b0w", "b0x", "b0y", "b0z", "b10"]
78
+
79
+ # generate n order keys between the given prev_key and next_key.
80
+ FractionalIndexer.generate_keys(prev_key: "b10", next_key: "b11", count: 5)
81
+ # => ["b108", "b10G", "b10V", "b10d", "b10l"]
82
+ ```
83
+
64
84
  ## Configure
65
85
 
66
86
  ### base
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FractionalIndexer
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
  end
@@ -50,6 +50,42 @@ module FractionalIndexer
50
50
  end
51
51
  end
52
52
 
53
+ def self.generate_keys(prev_key: nil, next_key: nil, count: 1)
54
+ return [] if count <= 0
55
+ return [generate_key(prev_key: prev_key, next_key: next_key)] if count == 1
56
+
57
+ if next_key.nil?
58
+ base_order_key = generate_key(prev_key: prev_key)
59
+ result = [base_order_key]
60
+
61
+ (count - 1).times do
62
+ result << generate_key(prev_key: result.last)
63
+ end
64
+
65
+ return result
66
+ end
67
+
68
+ if prev_key.nil?
69
+ base_order_key = generate_key(next_key: next_key)
70
+ result = [base_order_key]
71
+
72
+ (count - 1).times do
73
+ result << generate_key(next_key: result.last)
74
+ end
75
+
76
+ return result.reverse
77
+ end
78
+
79
+ mid = count / 2
80
+ base_order_key = generate_key(prev_key: prev_key, next_key: next_key)
81
+
82
+ [
83
+ *generate_keys(prev_key: prev_key, next_key: base_order_key, count: mid),
84
+ base_order_key,
85
+ *generate_keys(prev_key: base_order_key, next_key: next_key, count: count - mid - 1),
86
+ ]
87
+ end
88
+
53
89
  def self.decrement(order_key)
54
90
  return order_key.integer + Midpointer.execute("", order_key.fractional) if order_key.minimum_integer?
55
91
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fractional_indexer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - kazu