Sha256: 3906c033483e581fae3739557d91acd6e928dba33d3db1d93e1ed88e8666be99

Contents?: true

Size: 1.05 KB

Versions: 7

Compression:

Stored size: 1.05 KB

Contents

module ActiveHash
  module Associations

    def self.included(base)
      base.extend Methods
    end

    module Methods
      def has_many(association_id, options = {})

        define_method(association_id) do
          options = {
            :class_name => association_id.to_s.classify,
            :foreign_key => self.class.to_s.foreign_key
          }.merge(options)

          options[:class_name].constantize.send("find_all_by_#{options[:foreign_key]}", id)
        end

      end

      def belongs_to(association_id, options = {})

        options = {
          :class_name => association_id.to_s.classify,
          :foreign_key => association_id.to_s.foreign_key
        }.merge(options)

        field options[:foreign_key].to_sym

        define_method(association_id) do
          options[:class_name].constantize.find_by_id(send(options[:foreign_key]))
        end

        define_method("#{association_id}=") do |new_value|
          attributes[ options[:foreign_key].to_sym ] = new_value ? new_value.id : nil
        end

      end
    end

  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
active_hash-0.8.5 lib/associations/associations.rb
active_hash-0.8.4 lib/associations/associations.rb
active_hash-0.8.3 lib/associations/associations.rb
active_hash-0.8.2 lib/associations/associations.rb
active_hash-0.8.1 lib/associations/associations.rb
active_hash-0.8.0 lib/associations/associations.rb
active_hash-0.7.9 lib/associations/associations.rb