Sha256: 1d1c4b4a16504eb9332f0b8c61007a18f99692ddd63465b138192169db2ecd16

Contents?: true

Size: 1.87 KB

Versions: 2

Compression:

Stored size: 1.87 KB

Contents

module VestalVersions
  # Provides a way for information to be associated with specific versions as to who was
  # responsible for the associated update to the parent.
  module Users
    extend ActiveSupport::Concern

    included do
      attr_accessor :updated_by
      Version.class_eval{ include VersionMethods }
    end

    # Methods added to versioned ActiveRecord::Base instances to enable versioning with additional
    # user information.
    module InstanceMethods

      private
      # Overrides the +version_attributes+ method to include user information passed into the
      # parent object, by way of a +updated_by+ attr_accessor.
      def version_attributes
        super.merge(:user => updated_by)
      end
    end

    # Instance methods added to VestalVersions::Version to accomodate incoming user information.
    module VersionMethods
      extend ActiveSupport::Concern

      included do
        belongs_to :user, :polymorphic => true

        alias_method_chain :user, :name
        alias_method_chain :user=, :name
      end

      # Overrides the +user+ method created by the polymorphic +belongs_to+ user association. If
      # the association is absent, defaults to the +user_name+ string column. This allows
      # VestalVersions::Version#user to either return an ActiveRecord::Base object or a string,
      # depending on what is sent to the +user_with_name=+ method.
      def user_with_name
        user_without_name || user_name
      end

      # Overrides the +user=+ method created by the polymorphic +belongs_to+ user association.
      # Based on the class of the object given, either the +user+ association columns or the
      # +user_name+ string column is populated.
      def user_with_name=(value)
        case value
          when ActiveRecord::Base then self.user_without_name = value
          else self.user_name = value
        end
      end
    end

  end
end

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
set_vestal_versions-1.2.2 lib/vestal_versions/users.rb
razenha-vestal_versions-1.2.2 lib/vestal_versions/users.rb