def initialize(name, opts={}, &block)
raise 'The :class attribute must be set' unless opts[:class]
refname = "#{opts[:class].name.split("::").last}Ref"
if CIMI::Model::const_defined?(refname)
@klass = CIMI::Model::const_get(refname)
else
@klass = Class.new(opts[:class]) do |m|
scalar :href
def ref_id(ctx)
href.split('/').last
end
def find(ctx)
klass.find(ref_id(ctx), ctx)
end
def klass
self.class.superclass
end
end
CIMI::Model::const_set(refname, @klass)
end
@klass.class_eval { def href?; !href.nil?; end }
opts[:schema] = @klass.schema
super(name, opts, &block)
end