Sha256: 463430bf81fadd6fc821a160a89a40701df8e1aee42f87dcd30cc8350e585d68

Contents?: true

Size: 1.77 KB

Versions: 1

Compression:

Stored size: 1.77 KB

Contents

require 'active_support'

module ActionTracker
  module Concerns
    # nodoc
    module Tracker
      extend ::ActiveSupport::Concern

      included do
        helper ActionTracker::Helpers::Render
        before_filter :initialize_session
        after_filter :conditional_track_event
      end

      def render(*args)
        track_event
        session[:action_tracked] = true
        super
      end

      private

      def conditional_track_event
        track_event unless session[:action_tracked]
      end

      def initialize_session
        session[:action_tracked] = false
      end

      def track_event
        return unless ActionTracker.configuration.track_events
        session[:action_tracker] ||= []
        session[:action_tracker] << tracker_params unless tracker_params.blank?
      end

      def tracker_klass
        @tracker_klass ||= "#{namespace}#{controller_name.camelize}Tracker"
      end

      def resource
        @resource ||= method(find_resource).call if find_resource
      end

      def find_resource
        @resource_method ||= Devise.mappings.keys.map { |resource| "current_#{resource}" }
                                   .select { |method_name| !method(method_name).call.nil? }
                                   .first
      rescue NameError
        nil
      end

      def tracker_instance
        @tracker_instance ||= Object.const_get(tracker_klass, false).new(resource, self)
      rescue NameError
        nil
      end

      def tracker_params
        @tracker_params ||= tracker_exists? ? tracker_instance.method(action_name).call : nil
      end

      def tracker_exists?
        tracker_instance && tracker_instance.respond_to?(action_name)
      end

      def namespace
        self.class.name.deconstantize.try(:+, '::')
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
action_tracker-0.1.3 lib/action_tracker/concerns/tracker.rb