Class: Code::Node::ChainedCall

Inherits:
Code::Node show all
Defined in:
lib/code/node/chained_call.rb

Instance Method Summary collapse

Constructor Details

#initialize(chained_call) ⇒ ChainedCall

Returns a new instance of ChainedCall.



4
5
6
7
8
9
10
11
12
13
# File 'lib/code/node/chained_call.rb', line 4

def initialize(chained_call)
  @name = ::Code::Node::Name.new(chained_call.fetch(:name))

  @arguments = chained_call.fetch(:arguments, [])
  @arguments.map! { |argument| ::Code::Node::CallArgument.new(argument) }

  if chained_call.key?(:block)
    @block = ::Code::Node::Block.new(chained_call.fetch(:block))
  end
end

Instance Method Details

#evaluate(**args) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/code/node/chained_call.rb', line 15

def evaluate(**args)
  arguments =
    @arguments.map do |argument|
      ::Code::Object::Argument.new(
        argument.evaluate(**args.merge(object: nil)),
        name: argument.name,
        splat: argument.splat?,
        keyword_splat: argument.keyword_splat?,
        block: argument.block?,
      )
    end

  if @block
    arguments << ::Code::Object::Argument.new(
      @block.evaluate(**args.merge(object: nil)),
      block: true,
    )
  end

  @name.evaluate(**args.merge(arguments: arguments))
end