def self.attach(klass, name, opts)
opts = {
:class_name => name.to_s.classify,
:name => name,
:data_key => name,
:default => Her::Collection.new,
:path => "/#{name}",
:inverse_of => nil
}.merge(opts)
klass.associations[:has_many] << opts
klass.class_eval "def \#{name}\ncached_name = :\"@_her_association_\#{name}\"\n\ncached_data = (instance_variable_defined?(cached_name) && instance_variable_get(cached_name))\ncached_data || instance_variable_set(cached_name, Her::Model::Associations::HasManyAssociation.proxy(self, \#{opts.inspect}))\nend\n", __FILE__, __LINE__ + 1
end