xenum 0.1.0 → 0.1.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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +26 -3
  3. data/lib/xenum/version.rb +1 -1
  4. data/lib/xenum.rb +19 -0
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 49676029dfbb587b8ac7a7211b8695f61665d620a7344701f8ac9589b0a69df1
4
- data.tar.gz: 9ed131434678efa71892e8291c27b87303b8bc142b748a65801e6481b23f5986
3
+ metadata.gz: 6bbf9d98e7579cf718f304fdde5a13459d5c3b225383d48d20fba38bc25d6f59
4
+ data.tar.gz: 5d448b96d97c4438fbb491ebfe89e8aee222977c0df42edb568972ef41cb1ccb
5
5
  SHA512:
6
- metadata.gz: e757c26e20bc7056172f08a3fb3cf27a8b2073ee1e5b1c71bd2b518f10869f01caca5365b7228bc6477a6ebf91091db55afdc5507b874b70f9028a4942d208c6
7
- data.tar.gz: f1b94ca948f910e36485c5f1eedaa4b6694459d520795ffe782403e69e385fb272252eb69394ebc8aedce3a5c8be238b2eee769ea563df68209ddd5747ab647f
6
+ metadata.gz: be579d94a4ce9c11aac9e2be34c2542e92e6c6fef2d7624e662cbfcc5f8f277262d58094bb5b245d44d6e6949a85811faf081f1ffed2592dd3bdc8e62d907565
7
+ data.tar.gz: 6bdabc0c8e78e6dd35ee33d7af734cc15b86bf66e6d40e26b14804900d211dae1ddbd53c8cc86904cd2c90e723bafb55a3d36083551c84154f5feb4f379a497e
data/README.md CHANGED
@@ -14,14 +14,37 @@ If bundler is not being used to manage dependencies, install the gem by executin
14
14
 
15
15
  ## Usage
16
16
 
17
- `lazy_product` works like `Array#product`, but not limited to `Array`
17
+ ### lazy_flatten
18
+
19
+ works like `Array#flatten`, but for all `Enumerable`, and it is lazy
18
20
 
19
21
  ```ruby
20
- 3.times.lazy_product((3..5), [6,7,8]).take(6)
22
+ [
23
+ 3.times,
24
+ 3,
25
+ 4,
26
+ [5, [6,7]],
27
+ (8..10),
28
+ Enumerator.new{|e| n = 10; loop{e << n+=1}}
29
+ ].lazy_flatten.first(15)
30
+ # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
31
+ ```
32
+
33
+ ### lazy_product
34
+
35
+ works like `Array#product`, but not limited to `Array`
36
+
37
+ ```ruby
38
+ 3.times.lazy_product(
39
+ (3..5),
40
+ [6,7,8]
41
+ ).take(6)
21
42
  # [[0, 3, 6], [0, 3, 7], [0, 3, 8], [0, 4, 6], [0, 4, 7], [0, 4, 8]]
22
43
  ```
23
44
 
24
- `merge_sort` lazily merge sort two sorted `Enumerable`
45
+ ### merge_sort
46
+
47
+ lazily merge sort two sorted `Enumerable`
25
48
 
26
49
  ```ruby
27
50
  e = (6..8).merge_sort([3,4,5]).merge_sort(3.times)
data/lib/xenum/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Xenum
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
data/lib/xenum.rb CHANGED
@@ -7,6 +7,25 @@ module Xenum
7
7
  end
8
8
 
9
9
  module Enumerable
10
+ def lazy_flatten(level = nil)
11
+ these = self
12
+ level = -1 if level.nil?
13
+
14
+ Enumerator.new do |yielder|
15
+ level.nil?
16
+ these.each do |this|
17
+ if Enumerable === this && level != 0
18
+ this.lazy_flatten(level - 1).each do |sub|
19
+ yielder.yield(sub)
20
+ end
21
+ next
22
+ end
23
+
24
+ yielder.yield(this)
25
+ end
26
+ end
27
+ end
28
+
10
29
  def lazy_product(*enums)
11
30
  if enums.empty?
12
31
  return Enumerator.new do |yielder|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xenum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - ken
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-03-14 00:00:00.000000000 Z
11
+ date: 2024-03-15 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: