xenum 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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: