Sha256: 84f9150a36bdb8582617fe15d83bda4a428041e9cf172c1e5553706c97e541a2

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 KB

Contents

class MethodCallRecorder

  def _play(object, &blk)
    i = 0
    _method_chain.inject(object) do |obj, method_call|
      i += 1
      yield(obj, method_call, _method_chain[i]) if block_given?
      method_call.call_on(obj)
    end
  end

  def _first_method
    _method_chain.first
  end
  
  def _empty?
    _method_chain.empty?
  end

  def to_s
    _method_chain.inspect
  end

  def _method_chain
    @_method_chain ||= []
  end
  
  def _to_setter(value)
    new_rec = self.dup
    new_rec._method_chain = self._method_chain.dup
    new_rec._method_chain[-1] = self._method_chain[-1].to_setter(value)
    new_rec
  end
  
  def _reset!
    self._method_chain = []
  end
  
  def _select(meth, args=nil)
    _method_chain.select do |method_call|
      selected = (method_call.method == meth)
      selected &&= (method_call.args == args) if args
      selected
    end
  end

  protected
  
  attr_writer :_method_chain

  private

  def method_missing(meth, *args, &blk)
    _method_chain << MethodCall.new(meth, *args, &blk)
    self
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
markevans-method_call_recorder-0.1.2 lib/method_call_recorder/method_call_recorder.rb