module RiakRecord::Associations::ClassMethods

Public Instance Methods

belongs_to_riak(association_name, options = {}) click to toggle source
# File lib/riak_record/associations.rb, line 27
      def belongs_to_riak(association_name, options = {})
        class_name = options[:class_name] ||= association_name.to_s.split("_").collect(&:capitalize).join
        foreign_key = options[:foreign_key] || "#{association_name}_id"

        if options[:link]
          raise ArgumentError, "link option only available for instances of RiakRecord" unless self < RiakRecord::Base
          link_definitions[association_name.to_sym] = {:class_name => class_name, :foreign_key => foreign_key}
        end

        method_def = <<-END_OF_RUBY

        def #{association_name}
          @belongs_to_riak_#{association_name} = nil if @belongs_to_riak_#{association_name} && @belongs_to_riak_#{association_name}.id.to_s != Array(#{foreign_key}).first.to_s
          related_id = Array(#{foreign_key}).first
          @belongs_to_riak_#{association_name} ||= #{class_name}.find(related_id) if related_id
          @belongs_to_riak_#{association_name}
        end

        def #{association_name}=(obj)
          raise ArgumentError, "not an instance of RiakRecord" unless obj.kind_of?(RiakRecord::Base)
          @belongs_to_riak_#{association_name} = obj
          self.#{foreign_key} = obj.id
        end

        END_OF_RUBY

        class_eval method_def
      end
has_many_riak(association_name, options = {}) click to toggle source
# File lib/riak_record/associations.rb, line 56
      def has_many_riak(association_name, options = {})
        class_name = options[:class_name]
        foreign_key = options[:foreign_key]
        class_name && foreign_key or raise ArgumentError, "has_many_riak requires class_name and foreign_key options"

        method_def = <<-END_OF_RUBY

        def #{association_name}
          @has_many_riak_#{association_name} ||= #{class_name}.where(:#{foreign_key} => self.id.to_s)
        end

        END_OF_RUBY

        class_eval method_def
      end