Sha256: 4c1cb7306317f006aceec97df5b5bff5b268dd6a6008e0ddc3d58019145f5bfb

Contents?: true

Size: 1.76 KB

Versions: 1

Compression:

Stored size: 1.76 KB

Contents

# Poly Belongs To
# The MIT License (MIT)
# Copyright (C) 2015 by Daniel P. Clark
$: << File.join(File.dirname(__FILE__), "/poly_belongs_to")
require 'poly_belongs_to/version'
require 'poly_belongs_to/dup'
require 'poly_belongs_to/hierarchy'
require 'poly_belongs_to/poly_belongs_to'
require 'active_support/concern'

module PolyBelongsTo
  module Core
    extend ActiveSupport::Concern

    included do
      def self.pbt
        reflect_on_all_associations(:belongs_to).first.try(:name)
      end
      
      def self.poly?
        !!reflect_on_all_associations(:belongs_to).first.try {|i| i.options[:polymorphic] }
      end

      def self.pbt_params_name(allow_as_nested = true)
        if poly?
          allow_as_nested ? "#{table_name}_attributes".to_sym : name.downcase.to_sym
        else
          name.downcase.to_sym
        end
      end

      def self.pbt_id_sym
        val = pbt
        val ? "#{val}_id".to_sym : nil
      end

      def self.pbt_type_sym
        poly? ? "#{pbt}_type".to_sym : nil
      end
    end
    
    def pbt
      self.class.pbt
    end

    def poly?
      self.class.poly?
    end

    def pbt_id
      val = pbt
      val ? eval("self.#{val}_id") : nil
    end

    def pbt_type
      poly? ? eval("self.#{pbt}_type") : nil
    end

    def pbt_parent
      val = pbt
      if val
        if poly?
          eval "#{pbt_type}.find(#{pbt_id})"
        else
          eval "#{val.capitalize.to_s}.find(#{pbt_id})"
        end
      else
        nil
      end
    end

    def pbt_id_sym
      self.class.pbt_id_sym
    end

    def pbt_type_sym
      self.class.pbt_type_sym
    end

    def pbt_params_name(allow_as_nested = true)
      self.class.pbt_params_name(allow_as_nested)
    end
  end
end

ActiveRecord::Base.send(:include, PolyBelongsTo::Core)

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
poly_belongs_to-0.1.4 lib/poly_belongs_to.rb