universal-track-manager 0.5.beta2 → 0.7.0.alpha

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 278087c5ade44d18ca54a5bcd8e4dd3225d7111ac85678b24e14ed4d06da269f
4
- data.tar.gz: 36899a1a79d98f5816dd44c9596dd330cbea6244d7abe60ad8115f42c88a8e3b
3
+ metadata.gz: 3d480176796bb905c66f3e4eb2904402232548966be5183768033636b9e50d7b
4
+ data.tar.gz: 0a7762ea705d448444a4113e254c49ba9e77588a4880197c5244e46388266637
5
5
  SHA512:
6
- metadata.gz: b919a455ff2d743b16abb0c7abc738232e8eefe4df5d3854dab8addc9b1920620ee0ddd170f687c4cb550c1df27871252a294d01076ee48df7b9dc62d6fc5488
7
- data.tar.gz: 84e78d05622bd14a262cc8d6fb043924f011ef3c7a46b84ff4d234019dcbf023d6c9fffceb9ba9d190cca8243405399df5c1d0d26ae05cd1e06d2a1a333aa732
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
- 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
14
+ #GENERATOR INSERTS CAMPAIGN COLUMNS HERE
19
15
  t.timestamps
20
16
  end
21
17
 
22
- add_index :campaigns, [:utm_source, :utm_medium, :utm_campaign, :utm_content, :utm_term], name: "utm_all_combined"
18
+ #GENERATOR INSERTS CAMPAIGN INDEX HERE
23
19
 
24
20
  create_table :visits do |t|
25
21
  t.datetime :first_pageload
@@ -2,8 +2,8 @@ UniversalTrackManager.configure do |config|
2
2
  config.track_ips = true
3
3
  config.track_utms = true
4
4
  config.track_user_agent = true
5
-
5
+ #GENERATOR INSERTS CAMPAIGN COLUMN CONFIG HERE
6
6
 
7
7
  # config.track_referrer = false
8
8
 
9
- end
9
+ end
@@ -1,4 +1,7 @@
1
- require 'rails/generators/active_record'
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
- migration_template "create_universal_track_manager_tables.rb", "db/migrate/create_universal_track_manager_tables.rb"
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
- copy_file 'universal_track_manager.rb', 'config/initializers/universal_track_manager.rb'
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(:utm_campaign, :utm_source, :utm_term, :utm_content, :utm_medium)
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
- visit = UniversalTrackManager::Visit.create!(
38
+ params = {
57
39
  first_pageload: now,
58
40
  last_pageload: now,
59
41
  ip_v4_address: ip_address,
60
- browser: find_or_create_browser_by_current,
61
- campaign: find_or_create_campaign_by_current)
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?({utm_campaign: utm_campaign,
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
- [:utm_campaign, :utm_source, :utm_medium, :utm_term, :utm_content].any? do |key|
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
- utm_campaign: utm_campaign,
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
- visit = UniversalTrackManager::Visit.create!(
118
- first_pageload: now,
119
- last_pageload: now,
120
- original_visit_id: old_visit.original_visit_id.nil? ? old_visit.id : old_visit.original_visit_id,
121
- ip_v4_address: ip_address,
122
- browser: find_or_create_browser_by_current,
123
- campaign: find_or_create_campaign_by_current)
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 ! [:utm_campaign, :utm_source, :utm_medium, :utm_term, :utm_content].any? do |key|
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
- return campaign.utm_campaign == params[:utm_campaign] &&
19
- campaign.utm_source == params[:utm_source] &&
20
- campaign.utm_medium == params[:utm_medium] &&
21
- campaign.utm_term == params[:utm_term] &&
22
- campaign.utm_content == params[:utm_content]
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
@@ -1,3 +1,3 @@
1
1
  module UniversalTrackManager
2
- VERSION = "0.5.beta2"
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.5.beta2
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-01-01 00:00:00.000000000 Z
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.17'
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.17'
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: http://rubygems.org/gems/unverisal-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
@@ -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.0.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: []