Ensure visit id and visitor id are UUIDs

Andrew Kane committed Jun 16, 2014
commit 656c21f7fe170b68e151c3b3503e9b6b77b05c8b
Showing 3 changed files with 19 additions and 2 deletions
ahoy_matey.gemspec +1 -0
@@ @@ -24,6 +24,7 @@ Gem::Specification.new do |spec|
spec.add_dependency "referer-parser"
spec.add_dependency "user_agent_parser"
spec.add_dependency "request_store"
+ spec.add_dependency "uuidtools"
spec.add_development_dependency "bundler", "~> 1.5"
spec.add_development_dependency "rake"
ahoy.rb b/lib/ahoy.rb +12 -0
@@ @@ -4,6 +4,7 @@ require "geocoder"
require "referer-parser"
require "user_agent_parser"
require "request_store"
+ require "uuidtools"
require "ahoy/version"
require "ahoy/tracker"
@@ @@ -31,6 +32,17 @@ module Ahoy
mattr_accessor :domain # cookies
+ UUID_NAMESPACE = UUIDTools::UUID.parse("a82ae811-5011-45ab-a728-569df7499c5f")
+
+ def self.ensure_uuid(id)
+ valid = UUIDTools::UUID.parse(id) rescue nil
+ if valid
+ id
+ else
+ UUIDTools::UUID.sha1_create(UUID_NAMESPACE, id).to_s
+ end
+ end
+
# deprecated
mattr_accessor :visit_model
ahoy/tracker.rb b/lib/ahoy/tracker.rb +6 -2
@@ @@ -49,11 +49,11 @@ module Ahoy
end
def visit_id
- @visit_id ||= existing_visit_id || visit_token
+ @visit_id ||= ensure_uuid(existing_visit_id || visit_token)
end
def visitor_id
- @visitor_id ||= existing_visitor_id || visitor_token
+ @visitor_id ||= ensure_uuid(existing_visitor_id || visitor_token)
end
def set_visit_cookie
@@ @@ -132,5 +132,9 @@ module Ahoy
@existing_visitor_id ||= request.headers["Ahoy-Visitor"] || request.cookies["ahoy_visitor"]
end
+ def ensure_uuid(id)
+ Ahoy.ensure_uuid(id)
+ end
+
end
end