From 2842dfc9f125be354defe88d489e9f60457e8552 Mon Sep 17 00:00:00 2001 From: Duarte Henriques Date: Mon, 8 Oct 2012 19:27:34 +0100 Subject: [PATCH] Channel events through flash instead of rendering them to the page. All methods except for events are now ignored. --- .../_analytical_javascript.html.erb | 9 +++---- lib/analytical.rb | 4 +++ lib/analytical/api.rb | 26 ++++++------------- lib/analytical/modules/base.rb | 10 +++---- spec/analytical/api_spec.rb | 4 --- spec/analytical/modules/base_spec.rb | 25 ------------------ 6 files changed, 21 insertions(+), 57 deletions(-) diff --git a/app/views/application/_analytical_javascript.html.erb b/app/views/application/_analytical_javascript.html.erb index a3645047..50394850 100644 --- a/app/views/application/_analytical_javascript.html.erb +++ b/app/views/application/_analytical_javascript.html.erb @@ -1,11 +1,10 @@ diff --git a/lib/analytical.rb b/lib/analytical.rb index f936300f..9a272cca 100644 --- a/lib/analytical.rb +++ b/lib/analytical.rb @@ -9,6 +9,10 @@ module Analytical def analytical(options = {}) config = Analytical.config(options[:config]) self.analytical_options = options.reverse_merge(config) + + after_filter do |controller| + flash[:analytical] = controller.analytical.flash.to_json.html_safe + end end def self.config(path = nil) diff --git a/lib/analytical/api.rb b/lib/analytical/api.rb index 3810f37a..32fcd967 100644 --- a/lib/analytical/api.rb +++ b/lib/analytical/api.rb @@ -20,6 +20,10 @@ def initialize(options={}) @dummy_module = Analytical::Modules::DummyModule.new end + def flash + @modules.values.map{ |m| m.events_options }.flatten(1) + end + def get_mod(name) name = name.to_s.camelize "Analytical::Modules::#{name}".constantize @@ -70,13 +74,12 @@ def now # These methods return the javascript that should be inserted into each section of your layout # def head_prepend_javascript - [init_javascript(:head_prepend), tracking_javascript(:head_prepend)].delete_if{|s| s.blank?}.join("\n") + [init_javascript(:head_prepend)].delete_if{|s| s.blank?}.join("\n") end def head_append_javascript js = [ - init_javascript(:head_append), - tracking_javascript(:head_append), + init_javascript(:head_append) ] if Gem::Version.new(::Rails::VERSION::STRING) >= Gem::Version.new('3.1.0') # Rails 3.1 lets us override views in engines @@ -92,10 +95,10 @@ def head_append_javascript alias_method :head_javascript, :head_append_javascript def body_prepend_javascript - [init_javascript(:body_prepend), tracking_javascript(:body_prepend)].delete_if{|s| s.blank?}.join("\n") + [init_javascript(:body_prepend)].delete_if{|s| s.blank?}.join("\n") end def body_append_javascript - [init_javascript(:body_append), tracking_javascript(:body_append)].delete_if{|s| s.blank?}.join("\n") + [init_javascript(:body_append)].delete_if{|s| s.blank?}.join("\n") end private @@ -106,19 +109,6 @@ def process_command(command, *args) end end - def tracking_javascript(location) - commands = [] - @modules.each do |name, m| - commands += m.process_queued_commands if m.init_location?(location) || m.initialized - end - commands = commands.delete_if{|c| c.blank? || c.empty?} - unless commands.empty? - commands.unshift "" - end - commands.join("\n") - end - def init_javascript(location) @modules.values.collect do |m| m.init_javascript(location) if m.respond_to?(:init_javascript) diff --git a/lib/analytical/modules/base.rb b/lib/analytical/modules/base.rb index 5521bc0b..fc7f4323 100644 --- a/lib/analytical/modules/base.rb +++ b/lib/analytical/modules/base.rb @@ -49,12 +49,12 @@ def queue(*args) @command_store << args end end - def process_queued_commands - command_strings = @command_store.collect do |c| - send(*c) if respond_to?(c.first) - end.compact + + # we only care about events, all other commands will be removed without having effect + def events_options + result = @command_store.commands.select{ |command| command[0] == :event }.map{ |command| [command[1], command[2]] } @command_store.flush - command_strings + result end def init_location?(location) diff --git a/spec/analytical/api_spec.rb b/spec/analytical/api_spec.rb index 27faf4e3..a6384024 100644 --- a/spec/analytical/api_spec.rb +++ b/spec/analytical/api_spec.rb @@ -79,10 +79,8 @@ before(:each) do @console.stub!(:init_location?).and_return(false) @console.stub!(:initialized).and_return(false) - @console.stub!(:process_queued_commands).and_return([]) @google.stub!(:init_location?).and_return(false) @google.stub!(:initialized).and_return(false) - @google.stub!(:process_queued_commands).and_return([]) end describe '#head_prepend_javascript' do @@ -125,12 +123,10 @@ @console.stub!(:initialized).and_return(false) @console.stub!(:track).and_return('console track called') @console.stub!(:queue) - @console.stub!(:process_queued_commands).and_return(['console track called']) @google.stub!(:init_location?).and_return(false) @google.stub!(:initialized).and_return(true) @google.stub!(:track).and_return('google track called') @google.stub!(:queue) - @google.stub!(:process_queued_commands).and_return(['google track called']) @api.track('something', {:a=>1, :b=>2}) end describe '#body_prepend_javascript' do diff --git a/spec/analytical/modules/base_spec.rb b/spec/analytical/modules/base_spec.rb index 1ee9eebe..22b982b8 100644 --- a/spec/analytical/modules/base_spec.rb +++ b/spec/analytical/modules/base_spec.rb @@ -53,31 +53,6 @@ class BaseApiDummy end end - describe '#process_queued_commands' do - before(:each) do - @api = BaseApiDummy.new(:parent=>mock('parent')) - @api.command_store.commands = [[:a, 1, 2, 3], [:b, {:some=>:args}]] - @api.stub!(:a).and_return('a') - @api.stub!(:b).and_return('b') - end - it 'should send each of the args arrays in the command list' do - @api.should_receive(:a).with(1, 2, 3).and_return('a') - @api.should_receive(:b).with({:some=>:args}).and_return('b') - @api.process_queued_commands - end - it 'should return the results as an array' do - @api.process_queued_commands.should == ['a', 'b'] - end - it 'should clear the commands list' do - @api.process_queued_commands - @api.command_store.commands == [] - end - it "should not store an unrecognized command" do - @api.command_store.commands << [:c, 1] - @api.process_queued_commands.should == ['a','b'] - end - end - describe '#init_location?' do before(:each) do @api = BaseApiDummy.new(:parent=>mock('parent'))