universal-track-manager 0.4 → 0.6.2

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: d48794e98ac66bd550a5f0bc89582f60b5bb82c439c45f6e3d0a8390826ccf2b
4
- data.tar.gz: d7d09b5ac92ece9105755d45bb96a122ce3c1c7e71b3f784bc8ee63fbe25d1fe
3
+ metadata.gz: 3906b1056d94f2c92bdf86c2e3899d463a77a94a76a3fbd45e0afd751f9e7945
4
+ data.tar.gz: 36f420592997d79741c34e063ac4fe57899745cf38c8dce0316e8e334e6a7142
5
5
  SHA512:
6
- metadata.gz: 4605e21f5e796428900637174281783678d29fa178fb6d328bb66f052669de39a37deffad718fdcbc3331f04656e9d09e26384c7ba4d86feedfba693afc15e51
7
- data.tar.gz: 12d8bbca72e630abf4753fa8fe5f5bf736db2b0cf2fad35187a4b53a2a272fc5d7aaae06db2f27d840ded2a375824b46aa1abc9b4d10d5849b38a713e28476bf
6
+ metadata.gz: 106a32e556cb93a3654d4b0efe240fb265405065e00248383eb034101ed2699077fb537fe2404db0d4087235ffbe91be2ba0b5361aad3b95b811d07258af5d7f
7
+ data.tar.gz: 8d926fb725317451e5a94a76a2509196c5abfcfd280ce1dc20cd34a645bbcc82887fe08e27f5e08549a2b3fb5d5b1bc9aa30e3ab492e559265a173b9316315a9
@@ -0,0 +1,9 @@
1
+ UniversalTrackManager.configure do |config|
2
+ config.track_ips = true
3
+ config.track_utms = true
4
+ config.track_user_agent = true
5
+
6
+
7
+ # config.track_referrer = false
8
+
9
+ end
@@ -8,18 +8,22 @@ module UniversalTrackManager
8
8
 
9
9
  source_root File.expand_path('../templates', __dir__)
10
10
 
11
-
12
11
  class_option :orm, type: 'boolean'
13
12
 
13
+
14
14
  def self.next_migration_number(path)
15
15
  Time.now.utc.strftime("%Y%m%d%H%M%S")
16
16
  end
17
17
 
18
18
  desc "Creates an initializer for Universal Track Manager and copy files to your application."
19
- def copy_initializer
19
+ def create_universal_track_manager_migration
20
20
  migration_template "create_universal_track_manager_tables.rb", "db/migrate/create_universal_track_manager_tables.rb"
21
21
  end
22
22
 
23
+ def create_universal_track_manager_initializer
24
+ copy_file 'universal_track_manager.rb', 'config/initializers/universal_track_manager.rb'
25
+ end
26
+
23
27
  def migration_version
24
28
  "[#{ActiveRecord::Migration.current_version}]" if ActiveRecord::Migration.respond_to?(:current_version)
25
29
  end
@@ -1,3 +1,8 @@
1
+ # note this file must be named identically to the gem's name (using hyphen)
2
+ # for it to be picked up in the Gem build
3
+ #
4
+ # THIS FILE IS NOT in the specs and is for the gem builder
5
+
1
6
  $LOAD_PATH.unshift __dir__
2
7
 
3
8
  def require_all(path)
@@ -7,15 +12,9 @@ def require_all(path)
7
12
  end
8
13
  end
9
14
 
10
-
11
15
  # require_all("generators/templates")
12
-
13
16
  require_all("generators/universal_track_manager")
14
17
  require_all("universal_track_manager/controllers/concerns")
15
18
  require_all("universal_track_manager/models")
16
19
 
17
- module UniversalTrackManager
18
- require "railtie.rb" if defined?(Rails)
19
- end
20
-
21
-
20
+ require("universal_track_manager")
@@ -0,0 +1,34 @@
1
+ # primary module for UTM. note this file is included in the specs
2
+
3
+ module UniversalTrackManager
4
+ require "railtie.rb" if defined?(Rails)
5
+
6
+ class Settings
7
+ attr_accessor :track_ips, :track_utms, :track_user_agent, :track_http_referrer
8
+ end
9
+
10
+ def self.configure(&block)
11
+ @_settings = Settings.new
12
+
13
+ block.call(@_settings)
14
+ end
15
+
16
+
17
+ def self.track_ips?
18
+ @_settings.track_ips
19
+ end
20
+
21
+ def self.track_utms?
22
+ @_settings.track_utms
23
+ end
24
+
25
+ def self.track_user_agent?
26
+ @_settings.track_user_agent
27
+ end
28
+
29
+ def self.track_http_referrer?
30
+ @_settings.track_http_referrer
31
+ end
32
+ end
33
+
34
+
@@ -1,6 +1,5 @@
1
1
  module UniversalTrackManagerConcern
2
2
  extend ActiveSupport::Concern
3
-
4
3
  attr_accessor :visit_evicted
5
4
 
6
5
  included do
@@ -13,31 +12,38 @@ module UniversalTrackManagerConcern
13
12
 
14
13
 
15
14
  def ip_address
15
+ return nil if ! UniversalTrackManager.track_ips?
16
16
  request.ip
17
17
  end
18
18
 
19
19
  def user_agent
20
+ return nil if ! UniversalTrackManager.track_user_agent?
20
21
  request.user_agent[0..255]
21
22
  end
22
23
 
23
24
 
24
25
  def utm_campaign
26
+ return nil if ! UniversalTrackManager.track_utms?
25
27
  permitted_utm_params[:utm_campaign]
26
28
  end
27
29
 
28
30
  def utm_source
31
+ return nil if ! UniversalTrackManager.track_utms?
29
32
  permitted_utm_params[:utm_source]
30
33
  end
31
34
 
32
35
  def utm_term
36
+ return nil if ! UniversalTrackManager.track_utms?
33
37
  permitted_utm_params[:utm_term]
34
38
  end
35
39
 
36
40
  def utm_content
41
+ return nil if ! UniversalTrackManager.track_utms?
37
42
  permitted_utm_params[:utm_content]
38
43
  end
39
44
 
40
45
  def utm_medium
46
+ return nil if ! UniversalTrackManager.track_utms?
41
47
  permitted_utm_params[:utm_medium]
42
48
  end
43
49
 
@@ -45,46 +51,59 @@ module UniversalTrackManagerConcern
45
51
  @now ||= Time.now
46
52
  end
47
53
 
54
+ def new_visitor
55
+ params = {
56
+ first_pageload: now,
57
+ last_pageload: now,
58
+ ip_v4_address: ip_address,
59
+ campaign: find_or_create_campaign_by_current
60
+ }
61
+ params[:browser] = find_or_create_browser_by_current if request.user_agent
62
+ visit = UniversalTrackManager::Visit.create!(params)
63
+ session[:visit_id] = visit.id
64
+ end
65
+
48
66
  def track_visitor
49
67
  if !session['visit_id']
50
-
51
- visit = UniversalTrackManager::Visit.create!(
52
- first_pageload: now,
53
- last_pageload: now,
54
- ip_v4_address: ip_address,
55
- browser: find_or_create_browser_by_current,
56
- campaign: find_or_create_campaign_by_current)
57
- session[:visit_id] = visit.id
68
+ new_visitor
58
69
  else
59
- # existing visit, maybe
60
- existing_visit = UniversalTrackManager::Visit.find(session['visit_id'])
61
-
62
- evict_visit!(existing_visit) if any_utm_params? && !existing_visit.matches_all_utms?({utm_campaign: utm_campaign,
63
- utm_source: utm_source,
64
- utm_term: utm_term,
65
- utm_content: utm_content,
66
- utm_medium: utm_medium})
67
-
68
- evict_visit!(existing_visit) if existing_visit.ip_v4_address != ip_address
69
- evict_visit!(existing_visit) if existing_visit.browser.name != user_agent
70
-
71
- existing_visit.update_columns(:last_pageload => Time.now) if !@visit_evicted
72
-
70
+ # existing visit
71
+ begin
72
+ existing_visit = UniversalTrackManager::Visit.find(session['visit_id'])
73
+
74
+ evict_visit!(existing_visit) if any_utm_params? && !existing_visit.matches_all_utms?({utm_campaign: utm_campaign,
75
+ utm_source: utm_source,
76
+ utm_term: utm_term,
77
+ utm_content: utm_content,
78
+ utm_medium: utm_medium})
79
+
80
+ evict_visit!(existing_visit) if existing_visit.ip_v4_address != ip_address
81
+ evict_visit!(existing_visit) if existing_visit.browser && existing_visit.browser.name != user_agent
82
+
83
+ existing_visit.update_columns(:last_pageload => Time.now) if !@visit_evicted
84
+ rescue ActiveRecord::RecordNotFound
85
+ # this happens if the session table is cleared or if the record in the session
86
+ # table points to a visit that has been cleared
87
+ new_visitor
88
+ end
73
89
  end
74
90
  end
75
91
 
76
92
 
77
93
  def any_utm_params?
94
+ return false if ! UniversalTrackManager.track_utms?
78
95
  [:utm_campaign, :utm_source, :utm_medium, :utm_term, :utm_content].any? do |key|
79
96
  params[key].present?
80
97
  end
81
98
  end
82
99
 
83
100
  def find_or_create_browser_by_current
101
+ return nil if ! UniversalTrackManager.track_user_agent?
84
102
  browser = UniversalTrackManager::Browser.find_or_create_by(name: user_agent)
85
103
  end
86
104
 
87
105
  def find_or_create_campaign_by_current
106
+ return nil if ! UniversalTrackManager.track_utms?
88
107
  campaign = UniversalTrackManager::Campaign.find_or_create_by(
89
108
  utm_campaign: utm_campaign,
90
109
  utm_source: utm_source,
@@ -96,14 +115,18 @@ module UniversalTrackManagerConcern
96
115
 
97
116
  def evict_visit!(old_visit)
98
117
  @visit_evicted = true
99
- visit = UniversalTrackManager::Visit.create!(
100
- first_pageload: now,
101
- last_pageload: now,
102
- original_visit_id: old_visit.original_visit_id.nil? ? old_visit.id : old_visit.original_visit_id,
103
- ip_v4_address: ip_address,
104
- browser: find_or_create_browser_by_current,
105
- campaign: find_or_create_campaign_by_current)
118
+ params = {
119
+ first_pageload: now,
120
+ last_pageload: now,
121
+ original_visit_id: old_visit.original_visit_id.nil? ? old_visit.id : old_visit.original_visit_id,
122
+ ip_v4_address: ip_address,
123
+ campaign: find_or_create_campaign_by_current
124
+ }
125
+
126
+ # fail silently if there is no user agent
127
+ params[:browser] = find_or_create_browser_by_current if request.user_agent
128
+ visit = UniversalTrackManager::Visit.create!(params)
106
129
 
107
130
  session[:visit_id] = visit.id
108
131
  end
109
- end
132
+ end
@@ -1,3 +1,3 @@
1
1
  module UniversalTrackManager
2
- VERSION = "0.4"
3
- end
2
+ VERSION = "0.6.2"
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'
4
+ version: 0.6.2
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: 2019-12-23 00:00:00.000000000 Z
11
+ date: 2020-01-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -60,10 +60,11 @@ extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
62
  - lib/generators/templates/create_universal_track_manager_tables.rb
63
+ - lib/generators/templates/universal_track_manager.rb
63
64
  - lib/generators/universal_track_manager/install_generator.rb
64
65
  - lib/railtie.rb
65
66
  - lib/universal-track-manager.rb
66
- - lib/universal_track_manager/base.rb
67
+ - lib/universal_track_manager.rb
67
68
  - lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb
68
69
  - lib/universal_track_manager/models/browser.rb
69
70
  - lib/universal_track_manager/models/campaign.rb
@@ -95,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
96
  - !ruby/object:Gem::Version
96
97
  version: '0'
97
98
  requirements: []
98
- rubygems_version: 3.0.3
99
+ rubygems_version: 3.1.4
99
100
  signing_key:
100
101
  specification_version: 4
101
102
  summary: A gem to track visitors to your website.
@@ -1,7 +0,0 @@
1
- module UniversalTrackManager
2
- def self.config(options)
3
- # set the config options
4
-
5
-
6
- end
7
- end