Sha256: cad302eb91d99224e846d7a556c8ff8ae3701e176d59ff3b9093a19f31f5d546

Contents?: true

Size: 1.42 KB

Versions: 15

Compression:

Stored size: 1.42 KB

Contents

module Panda
  module Associations
    def self.included(base)
      base.extend(ClassMethods)
    end

    module ClassMethods

      def has_one(relation_name)
        # for example creates : @video ||= VideoScope.new(self)

        define_method relation_name do
          param_id = "#{relation_name}_id"
          if instance_var = instance_variable_get("@#{relation_name}")
            instance_var
          else
            @associations ||= []
            @associations << relation_name
            instance_variable_set("@#{relation_name}",
              Panda::const_get(relation_name.to_s.capitalize).find(send(param_id.to_sym)))
          end
        end
      end

      def has_many(relation_name)
        # for example creates : @encodings ||= EncodingScope.new(self)

        define_method relation_name do
          model_name = "#{relation_name.to_s[0..-2].capitalize}"
          if instance_var = instance_variable_get("@#{relation_name}")
            instance_var
          else
            @associations ||= []
            @associations << relation_name
            instance_variable_set("@#{relation_name}",
              Panda::const_get("#{model_name}Scope").new(self))
          end
        end
      end

      alias :belongs_to :has_one

    end

    private
    def reset_associations
      if @associations
        @associations.each do |a|
          instance_variable_set("@#{a}",nil)
        end
      end
    end

  end
end

Version data entries

15 entries across 15 versions & 2 rubygems

Version Path
panda-1.6.1 lib/panda/modules/associations.rb
panda-1.6.0 lib/panda/modules/associations.rb
panda-1.5.0 lib/panda/modules/associations.rb
panda-1.4.4 lib/panda/modules/associations.rb
panda-1.4.3 lib/panda/modules/associations.rb
panda-1.4.2 lib/panda/modules/associations.rb
panda-1.4.1 lib/panda/modules/associations.rb
panda-1.4.0 lib/panda/modules/associations.rb
panda-1.3.0 lib/panda/modules/associations.rb
panda-1.2.2 lib/panda/modules/associations.rb
panda-1.2.1 lib/panda/modules/associations.rb
panda-1.2.0 lib/panda/modules/associations.rb
panda-1.1.0 lib/panda/modules/associations.rb
faraday-panda-1.1.0 lib/panda/modules/associations.rb
panda-1.0.0 lib/panda/modules/associations.rb