Delegating to a lazily loaded object in Ruby
You could pass in a string instead of a proc and use Object.const_get().

class_const = Object.const_get 'String'
=&gt; String
class_const.new "hello"
=&gt; "hello"


With a call-able constructor.

constructor = class_const.public_method :new
=&gt; #&lt;Method: Class#new&gt;
constructor.call "ohai"
=&gt; "ohai"


You need to guard against NameErrors.

Object.const_get('NotThere')
NameError: uninitialized constant NotThere


A lazy load method to build the dependency (Error checking elided for clarity).

def model
  @model ||= build_model('arg1', 'arg2')
end

def build_model(*args)
  Object.const_get(self.configure.model_name).send(:new, *args)
end