From 2d9ea6878ce23f2d054cb0ac2902ca60d37e4619 Mon Sep 17 00:00:00 2001 From: Peter de Ruijter Date: Mon, 10 Mar 2014 14:45:28 +0100 Subject: [PATCH] Adds URL tracking for every request within the scope of controllers. --- ab_panel.gemspec | 1 + lib/ab_panel/controller_additions.rb | 1 + spec/ab_panel/controller_additions_spec.rb | 29 ++++++++++++++++++++++ spec/support/files/config/mixpanel.yml | 4 +++ 4 files changed, 35 insertions(+) create mode 100644 spec/support/files/config/mixpanel.yml diff --git a/ab_panel.gemspec b/ab_panel.gemspec index 5ca8cad..0aee842 100644 --- a/ab_panel.gemspec +++ b/ab_panel.gemspec @@ -24,6 +24,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency "fakeweb" spec.add_development_dependency "rspec" spec.add_development_dependency "debugger" + spec.add_development_dependency "timecop" spec.add_runtime_dependency "mixpanel" end diff --git a/lib/ab_panel/controller_additions.rb b/lib/ab_panel/controller_additions.rb index 3660498..276a8db 100644 --- a/lib/ab_panel/controller_additions.rb +++ b/lib/ab_panel/controller_additions.rb @@ -82,6 +82,7 @@ def track_action(name, properties = {}) distinct_id: distinct_id, ip: request.remote_ip, time: Time.now.utc, + url: request.original_url }.merge(properties) AbPanel.funnels.each do |funnel| diff --git a/spec/ab_panel/controller_additions_spec.rb b/spec/ab_panel/controller_additions_spec.rb index 5f41a63..918a915 100644 --- a/spec/ab_panel/controller_additions_spec.rb +++ b/spec/ab_panel/controller_additions_spec.rb @@ -1,4 +1,5 @@ require 'spec_helper' +require 'timecop' class Controller include AbPanel::ControllerAdditions @@ -10,6 +11,10 @@ def session describe AbPanel::ControllerAdditions do let(:controller) { Controller.new } + before do + request = double('request', original_url: 'http://www.foo.bar', remote_ip: '127.0.0.1') + controller.stub(:request).and_return request + end describe "#distinct_id" do let(:cookies) { {} } @@ -18,4 +23,28 @@ def session it { should match /^([A-Z]|[0-9])([A-Z]|[0-9])([A-Z]|[0-9])([A-Z]|[0-9])([A-Z]|[0-9])$/ } end + + describe "#track_actions" do + let(:cookies) { {} } + before do + controller.stub_chain(:cookies, :signed).and_return(cookies) + controller.stub(:distinct_id) { "123AB" } + AbPanel.stub(:experiments) { [] } + Timecop.freeze(Time.local(2014)) + end + + after do + Timecop.return + end + + it "should add the URL to the tracking." do + AbPanel.should_receive(:track).with({:name=>"Foo"}, + {:distinct_id=>"123AB", + :ip => "127.0.0.1", + :time => Time.now.utc, + :url => "http://www.foo.bar" + }) + controller.track_action(name: 'Foo') + end + end end diff --git a/spec/support/files/config/mixpanel.yml b/spec/support/files/config/mixpanel.yml new file mode 100644 index 0000000..a56574e --- /dev/null +++ b/spec/support/files/config/mixpanel.yml @@ -0,0 +1,4 @@ +development: + api_key: 383340bfea74ab839ebb667ab3c59fa3 + api_secret: 3990703d6d73d2b7fd78a1d19de66605 + token: 735cc06a1b1ded4827d7faff385ad6fc