omniture_rails3 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "http://rubygems.org"
2
+ gemspec
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2011 YOURNAME
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.
data/README.textile ADDED
@@ -0,0 +1,3 @@
1
+ h1. Omniture Rails 3
2
+
3
+ This engine is meant to help app developers easily set Omniture sprops. It uses "Higml":https://github.com/flyingmachine/higml to configure custom variables based on controller, action, and whatever other params are present. It also allows you to provide a mapping between your custom variable names and their omniture name - i.e. you can refer to "prop34" as "search\_origin" in your code and in your configuration.
data/Rakefile ADDED
@@ -0,0 +1,25 @@
1
+ # encoding: UTF-8
2
+ require 'rubygems'
3
+ begin
4
+ require 'bundler/setup'
5
+ rescue LoadError
6
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
7
+ end
8
+
9
+ require 'rake'
10
+ require 'rake/rdoctask'
11
+
12
+ require 'rspec/core'
13
+ require 'rspec/core/rake_task'
14
+
15
+ RSpec::Core::RakeTask.new(:spec)
16
+
17
+ task :default => :spec
18
+
19
+ Rake::RDocTask.new(:rdoc) do |rdoc|
20
+ rdoc.rdoc_dir = 'rdoc'
21
+ rdoc.title = 'OmnitureRails3'
22
+ rdoc.options << '--line-numbers' << '--inline-source'
23
+ rdoc.rdoc_files.include('README.rdoc')
24
+ rdoc.rdoc_files.include('lib/**/*.rb')
25
+ end
@@ -0,0 +1,7 @@
1
+ module OmnitureRails3
2
+ module ControllerHelper
3
+ def omniture_input
4
+
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,55 @@
1
+ module OmnitureRails3
2
+ module ViewHelper
3
+ def omniture_html
4
+ <<-EOS
5
+ <!-- SiteCatalyst code version: H.1. Copyright 1997-2005 Omniture, Inc. More info available at http://www.omniture.com -->
6
+ <script language="JavaScript"><!--
7
+ #{omniture_javascript}
8
+ //--></script>
9
+ <script language="JavaScript"><!--
10
+ if(navigator.appVersion.indexOf('MSIE')>=0)document.write(unescape('%3C')+'\!-'+'-')
11
+ //--></script><noscript><img
12
+ src="#{OmnitureRails3.config.noscript_img_src}"
13
+ height="1" width="1" border="0" alt="" /></noscript><!--/DO NOT REMOVE/-->
14
+ <!-- End SiteCatalyst code version: H.1. -->
15
+ EOS
16
+ end
17
+
18
+ def omniture_javascript
19
+ <<-EOS
20
+ var s_account="#{OmnitureRails3.config.tracking_account}";
21
+ var s=s_gi(s_account);
22
+
23
+ $.extend(s, #{sprops_json})
24
+
25
+ /* WARNING: Changing the visitor namespace will cause drastic changes
26
+ to how your visitor data is collected. Changes should only be made
27
+ when instructed to do so by your account manager.*/
28
+ s.visitorNamespace="#{OmnitureRails3.config.visitor_namespace}"
29
+
30
+ /************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/
31
+ var s_code=s.t();if(s_code)document.write(s_code)
32
+ EOS
33
+ end
34
+
35
+ def sprops_json
36
+ sprops = Higml.
37
+ values_for(omniture_input, OmnitureRails3::TREES[controller_name.to_sym], self, omniture_priority_map || {}).
38
+ delete_if{|k,v| !v}
39
+
40
+ transform_sprops(sprops)
41
+
42
+ sprops.inject({}){|return_value, value| return_value[value[0]] = h(value[1]); return_value }. #html escape
43
+ to_json.
44
+ gsub(/,\s*"/,",\n\"") #put each variable on a separate line
45
+ end
46
+
47
+ def transform_sprops(sprops)
48
+ OmnitureRails3.config.prop_map.each do |internal_name, omniture_name|
49
+ sprops[omniture_name] = sprops[internal_name]
50
+ sprops.delete(internal_name)
51
+ end
52
+ sprops
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,20 @@
1
+ module OmnitureRails3
2
+ module ActionControllerExtension
3
+ extend ActiveSupport::Concern
4
+ included do
5
+ attr_accessor :omniture_input, :omniture_priority_map
6
+ helper_attr :omniture_input, :omniture_priority_map
7
+
8
+ before_filter :set_omniture_input
9
+ end
10
+
11
+ module ClassMethods
12
+ end
13
+
14
+ module InstanceMethods
15
+ def set_omniture_input
16
+ self.omniture_input = params
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,59 @@
1
+ module OmnitureRails3
2
+ class Config
3
+ include Singleton
4
+ OPTIONS = %w{higml_directory prop_map tracking_account visitor_namespace noscript_img_src}
5
+ attr_accessor *OPTIONS.collect{|o|o.to_sym}
6
+
7
+ def higml_directory
8
+ @higml_directory ||= File.join(Rails.root, "app", "omniture")
9
+ end
10
+
11
+ def set(config)
12
+ case config
13
+ when Hash: set_with_hash(config)
14
+ when IO: set_with_io(config)
15
+ when String: set_with_string(config)
16
+ end
17
+
18
+ Higml.config.set({
19
+ "global_pairs" => {
20
+ :visitor_namespace => visitor_namespace,
21
+ :tracking_account => tracking_account,
22
+ :noscript_img_src => noscript_img_src
23
+ },
24
+ "higml_directory" => self.higml_directory
25
+ })
26
+ end
27
+
28
+ def set_with_hash(config)
29
+ OPTIONS.each do |option|
30
+ self.send("#{option}=", config[option]) if config[option]
31
+ end
32
+ end
33
+
34
+ # String should be either a filename or YAML
35
+ def set_with_string(config)
36
+ if File.exists?(config)
37
+ set_with_yaml(File.read(config))
38
+ else
39
+ set_with_yaml(config)
40
+ end
41
+ end
42
+
43
+ def set_with_io(config)
44
+ set_with_yaml(config)
45
+ config.close
46
+ end
47
+
48
+ def set_with_yaml(config)
49
+ set_with_hash(YAML.load(config)[Rails.env])
50
+ end
51
+
52
+ def to_hash
53
+ OPTIONS.inject({}){ |hash, option|
54
+ hash[option] = self.send(option)
55
+ hash
56
+ }
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,18 @@
1
+ module OmnitureRails3
2
+ class Engine < Rails::Engine
3
+ initializer 'omniture_rails_3.helper' do |app|
4
+ ActionView::Base.send :include, OmnitureRails3::ViewHelper
5
+ ActionController::Base.send :include, OmnitureRails3::ActionControllerExtension
6
+
7
+ OmnitureRails3.config.set(File.join(Rails.root, "config", "omniture.yml"))
8
+ # Parse Higml trees and store them so we don't have to do this every request
9
+
10
+ OmnitureRails3::TREES = Dir[File.join(OmnitureRails3.config.higml_directory, '*.higml')].inject({}) do |hash, filename|
11
+ puts filename
12
+ hash[File.basename(filename, ".higml").to_sym] = Higml::Parser.new(File.read(filename)).to_tree
13
+ hash
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,12 @@
1
+ require "higml"
2
+ require "omniture_rails3/action_controller_extension"
3
+ require "omniture_rails3/config"
4
+ require "omniture_rails3/engine"
5
+
6
+ module OmnitureRails3
7
+ class << self
8
+ def config
9
+ @config ||= OmnitureRails3::Config.instance
10
+ end
11
+ end
12
+ end
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: omniture_rails3
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Daniel Higginbotham
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-06-09 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rails
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 7
30
+ segments:
31
+ - 3
32
+ - 0
33
+ version: "3.0"
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: higml
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - "="
43
+ - !ruby/object:Gem::Version
44
+ hash: 29
45
+ segments:
46
+ - 0
47
+ - 0
48
+ - 1
49
+ version: 0.0.1
50
+ type: :runtime
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: capybara
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ hash: 15
61
+ segments:
62
+ - 0
63
+ - 4
64
+ - 0
65
+ version: 0.4.0
66
+ type: :development
67
+ version_requirements: *id003
68
+ - !ruby/object:Gem::Dependency
69
+ name: rspec-rails
70
+ prerelease: false
71
+ requirement: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ hash: 3
77
+ segments:
78
+ - 0
79
+ version: "0"
80
+ type: :development
81
+ version_requirements: *id004
82
+ - !ruby/object:Gem::Dependency
83
+ name: ruby-debug
84
+ prerelease: false
85
+ requirement: &id005 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ hash: 3
91
+ segments:
92
+ - 0
93
+ version: "0"
94
+ type: :development
95
+ version_requirements: *id005
96
+ description: Insert OmnitureRails3 description.
97
+ email: daniel@flyingmachinestudios.com
98
+ executables: []
99
+
100
+ extensions: []
101
+
102
+ extra_rdoc_files: []
103
+
104
+ files:
105
+ - app/helpers/omniture_rails3/controller_helper.rb
106
+ - app/helpers/omniture_rails3/view_helper.rb
107
+ - lib/omniture_rails3/action_controller_extension.rb
108
+ - lib/omniture_rails3/config.rb
109
+ - lib/omniture_rails3/engine.rb
110
+ - lib/omniture_rails3.rb
111
+ - MIT-LICENSE
112
+ - Rakefile
113
+ - Gemfile
114
+ - README.textile
115
+ has_rdoc: true
116
+ homepage:
117
+ licenses: []
118
+
119
+ post_install_message:
120
+ rdoc_options: []
121
+
122
+ require_paths:
123
+ - lib
124
+ required_ruby_version: !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ hash: 3
130
+ segments:
131
+ - 0
132
+ version: "0"
133
+ required_rubygems_version: !ruby/object:Gem::Requirement
134
+ none: false
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ hash: 3
139
+ segments:
140
+ - 0
141
+ version: "0"
142
+ requirements: []
143
+
144
+ rubyforge_project:
145
+ rubygems_version: 1.3.7
146
+ signing_key:
147
+ specification_version: 3
148
+ summary: Insert OmnitureRails3 summary.
149
+ test_files: []
150
+