Sha256: 765d685b21a8378c7b6dcb6e6557de0c19941d7e6e1a9d95a9fbcdd01182d012

Contents?: true

Size: 1.2 KB

Versions: 30

Compression:

Stored size: 1.2 KB

Contents

require 'active_support/concern'
require 'active_support/core_ext'

# TODO: specs
module MnoEnterprise::DatabaseExtendable
  extend ActiveSupport::Concern

  class_methods do
    def database_extendable(*fields)
      fields.each do |field|
        delegate field.to_sym, "#{field}=".to_sym, to: :extension
      end

      after_save :save_extensions
      after_destroy :delete_extension

      include MnoEnterprise::DatabaseExtendable::InstanceMethods
    end
  end

  module InstanceMethods
    def extension
      @extension ||= klass.where(foreign_key => self.uid).first_or_initialize
    end

    def extension=(extension)
      @extension = extension
    end

    def klass
      "#{self.class}Extension".constantize
    end

    def foreign_key
      self.class.to_s.foreign_key.gsub(/_id/, '_uid')
    end

    protected
    def save_extensions
      # Set extension foreign key
      if extension.send(foreign_key).blank?
        extension.send("#{foreign_key}=", self.uid)
      end
      # Save at all time to 'touch' to  expire the cache
      if extension.changed?
        extension.save
      else
        extension.touch
      end
    end

    def delete_extension
      extension.destroy
    end
  end

end

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
mno-enterprise-core-3.4.0 lib/mno_enterprise/database_extendable.rb
mno-enterprise-core-3.3.3 lib/mno_enterprise/database_extendable.rb
mno-enterprise-core-3.3.2 lib/mno_enterprise/database_extendable.rb
mno-enterprise-core-3.2.1 lib/mno_enterprise/database_extendable.rb
mno-enterprise-core-3.3.1 lib/mno_enterprise/database_extendable.rb
mno-enterprise-core-3.3.0 lib/mno_enterprise/database_extendable.rb
mno-enterprise-core-3.2.0 lib/mno_enterprise/database_extendable.rb
mno-enterprise-core-3.1.4 lib/mno_enterprise/database_extendable.rb
mno-enterprise-core-3.0.7 lib/mno_enterprise/database_extendable.rb
mno-enterprise-core-2.0.9 lib/mno_enterprise/database_extendable.rb
mno-enterprise-core-3.1.3 lib/mno_enterprise/database_extendable.rb
mno-enterprise-core-3.0.6 lib/mno_enterprise/database_extendable.rb
mno-enterprise-core-2.0.8 lib/mno_enterprise/database_extendable.rb
mno-enterprise-core-3.1.2 lib/mno_enterprise/database_extendable.rb
mno-enterprise-core-3.0.5 lib/mno_enterprise/database_extendable.rb
mno-enterprise-core-2.0.7 lib/mno_enterprise/database_extendable.rb
mno-enterprise-core-2.0.6 lib/mno_enterprise/database_extendable.rb
mno-enterprise-core-2.0.5 lib/mno_enterprise/database_extendable.rb
mno-enterprise-core-3.1.1 lib/mno_enterprise/database_extendable.rb
mno-enterprise-core-3.0.4 lib/mno_enterprise/database_extendable.rb