Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
Josh Bodah committed Sep 21, 2018
1 parent bcf265a commit 4dc4c74
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 10 deletions.
2 changes: 1 addition & 1 deletion lib/spy/core.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ module Spy
# Syntactic sugar (like `Spy.restore(object, msg)` vs `Spy.restore(:all)`)
# should be handled in `Spy::API` and utilize `Spy::Core`
class Core
UNSAFE_METHODS = [:object_id, :__send__, :__id__, :method, :singleton_class]
UNSAFE_METHODS = Class.methods + Class.instance_methods #[:object_id, :__send__, :__id__, :method, :singleton_class]

def initialize
@registry = Registry.new
Expand Down
5 changes: 3 additions & 2 deletions lib/spy/method_call.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
module Spy
class MethodCall
attr_reader :name, :receiver, :caller, :args, :block
attr_reader :spy, :name, :receiver, :caller, :args, :block
attr_accessor :result

def initialize(replayer, name, receiver, method_caller, *args)
def initialize(spy, replayer, name, receiver, method_caller, *args)
@spy = spy
@replayer = replayer
@name = name
@receiver = receiver
Expand Down
1 change: 1 addition & 0 deletions lib/spy/strategy/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ def call(spy, receiver, *args, &block)

def _build_method_call(spy, receiver, *args, &block)
Spy::MethodCall.new(
spy,
proc { Spy::Strategy::Base._call_original(spy, receiver, *args, &block) },
spy.original.name,
receiver,
Expand Down
20 changes: 13 additions & 7 deletions lib/spy/util.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,18 +39,24 @@ def prepare_spy(spy)
end

def record_args(method_call)
@type_info[method_call.name] ||= {}
@type_info[method_call.name][:args] ||= []
owner = method_call.spy.original.owner
name = method_call.name
@type_info[owner] ||= {}
@type_info[owner][name] ||= {}
@type_info[owner][name][:args] ||= []
method_call.args.each.with_index do |arg, idx|
@type_info[method_call.name][:args][idx] ||= Set.new
@type_info[method_call.name][:args][idx] << type_of(arg)
@type_info[owner][name][:args][idx] ||= Set.new
@type_info[owner][name][:args][idx] << type_of(arg)
end
end

def record_rv(method_call)
@type_info[method_call.name] ||= {}
@type_info[method_call.name][:return_value] ||= Set.new
@type_info[method_call.name][:return_value] << type_of(method_call.result)
owner = method_call.spy.original.owner
name = method_call.name
@type_info[owner] ||= {}
@type_info[owner][name] ||= {}
@type_info[owner][name][:return_value] ||= Set.new
@type_info[owner][name][:return_value] << type_of(method_call.result)
end

def type_of(obj)
Expand Down

0 comments on commit 4dc4c74

Please sign in to comment.