Sha256: 0ad86ec188d0439509ac43a399265023382a58452985508f979af99c8e65bc11
Contents?: true
Size: 1.51 KB
Versions: 1
Compression:
Stored size: 1.51 KB
Contents
module Bogus class Shadow attr_reader :calls def initialize @calls = [] @stubs = [] @defaults = {} @required = Set.new end def run(method_name, *args) interaction = Interaction.new(method_name, args) @calls << interaction return_value(interaction) end def has_received(name, args) @calls.include?(Interaction.new(name, args)) end def stubs(name, *args, &return_value) interaction = Interaction.new(name, args) add_stub(interaction, return_value) override_default(interaction, return_value) @required.delete(interaction) interaction end def mocks(name, *args, &return_value) interaction = stubs(name, *args, &return_value) @required.add(interaction) end def unsatisfied_interactions @required.reject { |i| @calls.include?(i) } end def self.has_shadow?(object) object.respond_to?(:__shadow__) end private def override_default(interaction, return_value) return unless interaction.any_args? @defaults[interaction.method] = return_value || proc{nil} end def add_stub(interaction, return_value_block) @stubs << [interaction, return_value_block] if return_value_block end def return_value(interaction) _, return_value = @stubs.reverse.find{|i, v| i == interaction} return_value ||= @defaults[interaction.method] return_value ||= proc{ UndefinedReturnValue.new(interaction) } return_value.call end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
bogus-0.1.0 | lib/bogus/shadow.rb |