universal-track-manager 0.0.1 → 0.0.2
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.
- 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: []
|