asyncomni 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +38 -0
  3. data/Rakefile +29 -0
  4. data/app/assets/javascripts/omniture.js +10 -0
  5. data/app/assets/javascripts/s_code.js +277 -0
  6. data/app/controllers/omniture_controller.rb +6 -0
  7. data/app/helpers/omniture_helper.rb +39 -0
  8. data/app/models/omniture.rb +28 -0
  9. data/app/views/omniture/_omniture.haml +17 -0
  10. data/config/initializers/omniture.rb +7 -0
  11. data/config/omniture.yml +18 -0
  12. data/config/routes.rb +3 -0
  13. data/lib/asyncomni.rb +7 -0
  14. data/lib/asyncomni/version.rb +3 -0
  15. data/lib/generators/asyncomni/install/install_generator.rb +14 -0
  16. data/lib/tasks/asyncomni_tasks.rake +4 -0
  17. data/spec/controllers/omniture_controller_spec.rb +13 -0
  18. data/spec/dummy/README.rdoc +261 -0
  19. data/spec/dummy/Rakefile +7 -0
  20. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  21. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  22. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  23. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  24. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  25. data/spec/dummy/config.ru +4 -0
  26. data/spec/dummy/config/application.rb +56 -0
  27. data/spec/dummy/config/boot.rb +10 -0
  28. data/spec/dummy/config/database.yml +25 -0
  29. data/spec/dummy/config/environment.rb +5 -0
  30. data/spec/dummy/config/environments/development.rb +37 -0
  31. data/spec/dummy/config/environments/production.rb +67 -0
  32. data/spec/dummy/config/environments/test.rb +37 -0
  33. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  34. data/spec/dummy/config/initializers/inflections.rb +15 -0
  35. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  36. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  37. data/spec/dummy/config/initializers/session_store.rb +8 -0
  38. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  39. data/spec/dummy/config/locales/en.yml +5 -0
  40. data/spec/dummy/config/omniture.yml +18 -0
  41. data/spec/dummy/config/routes.rb +58 -0
  42. data/spec/dummy/db/test.sqlite3 +0 -0
  43. data/spec/dummy/dummy/README.rdoc +261 -0
  44. data/spec/dummy/dummy/Rakefile +7 -0
  45. data/spec/dummy/dummy/app/assets/javascripts/application.js +15 -0
  46. data/spec/dummy/dummy/app/assets/stylesheets/application.css +13 -0
  47. data/spec/dummy/dummy/app/controllers/application_controller.rb +3 -0
  48. data/spec/dummy/dummy/app/helpers/application_helper.rb +2 -0
  49. data/spec/dummy/dummy/app/views/layouts/application.html.erb +14 -0
  50. data/spec/dummy/dummy/config.ru +4 -0
  51. data/spec/dummy/dummy/config/application.rb +56 -0
  52. data/spec/dummy/dummy/config/boot.rb +10 -0
  53. data/spec/dummy/dummy/config/database.yml +25 -0
  54. data/spec/dummy/dummy/config/environment.rb +5 -0
  55. data/spec/dummy/dummy/config/environments/development.rb +37 -0
  56. data/spec/dummy/dummy/config/environments/production.rb +67 -0
  57. data/spec/dummy/dummy/config/environments/test.rb +37 -0
  58. data/spec/dummy/dummy/config/initializers/backtrace_silencers.rb +7 -0
  59. data/spec/dummy/dummy/config/initializers/inflections.rb +15 -0
  60. data/spec/dummy/dummy/config/initializers/mime_types.rb +5 -0
  61. data/spec/dummy/dummy/config/initializers/secret_token.rb +7 -0
  62. data/spec/dummy/dummy/config/initializers/session_store.rb +8 -0
  63. data/spec/dummy/dummy/config/initializers/wrap_parameters.rb +14 -0
  64. data/spec/dummy/dummy/config/locales/en.yml +5 -0
  65. data/spec/dummy/dummy/config/routes.rb +58 -0
  66. data/spec/dummy/dummy/public/404.html +26 -0
  67. data/spec/dummy/dummy/public/422.html +26 -0
  68. data/spec/dummy/dummy/public/500.html +25 -0
  69. data/spec/dummy/dummy/public/favicon.ico +0 -0
  70. data/spec/dummy/dummy/script/rails +6 -0
  71. data/spec/dummy/log/development.log +0 -0
  72. data/spec/dummy/log/test.log +28 -0
  73. data/spec/dummy/public/404.html +26 -0
  74. data/spec/dummy/public/422.html +26 -0
  75. data/spec/dummy/public/500.html +25 -0
  76. data/spec/dummy/public/favicon.ico +0 -0
  77. data/spec/dummy/script/rails +6 -0
  78. data/spec/helpers/omniture_helper_spec.rb +34 -0
  79. data/spec/spec_helper.rb +15 -0
  80. metadata +252 -0
@@ -0,0 +1,20 @@
1
+ Copyright 2012 Gourav Tiwari
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,38 @@
1
+ = Asyncomni
2
+ Omniture integration could be painful in rails application. This project uses simple concept of using iframe to make asynchronus calls (not ajax!) to omniture to send usage tracking information.
3
+
4
+ = Disclaimer
5
+ This gem is currenly in early beta version but provides support of tracking user id and page names for user visits.
6
+
7
+ = Pre-requisites:
8
+ For rails 3.1.x applications:
9
+
10
+ gem install asyncomni
11
+
12
+ or in application's Gemfile add:
13
+
14
+ gem 'asyncomni'
15
+ gem 'haml' //this is for the time being!
16
+
17
+ = How to use:
18
+
19
+ run:
20
+
21
+ rails g asyncomni:install
22
+
23
+ Add below line to the layout, e.g. layout/aplication.html.erb
24
+
25
+ <iframe id ="omnitureFrame" name="omnitureFrame" width="0" height="0" style="visibility:hidden" data-page-name="<%=page_name %>" data-omniture-url="<%= omniture_url %>">&nbsp;</iframe>
26
+
27
+ In case you are haml fan, add this to layout/application.html.haml:
28
+
29
+ %iframe#omnitureFrame{:name => "omnitureFrame", :width => "0", :height => "0", :style => '"visibility:hidden"', 'data-page-name' => page_name, 'data-omniture-url' => omniture_url}
30
+
31
+
32
+ Also, add omniture.js to asset pipeline. In application.js:
33
+
34
+ //= require omniture
35
+
36
+ That's it!
37
+
38
+ This project uses MIT-LICENSE.
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'Asyncomni'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ Bundler::GemHelper.install_tasks
24
+
25
+ require 'rspec/core/rake_task'
26
+ RSpec::Core::RakeTask.new(:spec)
27
+
28
+ # RSpec as default
29
+ task :default => :spec
@@ -0,0 +1,10 @@
1
+ $(document).ready(function() {
2
+ try{
3
+ updateOmnitureFrame();
4
+ } catch(e){}
5
+ });
6
+ function updateOmnitureFrame() {
7
+ var omnitureFrame = $("iframe#omnitureFrame")
8
+ var url = omnitureFrame.attr('data-omniture-url');
9
+ $("iframe#omnitureFrame").attr('src', url);
10
+ }
@@ -0,0 +1,277 @@
1
+ /* SiteCatalyst code version: H.1.
2
+ Copyright 1997-2005 Omniture, Inc. More info available at
3
+ http://www.omniture.com */
4
+
5
+ /* Specify the Report Suite ID(s) to track here */
6
+ var s=s_gi(s_account)
7
+ /************************** CONFIG SECTION **************************/
8
+ /* You may add or alter any code config here. */
9
+ s.charSet="UTF-8"
10
+ /* E-commerce Config */
11
+ s.currencyCode="USD"
12
+ /* Link Tracking Config */
13
+ // s.trackDownloadLinks=true
14
+ // s.trackExternalLinks=true
15
+ // s.trackInlineStats=true
16
+ // s.linkDownloadFileTypes="exe,zip,wav,mp3,mov,mpg,avi,wmv,doc,pdf,xls,ppt"
17
+ // s.linkLeaveQueryString=false
18
+ s.linkTrackVars="None"
19
+ s.linkTrackEvents="None"
20
+
21
+ /* WARNING: Changing the visitor namespace will cause drastic changes
22
+ to how your visitor data is collected. Changes should only be made
23
+ when instructed to do so by your account manager.*/
24
+ // s.visitorNamespace="visiornamespace"
25
+
26
+ /* Application specific code starts here */
27
+
28
+ // function track_custom_links(link_obj, category, link_name) {
29
+ // var s=s_gi(s_account);
30
+ // s.linkTrackVars="prop1,prop6,prop7,prop8";
31
+ // // s.linkTrackEvents='None';
32
+ // // s.tl(link_obj, 'o', link_name);
33
+ // }
34
+
35
+ // function trackDownload(name, obj){
36
+ // trakSpecialLink(name, obj, 'd', "event1");
37
+ // }
38
+
39
+ // function trackHtmlMailToLink(name, obj) {
40
+ // trakSpecialLink(name, obj, 'o', "event2");
41
+ // }
42
+
43
+ // function trackExit(name, obj){
44
+ // trakSpecialLink(name, obj, 'e', "event1");
45
+ // }
46
+
47
+ // function trackCustomLink(name, obj) {
48
+ // trakSpecialLink(name, obj, 'o', "event1");
49
+ // }
50
+ /* Application specific code ends here */
51
+
52
+ /************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/
53
+ var s_objectID;function s_c2fe(f){var x='',s=0,e,a,b,c;while(1){e=
54
+ f.indexOf('"',s);b=f.indexOf('\\',s);c=f.indexOf("\n",s);if(e<0||(b>=
55
+ 0&&b<e))e=b;if(e<0||(c>=0&&c<e))e=c;if(e>=0){x+=(e>s?f.substring(s,e):
56
+ '')+(e==c?'\\n':'\\'+f.substring(e,e+1));s=e+1}else return x
57
+ +f.substring(s)}return f}function s_c2fa(f){var s=f.indexOf('(')+1,e=
58
+ f.indexOf(')'),a='',c;while(s>=0&&s<e){c=f.substring(s,s+1);if(c==',')
59
+ a+='","';else if(("\n\r\t ").indexOf(c)<0)a+=c;s++}return a?'"'+a+'"':
60
+ a}function s_c2f(cc){cc=''+cc;var fc='var f=new Function(',s=
61
+ cc.indexOf(';',cc.indexOf('{')),e=cc.lastIndexOf('}'),o,a,d,q,c,f,h,x
62
+ fc+=s_c2fa(cc)+',"var s=new Object;';c=cc.substring(s+1,e);s=
63
+ c.indexOf('function');while(s>=0){d=1;q='';x=0;f=c.substring(s);a=
64
+ s_c2fa(f);e=o=c.indexOf('{',s);e++;while(d>0){h=c.substring(e,e+1);if(
65
+ q){if(h==q&&!x)q='';if(h=='\\')x=x?0:1;else x=0}else{if(h=='"'||h=="'"
66
+ )q=h;if(h=='{')d++;if(h=='}')d--}if(d>0)e++}c=c.substring(0,s)
67
+ +'new Function('+(a?a+',':'')+'"'+s_c2fe(c.substring(o+1,e))+'")'
68
+ +c.substring(e+1);s=c.indexOf('function')}fc+=s_c2fe(c)+';return s");'
69
+ eval(fc);return f}function s_gi(un,pg,ss){var c="function s_c(un,pg,s"
70
+ +"s){var s=this;s.wd=window;if(!s.wd.s_c_in){s.wd.s_c_il=new Array;s."
71
+ +"wd.s_c_in=0;}s._il=s.wd.s_c_il;s._in=s.wd.s_c_in;s._il[s._in]=s;s.w"
72
+ +"d.s_c_in++;s.m=function(m){return (''+m).indexOf('{')<0};s.fl=funct"
73
+ +"ion(x,l){return x?(''+x).substring(0,l):x};s.co=function(o){if(!o)r"
74
+ +"eturn o;var n=new Object,x;for(x in o)if(x.indexOf('select')<0&&x.i"
75
+ +"ndexOf('filter')<0)n[x]=o[x];return n};s.num=function(x){x=''+x;for"
76
+ +"(var p=0;p<x.length;p++)if(('0123456789').indexOf(x.substring(p,p+1"
77
+ +"))<0)return 0;return 1};s.rep=function(x,o,n){var i=x.indexOf(o),l="
78
+ +"n.length>0?n.length:1;while(x&&i>=0){x=x.substring(0,i)+n+x.substri"
79
+ +"ng(i+o.length);i=x.indexOf(o,i+l)}return x};s.ape=function(x){var s"
80
+ +"=this,i;x=x?s.rep(escape(''+x),'+','%2B'):x;if(x&&s.charSet&&s.em=="
81
+ +"1&&x.indexOf('%u')<0&&x.indexOf('%U')<0){i=x.indexOf('%');while(i>="
82
+ +"0){i++;if(('89ABCDEFabcdef').indexOf(x.substring(i,i+1))>=0)return "
83
+ +"x.substring(0,i)+'u00'+x.substring(i);i=x.indexOf('%',i)}}return x}"
84
+ +";s.epa=function(x){var s=this;return x?unescape(s.rep(''+x,'+',' ')"
85
+ +"):x};s.pt=function(x,d,f,a){var s=this,t=x,z=0,y,r;while(t){y=t.ind"
86
+ +"exOf(d);y=y<0?t.length:y;t=t.substring(0,y);r=s.m(f)?s[f](t,a):f(t,"
87
+ +"a);if(r)return r;z+=y+d.length;t=x.substring(z,x.length);t=z<x.leng"
88
+ +"th?t:''}return ''};s.isf=function(t,a){var c=a.indexOf(':');if(c>=0"
89
+ +")a=a.substring(0,c);if(t.substring(0,2)=='s_')t=t.substring(2);retu"
90
+ +"rn (t!=''&&t==a)};s.fsf=function(t,a){var s=this;if(s.pt(a,',','isf"
91
+ +"',t))s.fsg+=(s.fsg!=''?',':'')+t;return 0};s.fs=function(x,f){var s"
92
+ +"=this;s.fsg='';s.pt(x,',','fsf',f);return s.fsg};s.c_d='';s.c_gdf=f"
93
+ +"unction(t,a){var s=this;if(!s.num(t))return 1;return 0};s.c_gd=func"
94
+ +"tion(){var s=this,d=s.wd.location.hostname,n=s.cookieDomainPeriods,"
95
+ +"p;if(d&&!s.c_d){n=n?parseInt(n):2;n=n>2?n:2;p=d.lastIndexOf('.');wh"
96
+ +"ile(p>=0&&n>1){p=d.lastIndexOf('.',p-1);n--}s.c_d=p>0&&s.pt(d,'.','"
97
+ +"c_gdf',0)?d.substring(p):''}return s.c_d};s.c_r=function(k){var s=t"
98
+ +"his;k=s.ape(k);var c=' '+s.d.cookie,i=c.indexOf(' '+k+'='),e=i<0?i:"
99
+ +"c.indexOf(';',i),v=i<0?'':s.epa(c.substring(i+2+k.length,e<0?c.leng"
100
+ +"th:e));return v!='[[B]]'?v:''};s.c_w=function(k,v,e){var s=this,d=s"
101
+ +".c_gd(),l=s.cookieLifetime,t;v=''+v;l=l?(''+l).toUpperCase():'';if("
102
+ +"e&&l!='SESSION'&&l!='NONE'){t=(v!=''?parseInt(l?l:0):-60);if(t){e=n"
103
+ +"ew Date;e.setTime(e.getTime()+(t*1000))}}if(k&&l!='NONE'){s.d.cooki"
104
+ +"e=k+'='+s.ape(v!=''?v:'[[B]]')+'; path=/;'+(e&&l!='SESSION'?' expir"
105
+ +"es='+e.toGMTString()+';':'')+(d?' domain='+d+';':'');return s.c_r(k"
106
+ +")==v}return 0};s.eh=function(o,e,r,f){var s=this,b='s_'+e+'_'+s._in"
107
+ +",n=-1,l,i,x;if(!s.ehl)s.ehl=new Array;l=s.ehl;for(i=0;i<l.length&&n"
108
+ +"<0;i++){if(l[i].o==o&&l[i].e==e)n=i}if(n<0){n=i;l[n]=new Object}x=l"
109
+ +"[n];x.o=o;x.e=e;f=r?x.b:f;if(r||f){x.b=r?0:o[e];x.o[e]=f}if(x.b){x."
110
+ +"o[b]=x.b;return b}return 0};s.cet=function(f,a,t,o,b){var s=this,r;"
111
+ +"if(s.isie&&a.apv>=5)eval('try{r=s.m(f)?s[f](a):f(a)}catch(e){r=s.m("
112
+ +"t)?s[t](e):t(e)}');else{if(s.ismac&&s.u.indexOf('MSIE 4')>=0)r=s.m("
113
+ +"b)?s[b](a):b(a);else{s.eh(s.wd,'onerror',0,o);r=s.m(f)?s[f](a):f(a)"
114
+ +";s.eh(s.wd,'onerror',1)}}return r};s.gtfset=function(e){var s=this;"
115
+ +"return s.tfs};s.gtfsoe=new Function('e','var s=s_c_il['+s._in+'];s."
116
+ +"eh(window,\"onerror\",1);s.etfs=1;var c=s.t();if(c)s.d.write(c);s.e"
117
+ +"tfs=0;return true');s.gtfsfb=function(a){return window};s.gtfsf=fun"
118
+ +"ction(w){var s=this,p=w.parent,l=w.location;s.tfs=w;if(p&&p.locatio"
119
+ +"n!=l&&p.location.host==l.host){s.tfs=p;return s.gtfsf(s.tfs)}return"
120
+ +" s.tfs};s.gtfs=function(){var s=this;if(!s.tfs){s.tfs=s.wd;if(!s.et"
121
+ +"fs)s.tfs=s.cet('gtfsf',s.tfs,'gtfset',s.gtfsoe,'gtfsfb')}return s.t"
122
+ +"fs};s.ca=function(){var s=this,imn='s_i_'+s.fun;if(s.d.images&&s.ap"
123
+ +"v>=3&&!s.isopera&&(s.ns6<0||s.apv>=6.1)){s.ios=1;if(!s.d.images[imn"
124
+ +"]&&(!s.isns||(s.apv<4||s.apv>=5))){s.d.write('<im'+'g name=\"'+imn+"
125
+ +"'\" height=1 width=1 border=0 alt=\"\">');if(!s.d.images[imn])s.ios"
126
+ +"=0}}};s.mr=function(sess,q,ta){var s=this,ns=s.visitorNamespace,unc"
127
+ +"=s.rep(s.fun,'_','-'),imn='s_i_'+s.fun,im,b,e,rs='http'+(s.ssl?'s':"
128
+ +"'')+'://'+(ns?ns:(s.ssl?'102':unc))+'.122.2O7.net/b/ss/'+s.un+'/1/H"
129
+ +".1-pdv-2/'+sess+'?[AQB]&ndh=1'+(q?q:'')+(s.q?s.q:'')+'&[AQE]';if(s."
130
+ +"isie&&!s.ismac){if(s.apv>5.5)rs=s.fl(rs,4095);else rs=s.fl(rs,2047)"
131
+ +"}if(s.ios){im=s.wd[imn]?s.wd[imn]:s.d.images[imn];if(!im)im=s.wd[im"
132
+ +"n]=new Image;im.src=rs;if(rs.indexOf('&pe=')>=0&&(!ta||ta=='_self'|"
133
+ +"|ta=='_top'||(s.wd.name&&ta==s.wd.name))){b=e=new Date;while(e.getT"
134
+ +"ime()-b.getTime()<500)e=new Date}return ''}return '<im'+'g sr'+'c="
135
+ +"\"'+rs+'\" width=1 height=1 border=0 alt=\"\">'};s.gg=function(v){v"
136
+ +"ar s=this;return s.wd['s_'+v]};s.glf=function(t,a){if(t.substring(0"
137
+ +",2)=='s_')t=t.substring(2);var s=this,v=s.gg(t);if(v)s[t]=v};s.gl=f"
138
+ +"unction(v){var s=this;s.pt(v,',','glf',0)};s.gv=function(v){var s=t"
139
+ +"his;return s['vpm_'+v]?s['vpv_'+v]:s[v]};s.havf=function(t,a){var s"
140
+ +"=this,b=t.substring(0,4),x=t.substring(4),n=parseInt(x),k='g_'+t,m="
141
+ +"'vpm_'+t,q=t,v=s.linkTrackVars,e=s.linkTrackEvents;s[k]=s.gv(t);if("
142
+ +"s.lnk||s.eo){v=v?v+','+s.vl_l:'';if(v&&!s.pt(v,',','isf',t))s[k]=''"
143
+ +";if(t=='events'&&e)s[k]=s.fs(s[k],e)}s[m]=0;if(t=='pageURL')q='g';e"
144
+ +"lse if(t=='referrer')q='r';else if(t=='charSet'){q='ce';if(s[k]&&s."
145
+ +"em==2)s[k]='UTF-8'}else if(t=='visitorNamespace')q='ns';else if(t=="
146
+ +"'cookieDomainPeriods')q='cdp';else if(t=='cookieLifetime')q='cl';el"
147
+ +"se if(t=='visitVariableProvider')q='vvp';else if(t=='currencyCode')"
148
+ +"q='cc';else if(t=='channel')q='ch';else if(t=='campaign')q='v0';els"
149
+ +"e if(s.num(x)) {if(b=='prop')q='c'+n;else if(b=='eVar')q='v'+n;else"
150
+ +" if(b=='hier'){q='h'+n;s[k]=s.fl(s[k],255)}}if(s[k]&&t!='linkName'&"
151
+ +"&t!='linkType')s.qav+='&'+q+'='+s.ape(s[k]);return ''};s.hav=functi"
152
+ +"on(){var s=this;s.qav='';s.pt(s.vl_t,',','havf',0);return s.qav};s."
153
+ +"lnf=function(t,h){t=t?t.toLowerCase():'';h=h?h.toLowerCase():'';var"
154
+ +" te=t.indexOf('=');if(t&&te>0&&h.indexOf(t.substring(te+1))>=0)retu"
155
+ +"rn t.substring(0,te);return ''};s.ln=function(h){var s=this,n=s.lin"
156
+ +"kNames;if(n)return s.pt(n,',','lnf',h);return ''};s.ltdf=function(t"
157
+ +",h){t=t?t.toLowerCase():'';h=h?h.toLowerCase():'';var qi=h.indexOf("
158
+ +"'?');h=qi>=0?h.substring(0,qi):h;if(t&&h.substring(h.length-(t.leng"
159
+ +"th+1))=='.'+t)return 1;return 0};s.ltef=function(t,h){t=t?t.toLower"
160
+ +"Case():'';h=h?h.toLowerCase():'';if(t&&h.indexOf(t)>=0)return 1;ret"
161
+ +"urn 0};s.lt=function(h){var s=this,lft=s.linkDownloadFileTypes,lef="
162
+ +"s.linkExternalFilters,lif=s.linkInternalFilters;lif=lif?lif:s.wd.lo"
163
+ +"cation.hostname;h=h.toLowerCase();if(s.trackDownloadLinks&&lft&&s.p"
164
+ +"t(lft,',','ltdf',h))return 'd';if(s.trackExternalLinks&&(lef||lif)&"
165
+ +"&(!lef||s.pt(lef,',','ltef',h))&&(!lif||!s.pt(lif,',','ltef',h)))re"
166
+ +"turn 'e';return ''};s.lc=new Function('e','var s=s_c_il['+s._in+'],"
167
+ +"b=s.eh(this,\"onclick\");s.lnk=s.co(this);s.t();s.lnk=0;if(b)return"
168
+ +" this[b](e);return true');s.bc=new Function('e','var s=s_c_il['+s._"
169
+ +"in+'];if(s.d&&s.d.all&&s.d.all.cppXYctnr)return;s.eo=e.srcElement?e"
170
+ +".srcElement:e.target;s.t();s.eo=0');s.ot=function(o){var a=o.type,b"
171
+ +"=o.tagName;return (a&&a.toUpperCase?a:b&&b.toUpperCase?b:o.href?'A'"
172
+ +":'').toUpperCase()};s.oid=function(o){var s=this,t=s.ot(o),p=o.prot"
173
+ +"ocol,c=o.onclick,n='',x=0;if(!o.s_oid){if(o.href&&(t=='A'||t=='AREA"
174
+ +"')&&(!c||!p||p.toLowerCase().indexOf('javascript')<0))n=o.href;else"
175
+ +" if(c){n=s.rep(s.rep(s.rep(s.rep(''+c,\"\\r\",''),\"\\n\",''),\"\\t"
176
+ +"\",''),' ','');x=2}else if(o.value&&(t=='INPUT'||t=='SUBMIT')){n=o."
177
+ +"value;x=3}else if(o.src&&t=='IMAGE')n=o.src;if(n){o.s_oid=s.fl(n,10"
178
+ +"0);o.s_oidt=x}}return o.s_oid};s.rqf=function(t,un){var s=this,e=t."
179
+ +"indexOf('='),u=e>=0?','+t.substring(0,e)+',':'';return u&&u.indexOf"
180
+ +"(','+un+',')>=0?s.epa(t.substring(e+1)):''};s.rq=function(un){var s"
181
+ +"=this,c=un.indexOf(','),v=s.c_r('s_sq'),q='';if(c<0)return s.pt(v,'"
182
+ +"&','rqf',un);return s.pt(un,',','rq',0)};s.sqp=function(t,a){var s="
183
+ +"this,e=t.indexOf('='),q=e<0?'':s.epa(t.substring(e+1));s.sqq[q]='';"
184
+ +"if(e>=0)s.pt(t.substring(0,e),',','sqs',q);return 0};s.sqs=function"
185
+ +"(un,q){var s=this;s.squ[un]=q;return 0};s.sq=function(q){var s=this"
186
+ +",k='s_sq',v=s.c_r(k),x,c=0;s.sqq=new Object;s.squ=new Object;s.sqq["
187
+ +"q]='';s.pt(v,'&','sqp',0);s.pt(s.un,',','sqs',q);v='';for(x in s.sq"
188
+ +"u)s.sqq[s.squ[x]]+=(s.sqq[s.squ[x]]?',':'')+x;for(x in s.sqq)if(x&&"
189
+ +"s.sqq[x]&&(x==q||c<2)){v+=(v?'&':'')+s.sqq[x]+'='+s.ape(x);c++}retu"
190
+ +"rn s.c_w(k,v,0)};s.wdl=new Function('e','var s=s_c_il['+s._in+'],r="
191
+ +"true,b=s.eh(s.wd,\"onload\"),i,o,oc;if(b)r=this[b](e);for(i=0;i<s.d"
192
+ +".links.length;i++){o=s.d.links[i];oc=o.onclick?\"\"+o.onclick:\"\";"
193
+ +"if((oc.indexOf(\"s_gs(\")<0||oc.indexOf(\".s_oc(\")>=0)&&oc.indexOf"
194
+ +"(\".tl(\")<0)s.eh(o,\"onclick\",0,s.lc);}return r');s.wds=function("
195
+ +"){var s=this;if(s.apv>3&&(!s.isie||!s.ismac||s.apv>=5)){if(s.b&&s.b"
196
+ +".attachEvent)s.b.attachEvent('onclick',s.bc);else if(s.b&&s.b.addEv"
197
+ +"entListener)s.b.addEventListener('click',s.bc,false);else s.eh(s.wd"
198
+ +",'onload',0,s.wdl)}};s.vs=function(x){var s=this,v=s.visitorSamplin"
199
+ +"g,g=s.visitorSamplingGroup,k='s_vsn_'+s.un+(g?'_'+g:''),n=s.c_r(k),"
200
+ +"e=new Date,y=e.getYear();e.setYear(y+10+(y<1900?1900:0));if(v){v*=1"
201
+ +"00;if(!n){if(!s.c_w(k,x,e))return 0;n=x}if(n%10000>v)return 0}retur"
202
+ +"n 1};s.dyasmf=function(t,m){if(t&&m&&m.indexOf(t)>=0)return 1;retur"
203
+ +"n 0};s.dyasf=function(t,m){var s=this,i=t?t.indexOf('='):-1,n,x;if("
204
+ +"i>=0&&m){var n=t.substring(0,i),x=t.substring(i+1);if(s.pt(x,',','d"
205
+ +"yasmf',m))return n}return 0};s.uns=function(){var s=this,x=s.dynami"
206
+ +"cAccountSelection,l=s.dynamicAccountList,m=s.dynamicAccountMatch,n,"
207
+ +"i;s.un.toLowerCase();if(x&&l){if(!m)m=s.wd.location.host;if(!m.toLo"
208
+ +"werCase)m=''+m;l=l.toLowerCase();m=m.toLowerCase();n=s.pt(l,';','dy"
209
+ +"asf',m);if(n)s.un=n}i=s.un.indexOf(',');s.fun=i<0?s.un:s.un.substri"
210
+ +"ng(0,i)};s.t=function(){var s=this,trk=1,tm=new Date,sed=Math&&Math"
211
+ +".random?Math.floor(Math.random()*10000000000000):tm.getTime(),sess="
212
+ +"'s'+Math.floor(tm.getTime()/10800000)%10+sed,yr=tm.getYear(),vt=tm."
213
+ +"getDate()+'/'+tm.getMonth()+'/'+(yr<1900?yr+1900:yr)+' '+tm.getHour"
214
+ +"s()+':'+tm.getMinutes()+':'+tm.getSeconds()+' '+tm.getDay()+' '+tm."
215
+ +"getTimezoneOffset(),tfs=s.gtfs(),ta='',q='',qs='';s.uns();if(!s.q){"
216
+ +"var tl=tfs.location,x='',c='',v='',p='',bw='',bh='',j='1.0',k=s.c_w"
217
+ +"('s_cc','true',0)?'Y':'N',hp='',ct='',pn=0,ps;if(s.apv>=4)x=screen."
218
+ +"width+'x'+screen.height;if(s.isns||s.isopera){if(s.apv>=3){j='1.1';"
219
+ +"v=s.n.javaEnabled()?'Y':'N';if(s.apv>=4){j='1.2';c=screen.pixelDept"
220
+ +"h;bw=s.wd.innerWidth;bh=s.wd.innerHeight;if(s.apv>=4.06)j='1.3'}}s."
221
+ +"pl=s.n.plugins}else if(s.isie){if(s.apv>=4){v=s.n.javaEnabled()?'Y'"
222
+ +":'N';j='1.2';c=screen.colorDepth;if(s.apv>=5){bw=s.d.documentElemen"
223
+ +"t.offsetWidth;bh=s.d.documentElement.offsetHeight;j='1.3';if(!s.ism"
224
+ +"ac&&s.b){s.b.addBehavior('#default#homePage');hp=s.b.isHomePage(tl)"
225
+ +"?\"Y\":\"N\";s.b.addBehavior('#default#clientCaps');ct=s.b.connecti"
226
+ +"onType}}}else r=''}if(s.pl)while(pn<s.pl.length&&pn<30){ps=s.fl(s.p"
227
+ +"l[pn].name,100)+';';if(p.indexOf(ps)<0)p+=ps;pn++}s.q=(x?'&s='+s.ap"
228
+ +"e(x):'')+(c?'&c='+s.ape(c):'')+(j?'&j='+j:'')+(v?'&v='+v:'')+(k?'&k"
229
+ +"='+k:'')+(bw?'&bw='+bw:'')+(bh?'&bh='+bh:'')+(ct?'&ct='+s.ape(ct):'"
230
+ +"')+(hp?'&hp='+hp:'')+(p?'&p='+s.ape(p):'')}if(s.usePlugins)s.doPlug"
231
+ +"ins(s);var l=s.wd.location,r=tfs.document.referrer;if(!s.pageURL)s."
232
+ +"pageURL=s.fl(l?l:'',255);if(!s.referrer)s.referrer=s.fl(r?r:'',255)"
233
+ +";if(s.lnk||s.eo){var o=s.eo?s.eo:s.lnk;if(!o)return '';var p=s.gv('"
234
+ +"pageName'),w=1,t=s.ot(o),n=s.oid(o),x=o.s_oidt,h,l,i,oc;if(s.eo&&o="
235
+ +"=s.eo){while(o&&!n&&t!='BODY'){o=o.parentElement?o.parentElement:o."
236
+ +"parentNode;if(!o)return '';t=s.ot(o);n=s.oid(o);x=o.s_oidt}oc=o.onc"
237
+ +"lick?''+o.onclick:'';if((oc.indexOf(\"s_gs(\")>=0&&oc.indexOf(\".s_"
238
+ +"oc(\")<0)||oc.indexOf(\".tl(\")>=0)return ''}ta=o.target;h=o.href?o"
239
+ +".href:'';i=h.indexOf('?');h=s.linkLeaveQueryString||i<0?h:h.substri"
240
+ +"ng(0,i);l=s.linkName?s.linkName:s.ln(h);t=s.linkType?s.linkType.toL"
241
+ +"owerCase():s.lt(h);if(t&&(h||l))q+='&pe=lnk_'+(t=='d'||t=='e'?s.ape"
242
+ +"(t):'o')+(h?'&pev1='+s.ape(h):'')+(l?'&pev2='+s.ape(l):'');else trk"
243
+ +"=0;if(s.trackInlineStats){if(!p){p=s.gv('pageURL');w=0}t=s.ot(o);i="
244
+ +"o.sourceIndex;if(s.gg('objectID')){n=s.gg('objectID');x=1;i=1}if(p&"
245
+ +"&n&&t)qs='&pid='+s.ape(s.fl(p,255))+(w?'&pidt='+w:'')+'&oid='+s.ape"
246
+ +"(s.fl(n,100))+(x?'&oidt='+x:'')+'&ot='+s.ape(t)+(i?'&oi='+i:'')}}if"
247
+ +"(!trk&&!qs)return '';var code='';if(trk&&s.vs(sed))code=s.mr(sess,("
248
+ +"vt?'&t='+s.ape(vt):'')+s.hav()+q+(qs?qs:s.rq(s.un)),ta);s.sq(trk?''"
249
+ +":qs);s.lnk=s.eo=s.linkName=s.linkType=s.wd.s_objectID='';return cod"
250
+ +"e};s.tl=function(o,t,n){var s=this;s.lnk=s.co(o);s.linkType=t;s.lin"
251
+ +"kName=n;s.t()};s.ssl=(s.wd.location.protocol.toLowerCase().indexOf("
252
+ +"'https')>=0);s.d=document;s.b=s.d.body;s.n=navigator;s.u=s.n.userAg"
253
+ +"ent;s.ns6=s.u.indexOf('Netscape6/');var apn=s.n.appName,v=s.n.appVe"
254
+ +"rsion,ie=v.indexOf('MSIE '),i;if(v.indexOf('Opera')>=0||s.u.indexOf"
255
+ +"('Opera')>=0)apn='Opera';s.isie=(apn=='Microsoft Internet Explorer'"
256
+ +");s.isns=(apn=='Netscape');s.isopera=(apn=='Opera');s.ismac=(s.u.in"
257
+ +"dexOf('Mac')>=0);if(ie>0){s.apv=parseInt(i=v.substring(ie+5));if(s."
258
+ +"apv>3)s.apv=parseFloat(i)}else if(s.ns6>0)s.apv=parseFloat(s.u.subs"
259
+ +"tring(s.ns6+10));else s.apv=parseFloat(v);s.em=0;if(String.fromChar"
260
+ +"Code){i=escape(String.fromCharCode(256)).toUpperCase();s.em=(i=='%C"
261
+ +"4%80'?2:(i=='%U0100'?1:0))}s.un=un;s.uns();s.vl_l='charSet,visitorN"
262
+ +"amespace,cookieDomainPeriods,cookieLifetime,visitVariableProvider,p"
263
+ +"ageName,pageURL,referrer,currencyCode,purchaseID';s.vl_t=s.vl_l+',c"
264
+ +"hannel,server,pageType,campaign,state,zip,events,products,linkName,"
265
+ +"linkType';for(var n=1;n<51;n++)s.vl_t+=',prop'+n+',eVar'+n+',hier'+"
266
+ +"n;s.vl_g=s.vl_t+',trackDownloadLinks,trackExternalLinks,trackInline"
267
+ +"Stats,linkLeaveQueryString,linkDownloadFileTypes,linkExternalFilter"
268
+ +"s,linkInternalFilters,linkNames';if(pg)s.gl(s.vl_g);if(!ss){s.wds()"
269
+ +";s.ca()}}",
270
+ l=window.s_c_il,n=navigator,u=n.userAgent,v=n.appVersion,e=v.indexOf(
271
+ 'MSIE '),m=u.indexOf('Netscape6/'),a,i,s;if(l)for(i=0;i<l.length;i++){
272
+ s=l[i];s.uns();if(s.un==un)return s;else if(s.pt(s.un,',','isf',un)){
273
+ s=s.co(s);s.un=un;s.uns();return s}}if(e>0){a=parseInt(i=v.substring(e
274
+ +5));if(a>3)a=parseFloat(i)}else if(m>0)a=parseFloat(u.substring(m+10)
275
+ );else a=parseFloat(v);if(a>=5&&v.indexOf('Opera')<0&&u.indexOf(
276
+ 'Opera')<0){eval(c);return new s_c(un,pg,ss)}else s=s_c2f(c);return s(
277
+ un,pg,ss)}
@@ -0,0 +1,6 @@
1
+ class OmnitureController < ApplicationController
2
+ def index
3
+ @omniture = Omniture.new(params)
4
+ render :partial => 'omniture'
5
+ end
6
+ end
@@ -0,0 +1,39 @@
1
+ module OmnitureHelper
2
+ def omniture_url
3
+ url = omniture_index_url
4
+ param_pair = omniture_trackable_properties.collect{|p| omniture_query_param(p)}
5
+ "#{url}?#{param_pair.join('&')}"
6
+ end
7
+
8
+ def omniture_trackable_properties
9
+ [:page_name, :user_id, :application_name]
10
+ end
11
+
12
+ def omniture_query_param(prop)
13
+ "#{prop}=#{self.send(prop)}"
14
+ end
15
+
16
+ def application_name
17
+ Omniture.application_name
18
+ end
19
+
20
+ def user_id
21
+ begin
22
+ current_user.id
23
+ rescue
24
+ "unknown"
25
+ end
26
+ end
27
+
28
+ def page_name
29
+ name = []
30
+ name << application_name
31
+ name << controller_name.gsub('/','_').camelize
32
+ name << action_name.gsub('/','_').camelize
33
+ name.join('_')
34
+ end
35
+
36
+ def omniture_formatted_time
37
+ Time.now.strftime('%m/%d/%Y %I:%M:%S %p')
38
+ end
39
+ end
@@ -0,0 +1,28 @@
1
+ class Omniture
2
+ def initialize(params)
3
+ @params = params
4
+ end
5
+
6
+ # read attributes from the params or return blank if not available.
7
+ def method_missing(method)
8
+ if @params.include?(method.to_s)
9
+ @params[method.to_s]
10
+ else
11
+ ''
12
+ end
13
+ end
14
+
15
+ class << self
16
+ attr_accessor :sprop_mappings, :application_name, :tracking_account
17
+
18
+ def sprop_for property
19
+ sprop = sprop_mappings[property]
20
+
21
+ Exception.log_and_raise("No sprop has been configured for enabling tracking of #{property}") do
22
+ raise(NotConfiguredException)
23
+ end if sprop.nil?
24
+
25
+ return sprop.to_s
26
+ end
27
+ end
28
+ end