eventador 1.0.1 → 1.0.3

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: f4abf2c202c7b728e557b03e771de96cc480f1c5ef3f8829039866e15dd39963
4
- data.tar.gz: daa115702cc67a217cc7bb7a2413066f0d451f56ee1d352294669dc1c35d69da
3
+ metadata.gz: 67d4490fa9fb11e8db494429135065559db09ab21b233c4bb6f53e2f40b53f52
4
+ data.tar.gz: 537c230fef149e90e863b5a0718556bca2d129217da530ff45c4781252ecf1f9
5
5
  SHA512:
6
- metadata.gz: 193f2d0dafa0672749febde2faa5e7d623dddf3b0aba76d6c57cc1212751e77251ca3ac1e4d5749c854ebb5b7d6eae0154443a9bcd1f37ec7e304cd4763b45ae
7
- data.tar.gz: bd2dfae880bd1f0e1eb85700a7d9dea8687922444905e782b46c267a59179b3f68b379a6642a7b2837a3d2d7aa4c7f88babb25dcae286bccdc782714778d8472
6
+ metadata.gz: 9d4f49d88628da1e1c5bab8ee9b14a1a0d2422393a41c0943f5d3148ec34e91dbf14f315b5618796f336e7ffc50dcd2111b82af822d362dfd2d7178c116c282d
7
+ data.tar.gz: 37f985eb038d2db401fa823c0049a2490e33e20077ec0fa092ae43eb47433b1bc9d092d182adbfe15a3ebf4d87d7af0e4abbe9eb0caefb81af28062943ce856a
@@ -1,3 +1,3 @@
1
1
  module Eventador
2
- VERSION = '1.0.1'
2
+ VERSION = '1.0.3'
3
3
  end
data/lib/eventador.rb CHANGED
@@ -11,6 +11,16 @@ module Eventador
11
11
  end
12
12
  end
13
13
 
14
+ Capture = Class.new do
15
+ def method_missing(method, *args, &block)
16
+ false
17
+ end
18
+
19
+ def block
20
+ @block
21
+ end
22
+ end
23
+
14
24
  def callback(callable, *rest)
15
25
  @callbacks ||= ::Hash.new do |h, method_name|
16
26
  h[method_name] = Class.new(Callback) do
@@ -25,6 +35,21 @@ module Eventador
25
35
  call(ret)
26
36
  ret.result
27
37
  end
38
+
39
+ def capture(callable, &default)
40
+ @captures ||= ::Hash.new do |h, method_name|
41
+ h[method_name] = Class.new(Capture) do
42
+ define_method(method_name) do |&block|
43
+ @block = block
44
+ end
45
+ define_method("#{method_name}?") { true }
46
+ define_method(:to_s) { "Capture(#{method_name})" }
47
+ end
48
+ end
49
+ ret = @captures[callable].new
50
+ call(ret)
51
+ ret.block || default
52
+ end
28
53
  end
29
54
 
30
55
  class Proc
data/spec/proc_spec.rb CHANGED
@@ -77,3 +77,39 @@ describe Proc do
77
77
  _(ret).must_equal(6)
78
78
  end
79
79
  end
80
+
81
+ describe Proc do
82
+ AB = Struct.new(:a, :b)
83
+
84
+ def bcb(&block)
85
+ add = block.capture(:add)
86
+ a = 1
87
+ b = 2
88
+ s = AB.new(a, b)
89
+ s.define_singleton_method(:add, &add)
90
+ s.add
91
+ end
92
+
93
+ it 'should allow getting the block' do
94
+ ret = bcb do |on|
95
+ on.add { a + b }
96
+ end
97
+ _(ret).must_equal(3)
98
+ end
99
+
100
+ def bdb(&block)
101
+ add = block.capture(:add) do
102
+ "default #{a + b}"
103
+ end
104
+ s = AB.new(1, 2)
105
+ s.define_singleton_method(:add, &add)
106
+ s.add
107
+ end
108
+
109
+ it 'should allow a default when capturing' do
110
+ ret = bdb do |on|
111
+ on.not_add { a + b }
112
+ end
113
+ _(ret).must_equal('default 3')
114
+ end
115
+ end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eventador
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Huckstep
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-05-08 00:00:00.000000000 Z
10
+ date: 2025-03-14 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bundler
@@ -74,7 +73,6 @@ homepage: ''
74
73
  licenses:
75
74
  - MIT
76
75
  metadata: {}
77
- post_install_message:
78
76
  rdoc_options: []
79
77
  require_paths:
80
78
  - lib
@@ -89,8 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
89
87
  - !ruby/object:Gem::Version
90
88
  version: '0'
91
89
  requirements: []
92
- rubygems_version: 3.4.6
93
- signing_key:
90
+ rubygems_version: 3.6.2
94
91
  specification_version: 4
95
92
  summary: Simple callbacks/lightweight events on procs.
96
93
  test_files: