universal-track-manager 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/generators/templates/create_universal_track_manager_tables.rb +45 -0
- data/lib/generators/universal_track_manager/install_generator.rb +29 -0
- data/lib/railtie.rb +7 -0
- data/lib/universal-track-manager.rb +21 -0
- data/lib/universal_track_manager/base.rb +7 -0
- data/lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb +82 -0
- data/lib/universal_track_manager/models/browser.rb +4 -0
- data/lib/universal_track_manager/models/campaign.rb +4 -0
- data/lib/universal_track_manager/models/visit.rb +6 -0
- data/lib/version.rb +3 -0
- metadata +64 -6
- data/lib/universal_track_manager.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54c410242cd15acf4c1d221e8baa171aaf3742004452b3571d947b4569f152a5
|
4
|
+
data.tar.gz: b27f33e20d3d020094213b51082ada41bd7af8594167b9c4682381e900036b12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5dc2873c890a7910625bd2b3106c23ead3c46392b01df7e890823069f714fda4bf7e61f95472a5c3cdb6e9ebca0306d5d3ea966aff885316ff6a9c408c2da8b6
|
7
|
+
data.tar.gz: d73313e68338e89885a43347867c063809b3663aa89d8a344819f54190f61b1f5c7dac6a6eac4ea274a36d53511a75b5c91f1cca0c578fcd6a7870244a1e5fc8
|
@@ -0,0 +1,45 @@
|
|
1
|
+
class CreateUniversalTrackManagerTables < ActiveRecord::Migration<%= migration_version %>
|
2
|
+
def self.up
|
3
|
+
ActiveRecord::Base.transaction do
|
4
|
+
|
5
|
+
create_table :browsers do |t|
|
6
|
+
# this table gets automatically populated by inbound traffic
|
7
|
+
t.string :browser_name, size: 255
|
8
|
+
end
|
9
|
+
|
10
|
+
add_index :browsers, :browser_name
|
11
|
+
|
12
|
+
create_table :campaigns do |t|
|
13
|
+
# this table gets automatically populated by inbound traffic
|
14
|
+
t.string :utm_source, limit: 50
|
15
|
+
t.string :utm_medium, limit: 50
|
16
|
+
t.string :utm_campaign, limit: 50
|
17
|
+
t.string :utm_content, limit: 50
|
18
|
+
t.string :utm_term, limit: 50
|
19
|
+
t.timestamps
|
20
|
+
end
|
21
|
+
|
22
|
+
add_index :campaigns, [:utm_source, :utm_medium, :utm_campaign, :utm_content, :utm_term], name: "utm_all_combined"
|
23
|
+
|
24
|
+
create_table :visits do |t|
|
25
|
+
t.datetime :first_pageload
|
26
|
+
t.datetime :last_pageload
|
27
|
+
t.integer :original_visit_id
|
28
|
+
t.integer :campaign_id
|
29
|
+
t.integer :browser_id
|
30
|
+
t.string :ip_v4_address, length: 15
|
31
|
+
|
32
|
+
t.integer :viewport_width
|
33
|
+
t.integer :viewport_height
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.down
|
39
|
+
ActiveRecord::Base.transaction do
|
40
|
+
drop_table :browsers
|
41
|
+
drop_table :visits
|
42
|
+
drop_table :campaigns
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'rails/generators/active_record'
|
2
|
+
|
3
|
+
module UniversalTrackManager
|
4
|
+
class InstallGenerator < Rails::Generators::Base
|
5
|
+
include Rails::Generators::Migration
|
6
|
+
|
7
|
+
desc "Creates a UTM initializer and copy locale files to your application."
|
8
|
+
|
9
|
+
source_root File.expand_path('../templates', __dir__)
|
10
|
+
|
11
|
+
|
12
|
+
class_option :orm, type: 'boolean'
|
13
|
+
|
14
|
+
def self.next_migration_number(path)
|
15
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
16
|
+
end
|
17
|
+
|
18
|
+
desc "Creates an initializer for Universal Track Manager and copy files to your application."
|
19
|
+
def copy_initializer
|
20
|
+
migration_template "create_universal_track_manager_tables.rb", "db/migrate/create_universal_track_manager_tables.rb"
|
21
|
+
end
|
22
|
+
|
23
|
+
def migration_version
|
24
|
+
"[#{ActiveRecord::Migration.current_version}]" if ActiveRecord::Migration.respond_to?(:current_version)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
|
data/lib/railtie.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
$LOAD_PATH.unshift __dir__
|
2
|
+
|
3
|
+
def require_all(path)
|
4
|
+
pattern = File.join(__dir__, path, "*.rb")
|
5
|
+
Dir.glob(pattern).sort.each do |f|
|
6
|
+
require f
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
# require_all("generators/templates")
|
12
|
+
|
13
|
+
require_all("generators/universal_track_manager")
|
14
|
+
require_all("universal_track_manager/controllers/concerns")
|
15
|
+
require_all("universal_track_manager/models")
|
16
|
+
|
17
|
+
module UniversalTrackManager
|
18
|
+
require "railtie.rb" if defined?(Rails)
|
19
|
+
end
|
20
|
+
|
21
|
+
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module UniversalTrackManagerConcern
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
before_action :track_visitor
|
6
|
+
end
|
7
|
+
|
8
|
+
def permitted_utm_params
|
9
|
+
params.permit(:utm_campaign, :utm_source, :utm_term, :utm_content, :utm_medium)
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
def ip_address
|
14
|
+
request.ip
|
15
|
+
end
|
16
|
+
|
17
|
+
def user_agent
|
18
|
+
request.user_agent[0..255]
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
def utm_campaign
|
23
|
+
permitted_utm_params[:utm_campaign]
|
24
|
+
end
|
25
|
+
|
26
|
+
def utm_source
|
27
|
+
permitted_utm_params[:utm_source]
|
28
|
+
end
|
29
|
+
|
30
|
+
def utm_term
|
31
|
+
permitted_utm_params[:utm_term]
|
32
|
+
end
|
33
|
+
|
34
|
+
def utm_content
|
35
|
+
permitted_utm_params[:utm_content]
|
36
|
+
end
|
37
|
+
|
38
|
+
def utm_medium
|
39
|
+
permitted_utm_params[:utm_medium]
|
40
|
+
end
|
41
|
+
|
42
|
+
def track_visitor
|
43
|
+
if !session['visit_id']
|
44
|
+
|
45
|
+
visit = UniversalTrackManager::Visit.create!(ip_v4_address: ip_address,
|
46
|
+
browser: find_or_create_browser_by_current,
|
47
|
+
campaign: find_or_create_campaign_by_current)
|
48
|
+
|
49
|
+
session[:visit_id] = visit.id
|
50
|
+
else
|
51
|
+
# existing visit, maybe
|
52
|
+
existing_visit = UniversalTrackManager::Visit.find(session['visit_id'])
|
53
|
+
|
54
|
+
evict_visit!(existing_visit) if existing_visit.ip_v4_address != ip_address
|
55
|
+
evict_visit!(existing_visit) if existing_visit.browser.browser_name != user_agent
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def find_or_create_browser_by_current
|
60
|
+
browser = UniversalTrackManager::Browser.find_or_create_by(browser_name: user_agent)
|
61
|
+
end
|
62
|
+
|
63
|
+
def find_or_create_campaign_by_current
|
64
|
+
campaign = UniversalTrackManager::Campaign.find_or_create_by(
|
65
|
+
utm_campaign: utm_campaign,
|
66
|
+
utm_source: utm_source,
|
67
|
+
utm_term: utm_term,
|
68
|
+
utm_content: utm_content,
|
69
|
+
utm_medium: utm_medium
|
70
|
+
)
|
71
|
+
end
|
72
|
+
|
73
|
+
def evict_visit!(old_visit)
|
74
|
+
visit = UniversalTrackManager::Visit.create!(
|
75
|
+
original_visit_id: old_visit.original_visit_id.nil? ? old_visit.id : old_visit.original_visit_id,
|
76
|
+
ip_v4_address: ip_address,
|
77
|
+
browser: find_or_create_browser_by_current,
|
78
|
+
campaign: find_or_create_campaign_by_current)
|
79
|
+
|
80
|
+
session[:visit_id] = visit.id
|
81
|
+
end
|
82
|
+
end
|
data/lib/version.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: universal-track-manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Fleetwood-Boldt
|
@@ -9,20 +9,77 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2019-11-19 00:00:00.000000000 Z
|
12
|
-
dependencies:
|
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: '4.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: simplecov
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.17'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.17'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: appraisal
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.2'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.2'
|
13
55
|
description: See https://github.com/jasonfb/universal_track_manager
|
14
56
|
email: jason.fb@datatravels.com
|
15
57
|
executables: []
|
16
58
|
extensions: []
|
17
59
|
extra_rdoc_files: []
|
18
60
|
files:
|
19
|
-
- lib/
|
61
|
+
- lib/generators/templates/create_universal_track_manager_tables.rb
|
62
|
+
- lib/generators/universal_track_manager/install_generator.rb
|
63
|
+
- lib/railtie.rb
|
64
|
+
- lib/universal-track-manager.rb
|
65
|
+
- lib/universal_track_manager/base.rb
|
66
|
+
- lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb
|
67
|
+
- lib/universal_track_manager/models/browser.rb
|
68
|
+
- lib/universal_track_manager/models/campaign.rb
|
69
|
+
- lib/universal_track_manager/models/visit.rb
|
70
|
+
- lib/version.rb
|
20
71
|
homepage: http://rubygems.org/gems/unverisal-track-manager
|
21
72
|
licenses:
|
22
73
|
- MIT
|
23
74
|
metadata:
|
24
75
|
source_code_uri: https://github.com/jasonfb/universal_track_manager
|
25
|
-
post_install_message:
|
76
|
+
post_install_message: |
|
77
|
+
---------------------------------------------
|
78
|
+
Welcome to Universal Track Manager
|
79
|
+
to set up, please run
|
80
|
+
|
81
|
+
rails generate universal_track_manager:install
|
82
|
+
---------------------------------------------
|
26
83
|
rdoc_options: []
|
27
84
|
require_paths:
|
28
85
|
- lib
|
@@ -37,8 +94,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
37
94
|
- !ruby/object:Gem::Version
|
38
95
|
version: '0'
|
39
96
|
requirements: []
|
40
|
-
|
97
|
+
rubyforge_project:
|
98
|
+
rubygems_version: 2.7.9
|
41
99
|
signing_key:
|
42
100
|
specification_version: 4
|
43
|
-
summary: A gem to track your
|
101
|
+
summary: A gem to track visitors to your website.
|
44
102
|
test_files: []
|