Class: So::Received

Inherits:
Expr show all
Defined in:
lib/spec_object.rb

Instance Method Summary collapse

Methods inherited from Expr

#!, #<, #==, #>, #[], #assert_time, #assert_value, #to_so_expr

Constructor Details

#initialize(method, time = nil, args = nil) ⇒ Received

Returns a new instance of Received.



337
338
339
340
341
342
343
# File 'lib/spec_object.rb', line 337

def initialize(method, time=nil, args=nil)
  raise "expected method name" unless method.is_a?(Symbol)

  @method = method
  @time = time
  @args = args
end

Instance Method Details

#at(time) ⇒ Object



345
346
347
348
349
350
# File 'lib/spec_object.rb', line 345

def at(time)
  time = time.to_so_expr
  time.assert_time
  r = Received.new(@method, time, @args)
  r
end

#evaluate(calls) ⇒ Object



383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
# File 'lib/spec_object.rb', line 383

def evaluate(calls)
  t = @time.evaluate(calls)
  if !(t.kind_of?(Time))
    return self
  end

  method, args, output = calls[t.n]
  if method != @method
    return false.to_so_expr
  end

  if args.size != @args.size
    return false.to_so_expr
  end

  exprs =
    args.zip(@args).map do |(value, expr)|
      value.to_so_expr == expr
    end

  And.and_(*exprs)
end

#pp(n) ⇒ Object



360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
# File 'lib/spec_object.rb', line 360

def pp(n)
  s = 
    if !(@args.nil?)
      @args.map do |arg| arg.pp(n+4) end.join("\n")
    else
      "#{' '*(n+2)}"
    end
  t_pp =
    if !(@time.nil?)
      @time.pp(n+2)
    else
      "#{' '*(n+2)}nil"
    end
  "#{' '*n}(received #{@method.inspect}\n#{t_pp}\n#{' '*(n+2)}(\n#{s}))"
end

#substitute(v, e) ⇒ Object



376
377
378
379
380
381
# File 'lib/spec_object.rb', line 376

def substitute(v, e)
  time = @time.substitute(v, e)
  args = @args.map do |arg| arg.substitute(v, e) end

  Received.new(@method, time, args)
end

#with(*args) ⇒ Object



352
353
354
355
356
357
358
# File 'lib/spec_object.rb', line 352

def with(*args)
  args.map! do |arg|
    arg.assert_value
    arg.to_so_expr
  end
  Received.new(@method, @time, args)
end