Sha256: 2ff996f8deeb103cbcf2dee1a1fea5e05c8d1c8d20068f75327e66c8dfe74f7d

Contents?: true

Size: 950 Bytes

Versions: 1

Compression:

Stored size: 950 Bytes

Contents

module PloymorphicModule

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

  module ClassMethods

    def acts_as_wuid options={}
      #TODO auto set wuid with conditional hook
      has_one :wuid, :as => :wuidable, :dependent => :destroy
      if options[:acts_as_tree]
        Wuid.class_eval do
          acts_as_tree :foreign_key => "reference_to"
        end
        include PloymorphicModule::AdvancedInstanceMethods
      else
        include PloymorphicModule::InstanceMethods
      end
    end

  end

  module InstanceMethods

    def after_create 
      super
      create_wuid
    end 

    def create_wuid
      wuid.create
    end
 
    def wid
      self.wuid.id
    end

  end

  module AdvancedInstanceMethods

    def wid
      (self.respond_to?(:reference_to) && self.parent) ? self.parent.wid : self.wuid.id
    end

    def wid= id
      w = self.wuild.build :reference_to => id
      w.save 
    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ploymorphic_wuid-0.2.0 lib/wuid/ploymorphic_module.rb