muack 1.6.0 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitlab-ci.yml +40 -0
- data/.gitmodules +1 -1
- data/CHANGES.md +13 -0
- data/README.md +2 -2
- data/lib/muack/block.rb +14 -4
- data/lib/muack/mock.rb +18 -32
- data/lib/muack/session.rb +4 -0
- data/lib/muack/version.rb +1 -1
- data/muack.gemspec +5 -7
- data/task/README.md +1 -1
- data/task/gemgem.rb +3 -1
- data/test/test_any_instance_of.rb +11 -0
- data/test/test_keyargs.rb +3 -0
- data/test/test_mock.rb +2 -2
- data/test/test_prepend.rb +29 -0
- data/test/test_visibility.rb +47 -9
- metadata +4 -6
- data/.travis.yml +0 -22
- data/lib/muack/block_26.rb +0 -16
- data/lib/muack/block_27.rb +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 87b3de29deb805feea133c6e8fc7b3fc2720334df701a59452acc3141fd63509
|
4
|
+
data.tar.gz: aeb2e74419effc23ca0d1b51de935308242fd0fa12e9dae6be064dc11cc7e8ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d67d586cb7005f3ec8fae297cf6e9bc7f669cc1853dc5c293b28858fb3b7f6134c7e373399f5135fb88ab3879122e8f6c61a653925a456bab3a53715549a3de
|
7
|
+
data.tar.gz: a6387f685b6db8c25e447027698de5f47cc8aea2abef864552bc2d3010e5c5f92e637df9dd08ab6bdb3692e40c598ad6c01b1c7fae4d4e59672e9f66eae6fcf9
|
data/.gitlab-ci.yml
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
|
2
|
+
stages:
|
3
|
+
- test
|
4
|
+
|
5
|
+
.test:
|
6
|
+
stage: test
|
7
|
+
image: ruby:${RUBY_VERSION}-bullseye
|
8
|
+
variables:
|
9
|
+
GIT_DEPTH: "1"
|
10
|
+
GIT_SUBMODULE_STRATEGY: recursive
|
11
|
+
GIT_SUBMODULE_PATHS: task
|
12
|
+
RUBYOPT: --enable-frozen-string-literal
|
13
|
+
before_script:
|
14
|
+
- bundle install --retry=3
|
15
|
+
- unset CI # Coverage doesn't work well with frozen literal
|
16
|
+
script:
|
17
|
+
- ruby -vr bundler/setup -S rake test
|
18
|
+
|
19
|
+
ruby:3.0:
|
20
|
+
extends:
|
21
|
+
- .test
|
22
|
+
variables:
|
23
|
+
RUBY_VERSION: '3.0'
|
24
|
+
|
25
|
+
ruby:3.1:
|
26
|
+
extends:
|
27
|
+
- .test
|
28
|
+
variables:
|
29
|
+
RUBY_VERSION: '3.1'
|
30
|
+
|
31
|
+
ruby:3.2:
|
32
|
+
extends:
|
33
|
+
- .test
|
34
|
+
variables:
|
35
|
+
RUBY_VERSION: '3.2'
|
36
|
+
|
37
|
+
jruby:latest:
|
38
|
+
extends:
|
39
|
+
- .test
|
40
|
+
image: jruby:latest
|
data/.gitmodules
CHANGED
data/CHANGES.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# CHANGES
|
2
2
|
|
3
|
+
## Muack 1.7.0 -- 2022-12-29
|
4
|
+
|
5
|
+
### Incompatible changes
|
6
|
+
|
7
|
+
* Drop support for Ruby 2.6-
|
8
|
+
|
9
|
+
### Bugs fixed
|
10
|
+
|
11
|
+
* Fixed stubbed instance method not following the original visibility.
|
12
|
+
It's always public before this fix.
|
13
|
+
* Worked around a few JRuby 9.4 compatibility issues. Note that there are
|
14
|
+
still some issues due to JRuby bugs. Those tests are currently skipped.
|
15
|
+
|
3
16
|
## Muack 1.6.0 -- 2020-12-06
|
4
17
|
|
5
18
|
### Enhancement
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Muack [![
|
1
|
+
# Muack [![Pipeline status](https://gitlab.com/godfat/muack/badges/master/pipeline.svg)](https://gitlab.com/godfat/muack/-/pipelines)
|
2
2
|
|
3
3
|
by Lin Jen-Shin ([godfat](http://godfat.org))
|
4
4
|
|
@@ -1221,7 +1221,7 @@ Or, I am happy to break legacy.
|
|
1221
1221
|
|
1222
1222
|
Apache License 2.0 (Apache-2.0)
|
1223
1223
|
|
1224
|
-
Copyright (c) 2013-
|
1224
|
+
Copyright (c) 2013-2022, Lin Jen-Shin (godfat)
|
1225
1225
|
|
1226
1226
|
Licensed under the Apache License, Version 2.0 (the "License");
|
1227
1227
|
you may not use this file except in compliance with the License.
|
data/lib/muack/block.rb
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
module Muack
|
3
|
+
class Block < Struct.new(:block, :context)
|
4
|
+
def initialize block, context=nil
|
5
|
+
super
|
6
|
+
end
|
7
|
+
|
8
|
+
def call(...)
|
9
|
+
if context
|
10
|
+
context.instance_exec(...)
|
11
|
+
else
|
12
|
+
block.call(...)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
6
16
|
end
|
data/lib/muack/mock.rb
CHANGED
@@ -131,36 +131,18 @@ module Muack
|
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
|
-
|
135
|
-
|
136
|
-
mod.
|
137
|
-
|
138
|
-
mod.private_instance_methods(false).include?(msg)
|
139
|
-
end
|
140
|
-
|
141
|
-
def self.method_visibility mod, msg
|
142
|
-
if mod.public_instance_methods(false).include?(msg)
|
143
|
-
:public
|
144
|
-
elsif mod.protected_instance_methods(false).include?(msg)
|
145
|
-
:protected
|
146
|
-
elsif mod.private_instance_methods(false).include?(msg)
|
147
|
-
:private
|
148
|
-
end
|
149
|
-
end
|
150
|
-
else # Ruby 2.6+
|
151
|
-
def self.direct_method_defined? mod, msg
|
152
|
-
mod.method_defined?(msg, false) || # this doesn't cover private method
|
153
|
-
mod.private_method_defined?(msg, false)
|
154
|
-
end
|
134
|
+
def self.direct_method_defined? mod, msg
|
135
|
+
mod.method_defined?(msg, false) || # this doesn't cover private method
|
136
|
+
mod.private_method_defined?(msg, false)
|
137
|
+
end
|
155
138
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
end
|
139
|
+
def self.method_visibility mod, msg, inherit=false
|
140
|
+
if mod.public_method_defined?(msg, inherit)
|
141
|
+
:public
|
142
|
+
elsif mod.protected_method_defined?(msg, inherit)
|
143
|
+
:protected
|
144
|
+
elsif mod.private_method_defined?(msg, inherit)
|
145
|
+
:private
|
164
146
|
end
|
165
147
|
end
|
166
148
|
|
@@ -191,11 +173,15 @@ module Muack
|
|
191
173
|
|
192
174
|
def self.store_original_method mod, defi
|
193
175
|
if visibility = method_visibility(mod, defi.msg)
|
176
|
+
# Defined in itself, we need to make alias
|
194
177
|
original_method = find_new_name(mod, defi.msg)
|
195
178
|
mod.__send__(:alias_method, original_method, defi.msg)
|
196
179
|
defi.original_method = original_method
|
197
180
|
defi.visibility = visibility
|
198
|
-
|
181
|
+
elsif visibility = method_visibility(mod, defi.msg, true)
|
182
|
+
# Defined in parent, we can just override
|
183
|
+
defi.visibility = visibility
|
184
|
+
else # Not defined, pick a reasonable default
|
199
185
|
defi.visibility = :public
|
200
186
|
end
|
201
187
|
end
|
@@ -292,12 +278,12 @@ module Muack
|
|
292
278
|
::Kernel.instance_method(:method).bind(object).call(method_name).
|
293
279
|
super_method
|
294
280
|
|
295
|
-
if super_method.owner
|
281
|
+
if super_method.owner.kind_of?(::Class) && super_method.name == :new
|
296
282
|
initialize_method = ::Class.instance_method(:instance_method).
|
297
283
|
bind(object).call(:initialize)
|
298
284
|
__mock_block_with_kargs?(initialize_method)
|
299
285
|
else
|
300
|
-
|
286
|
+
__mock_block_with_kargs?(super_method)
|
301
287
|
end
|
302
288
|
end
|
303
289
|
|
data/lib/muack/session.rb
CHANGED
@@ -22,6 +22,10 @@ module Muack
|
|
22
22
|
def verify obj=nil
|
23
23
|
if obj
|
24
24
|
with(obj, :[]).all?(&:__mock_verify)
|
25
|
+
elsif RUBY_ENGINE == 'jruby'
|
26
|
+
# Workaround weird error:
|
27
|
+
# TypeError: Muack::Stub#to_ary should return Array
|
28
|
+
data.each_value.all?{ |v| v.__mock_verify }
|
25
29
|
else
|
26
30
|
data.each_value.all?(&:__mock_verify)
|
27
31
|
end
|
data/lib/muack/version.rb
CHANGED
data/muack.gemspec
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: muack 1.
|
2
|
+
# stub: muack 1.7.0 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "muack".freeze
|
6
|
-
s.version = "1.
|
6
|
+
s.version = "1.7.0"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
10
10
|
s.authors = ["Lin Jen-Shin (godfat)".freeze]
|
11
|
-
s.date = "
|
11
|
+
s.date = "2022-12-29"
|
12
12
|
s.description = "Muack -- A fast, small, yet powerful mocking library.\n\nInspired by [RR][], and it's 32x times faster (750s vs 23s) than RR\nfor running [Rib][] tests.\n\n[RR]: https://github.com/rr/rr\n[Rib]: https://github.com/godfat/rib".freeze
|
13
13
|
s.email = ["godfat (XD) godfat.org".freeze]
|
14
14
|
s.files = [
|
15
15
|
".gitignore".freeze,
|
16
|
+
".gitlab-ci.yml".freeze,
|
16
17
|
".gitmodules".freeze,
|
17
|
-
".travis.yml".freeze,
|
18
18
|
"CHANGES.md".freeze,
|
19
19
|
"Gemfile".freeze,
|
20
20
|
"LICENSE".freeze,
|
@@ -23,8 +23,6 @@ Gem::Specification.new do |s|
|
|
23
23
|
"lib/muack.rb".freeze,
|
24
24
|
"lib/muack/any_instance_of.rb".freeze,
|
25
25
|
"lib/muack/block.rb".freeze,
|
26
|
-
"lib/muack/block_26.rb".freeze,
|
27
|
-
"lib/muack/block_27.rb".freeze,
|
28
26
|
"lib/muack/coat.rb".freeze,
|
29
27
|
"lib/muack/definition.rb".freeze,
|
30
28
|
"lib/muack/error.rb".freeze,
|
@@ -54,7 +52,7 @@ Gem::Specification.new do |s|
|
|
54
52
|
"test/test_visibility.rb".freeze]
|
55
53
|
s.homepage = "https://github.com/godfat/muack".freeze
|
56
54
|
s.licenses = ["Apache-2.0".freeze]
|
57
|
-
s.rubygems_version = "3.1
|
55
|
+
s.rubygems_version = "3.4.1".freeze
|
58
56
|
s.summary = "Muack -- A fast, small, yet powerful mocking library.".freeze
|
59
57
|
s.test_files = [
|
60
58
|
"test/test_any_instance_of.rb".freeze,
|
data/task/README.md
CHANGED
@@ -39,7 +39,7 @@ end
|
|
39
39
|
|
40
40
|
Apache License 2.0 (Apache-2.0)
|
41
41
|
|
42
|
-
Copyright (c) 2011-
|
42
|
+
Copyright (c) 2011-2021, Lin Jen-Shin (godfat)
|
43
43
|
|
44
44
|
Licensed under the Apache License, Version 2.0 (the "License");
|
45
45
|
you may not use this file except in compliance with the License.
|
data/task/gemgem.rb
CHANGED
@@ -42,6 +42,7 @@ module Gemgem
|
|
42
42
|
|
43
43
|
def gem_install
|
44
44
|
require 'rubygems/commands/install_command'
|
45
|
+
require 'rubygems/package'
|
45
46
|
# read ~/.gemrc
|
46
47
|
Gem.use_paths(Gem.configuration[:gemhome], Gem.configuration[:gempath])
|
47
48
|
Gem::Command.extra_args = Gem.configuration[:gem]
|
@@ -51,7 +52,8 @@ module Gemgem
|
|
51
52
|
cmd.handle_options([])
|
52
53
|
|
53
54
|
# install
|
54
|
-
|
55
|
+
gem_package = Gem::Package.new(gem_path)
|
56
|
+
install = Gem::Installer.new(gem_package, cmd.options)
|
55
57
|
install.install
|
56
58
|
puts "\e[35mGem installed: \e[33m#{strip_path(install.gem_dir)}\e[0m"
|
57
59
|
end
|
@@ -113,6 +113,17 @@ describe Muack::AnyInstanceOf do
|
|
113
113
|
obj.f.should.eq 0
|
114
114
|
end
|
115
115
|
|
116
|
+
describe 'mock any_instance_of on a method defined higher up' do
|
117
|
+
methods_count = klass.instance_methods.size
|
118
|
+
|
119
|
+
would 'not store a backup method' do
|
120
|
+
any_instance_of(klass){ |inst| mock(inst).to_s{ 'to_s' } }
|
121
|
+
|
122
|
+
expect(klass.new.to_s).eq 'to_s'
|
123
|
+
expect(klass.instance_methods.size).eq methods_count
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
116
127
|
# Brought from rspec-mocks and it's currently failing on rspec-mocks
|
117
128
|
would 'stub any_instance_of on module extending it self' do
|
118
129
|
mod = Module.new {
|
data/test/test_keyargs.rb
CHANGED
@@ -50,6 +50,9 @@ describe Muack::Mock do
|
|
50
50
|
end
|
51
51
|
|
52
52
|
would 'instance method' do
|
53
|
+
# https://github.com/jruby/jruby/issues/7545
|
54
|
+
skip if RUBY_ENGINE == 'jruby' && obj.kind_of?(Muack::AnyInstanceOf)
|
55
|
+
|
53
56
|
mock(obj).bonjour(a: 0, b: 1)
|
54
57
|
|
55
58
|
expect(instance.bonjour(a: 0, b: 1)).eq([0, 1])
|
data/test/test_mock.rb
CHANGED
@@ -244,12 +244,12 @@ describe Muack::Mock do
|
|
244
244
|
end
|
245
245
|
|
246
246
|
would 'any_instance_of m1' do
|
247
|
-
skip
|
247
|
+
skip if RUBY_ENGINE == 'jruby'
|
248
248
|
|
249
249
|
mock(any_instance_of(@m1)).f{:g}
|
250
250
|
|
251
251
|
expect(@c0.f).eq :m0
|
252
|
-
expect(@c1.f).eq :g
|
252
|
+
expect(@c1.f).eq :g
|
253
253
|
end
|
254
254
|
|
255
255
|
would 'any_instance_of c0.class' do
|
data/test/test_prepend.rb
CHANGED
@@ -94,6 +94,35 @@ describe 'mock with prepend' do
|
|
94
94
|
paste :test
|
95
95
|
end
|
96
96
|
|
97
|
+
describe 'class with a chain of prepended modules' do
|
98
|
+
would 'not affect other modules' do
|
99
|
+
mod0 = Module.new{ def f; :m0; end }
|
100
|
+
mod1 = Module.new{ def f; :m1; end }
|
101
|
+
klass0 = Class.new{ prepend mod0 }
|
102
|
+
klass1 = Class.new{ prepend mod1 }
|
103
|
+
klass = Class.new{ prepend mod1; prepend mod0 }
|
104
|
+
|
105
|
+
mock(any_instance_of(klass)).f{:f}
|
106
|
+
|
107
|
+
expect(klass.new.f).eq :f
|
108
|
+
expect(klass0.new.f).eq :m0
|
109
|
+
expect(klass1.new.f).eq :m1
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe 'class and subclass' do
|
114
|
+
would 'work for prepended superclass' do
|
115
|
+
mod = Module.new{ def f; :f; end }
|
116
|
+
base = Class.new{ prepend mod }
|
117
|
+
sub = Class.new(base)
|
118
|
+
|
119
|
+
mock(any_instance_of(base)).f{:g}.times(2)
|
120
|
+
|
121
|
+
expect(base.new.f).eq :g
|
122
|
+
expect(sub.new.f).eq :g
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
97
126
|
# Brought from rspec-mocks and it's currently failing on rspec-mocks
|
98
127
|
# See https://github.com/rspec/rspec-mocks/pull/1218
|
99
128
|
would "handle stubbing prepending methods that were only defined on the prepended module" do
|
data/test/test_visibility.rb
CHANGED
@@ -18,17 +18,9 @@ describe 'retain visibility' do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def generate visibility
|
21
|
-
klass = Class.new
|
22
|
-
def greet
|
23
|
-
'hi'
|
24
|
-
end
|
25
|
-
end
|
21
|
+
klass = Class.new
|
26
22
|
|
27
23
|
mod = Module.new do
|
28
|
-
def greet
|
29
|
-
hello
|
30
|
-
end
|
31
|
-
|
32
24
|
def hello
|
33
25
|
'hello'
|
34
26
|
end
|
@@ -97,8 +89,54 @@ describe 'retain visibility' do
|
|
97
89
|
paste :test
|
98
90
|
end
|
99
91
|
|
92
|
+
describe 'set the same visibility from the original method' do
|
93
|
+
copy :test do
|
94
|
+
def find_visibilities
|
95
|
+
%i[public protected private].map do |v|
|
96
|
+
object.send("#{v}_methods").include?(:hello)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
would do
|
101
|
+
current_visibilities = find_visibilities
|
102
|
+
|
103
|
+
stub(object).hello{ :stub }
|
104
|
+
|
105
|
+
expect(find_visibilities).eq current_visibilities
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
describe 'for instance method' do
|
110
|
+
def object
|
111
|
+
@object ||= Class.new do
|
112
|
+
private
|
113
|
+
def hello; :hello; end
|
114
|
+
end.new
|
115
|
+
end
|
116
|
+
|
117
|
+
paste :test
|
118
|
+
end
|
119
|
+
|
120
|
+
describe 'for singleton method' do
|
121
|
+
def object
|
122
|
+
@object ||= begin
|
123
|
+
ret = Object.new
|
124
|
+
def ret.hello; :hello; end
|
125
|
+
ret
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
paste :test
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
100
133
|
# Brought from rspec-mocks
|
101
134
|
would "correctly restore the visibility of methods whose visibility has been tweaked on the singleton class" do
|
135
|
+
# JRuby didn't store the visibility change on the singleton class,
|
136
|
+
# therefore it cannot be properly detected and visibility change
|
137
|
+
# will be lost upon reset.
|
138
|
+
skip if RUBY_ENGINE == 'jruby'
|
139
|
+
|
102
140
|
# hello is a private method when mixed in, but public on the module
|
103
141
|
# itself
|
104
142
|
mod = Module.new do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: muack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lin Jen-Shin (godfat)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-12-29 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |-
|
14
14
|
Muack -- A fast, small, yet powerful mocking library.
|
@@ -25,8 +25,8 @@ extensions: []
|
|
25
25
|
extra_rdoc_files: []
|
26
26
|
files:
|
27
27
|
- ".gitignore"
|
28
|
+
- ".gitlab-ci.yml"
|
28
29
|
- ".gitmodules"
|
29
|
-
- ".travis.yml"
|
30
30
|
- CHANGES.md
|
31
31
|
- Gemfile
|
32
32
|
- LICENSE
|
@@ -35,8 +35,6 @@ files:
|
|
35
35
|
- lib/muack.rb
|
36
36
|
- lib/muack/any_instance_of.rb
|
37
37
|
- lib/muack/block.rb
|
38
|
-
- lib/muack/block_26.rb
|
39
|
-
- lib/muack/block_27.rb
|
40
38
|
- lib/muack/coat.rb
|
41
39
|
- lib/muack/definition.rb
|
42
40
|
- lib/muack/error.rb
|
@@ -83,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
81
|
- !ruby/object:Gem::Version
|
84
82
|
version: '0'
|
85
83
|
requirements: []
|
86
|
-
rubygems_version: 3.1
|
84
|
+
rubygems_version: 3.4.1
|
87
85
|
signing_key:
|
88
86
|
specification_version: 4
|
89
87
|
summary: Muack -- A fast, small, yet powerful mocking library.
|
data/.travis.yml
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
sudo: false
|
2
|
-
language: ruby
|
3
|
-
|
4
|
-
install: 'gem update --system; gem install bundler; bundle install --retry=3'
|
5
|
-
before_script: unset CI
|
6
|
-
script: 'ruby -vwr bundler/setup -S rake test'
|
7
|
-
|
8
|
-
matrix:
|
9
|
-
include:
|
10
|
-
- rvm: 2.3
|
11
|
-
- rvm: 2.4
|
12
|
-
env: RUBYOPT=--enable-frozen-string-literal
|
13
|
-
- rvm: 2.5
|
14
|
-
env: RUBYOPT=--enable-frozen-string-literal
|
15
|
-
- rvm: 2.6
|
16
|
-
env: RUBYOPT=--enable-frozen-string-literal
|
17
|
-
- rvm: 2.7
|
18
|
-
env: RUBYOPT=--enable-frozen-string-literal
|
19
|
-
- rvm: ruby-head
|
20
|
-
env: RUBYOPT=--enable-frozen-string-literal
|
21
|
-
- rvm: jruby-9.2
|
22
|
-
env: RUBYOPT=--enable-frozen-string-literal
|
data/lib/muack/block_26.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
|
2
|
-
module Muack
|
3
|
-
class Block < Struct.new(:block, :context)
|
4
|
-
def initialize block, context=nil
|
5
|
-
super
|
6
|
-
end
|
7
|
-
|
8
|
-
def call(*args, &block)
|
9
|
-
if context
|
10
|
-
context.instance_exec(*args, &block)
|
11
|
-
else
|
12
|
-
block.call(*args, &block)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
data/lib/muack/block_27.rb
DELETED