class DeepDouble::Double
Public Class Methods
new(name = 'Anonymous', definition)
click to toggle source
In this case, having an optional name first makes for a cleaner API
rubocop:disable OptionalArguments
# File lib/deep_double.rb, line 18 def initialize(name = 'Anonymous', definition) @name = name @definition = definition validate_definition create_methods_in_definition end
Private Instance Methods
create_method(meth)
click to toggle source
# File lib/deep_double.rb, line 47 def create_method(meth) define_singleton_method(meth.to_sym, &fake_method(meth)) end
create_methods_in_definition()
click to toggle source
# File lib/deep_double.rb, line 43 def create_methods_in_definition @definition.keys.each { |meth| create_method(meth) } end
fake_method(meth)
click to toggle source
# File lib/deep_double.rb, line 51 def fake_method(meth) raw_fn = FakeMethod.new(@definition[meth]) RecursiveFakeMethod.new(raw_fn) end
valid_method_name?(name)
click to toggle source
# File lib/deep_double.rb, line 39 def valid_method_name?(name) name.is_a?(Symbol) || name.is_a?(String) end
validate_definition()
click to toggle source
rubocop:enable OptionalArguments
# File lib/deep_double.rb, line 28 def validate_definition @definition.keys.each { |key| validate_method_name(key) } end
validate_method_name(name)
click to toggle source
# File lib/deep_double.rb, line 32 def validate_method_name(name) return if valid_method_name?(name) raise ArgumentError, "Method names in DeepDouble definition must be Symbols or Strings. " + "The following name is invalid: #{name.inspect}" end