def bind
model.default_scope(repository_name).update(name => model.descendants.dup << model)
model.class_eval "extend Chainable\n\nextendable do\ndef inherited(model)\nsuper # setup self.descendants\nset_discriminator_scope_for(model)\nend\n\ndef new(*args, &block)\nif args.size == 1 && args.first.kind_of?(Hash)\ndiscriminator = properties(repository_name).discriminator\n\nif discriminator_value = args.first[discriminator.name]\nmodel = discriminator.typecast_to_primitive(discriminator_value)\n\nif model.kind_of?(Model) && !model.equal?(self)\nreturn model.new(*args, &block)\nend\nend\nend\n\nsuper\nend\n\nprivate\n\ndef set_discriminator_scope_for(model)\nmodel.default_scope(\#{repository_name.inspect}).update(\#{name.inspect} => model.descendants.dup << model)\nend\nend\n", __FILE__, __LINE__ + 1
end