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 | |