trakio/trakio-ruby

View on GitHub
lib/trakio_client/track.rb

Summary

Maintainability
A
1 hr
Test Coverage
module TrakioClient
  class Track < EndPoint

    def run p = {}
      event = p[:event]
      distinct_id = p[:distinct_id] || self.distinct_id
      company_id = p[:company_id] || self.company_id
      channel = p[:channel] || self.channel
      properties = p[:properties] || {}
      check_parameters event, distinct_id, company_id, properties

      params = {
        event: event
      }
      params[:time] = process_time p[:time]
      params[:channel] = channel if channel
      params[:properties] = properties if properties && !properties.empty?
      params[:company_id] = company_id if company_id
      params[:distinct_id] = distinct_id if distinct_id

      send_request('track', params)
    end

    def page_view p
      args = { event: 'Page view' }
      distinct_id = p[:distinct_id] || self.distinct_id
      url = p[:url]
      title = p[:title]
      check_page_view_parameters url

      properties = {
        url: url,
      }
      properties[:title] = title if title
      args[:properties] = properties
      args[:distinct_id] = distinct_id if distinct_id

      run args  # right now page_view is an alias of track
    end

    def process_time time
      if time
        if !time.is_a? String
          time.iso8601
        else
          time
        end
      else
        DateTime.now.iso8601
      end
    end

    def check_parameters event, distinct_id, company_id, properties
      unless event
        raise Exceptions::MissingParameter.new("The `event` parameter must be provided.")
      end
      unless distinct_id || company_id
        raise Exceptions::MissingParameter.new('Either a `company_id` or `distinct_id` parameter must be provided.')
      end
      unless properties.is_a?(Hash)
        raise Exceptions::InvalidParameter.new("The `properties` parameter must be a hash.")
      end
    end

    def check_page_view_parameters url
      unless url
        raise Exceptions::InvalidParameter.new("The `url` parameter must be provided.")
      end
    end

  end
end