Rack::UTM is a rack middleware that extracts information about the utm tracking codes.
MIT License
Rack::UTM is a rack middleware that extracts information about the utm tracking codes. Specifically, it looks up for specific parameter (utm-* by default) in the request. If found, it persists utm tag values in a cookie for later use.
UTM links tracking is very common task if you want to promote your online business. This middleware helps you to do that.
Piece a cake:
gem install rack-utm
Add the middleware to your application stack:
# Rails 3 App - in config/application.rb
class Application < Rails::Application
...
config.middleware.use Rack::Utm
...
end
# Rails 2 App - in config/environment.rb
Rails::Initializer.run do |config|
...
config.middleware.use "Rack::Utm"
...
end
Now you can check any request to see who came to your site via an affiliated link and use this information in your application. Affiliate tag is saved in the cookie and will come into play if user returns to your site later.
class ExampleController < ApplicationController
def index
str = if request.env['utm.source']
"Hallo, user! You've been referred here by #{request.env['utm.source']}, #{request.env['utm.medium']}, ...."
else
"We're glad you found us on your own!"
end
render :text => str
end
end
By default cookie is set for 30 days, you can extend time to live with :ttl option (default is 30 days).
#Rails 3 in config/application.rb
class Application < Rails::Application
...
config.middleware.use Rack::Affiliates, {:ttl => 3.months}
...
end
The :domain option allows to customize cookie domain.
#Rails 3 in config/application.rb
class Application < Rails::Application
...
config.middleware.use Rack::Affiliates, :domain => '.example.org'
...
end
Middleware will set cookie on .example.org so it's accessible on www.example.org, app.example.org etc.
The :overwrite option allows to set whether to overwrite the existing utm tag previously stored in cookies. By default it is set to true
.
Thanks goes to Rack::Referrals (https://github.com/deviantech/rack-referrals) and Rack::Affiliates (https://github.com/alexlevin/rack-affiliates) for the inspiration.