universal-track-manager 0.5.beta2 → 0.7.0.alpha
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 +2 -6
- data/lib/generators/templates/universal_track_manager.rb +2 -2
- data/lib/generators/universal_track_manager/install_generator.rb +22 -3
- data/lib/universal_track_manager.rb +10 -2
- data/lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb +30 -50
- data/lib/universal_track_manager/models/visit.rb +7 -6
- data/lib/version.rb +2 -2
- metadata +26 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d480176796bb905c66f3e4eb2904402232548966be5183768033636b9e50d7b
|
4
|
+
data.tar.gz: 0a7762ea705d448444a4113e254c49ba9e77588a4880197c5244e46388266637
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99679f236136ab3eed671f2a0319cd01e53ca833589b97fab3e289eaa1fb5647bce188e0d4fbce05c9b5ef9ed0e09f65669e84ac2920c5430fbb1b89f03e0083
|
7
|
+
data.tar.gz: 6997c26bf61ecbcb8e4867a3dfac99158d4b885209248746c364178acd3405698a8e210204d0a619f34c6a0c8fb8ef4badd4f24bb105292a9d5c9dbef47e1bc0
|
@@ -11,15 +11,11 @@ class CreateUniversalTrackManagerTables < ActiveRecord::Migration<%= migration_v
|
|
11
11
|
|
12
12
|
create_table :campaigns do |t|
|
13
13
|
# this table gets automatically populated by inbound traffic
|
14
|
-
|
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
|
14
|
+
#GENERATOR INSERTS CAMPAIGN COLUMNS HERE
|
19
15
|
t.timestamps
|
20
16
|
end
|
21
17
|
|
22
|
-
|
18
|
+
#GENERATOR INSERTS CAMPAIGN INDEX HERE
|
23
19
|
|
24
20
|
create_table :visits do |t|
|
25
21
|
t.datetime :first_pageload
|
@@ -1,4 +1,7 @@
|
|
1
|
-
|
1
|
+
|
2
|
+
require 'rails/generators'
|
3
|
+
|
4
|
+
require 'byebug'
|
2
5
|
|
3
6
|
module UniversalTrackManager
|
4
7
|
class InstallGenerator < Rails::Generators::Base
|
@@ -9,6 +12,7 @@ module UniversalTrackManager
|
|
9
12
|
source_root File.expand_path('../templates', __dir__)
|
10
13
|
|
11
14
|
class_option :orm, type: 'boolean'
|
15
|
+
class_option :param_list, type: :string, default: 'utm_source,utm_medium,utm_campaign,utm_content,utm_term'
|
12
16
|
|
13
17
|
|
14
18
|
def self.next_migration_number(path)
|
@@ -17,11 +21,26 @@ module UniversalTrackManager
|
|
17
21
|
|
18
22
|
desc "Creates an initializer for Universal Track Manager and copy files to your application."
|
19
23
|
def create_universal_track_manager_migration
|
20
|
-
|
24
|
+
@params = options['param_list']
|
25
|
+
column_defs = ""
|
26
|
+
@params.split(',').each do |p|
|
27
|
+
column_defs += " t.string :#{p}, limit:256\n"
|
28
|
+
end
|
29
|
+
|
30
|
+
index_def = "add_index :campaigns, #{@params.split(',').map{|c| c.to_sym}.to_s}, name: 'utm_all_combined'"
|
31
|
+
copy_file "create_universal_track_manager_tables.rb", "#{self.class.source_root}/create_universal_track_manager_tables.rb-staged"
|
32
|
+
byebug
|
33
|
+
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
|
+
migration_template "create_universal_track_manager_tables.rb-staged", "db/migrate/create_universal_track_manager_tables.rb"
|
21
37
|
end
|
22
38
|
|
23
39
|
def create_universal_track_manager_initializer
|
24
|
-
|
40
|
+
column_config = "config.campaign_columns = '#{options.param_list}'"
|
41
|
+
copy_file "universal_track_manager.rb", "#{self.class.source_root}/universal_track_manager.rb-staged"
|
42
|
+
gsub_file "#{self.class.source_root}/universal_track_manager.rb-staged", "#GENERATOR INSERTS CAMPAIGN COLUMN CONFIG HERE", column_config
|
43
|
+
copy_file 'universal_track_manager.rb-staged', 'config/initializers/universal_track_manager.rb'
|
25
44
|
end
|
26
45
|
|
27
46
|
def migration_version
|
@@ -4,7 +4,7 @@ module UniversalTrackManager
|
|
4
4
|
require "railtie.rb" if defined?(Rails)
|
5
5
|
|
6
6
|
class Settings
|
7
|
-
attr_accessor :track_ips, :track_utms, :track_user_agent, :track_http_referrer
|
7
|
+
attr_accessor :track_ips, :track_utms, :track_user_agent, :track_http_referrer, :campaign_columns
|
8
8
|
end
|
9
9
|
|
10
10
|
def self.configure(&block)
|
@@ -13,7 +13,6 @@ module UniversalTrackManager
|
|
13
13
|
block.call(@_settings)
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
16
|
def self.track_ips?
|
18
17
|
@_settings.track_ips
|
19
18
|
end
|
@@ -29,6 +28,15 @@ module UniversalTrackManager
|
|
29
28
|
def self.track_http_referrer?
|
30
29
|
@_settings.track_http_referrer
|
31
30
|
end
|
31
|
+
|
32
|
+
def self.campaign_column_names
|
33
|
+
@campaign_column_names ||= @_settings.campaign_columns.split(',')
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.campaign_column_symbols
|
37
|
+
@campaign_column_symbols ||= @_settings.campaign_columns.split(',').map{|c| c.to_sym}
|
38
|
+
end
|
39
|
+
|
32
40
|
end
|
33
41
|
|
34
42
|
|
@@ -1,14 +1,22 @@
|
|
1
1
|
module UniversalTrackManagerConcern
|
2
2
|
extend ActiveSupport::Concern
|
3
|
-
|
4
3
|
attr_accessor :visit_evicted
|
5
4
|
|
5
|
+
|
6
|
+
|
6
7
|
included do
|
7
8
|
before_action :track_visitor
|
9
|
+
|
10
|
+
UniversalTrackManager.campaign_column_symbols.each do |s|
|
11
|
+
define_method(s) do
|
12
|
+
return nil if ! UniversalTrackManager.track_utms?
|
13
|
+
permitted_utm_params[s]
|
14
|
+
end
|
15
|
+
end
|
8
16
|
end
|
9
17
|
|
10
18
|
def permitted_utm_params
|
11
|
-
params.permit(
|
19
|
+
params.permit(*(UniversalTrackManager.campaign_column_symbols))
|
12
20
|
end
|
13
21
|
|
14
22
|
|
@@ -22,43 +30,19 @@ module UniversalTrackManagerConcern
|
|
22
30
|
request.user_agent[0..255]
|
23
31
|
end
|
24
32
|
|
25
|
-
|
26
|
-
def utm_campaign
|
27
|
-
return nil if ! UniversalTrackManager.track_utms?
|
28
|
-
permitted_utm_params[:utm_campaign]
|
29
|
-
end
|
30
|
-
|
31
|
-
def utm_source
|
32
|
-
return nil if ! UniversalTrackManager.track_utms?
|
33
|
-
permitted_utm_params[:utm_source]
|
34
|
-
end
|
35
|
-
|
36
|
-
def utm_term
|
37
|
-
return nil if ! UniversalTrackManager.track_utms?
|
38
|
-
permitted_utm_params[:utm_term]
|
39
|
-
end
|
40
|
-
|
41
|
-
def utm_content
|
42
|
-
return nil if ! UniversalTrackManager.track_utms?
|
43
|
-
permitted_utm_params[:utm_content]
|
44
|
-
end
|
45
|
-
|
46
|
-
def utm_medium
|
47
|
-
return nil if ! UniversalTrackManager.track_utms?
|
48
|
-
permitted_utm_params[:utm_medium]
|
49
|
-
end
|
50
|
-
|
51
33
|
def now
|
52
34
|
@now ||= Time.now
|
53
35
|
end
|
54
36
|
|
55
37
|
def new_visitor
|
56
|
-
|
38
|
+
params = {
|
57
39
|
first_pageload: now,
|
58
40
|
last_pageload: now,
|
59
41
|
ip_v4_address: ip_address,
|
60
|
-
|
61
|
-
|
42
|
+
campaign: find_or_create_campaign_by_current
|
43
|
+
}
|
44
|
+
params[:browser] = find_or_create_browser_by_current if request.user_agent
|
45
|
+
visit = UniversalTrackManager::Visit.create!(params)
|
62
46
|
session[:visit_id] = visit.id
|
63
47
|
end
|
64
48
|
|
@@ -70,11 +54,7 @@ module UniversalTrackManagerConcern
|
|
70
54
|
begin
|
71
55
|
existing_visit = UniversalTrackManager::Visit.find(session['visit_id'])
|
72
56
|
|
73
|
-
evict_visit!(existing_visit) if any_utm_params? && !existing_visit.matches_all_utms?(
|
74
|
-
utm_source: utm_source,
|
75
|
-
utm_term: utm_term,
|
76
|
-
utm_content: utm_content,
|
77
|
-
utm_medium: utm_medium})
|
57
|
+
evict_visit!(existing_visit) if any_utm_params? && !existing_visit.matches_all_utms?(permitted_utm_params)
|
78
58
|
|
79
59
|
evict_visit!(existing_visit) if existing_visit.ip_v4_address != ip_address
|
80
60
|
evict_visit!(existing_visit) if existing_visit.browser && existing_visit.browser.name != user_agent
|
@@ -91,7 +71,7 @@ module UniversalTrackManagerConcern
|
|
91
71
|
|
92
72
|
def any_utm_params?
|
93
73
|
return false if ! UniversalTrackManager.track_utms?
|
94
|
-
|
74
|
+
UniversalTrackManager.campaign_column_symbols.any? do |key|
|
95
75
|
params[key].present?
|
96
76
|
end
|
97
77
|
end
|
@@ -104,24 +84,24 @@ module UniversalTrackManagerConcern
|
|
104
84
|
def find_or_create_campaign_by_current
|
105
85
|
return nil if ! UniversalTrackManager.track_utms?
|
106
86
|
campaign = UniversalTrackManager::Campaign.find_or_create_by(
|
107
|
-
|
108
|
-
utm_source: utm_source,
|
109
|
-
utm_term: utm_term,
|
110
|
-
utm_content: utm_content,
|
111
|
-
utm_medium: utm_medium
|
87
|
+
*permitted_utm_params
|
112
88
|
)
|
113
89
|
end
|
114
90
|
|
115
91
|
def evict_visit!(old_visit)
|
116
92
|
@visit_evicted = true
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
93
|
+
params = {
|
94
|
+
first_pageload: now,
|
95
|
+
last_pageload: now,
|
96
|
+
original_visit_id: old_visit.original_visit_id.nil? ? old_visit.id : old_visit.original_visit_id,
|
97
|
+
ip_v4_address: ip_address,
|
98
|
+
campaign: find_or_create_campaign_by_current
|
99
|
+
}
|
100
|
+
|
101
|
+
# fail silently if there is no user agent
|
102
|
+
params[:browser] = find_or_create_browser_by_current if request.user_agent
|
103
|
+
visit = UniversalTrackManager::Visit.create!(params)
|
124
104
|
|
125
105
|
session[:visit_id] = visit.id
|
126
106
|
end
|
127
|
-
end
|
107
|
+
end
|
@@ -9,16 +9,17 @@ class UniversalTrackManager::Visit < ActiveRecord::Base
|
|
9
9
|
if !campaign
|
10
10
|
# this visit has no campaign, which means all UTMs = null
|
11
11
|
# if any of the UTMs are present, return false (they don't match null)
|
12
|
-
return !
|
12
|
+
return ! UniversalTrackManager.campaign_column_symbols.any? do |key|
|
13
13
|
params[key].present?
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
17
|
# note params are allowed to be missing
|
18
|
-
|
19
|
-
campaign
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
UniversalTrackManager.campaign_column_symbols.each do |c|
|
19
|
+
if campaign[c] != params[c]
|
20
|
+
return false
|
21
|
+
end
|
22
|
+
end
|
23
|
+
return true
|
23
24
|
end
|
24
25
|
end
|
data/lib/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module UniversalTrackManager
|
2
|
-
VERSION = "0.
|
3
|
-
end
|
2
|
+
VERSION = "0.7.0.alpha"
|
3
|
+
end
|
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.
|
4
|
+
version: 0.7.0.alpha
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Fleetwood-Boldt
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -28,16 +28,30 @@ dependencies:
|
|
28
28
|
name: simplecov
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: simplecov-rcov
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version: '0
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: appraisal
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,11 +84,13 @@ files:
|
|
70
84
|
- lib/universal_track_manager/models/campaign.rb
|
71
85
|
- lib/universal_track_manager/models/visit.rb
|
72
86
|
- lib/version.rb
|
73
|
-
homepage:
|
87
|
+
homepage: https://blog.jasonfleetwoodboldt.com/my-open-source-projects/universal-track-manager/
|
74
88
|
licenses:
|
75
89
|
- MIT
|
76
90
|
metadata:
|
77
91
|
source_code_uri: https://github.com/jasonfb/universal_track_manager
|
92
|
+
documentation_uri: https://jfb.teachable.com/p/gems-by-jason
|
93
|
+
homepage_uri: https://blog.jasonfleetwoodboldt.com/my-open-source-projects/universal-track-manager/
|
78
94
|
post_install_message: |
|
79
95
|
---------------------------------------------
|
80
96
|
Welcome to Universal Track Manager
|
@@ -96,8 +112,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
96
112
|
- !ruby/object:Gem::Version
|
97
113
|
version: 1.3.1
|
98
114
|
requirements: []
|
99
|
-
rubygems_version: 3.
|
100
|
-
signing_key:
|
115
|
+
rubygems_version: 3.2.7
|
116
|
+
signing_key:
|
101
117
|
specification_version: 4
|
102
118
|
summary: A gem to track visitors to your website.
|
103
119
|
test_files: []
|