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