Class: Bigamy::HasMany

Inherits:
Proxy
  • Object
show all
Defined in:
lib/bigamy/proxy.rb

Direct Known Subclasses

ARHasMany, MongoHasMany

Instance Attribute Summary

Attributes inherited from Proxy

#me, #methods_added, #name, #options, #primary_key

Instance Method Summary collapse

Methods inherited from Proxy

#create_accessors, #divorce_everyone, #initialize, #root_klass, #root_klass_name, #serialize_foreign_key, #target_klass, #target_klass_name

Constructor Details

This class inherits a constructor from Bigamy::Proxy

Instance Method Details

#add_getterObject



110
111
112
113
114
115
116
# File 'lib/bigamy/proxy.rb', line 110

def add_getter 
  me.class_eval <<-EOF
    def #{name}
      self.#{primary_key}.nil? ? nil : #{target_klass}.all(:conditions => {:#{foreign_key} => export_id_val(self.#{primary_key})})
    end
  EOF
end

#add_setterObject



118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/bigamy/proxy.rb', line 118

def add_setter
  me.class_eval <<-EOF
    def #{name}= val
      val ||= []
      if val == []
        new_id = nil
      else
        raise NewRecordAssignment.new('All children must be saved') if val.select(&:new_record?).present?
        raise NewRecordAssignment.new('Parent must be saved') if self.new_record?
        new_id = export_id_val(self.#{primary_key})
      end
      
      #{name}.each {|x| x.update_attributes :#{foreign_key} => nil }

      val.each {|v| v.send "#{foreign_key}=", new_id; v.save! }
    end
  EOF
end

#foreign_keyObject



106
107
108
# File 'lib/bigamy/proxy.rb', line 106

def foreign_key
  options[:foreign_key] || :"#{root_klass_name}_id"
end