Sha256: 3e5dfdcd24d758dd74eb906a84ee29d813b956c94c7662553004f289f1dc84cb

Contents?: true

Size: 1.18 KB

Versions: 1

Compression:

Stored size: 1.18 KB

Contents

# frozen_string_literal: true

module PUNK
  class IdentifySessionWorker < Worker
    args :session_id

    def validate
      validates_not_null :session_id
      validates_not_empty :session_id
    end

    def process
      require "userstack"

      session = Session[session_id]
      return if session.blank?

      return if PUNK.get.userstack.api_key.blank?
      client = Userstack::Client.new(PUNK.get.userstack.api_key, use_ssl: PUNK.get.userstack.use_ssl)
      result = client.parse(session.user_agent).deep_symbolize_keys

      raise if result[:success] == false || result[:type].nil?

      session.update(data: session.data.merge(
        os: {
          name: result[:os][:name],
          family: result[:os][:family],
          vendor: result[:os][:family_vendor]
        },
        browser: {
          name: result[:browser][:name],
          version: result[:browser][:version]
        },
        device: {
          name: result[:device][:name],
          brand: result[:device][:brand],
          type: result[:device][:type],
          mobile: result[:device][:is_mobile_device]
        }
      ))

      GeocodeSessionWorker.perform_now(session_id: session.id)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
punk-0.4.1 lib/punk/workers/identify_session_worker.rb