Sha256: 06be4b9a5f91ae9b626c6e8f2f45723b6ba27fa39b7b72d57589d43aaff40d2f

Contents?: true

Size: 1.61 KB

Versions: 4

Compression:

Stored size: 1.61 KB

Contents

module AbAdmin
  module Models
    module Track

      extend ActiveSupport::Concern

      included do
        belongs_to :trackable, polymorphic: true
        belongs_to :owner, class_name: 'User'
        belongs_to :user, class_name: 'User'

        serialize :parameters, Hash
        serialize :trackable_changes, Hash

        before_create :make_trackable, if: :trackable

        class_attribute :tracking_enabled
        self.tracking_enabled = true

        alias_method :tracking_enabled?, :tracking_enabled

        scope :recently, -> { order('id DESC') }
      end

      def action_title(params = {})
        parts = key.split('.')
        lookups = []
        if parts.length == 2
          lookups << [parts[0], 'actions', parts[1], 'title']
          lookups << [parts[0], 'actions', parts[1]]
          lookups << ['actions', parts[1], 'title']
        else
          lookups << ['actions', key, 'title']
          lookups << ['actions', key]
        end
        lookups.map!{|l| l.join('.').to_sym }
        lookups << key

        I18n.t(lookups.shift, (parameters.merge(params) || {}).merge(scope: :admin, default: lookups))
      end

      def trackable_changed_attrs
        return unless trackable
        trackable_changes.keys.map { |attr| trackable_han(attr) }.join(', ')
      end

      def trackable_han(attr)
        attr_s = attr.to_s
        trackable.class.han attr_s =~ /_ids$/ ? attr_s.sub(/_ids$/, '').pluralize : attr_s
      end

      private

      def make_trackable
        self.name ||= trackable.han
        self.trackable_changes = trackable.changes.except(:updated_at)
      end

    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
ab_admin-0.6.1 lib/ab_admin/models/track.rb
ab_admin-0.6.0 lib/ab_admin/models/track.rb
ab_admin-0.5.0 lib/ab_admin/models/track.rb
ab_admin-0.4.0 lib/ab_admin/models/track.rb