universal-track-manager 0.6.3 → 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 +13 -38
- data/lib/universal_track_manager/models/visit.rb +7 -6
- data/lib/version.rb +1 -1
- metadata +25 -9
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
|
|
|
@@ -2,12 +2,21 @@ module UniversalTrackManagerConcern
|
|
|
2
2
|
extend ActiveSupport::Concern
|
|
3
3
|
attr_accessor :visit_evicted
|
|
4
4
|
|
|
5
|
+
|
|
6
|
+
|
|
5
7
|
included do
|
|
6
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
|
|
7
16
|
end
|
|
8
17
|
|
|
9
18
|
def permitted_utm_params
|
|
10
|
-
params.permit(
|
|
19
|
+
params.permit(*(UniversalTrackManager.campaign_column_symbols))
|
|
11
20
|
end
|
|
12
21
|
|
|
13
22
|
|
|
@@ -21,32 +30,6 @@ module UniversalTrackManagerConcern
|
|
|
21
30
|
request.user_agent[0..255]
|
|
22
31
|
end
|
|
23
32
|
|
|
24
|
-
|
|
25
|
-
def utm_campaign
|
|
26
|
-
return nil if ! UniversalTrackManager.track_utms?
|
|
27
|
-
permitted_utm_params[:utm_campaign]
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def utm_source
|
|
31
|
-
return nil if ! UniversalTrackManager.track_utms?
|
|
32
|
-
permitted_utm_params[:utm_source]
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def utm_term
|
|
36
|
-
return nil if ! UniversalTrackManager.track_utms?
|
|
37
|
-
permitted_utm_params[:utm_term]
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def utm_content
|
|
41
|
-
return nil if ! UniversalTrackManager.track_utms?
|
|
42
|
-
permitted_utm_params[:utm_content]
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def utm_medium
|
|
46
|
-
return nil if ! UniversalTrackManager.track_utms?
|
|
47
|
-
permitted_utm_params[:utm_medium]
|
|
48
|
-
end
|
|
49
|
-
|
|
50
33
|
def now
|
|
51
34
|
@now ||= Time.now
|
|
52
35
|
end
|
|
@@ -71,11 +54,7 @@ module UniversalTrackManagerConcern
|
|
|
71
54
|
begin
|
|
72
55
|
existing_visit = UniversalTrackManager::Visit.find(session['visit_id'])
|
|
73
56
|
|
|
74
|
-
evict_visit!(existing_visit) if any_utm_params? && !existing_visit.matches_all_utms?(
|
|
75
|
-
utm_source: utm_source,
|
|
76
|
-
utm_term: utm_term,
|
|
77
|
-
utm_content: utm_content,
|
|
78
|
-
utm_medium: utm_medium})
|
|
57
|
+
evict_visit!(existing_visit) if any_utm_params? && !existing_visit.matches_all_utms?(permitted_utm_params)
|
|
79
58
|
|
|
80
59
|
evict_visit!(existing_visit) if existing_visit.ip_v4_address != ip_address
|
|
81
60
|
evict_visit!(existing_visit) if existing_visit.browser && existing_visit.browser.name != user_agent
|
|
@@ -92,7 +71,7 @@ module UniversalTrackManagerConcern
|
|
|
92
71
|
|
|
93
72
|
def any_utm_params?
|
|
94
73
|
return false if ! UniversalTrackManager.track_utms?
|
|
95
|
-
|
|
74
|
+
UniversalTrackManager.campaign_column_symbols.any? do |key|
|
|
96
75
|
params[key].present?
|
|
97
76
|
end
|
|
98
77
|
end
|
|
@@ -105,11 +84,7 @@ module UniversalTrackManagerConcern
|
|
|
105
84
|
def find_or_create_campaign_by_current
|
|
106
85
|
return nil if ! UniversalTrackManager.track_utms?
|
|
107
86
|
campaign = UniversalTrackManager::Campaign.find_or_create_by(
|
|
108
|
-
|
|
109
|
-
utm_source: utm_source,
|
|
110
|
-
utm_term: utm_term,
|
|
111
|
-
utm_content: utm_content,
|
|
112
|
-
utm_medium: utm_medium
|
|
87
|
+
*permitted_utm_params
|
|
113
88
|
)
|
|
114
89
|
end
|
|
115
90
|
|
|
@@ -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
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.
|
|
4
|
+
version: 0.7.0.alpha
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jason Fleetwood-Boldt
|
|
@@ -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
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '0
|
|
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
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
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: https://blog.jasonfleetwoodboldt.com/universal-track-manager/
|
|
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
|
|
@@ -92,11 +108,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
92
108
|
version: '0'
|
|
93
109
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
94
110
|
requirements:
|
|
95
|
-
- - "
|
|
111
|
+
- - ">"
|
|
96
112
|
- !ruby/object:Gem::Version
|
|
97
|
-
version:
|
|
113
|
+
version: 1.3.1
|
|
98
114
|
requirements: []
|
|
99
|
-
rubygems_version: 3.
|
|
115
|
+
rubygems_version: 3.2.7
|
|
100
116
|
signing_key:
|
|
101
117
|
specification_version: 4
|
|
102
118
|
summary: A gem to track visitors to your website.
|