Sha256: 25a1f8e69fe3945cb6b96010e4863af1584b918d71267314e3b8b6794439be24

Contents?: true

Size: 855 Bytes

Versions: 3

Compression:

Stored size: 855 Bytes

Contents

module AgilideeCommons
  module PolymorphicId
    module ClassMethods
      def polymorphic_id_for(relation_name)
        module_src = File.read(__FILE__).split("__END__").last
        module_src = module_src.gsub("relation", relation_name.to_s)
        send :include, eval(module_src)
      end
    end
    
    def self.included(model)
      model.send(:extend, AgilideeCommons::PolymorphicId::ClassMethods)
    end
    
    def guid
      return nil if new_record?
      
      "#{self.class}-#{self.id}"
    end
  end
end

# __END__

Module.new do
  def relation_guid
    return nil if relation_type.blank? || relation_id.blank?
    
    "#{relation_type}-#{relation_id}"
  end
  
  def relation_guid=(guid)
    return self.relation = nil if guid.blank?
    
    type, id      = guid.split("-")
    self.relation = type.constantize.find(id)
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
agilidee_commons-1.0.5 lib/agilidee_commons/polymorphic_id.rb
agilidee_commons-1.0.4 lib/agilidee_commons/polymorphic_id.rb
agilidee_commons-1.0.3 lib/agilidee_commons/polymorphic_id.rb