module Cordage::Adapters::ActiveRecord::ClassMethods
Public Instance Methods
cordage(association_name, options = {} )
click to toggle source
# File lib/cordage/adapters/active_record.rb, line 11 def cordage(association_name, options = {} ) association_name = association_name.to_s model_klass_name = options[:class_name].present? ? options[:class_name].to_s.underscore : association_name model_klass = model_klass_name.classify.constantize association_primary_key = options[:primary_key] || model_klass.primary_key.to_sym unless model_klass.superclass == ::ActiveRecord::Base raise ArgumentError, 'cordage :class_name argument must be an instance that inherits from ActiveRecord::Base' end association_accessor_name = "corded_#{association_name}" attr_accessor association_accessor_name define_method(association_name) do send(association_accessor_name) || send("#{association_accessor_name}=", Cordage::Adapters::ActiveRecord::Association::Proxy.new(model_klass, association_name, self, options)) end define_method("#{association_name}=") do |val| proxy = send(association_name) proxy.clear proxy << val proxy end end