Sha256: 0ce6e1f6dbecf25a9dbf257ae0f290e03ab6f9e0c304b8860f3bda8fce8633ba

Contents?: true

Size: 1.05 KB

Versions: 1

Compression:

Stored size: 1.05 KB

Contents

module BraintreeRails
  module Association
    module ClassMethods
      def has_many(name, options)
        define_association_reader(name, options.merge(:foreign_key => :presence))
      end

      def belongs_to(name, options)
        define_association_reader(name, options)
        define_association_writer(name, options)
      end

      def has_one(name, options)
        belongs_to(name, options)
      end

      def define_association_reader(name, options)
        define_method(name) do
          value = instance_variable_get("@#{name}")
          return value if value.present?
          value = self.send(options[:foreign_key])
          value &&= options[:class].new(value)
          instance_variable_set("@#{name}", value)
        end
      end

      def define_association_writer(name, options)
        define_method("#{name}=") do |value|
          value &&= options[:class].new(value)
          instance_variable_set("@#{name}", value)
        end
      end
    end

    def self.included(receiver)
      receiver.extend ClassMethods
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
braintree-rails-1.1.0 lib/braintree_rails/association.rb