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 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: []