kink 1.0.2 → 1.1.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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/kink.rb +28 -4
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2d1edf316dd18ddbf2f38fef37b91ea7b2dc5a60f716295ffbdd8fc576964cda
4
- data.tar.gz: c6543ce8b21be6b1e75088c6cb127c35037ad01802daa4d33bc58d42beb25800
3
+ metadata.gz: 299334756b220527358fcbc9cf22fa253904b31eeea7659a107e31e41e958b09
4
+ data.tar.gz: 9496ecf590331322a2940c8d62bf1d9a69f1f46ac3931f5218790c4cc6fc4991
5
5
  SHA512:
6
- metadata.gz: 27e6f0c3f1e30109bc5c80dde109a980e2003e236d5d8512b404cd3234edadd0b6116176d5ad39465acad4dfcbc5237ffb48d8654e72367e133db64e7bcacb41
7
- data.tar.gz: 37522d1c930164d5fb81eca3c9a40119c4124547c2276bc476fe9061868386448fae3d7be44cd84cd4d9f3f3e532ec2285858d280625b72ba99f3bdf066d8193
6
+ metadata.gz: 3dcc67f37990387d947b456845c3317a62af10d1561f88998b111fde47fbc06623fa8fff0594c69164c2240b031961750cd848623501b1ef399b07ccc2433681
7
+ data.tar.gz: 744dddbbc0f23bd0b23609e0c3476542fc428019d4f97695181164482492ca916af27921503b1262f0c56cec883e09b1f914385146285efa4517b38a16151bf4
data/lib/kink.rb CHANGED
@@ -1,20 +1,29 @@
1
1
  module Kink
2
- class NextArgs < Array
2
+ class NextArgs
3
+ include Enumerable
4
+
5
+ def initialize(*args)
6
+ @args=args
7
+ end
8
+
9
+ def each(&block)
10
+ @args.each(&block)
11
+ end
3
12
  end
4
13
 
5
14
  module_function
6
15
 
7
16
  def kink_next(*args)
8
- NextArgs[*args]
17
+ NextArgs.new(*args)
9
18
  end
10
19
 
11
20
  def kink(*y)
12
21
  unless block_given?
13
- return enum_for(:kink) { 1 }
22
+ return enum_for(:kink,*y) { 1 }
14
23
  end
15
24
 
16
25
  begin
17
- v = NextArgs[*y]
26
+ v = kink_next(*y)
18
27
  while v.is_a? NextArgs
19
28
  v = yield *v
20
29
  end
@@ -23,4 +32,19 @@ module Kink
23
32
  e.result
24
33
  end
25
34
  end
35
+
36
+ def kink_produce(*y)
37
+ unless block_given?
38
+ raise ArgumentError.new("no block given")
39
+ end
40
+
41
+ Enumerator.new do |yielder|
42
+ yielder.yield(*y) unless y.empty?
43
+ v = kink_next(*y)
44
+ while v.is_a? NextArgs
45
+ v = yield *v
46
+ yielder.yield(*v)
47
+ end
48
+ end
49
+ end
26
50
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kink
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Paterson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-29 00:00:00.000000000 Z
11
+ date: 2024-06-30 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: kink provides a unified syntax to mix and match for, while, do while,
14
14
  and until semantics all day long in a way that still feels familiar to the loop