Class: RSpock::AST::InteractionToBlockIdentityAssertionTransformation

Inherits:
ASTTransform::AbstractTransformation
  • Object
show all
Defined in:
lib/rspock/ast/interaction_to_block_identity_assertion_transformation.rb

Overview

Transforms an :rspock_interaction node into an assert_same assertion when a block_pass (&var) is present.

Returns the node unchanged (passthrough) when no block_pass is present.

Instance Method Summary collapse

Constructor Details

#initialize(index = 0) ⇒ InteractionToBlockIdentityAssertionTransformation

Returns a new instance of InteractionToBlockIdentityAssertionTransformation.



12
13
14
# File 'lib/rspock/ast/interaction_to_block_identity_assertion_transformation.rb', line 12

def initialize(index = 0)
  @index = index
end

Instance Method Details

#run(interaction) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/rspock/ast/interaction_to_block_identity_assertion_transformation.rb', line 16

def run(interaction)
  return interaction unless interaction.type == :rspock_interaction
  return interaction unless interaction.block_pass

  capture_var = :"__rspock_blk_#{@index}"
  block_var = interaction.block_pass.children[0]

  s(:send, nil, :assert_same,
    block_var,
    s(:send, s(:lvar, capture_var), :call)
  )
end