teagles / ahoy

public
0
Clone
Ahoy-2-Upgrade.md
Blame History Raw Edit 3.1 KB

Ahoy 2 Upgrade

Ahoy 2.0 brings a number of exciting changes:

  • jQuery is no longer required
  • Uses navigator.sendBeacon by default in supported browsers
  • Simpler interface for data stores

How to Upgrade

Update your Gemfile:

gem 'ahoy_matey', '~> 2'

And run:

bundle update ahoy_matey

Add to config/initializers/ahoy.rb:

Ahoy.api = true
Ahoy.server_side_visits = false

You can also try the new Ahoy.server_side_visits = :when_needed to automatically create visits server-side when needed for events and visitable.

If you use visitable, add class_name to each instance:

visitable class_name: "Visit"

Then follow the instructions for your data store.

Data Stores

ActiveRecordTokenStore

In config/initializers/ahoy.rb, replace Ahoy::Store with:

class Ahoy::Store < Ahoy::DatabaseStore
def visit_model
Visit
end
end

ActiveRecordStore

Add uuidtools to your Gemfile.

In config/initializers/ahoy.rb, replace Ahoy::Store with:

class Ahoy::Store < Ahoy::DatabaseStore
def track_visit(data)
data[:id] = ensure_uuid(data.delete(:visit_token))
data[:visitor_id] = ensure_uuid(data.delete(:visitor_token))
super(data)
end
def track_event(data)
data[:id] = ensure_uuid(data.delete(:event_id))
super(data)
end
def visit
@visit ||= visit_model.find_by(id: ensure_uuid(ahoy.visit_token)) if ahoy.visit_token
end
def visit_model
Visit
end
UUID_NAMESPACE = UUIDTools::UUID.parse("a82ae811-5011-45ab-a728-569df7499c5f")
def ensure_uuid(id)
UUIDTools::UUID.parse(id).to_s
rescue
UUIDTools::UUID.sha1_create(UUID_NAMESPACE, id).to_s
end
end

MongoidStore

In config/initializers/ahoy.rb, replace Ahoy::Store with:

class Ahoy::Store < Ahoy::DatabaseStore
def track_visit(data)
data[:_id] = binary_uuid(data.delete(:visit_token))
data[:visitor_id] = binary_uuid(data.delete(:visitor_token))
super(data)
end
def track_event(data)
data[:_id] = binary_uuid(data.delete(:event_id))
super(data)
end
def geocode(data)
visit_model.where(id: binary_uuid(ahoy.visit_token)).find_one_and_update({"$set": data}, {upsert: true})
end
def visit
@visit ||= visit_model.where(id: binary_uuid(ahoy.visit_token)).first if ahoy.visit_token
end
def visit_model
Visit
end
def binary_uuid(token)
token = token.delete("-")
if defined?(::BSON)
::BSON::Binary.new(token, :uuid)
elsif defined?(::Moped::BSON)
::Moped::BSON::Binary.new(:uuid, token)
else
token
end
end
end

Others

Check out the data store examples.

Throttling

Throttling was removed due to limited practical usefulness. See instructions for adding it back if you need it.

Options

  • The mount option was renamed to api
  • The track_visits_immediately option was renamed to server_side_visits