class Naught::NullClassBuilder::Commands::Mimic

Constants

NULL_SINGLETON_CLASS

Attributes

class_to_mimic[R]
include_super[R]
singleton_class[R]

Public Class Methods

new(builder, class_to_mimic_or_options, options = {}) click to toggle source
Calls superclass method Naught::NullClassBuilder::Command.new
# File lib/naught/null_class_builder/commands/mimic.rb, line 12
def initialize(builder, class_to_mimic_or_options, options = {})
  super(builder)

  if class_to_mimic_or_options.is_a?(Hash)
    options          = class_to_mimic_or_options.merge(options)
    instance         = options.fetch(:example)
    @singleton_class = (class << instance; self; end)
    @class_to_mimic  = instance.class
  else
    @singleton_class = NULL_SINGLETON_CLASS
    @class_to_mimic  = class_to_mimic_or_options
  end
  @include_super = options.fetch(:include_super) { true }

  builder.base_class   = root_class_of(@class_to_mimic)
  class_to_mimic       = @class_to_mimic
  builder.inspect_proc = lambda { "<null:#{class_to_mimic}>" }
  builder.interface_defined = true
end

Public Instance Methods

call() click to toggle source
# File lib/naught/null_class_builder/commands/mimic.rb, line 32
def call
  defer do |subject|
    methods_to_stub.each do |method_name|
      builder.stub_method(subject, method_name)
    end
  end
end

Private Instance Methods

methods_to_stub() click to toggle source
# File lib/naught/null_class_builder/commands/mimic.rb, line 46
def methods_to_stub
  methods_to_mimic =
    class_to_mimic.instance_methods(include_super) |
    singleton_class.instance_methods(false)
  methods_to_mimic - Object.instance_methods
end
root_class_of(klass) click to toggle source
# File lib/naught/null_class_builder/commands/mimic.rb, line 42
def root_class_of(klass)
  klass.ancestors.include?(Object) ? Object : Naught::BasicObject
end