Skip to content

Commit 3e76b5c

Browse files
committed
Understand instance_exec
1 parent 27382de commit 3e76b5c

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

ruby/instance_exec_demo.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Demo
2+
def foo(&block)
3+
block.call
4+
end
5+
6+
def bar(&block)
7+
instance_exec(&block)
8+
end
9+
end
10+
11+
# rspec instance_exec_demo.rb
12+
RSpec.describe Demo do
13+
context = self
14+
15+
let(:r1) { Demo.new.foo { self } }
16+
let(:r2) { Demo.new.bar { self } }
17+
18+
it 'has different context' do
19+
expect(r1).to be_a(context)
20+
expect(r2).to be_a(Demo)
21+
end
22+
end

ruby/my_factory_bot.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1+
require 'rspec'
2+
require 'pry'
3+
14
class User
25
attr_accessor :name
36
attr_accessor :email
47
end
58

69
class MyFactoryBot
7-
def self.define
10+
def self.define(&block)
11+
instance_exec(&block)
812
end
913

1014
def self.create(model_sym)
@@ -14,14 +18,12 @@ def self.create(model_sym)
1418

1519
MyFactoryBot.define do
1620
factory :user do
21+
require "pry"; binding.pry
1722
name { 'Bogs' }
1823
email { '[email protected]' }
1924
end
2025
end
2126

22-
require 'rspec'
23-
require 'pry'
24-
2527
# rspec my_factory_bot.rb
2628
RSpec.describe MyFactoryBot do
2729
describe '.create' do

0 commit comments

Comments
 (0)