1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
module Bogus
class CreatesFakes
class UnknownMode < RuntimeError; end
extend Takes
takes :copies_classes, :converts_name_to_class, :makes_ducks
def create(name, opts = {}, &block)
klass = self.klass(name, &block)
duck = make_duck(klass)
klass_copy = copies_classes.copy(duck)
mode = opts.fetch(:as, :instance)
case mode
when :instance
return klass_copy.__create__
when :class
return klass_copy
else
raise UnknownMode.new("Unknown fake creation mode: #{mode}. Allowed values are :instance, :class")
end
end
protected
def klass(name, &block)
return block.call if block_given?
converts_name_to_class.convert(name)
end
def make_duck(klass)
return klass unless klass.is_a?(Array)
makes_ducks.make(*klass)
end
end
end
|