pixelator 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MmJkYzUyYjIzMTgzN2RiM2YxNjI1OWM4Y2JmMjJlNTNjNzAwNWI2Nw==
5
+ data.tar.gz: !binary |-
6
+ Y2Q5ZmUxZGQxYjI2OTA1OTQ1ZDA5MDM2ODdkYWUzZTJiYWExOWZmOA==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ NzgxMTUzNDUwMWJlYjhiNDZlMTQ1Yzg5OWIxZTUzOTEyMjczMGE3YTM4N2Q3
10
+ ZjhkYTRhNGUwMWEwZWI0NWQzNDJhOGMzNjE3MDBkNGZjMmFmYTYzYzVjZGM2
11
+ NGVjMWE0YzM0NDUxYTg4YmNlMjZmMTAwMzEwM2QyYWQ1MGUwMDU=
12
+ data.tar.gz: !binary |-
13
+ MTNhNmI1MzRhYjQ1Mzg2OGZmNDE2NzcwZjRiNWE5ZDMzNzJhZmQ3MDczZjg0
14
+ NGUyYTZmNmFjNWU2MTk0MmQzMzAyZDU0MTViODcyNjE0OTJkMzQ1NGVjZDRl
15
+ ZDFhYWRjYmU2MGNjODZhOTNkNmZiOTBiNzQxNGZkNWRmZmUwYzk=
@@ -0,0 +1,20 @@
1
+ Copyright 2012 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.
@@ -0,0 +1,122 @@
1
+ Pixelator
2
+ =======
3
+
4
+ Pixelator is a Ruby on Rails plugin that allows you to easily and
5
+ asyncronously add tracking pixels (and other bits of html) to your code.
6
+
7
+
8
+ ## Prerequisites
9
+
10
+ * requires jquery-rails
11
+ * requires underscore.js
12
+
13
+ ## Usage
14
+
15
+ ### Install the gem
16
+
17
+ `gem 'pixelator', :git => git@github.com:howaboutwe/pixelator.git`
18
+
19
+ ### Run the generator
20
+
21
+ `rails g pixelator`
22
+
23
+ The generator will create 2 files for you:
24
+ * config/initializers/pixelator.rb
25
+ * config/pixels.yml
26
+ It will also add pixelator_core to your application.js file:
27
+
28
+ `//= require 'pixelator_core'`
29
+
30
+ ### Add to you code
31
+
32
+ #### config/pixels.yml
33
+
34
+ pixels.yml contains a hash with the top level keys being types of
35
+ pixels, such as 'all', 'landing','sign_up', etc.
36
+
37
+ You define the keys.
38
+
39
+ Each key, has an array of pixels, which specify:
40
+
41
+ * name - name of pixel for auditing purposes
42
+ * type - img, js, iframe
43
+ * snippet - snippet of html that will be run through an underscore template
44
+
45
+ For example, a google analytics snippet that is to be shown on all pages
46
+ and uses the google_analytics key in Pixelator.context to set the GA account number
47
+ would look like:
48
+ ```
49
+ all:
50
+ - name: google_analytics
51
+ type: javascript
52
+ snippet: |
53
+ <script type="text/javascript">
54
+ try {
55
+ var _gaq = _gaq || [];
56
+ _gaq.push(['_setAccount', '<%= google_analytics %>']);
57
+ _gaq.push(['_trackPageview']);
58
+
59
+ (function() {
60
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
61
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
62
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
63
+ })();
64
+ } catch(err) {}
65
+ </script>
66
+ ```
67
+ optionally, you can include a 'partner'
68
+
69
+
70
+ #### Layout/Views
71
+ In the head of your layout, add:
72
+
73
+ ```
74
+ = javascript_include_tag "/pixelator/data"
75
+ = render partial: 'shared/pixelator_head'
76
+ ```
77
+
78
+ In the bottom of your layout, add:
79
+
80
+ `= render partial: 'shared/pixelator', pixel_types: ['all']`
81
+
82
+ To add the Pixelator to different page, such as landing, do:
83
+
84
+ `= render partial: 'shared/pixelator', pixel_types: ['landing']`
85
+ If using the partial, you could also set the pixel types in the
86
+ controller with
87
+ `@pixel_types = ['stuff']`
88
+ *Note: this will **always** add 'all' to the array
89
+ or
90
+ ```
91
+ var pixelator = new Pixelator(PIXEL_DATA, '#{@scope}');
92
+ _.each(#{@pixel_types}, function(p) {
93
+ pixelator.run(p);
94
+ });
95
+ ```
96
+
97
+ ## TODO
98
+
99
+ * Expand example of how to set pixel context in controller and use in pixels.yml with ERB syntax.
100
+ * Add documentation about head pixels
101
+ * JS Pixel data - should not include head and should be on Pixelator obj
102
+ * JS flag for turning on/off
103
+ * Turn off but still log each pixel that would be run
104
+ * run can take an array
105
+
106
+ * change partner to scope
107
+ * explain partner/scope
108
+ * Add Travis CI
109
+ * Add documentation about context
110
+
111
+ ## Maintainers
112
+
113
+ Created by the HowAboutWe.com dev team.
114
+
115
+ * [How About We](http://www.howaboutwe.com)
116
+
117
+ * [Rebecca Miller-Webster](http://www.github.com/rmw), HowAboutWe.com
118
+ * [Marco Carag](http://www.github.com/jazzcrazed), HowAboutWe.com
119
+ * [Brendan Barr](http://www.github.com/bbarr), HowAboutWe.com
120
+
121
+ Copyright (c) 2008-2012 This Life, Inc. This software is licensed under
122
+ the MIT License
@@ -0,0 +1,41 @@
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 = 'Pixelator'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.markdown')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
24
+ load 'rails/tasks/engine.rake'
25
+
26
+ Bundler::GemHelper.install_tasks
27
+
28
+ require 'rake/testtask'
29
+
30
+ Rake::TestTask.new(:test) do |t|
31
+ t.libs << 'lib'
32
+ t.libs << 'spec'
33
+ t.pattern = 'spec/**/*_spec.rb'
34
+ t.verbose = false
35
+ end
36
+
37
+
38
+ task :default => [:test, "jasmine:ci"]
39
+
40
+
41
+ load APP_RAKEFILE
@@ -0,0 +1,13 @@
1
+ function GenericPixel(options) {
2
+ options = options || {};
3
+ this.snippet = options.pixel['snippet'];
4
+ this.context = options.context;
5
+ this.comment = 'Generic Pixel(' + options.pixel['type'] + '): ' + options.pixel['name'];
6
+ this.template = _.template('<!-- ' + this.comment + ' -->' + decodeURIComponent(this.snippet));
7
+ this.tag = this.template(this.context);
8
+ }
9
+
10
+ GenericPixel.prototype.insert = function() {
11
+ $(this.tag).addClass('pixel').appendTo('body');
12
+ $('body').append('<!-- END ' + this.comment + ' -->');
13
+ };
@@ -0,0 +1,31 @@
1
+ var Pixelator = function(data, partner) {
2
+ this.data = data;
3
+ this.partner = partner;
4
+ };
5
+
6
+ Pixelator.prototype = {
7
+ defaults: function() {
8
+ var default_context = this.data.context || {};
9
+ default_context.timestamp = new Date().getTime();
10
+ return default_context;
11
+ },
12
+ picker: function(key, options) {
13
+ var self = this;
14
+ var keys = self.data.pixels[key];
15
+
16
+ if (!keys) { return; }
17
+
18
+ _.each(keys, function(pixel) {
19
+ if (pixel.partner && self.partner !== pixel.partner) {
20
+ return;
21
+ }
22
+
23
+ var gp = new GenericPixel({ context: options, pixel: pixel });
24
+ gp.insert();
25
+ });
26
+ },
27
+ run: function(key, options) {
28
+ options = _(options || {}).extend(this.defaults());
29
+ this.picker(key, options);
30
+ }
31
+ }
@@ -0,0 +1 @@
1
+ //= require_tree ./core
@@ -0,0 +1,10 @@
1
+ class PixelatorController < ApplicationController
2
+ layout false
3
+
4
+ respond_to :js
5
+ caches_page :data
6
+
7
+ def data
8
+ render
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ :plain
2
+ var PIXEL_DATA = #{Pixelator.data.to_json};
3
+
@@ -0,0 +1,20 @@
1
+ -if Pixelator.run_envs.include?(Rails.env)
2
+ - pixel_types ||= []
3
+ - types = ['all'].concat(pixel_types).concat(@pixel_types || []).uniq
4
+ - @scope ||= ''
5
+
6
+ :javascript
7
+ (function() {
8
+ $(document).ready(function() {
9
+ var pixelator = new Pixelator(PIXEL_DATA, '#{@scope}');
10
+ _.each(#{types}, function(p) {
11
+ pixelator.run(p);
12
+ });
13
+ });
14
+ })();
15
+ -else
16
+ :javascript
17
+ if (typeof(console) === "object" && typeof(console.log) === "function") {
18
+ console.log("NOTICE: Pixelator is OFF. Go to #{__FILE__} to turn on.\n" +
19
+ "It would run: #{types} for #{@scope}");
20
+ }
@@ -0,0 +1,7 @@
1
+ - Pixelator.pixels[:head].each do |pixel|
2
+ - name = pixel[:name]
3
+ - template = ERB.new(URI.unescape(pixel[:snippet]))
4
+ - context = OpenStruct.new(Pixelator.context)
5
+ - snippet = template.result(context.instance_eval { binding })
6
+ :plain
7
+ #{URI.unescape(snippet)}
@@ -0,0 +1,3 @@
1
+ Rails.application.routes.draw do
2
+ match "/pixelator/data" => "pixelator#data", :as => :pixelator_data
3
+ end
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Explain the generator
3
+
4
+ Example:
5
+ rails generate pixelator Thing
6
+
7
+ This will create:
8
+ what/will/it/create
@@ -0,0 +1,16 @@
1
+ class PixelatorGenerator < Rails::Generators::Base
2
+ source_root File.expand_path('../templates', __FILE__)
3
+
4
+ def copy_initializer_file
5
+ copy_file "pixelator.rb", "config/initializers/pixelator.rb"
6
+ end
7
+
8
+ def copy_pixel_yaml
9
+ copy_file "pixels.yml", "config/pixels.yml"
10
+ end
11
+
12
+ def insert_require_pixelator_core
13
+ inject_into_file 'app/assets/javascripts/application.js', "//= require 'pixelator_core'\n",
14
+ before: "//= require_tree ."
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ Pixelator.configure do |c|
2
+ c.config_file = Rails.root.join('config', 'pixels.yml')
3
+ # run_envs is set to only 'production' by default
4
+ #c.run_envs << 'test'
5
+ end
6
+
7
+ #add contextual data that the pixelator might need
8
+ # such as google analytics ...
9
+ #reference in pixels.yml snippet with
10
+ # <%= google_analytics %>
11
+ #Pixelator.context[:google_analytics] = 'GA_ACCOUNT'
@@ -0,0 +1,47 @@
1
+ # This is where you define your pixels
2
+ # The top level is a key, which contains any array
3
+ # Each element in the array is a pixel with name, type, snippet, and partner TODO: change to scope
4
+ # The snippet is run through _underscore.js templating
5
+ # you can use <%= var %> in the snippet where var is defined in PIXEL_DATA.context['var']
6
+ # (see config/initalizers/pixelator.rb for how to do this server-side; can also be done in JS)
7
+
8
+ #these are included on the head of your page by rendering partial 'shared/pixelator_head'
9
+ #head:
10
+ # - name: google_analytics
11
+ # type: javascript
12
+ # snippet: |
13
+ # <script type="text/javascript">
14
+ # try {
15
+ # var _gaq = _gaq || [];
16
+ # _gaq.push(['_setAccount', '<%= google_analytics %>']);
17
+ # _gaq.push(['_trackPageview']);
18
+ #
19
+ # (function() {
20
+ # var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
21
+ # ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
22
+ # var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
23
+ # })();
24
+ # } catch(err) {}
25
+ # </script>
26
+
27
+
28
+ #all non-head pixels are included by calling:
29
+ # render partial: 'shared/pixelator', pixel_tages['all']
30
+ # OR
31
+ # new Pixelator(PIXEL_DATA, '').run('all');
32
+ #all:
33
+ # - name: google_analytics
34
+ # type: javascript
35
+ # snippet: |
36
+ # <script type="text/javascript">
37
+ # try {
38
+ # var _gaq = _gaq || [];
39
+ # _gaq.push(['_setAccount', '<%= google_analytics %>']);
40
+ # _gaq.push(['_trackPageview']);
41
+ #
42
+ # (function() {
43
+ # var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
44
+ # ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
45
+ # var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
46
+ # })();
47
+ # } catch(err) {}
@@ -0,0 +1,37 @@
1
+ require 'rails'
2
+ require "pixelator/engine"
3
+
4
+
5
+ module Pixelator
6
+ autoload :PixelatorController, 'pixelator/controllers/pixelator_controller'
7
+
8
+ class << self
9
+ attr_accessor :data
10
+ attr_accessor :config_file
11
+ attr_accessor :run_envs
12
+ end
13
+
14
+ def self.configure
15
+ self.run_envs = ['production']
16
+ yield(self) if block_given?
17
+ self.data = HashWithIndifferentAccess.new
18
+ self.data[:pixels] = YAML.load_file(config_file).with_indifferent_access
19
+ self.data[:pixels].each do |k,v|
20
+ if v.is_a?(Array)
21
+ v.map! do |a|
22
+ a['snippet'] = URI.escape(a['snippet'])
23
+ a
24
+ end
25
+ end
26
+ end
27
+ self.data[:context] = HashWithIndifferentAccess.new
28
+ end
29
+
30
+ def self.pixels
31
+ data[:pixels]
32
+ end
33
+
34
+ def self.context
35
+ data[:context]
36
+ end
37
+ end
@@ -0,0 +1,9 @@
1
+ module Pixelator
2
+ class Engine < ::Rails::Engine
3
+
4
+ initializer "pixelator.asset.pipeline" do |app|
5
+ app.config.assets.precompile << 'pixelator_core.js'
6
+ end
7
+
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module Pixelator
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,8 @@
1
+ begin
2
+ require 'jasmine'
3
+ load 'jasmine/tasks/jasmine.rake'
4
+ rescue LoadError
5
+ task :jasmine do
6
+ abort "Jasmine is not available. In order to run jasmine, you must: (sudo) gem install jasmine"
7
+ end
8
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :pixelator do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,191 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pixelator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - HowAboutWe.com, Rebecca Miller-Webster, Marco Carag, Brendan Barr
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-05-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 3.2.6
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 3.2.6
27
+ - !ruby/object:Gem::Dependency
28
+ name: haml
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: railties
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '3.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '3.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: jquery-rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: uglifier
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: sqlite3
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec-rails
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: capybara
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: jasmine
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ! '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: Add tracking pixels to your code in a manageable, performant way
140
+ email:
141
+ - dev@howaboutwe.com
142
+ executables: []
143
+ extensions: []
144
+ extra_rdoc_files: []
145
+ files:
146
+ - app/assets/javascripts/core/generic_pixel.js
147
+ - app/assets/javascripts/core/pixelator.js
148
+ - app/assets/javascripts/pixelator_core.js
149
+ - app/controllers/pixelator_controller.rb
150
+ - app/views/pixelator/data.js.haml
151
+ - app/views/shared/_pixelator.html.haml
152
+ - app/views/shared/_pixelator_head.html.haml
153
+ - config/routes.rb
154
+ - lib/generators/pixelator/pixelator_generator.rb
155
+ - lib/generators/pixelator/templates/pixelator.rb
156
+ - lib/generators/pixelator/templates/pixels.yml
157
+ - lib/generators/pixelator/USAGE
158
+ - lib/pixelator/engine.rb
159
+ - lib/pixelator/version.rb
160
+ - lib/pixelator.rb
161
+ - lib/tasks/jasmine.rake
162
+ - lib/tasks/pixelator_tasks.rake
163
+ - MIT-LICENSE
164
+ - Rakefile
165
+ - README.markdown
166
+ homepage: http://wwww.github.com/howaboutwe/pixelator
167
+ licenses:
168
+ - MIT
169
+ metadata: {}
170
+ post_install_message:
171
+ rdoc_options: []
172
+ require_paths:
173
+ - lib
174
+ required_ruby_version: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ! '>='
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ required_rubygems_version: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ! '>='
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ requirements: []
185
+ rubyforge_project:
186
+ rubygems_version: 2.0.3
187
+ signing_key:
188
+ specification_version: 4
189
+ summary: Add tracking pixels to your code in a manageable, performant way
190
+ test_files: []
191
+ has_rdoc: