Sha256: 097b3f20c3b9c3cc1fabbe1e78f8e30e5be8dd317b0abbe6887399c8cf3c60e3

Contents?: true

Size: 1.99 KB

Versions: 12

Compression:

Stored size: 1.99 KB

Contents

module MVP
  module AnalyticsConcern
    extend ActiveSupport::Concern

    INVISIBLE_SESSION_COOKIE = 'invisible'

    included do
      before_action :generate_uid_if_not_set
      helper_method :analytics_id
      helper_method :analytics_identify_events
      helper_method :analytics_track_events
    end

    def identify!(id, properties={})
      return if session[INVISIBLE_SESSION_COOKIE].to_b == true

      events = flash['__analytics_identify_events'] ||= []
      events << {
        'id': id,
        'properties': properties
      }
      flash['__analytics_identify_events'] = events
    end

    def track!(event, properties={})
      return if session[INVISIBLE_SESSION_COOKIE].to_b == true

      events = flash['__analytics_track_events'] ||= []
      events << {
        'name': event,
        'properties': properties.reverse_merge({
          iteration: MVP::Iteration.version,
          user: current_user.try(:name),
          url: request.fullpath
        })
      }
      flash['__analytics_track_events'] = events
    end

    def slack!(message, properties=nil)
      if ENV['SLACK_WEBHOOK_URL']
        _msg = [message]
        _msg << properties.inspect if properties

        begin
          slack_notifier.ping _msg.join(' ')
        rescue
          slack_notifier.ping "Tried to use slack messaging but failure happened"
        end
      end
    end

    def analytics_identify_events
      flash['__analytics_identify_events'] ||= []
      flash['__analytics_identify_events']
    end

    def analytics_track_events
      flash['__analytics_track_events'] ||= []
      flash['__analytics_track_events']
    end

    private

    def slack_notifier
      Slack::Notifier.new ENV['SLACK_WEBHOOK_URL'], channel: ENV['SLACK_POST_CHANNEL'],
                                                    username: ENV['SLACK_POST_USERNAME']
    end

    def analytics_id
      cookies[:uid]
    end

    def generate_uid_if_not_set
      cookies[:uid] = SecureRandom.uuid unless cookies[:uid].present?
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
mvpkit-2.0.1 project/app/controllers/concerns/analytics_concern.rb
mvpkit-2.0.0 project/app/controllers/concerns/analytics_concern.rb
mvpkit-1.1.2 app/controllers/concerns/mvp/analytics_concern.rb
mvpkit-1.1.1 app/controllers/concerns/mvp/analytics_concern.rb
mvpkit-1.1.0 app/controllers/concerns/mvp/analytics_concern.rb
mvpkit-1.0.4 app/controllers/concerns/mvp/analytics_concern.rb
mvpkit-1.0.3 app/controllers/concerns/mvp/analytics_concern.rb
mvpkit-1.0.2 app/controllers/concerns/mvp/analytics_concern.rb
mvpkit-1.0.1 app/controllers/concerns/mvp/analytics_concern.rb
mvpkit-1.0.0 app/controllers/concerns/mvp/analytics_concern.rb
mvpkit-0.8.1 app/controllers/concerns/mvp/analytics_concern.rb
mvpkit-0.8.0 app/controllers/concerns/mvp/analytics_concern.rb