universal-track-manager 0.7.0.alpha → 0.7.5.alpha2
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 +7 -3
- data/lib/generators/universal_track_manager/install_generator.rb +41 -10
- data/lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb +16 -5
- data/lib/universal_track_manager/models/visit.rb +2 -1
- data/lib/version.rb +1 -1
- metadata +9 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 06de91d3860d6f3e8000f622b2ab6209e723f492bce5548891569586e2855c6a
|
4
|
+
data.tar.gz: efb6b01f09df116b2d7b66273f276c907f2da61c3a1a41b9de29886e69b16611
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ce9e03d5f717be02df2515a91c9e708f6228befbce12d30df9ac6761a8a6d162ac602d17451d28a9100d2f82a32defae3e46ce2881e9d22c6eaa9540328ae25
|
7
|
+
data.tar.gz: 54fb059bf6f826609f4b3c19af8d8be265a13271b1898be044c563f0ce159925f04e0862ff508cbff0303dd1110f9e2cddf3c94dd4ad32d2558be17e51647df1
|
@@ -4,7 +4,8 @@ class CreateUniversalTrackManagerTables < ActiveRecord::Migration<%= migration_v
|
|
4
4
|
|
5
5
|
create_table :browsers do |t|
|
6
6
|
# this table gets automatically populated by inbound traffic
|
7
|
-
t.string :name,
|
7
|
+
t.string :name, limit: 255
|
8
|
+
t.timestamps
|
8
9
|
end
|
9
10
|
|
10
11
|
add_index :browsers, :name
|
@@ -12,10 +13,11 @@ class CreateUniversalTrackManagerTables < ActiveRecord::Migration<%= migration_v
|
|
12
13
|
create_table :campaigns do |t|
|
13
14
|
# this table gets automatically populated by inbound traffic
|
14
15
|
#GENERATOR INSERTS CAMPAIGN COLUMNS HERE
|
16
|
+
t.string :sha1, limit: 40
|
15
17
|
t.timestamps
|
16
18
|
end
|
17
19
|
|
18
|
-
|
20
|
+
add_index :campaigns, :sha1
|
19
21
|
|
20
22
|
create_table :visits do |t|
|
21
23
|
t.datetime :first_pageload
|
@@ -23,10 +25,12 @@ class CreateUniversalTrackManagerTables < ActiveRecord::Migration<%= migration_v
|
|
23
25
|
t.integer :original_visit_id
|
24
26
|
t.integer :campaign_id
|
25
27
|
t.integer :browser_id
|
26
|
-
t.string :ip_v4_address,
|
28
|
+
t.string :ip_v4_address, limit: 15
|
27
29
|
|
28
30
|
t.integer :viewport_width
|
29
31
|
t.integer :viewport_height
|
32
|
+
t.integer :count, default: 1
|
33
|
+
t.timestamps
|
30
34
|
end
|
31
35
|
end
|
32
36
|
end
|
@@ -1,8 +1,6 @@
|
|
1
1
|
|
2
2
|
require 'rails/generators'
|
3
3
|
|
4
|
-
require 'byebug'
|
5
|
-
|
6
4
|
module UniversalTrackManager
|
7
5
|
class InstallGenerator < Rails::Generators::Base
|
8
6
|
include Rails::Generators::Migration
|
@@ -12,7 +10,13 @@ module UniversalTrackManager
|
|
12
10
|
source_root File.expand_path('../templates', __dir__)
|
13
11
|
|
14
12
|
class_option :orm, type: 'boolean'
|
15
|
-
|
13
|
+
|
14
|
+
class_option :param_list, type: :string, default: nil # DEPRECATED --- DO NOT USE
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
class_option :add, type: :string, default: nil
|
19
|
+
class_option :only, type: :string, default: nil
|
16
20
|
|
17
21
|
|
18
22
|
def self.next_migration_number(path)
|
@@ -21,19 +25,45 @@ module UniversalTrackManager
|
|
21
25
|
|
22
26
|
desc "Creates an initializer for Universal Track Manager and copy files to your application."
|
23
27
|
def create_universal_track_manager_migration
|
24
|
-
|
28
|
+
# guard against pre-0.7.3 sytnax
|
29
|
+
if options['param_list']
|
30
|
+
puts "Oops (FATAL): param_list is removed; use 'add' to augment the default list of fields or use 'only' to replace it"
|
31
|
+
exit
|
32
|
+
end
|
33
|
+
|
34
|
+
# guard against using both 'add' and 'only'
|
35
|
+
if options['add'] && options['only']
|
36
|
+
puts "Oops (FATAL): You specified both 'add' and 'only'; use 'add' to augment the default list of fields OR use 'only' to replace it"
|
37
|
+
exit
|
38
|
+
end
|
39
|
+
|
40
|
+
@default_params = %w{utm_source utm_medium utm_campaign utm_content utm_term}
|
41
|
+
|
42
|
+
if options['add']
|
43
|
+
options['add'].split(",").each do |p|
|
44
|
+
if !@default_params.include?(p)
|
45
|
+
@default_params << p
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
if options['only']
|
52
|
+
@default_params = []
|
53
|
+
options['only'].split(",").each do |p|
|
54
|
+
@default_params << p
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
25
58
|
column_defs = ""
|
26
|
-
@
|
59
|
+
@default_params.each do |p|
|
27
60
|
column_defs += " t.string :#{p}, limit:256\n"
|
28
61
|
end
|
29
|
-
|
30
|
-
index_def = "add_index :campaigns, #{@params.split(',').map{|c| c.to_sym}.to_s}, name: 'utm_all_combined'"
|
31
62
|
copy_file "create_universal_track_manager_tables.rb", "#{self.class.source_root}/create_universal_track_manager_tables.rb-staged"
|
32
|
-
byebug
|
33
63
|
gsub_file "#{self.class.source_root}/create_universal_track_manager_tables.rb-staged", "#GENERATOR INSERTS CAMPAIGN COLUMNS HERE", column_defs
|
34
|
-
byebug
|
35
|
-
gsub_file "#{self.class.source_root}/create_universal_track_manager_tables.rb-staged", "#GENERATOR INSERTS CAMPAIGN INDEX HERE", index_def
|
36
64
|
migration_template "create_universal_track_manager_tables.rb-staged", "db/migrate/create_universal_track_manager_tables.rb"
|
65
|
+
|
66
|
+
remove_file "#{self.class.source_root}/create_universal_track_manager_tables.rb-staged"
|
37
67
|
end
|
38
68
|
|
39
69
|
def create_universal_track_manager_initializer
|
@@ -41,6 +71,7 @@ module UniversalTrackManager
|
|
41
71
|
copy_file "universal_track_manager.rb", "#{self.class.source_root}/universal_track_manager.rb-staged"
|
42
72
|
gsub_file "#{self.class.source_root}/universal_track_manager.rb-staged", "#GENERATOR INSERTS CAMPAIGN COLUMN CONFIG HERE", column_config
|
43
73
|
copy_file 'universal_track_manager.rb-staged', 'config/initializers/universal_track_manager.rb'
|
74
|
+
remove_file "#{self.class.source_root}/universal_track_manager.rb-staged"
|
44
75
|
end
|
45
76
|
|
46
77
|
def migration_version
|
@@ -27,7 +27,7 @@ module UniversalTrackManagerConcern
|
|
27
27
|
|
28
28
|
def user_agent
|
29
29
|
return nil if ! UniversalTrackManager.track_user_agent?
|
30
|
-
request.user_agent[0..
|
30
|
+
request.user_agent[0..254]
|
31
31
|
end
|
32
32
|
|
33
33
|
def now
|
@@ -83,9 +83,16 @@ module UniversalTrackManagerConcern
|
|
83
83
|
|
84
84
|
def find_or_create_campaign_by_current
|
85
85
|
return nil if ! UniversalTrackManager.track_utms?
|
86
|
-
|
87
|
-
|
88
|
-
|
86
|
+
gen_sha1 = gen_campaign_key(permitted_utm_params)
|
87
|
+
|
88
|
+
# find_or_create_by finding only by sha1 would be nice here, but how to do so with a dynamic set of columns?
|
89
|
+
# we've got a small chance of dups here due to the non-atomic find/create and sha1, but that's ok for this application.
|
90
|
+
c = UniversalTrackManager::Campaign.find_by(sha1: gen_sha1)
|
91
|
+
c ||= UniversalTrackManager::Campaign.create(*(permitted_utm_params.merge({"sha1": gen_sha1})))
|
92
|
+
end
|
93
|
+
|
94
|
+
def gen_campaign_key(params)
|
95
|
+
Digest::SHA1.hexdigest(params.keys.map{|k| k.downcase()}.sort.map{|k| {"#{k}": params[k]}}.to_s)
|
89
96
|
end
|
90
97
|
|
91
98
|
def evict_visit!(old_visit)
|
@@ -94,12 +101,16 @@ module UniversalTrackManagerConcern
|
|
94
101
|
first_pageload: now,
|
95
102
|
last_pageload: now,
|
96
103
|
original_visit_id: old_visit.original_visit_id.nil? ? old_visit.id : old_visit.original_visit_id,
|
104
|
+
count: old_visit.original_visit_id.nil? ? old_visit.count + 1 : 1,
|
97
105
|
ip_v4_address: ip_address,
|
98
106
|
campaign: find_or_create_campaign_by_current
|
99
107
|
}
|
100
108
|
|
101
109
|
# fail silently if there is no user agent
|
102
|
-
|
110
|
+
if request.user_agent
|
111
|
+
params[:browser] = find_or_create_browser_by_current
|
112
|
+
end
|
113
|
+
|
103
114
|
visit = UniversalTrackManager::Visit.create!(params)
|
104
115
|
|
105
116
|
session[:visit_id] = visit.id
|
@@ -4,6 +4,7 @@ class UniversalTrackManager::Visit < ActiveRecord::Base
|
|
4
4
|
belongs_to :campaign, class_name: "UniversalTrackManager::Campaign"
|
5
5
|
belongs_to :browser, class_name: "UniversalTrackManager::Browser"
|
6
6
|
|
7
|
+
belongs_to :original_visit, optional: true
|
7
8
|
|
8
9
|
def matches_all_utms?(params)
|
9
10
|
if !campaign
|
@@ -16,7 +17,7 @@ class UniversalTrackManager::Visit < ActiveRecord::Base
|
|
16
17
|
|
17
18
|
# note params are allowed to be missing
|
18
19
|
UniversalTrackManager.campaign_column_symbols.each do |c|
|
19
|
-
if campaign[c] != params[c]
|
20
|
+
if (campaign[c] && (campaign[c] != params[c])) || (!campaign[c] && params[c])
|
20
21
|
return false
|
21
22
|
end
|
22
23
|
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: universal-track-manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.5.alpha2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Fleetwood-Boldt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '5.1'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '5.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: simplecov
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -68,7 +68,7 @@ dependencies:
|
|
68
68
|
version: '2.2'
|
69
69
|
description: Simple, plug & play visitor tracking by user agent (browser), IP address,
|
70
70
|
referrer, and UTM parameters.
|
71
|
-
email:
|
71
|
+
email: tech@datatravels.com
|
72
72
|
executables: []
|
73
73
|
extensions: []
|
74
74
|
extra_rdoc_files: []
|
@@ -84,13 +84,12 @@ files:
|
|
84
84
|
- lib/universal_track_manager/models/campaign.rb
|
85
85
|
- lib/universal_track_manager/models/visit.rb
|
86
86
|
- lib/version.rb
|
87
|
-
homepage: https://
|
87
|
+
homepage: https://jasonfleetwoodboldt.com/my-open-source-projects/universal-track-manager/
|
88
88
|
licenses:
|
89
89
|
- MIT
|
90
90
|
metadata:
|
91
91
|
source_code_uri: https://github.com/jasonfb/universal_track_manager
|
92
|
-
|
93
|
-
homepage_uri: https://blog.jasonfleetwoodboldt.com/my-open-source-projects/universal-track-manager/
|
92
|
+
homepage_uri: https://github.com/jasonfb/universal_track_manager
|
94
93
|
post_install_message: |
|
95
94
|
---------------------------------------------
|
96
95
|
Welcome to Universal Track Manager
|
@@ -112,8 +111,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
111
|
- !ruby/object:Gem::Version
|
113
112
|
version: 1.3.1
|
114
113
|
requirements: []
|
115
|
-
rubygems_version: 3.
|
114
|
+
rubygems_version: 3.1.6
|
116
115
|
signing_key:
|
117
116
|
specification_version: 4
|
118
|
-
summary: A gem to track visitors to your website.
|
117
|
+
summary: A gem to track visitors and their UTMs to your website.
|
119
118
|
test_files: []
|