universal-track-manager 0.0.1 → 0.0.2

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: 253af979db440458ba5a3f941ea9b84c9994533d41235537fc35d627dfa5f79c
4
- data.tar.gz: 37af0fad8dc0046c0299646f6c67881b535862c62a41da3df0f85acf9b80113c
3
+ metadata.gz: 54c410242cd15acf4c1d221e8baa171aaf3742004452b3571d947b4569f152a5
4
+ data.tar.gz: b27f33e20d3d020094213b51082ada41bd7af8594167b9c4682381e900036b12
5
5
  SHA512:
6
- metadata.gz: '0707199623e18dea70620ee4039b7600bb95a397a6f7267675a793179dde8d55f15ee93019e7a50656fbb340af6c791d2730719fc5fd08ecd9b40f55edc1bb9d'
7
- data.tar.gz: f4cb6880d671e27b82ae99d1f5c2c17baf05f62e0f1b22c5fd9540ceaf43a14e4ae894862bd91001c2303f4d4634968f8b58efcb9be3ad80b4010392e3094aa5
6
+ metadata.gz: 5dc2873c890a7910625bd2b3106c23ead3c46392b01df7e890823069f714fda4bf7e61f95472a5c3cdb6e9ebca0306d5d3ea966aff885316ff6a9c408c2da8b6
7
+ data.tar.gz: d73313e68338e89885a43347867c063809b3663aa89d8a344819f54190f61b1f5c7dac6a6eac4ea274a36d53511a75b5c91f1cca0c578fcd6a7870244a1e5fc8
@@ -0,0 +1,45 @@
1
+ class CreateUniversalTrackManagerTables < ActiveRecord::Migration<%= migration_version %>
2
+ def self.up
3
+ ActiveRecord::Base.transaction do
4
+
5
+ create_table :browsers do |t|
6
+ # this table gets automatically populated by inbound traffic
7
+ t.string :browser_name, size: 255
8
+ end
9
+
10
+ add_index :browsers, :browser_name
11
+
12
+ create_table :campaigns do |t|
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
19
+ t.timestamps
20
+ end
21
+
22
+ add_index :campaigns, [:utm_source, :utm_medium, :utm_campaign, :utm_content, :utm_term], name: "utm_all_combined"
23
+
24
+ create_table :visits do |t|
25
+ t.datetime :first_pageload
26
+ t.datetime :last_pageload
27
+ t.integer :original_visit_id
28
+ t.integer :campaign_id
29
+ t.integer :browser_id
30
+ t.string :ip_v4_address, length: 15
31
+
32
+ t.integer :viewport_width
33
+ t.integer :viewport_height
34
+ end
35
+ end
36
+ end
37
+
38
+ def self.down
39
+ ActiveRecord::Base.transaction do
40
+ drop_table :browsers
41
+ drop_table :visits
42
+ drop_table :campaigns
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,29 @@
1
+ require 'rails/generators/active_record'
2
+
3
+ module UniversalTrackManager
4
+ class InstallGenerator < Rails::Generators::Base
5
+ include Rails::Generators::Migration
6
+
7
+ desc "Creates a UTM initializer and copy locale files to your application."
8
+
9
+ source_root File.expand_path('../templates', __dir__)
10
+
11
+
12
+ class_option :orm, type: 'boolean'
13
+
14
+ def self.next_migration_number(path)
15
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
16
+ end
17
+
18
+ desc "Creates an initializer for Universal Track Manager and copy files to your application."
19
+ def copy_initializer
20
+ migration_template "create_universal_track_manager_tables.rb", "db/migrate/create_universal_track_manager_tables.rb"
21
+ end
22
+
23
+ def migration_version
24
+ "[#{ActiveRecord::Migration.current_version}]" if ActiveRecord::Migration.respond_to?(:current_version)
25
+ end
26
+ end
27
+ end
28
+
29
+
@@ -0,0 +1,7 @@
1
+ # module UniversalTrackManager
2
+ # class Railtie < Rails::Railtie
3
+ # rake_tasks do
4
+ # require 'universal_track_manager/install_generator.rb'
5
+ # end
6
+ # end
7
+ # end
@@ -0,0 +1,21 @@
1
+ $LOAD_PATH.unshift __dir__
2
+
3
+ def require_all(path)
4
+ pattern = File.join(__dir__, path, "*.rb")
5
+ Dir.glob(pattern).sort.each do |f|
6
+ require f
7
+ end
8
+ end
9
+
10
+
11
+ # require_all("generators/templates")
12
+
13
+ require_all("generators/universal_track_manager")
14
+ require_all("universal_track_manager/controllers/concerns")
15
+ require_all("universal_track_manager/models")
16
+
17
+ module UniversalTrackManager
18
+ require "railtie.rb" if defined?(Rails)
19
+ end
20
+
21
+
@@ -0,0 +1,7 @@
1
+ module UniversalTrackManager
2
+ def self.config(options)
3
+ # set the config options
4
+
5
+
6
+ end
7
+ end
@@ -0,0 +1,82 @@
1
+ module UniversalTrackManagerConcern
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ before_action :track_visitor
6
+ end
7
+
8
+ def permitted_utm_params
9
+ params.permit(:utm_campaign, :utm_source, :utm_term, :utm_content, :utm_medium)
10
+ end
11
+
12
+
13
+ def ip_address
14
+ request.ip
15
+ end
16
+
17
+ def user_agent
18
+ request.user_agent[0..255]
19
+ end
20
+
21
+
22
+ def utm_campaign
23
+ permitted_utm_params[:utm_campaign]
24
+ end
25
+
26
+ def utm_source
27
+ permitted_utm_params[:utm_source]
28
+ end
29
+
30
+ def utm_term
31
+ permitted_utm_params[:utm_term]
32
+ end
33
+
34
+ def utm_content
35
+ permitted_utm_params[:utm_content]
36
+ end
37
+
38
+ def utm_medium
39
+ permitted_utm_params[:utm_medium]
40
+ end
41
+
42
+ def track_visitor
43
+ if !session['visit_id']
44
+
45
+ visit = UniversalTrackManager::Visit.create!(ip_v4_address: ip_address,
46
+ browser: find_or_create_browser_by_current,
47
+ campaign: find_or_create_campaign_by_current)
48
+
49
+ session[:visit_id] = visit.id
50
+ else
51
+ # existing visit, maybe
52
+ existing_visit = UniversalTrackManager::Visit.find(session['visit_id'])
53
+
54
+ evict_visit!(existing_visit) if existing_visit.ip_v4_address != ip_address
55
+ evict_visit!(existing_visit) if existing_visit.browser.browser_name != user_agent
56
+ end
57
+ end
58
+
59
+ def find_or_create_browser_by_current
60
+ browser = UniversalTrackManager::Browser.find_or_create_by(browser_name: user_agent)
61
+ end
62
+
63
+ def find_or_create_campaign_by_current
64
+ campaign = UniversalTrackManager::Campaign.find_or_create_by(
65
+ utm_campaign: utm_campaign,
66
+ utm_source: utm_source,
67
+ utm_term: utm_term,
68
+ utm_content: utm_content,
69
+ utm_medium: utm_medium
70
+ )
71
+ end
72
+
73
+ def evict_visit!(old_visit)
74
+ visit = UniversalTrackManager::Visit.create!(
75
+ original_visit_id: old_visit.original_visit_id.nil? ? old_visit.id : old_visit.original_visit_id,
76
+ ip_v4_address: ip_address,
77
+ browser: find_or_create_browser_by_current,
78
+ campaign: find_or_create_campaign_by_current)
79
+
80
+ session[:visit_id] = visit.id
81
+ end
82
+ end
@@ -0,0 +1,4 @@
1
+ class UniversalTrackManager::Browser < ActiveRecord::Base
2
+ self.table_name = "browsers"
3
+
4
+ end
@@ -0,0 +1,4 @@
1
+ class UniversalTrackManager::Campaign < ActiveRecord::Base
2
+ self.table_name = "campaigns"
3
+
4
+ end
@@ -0,0 +1,6 @@
1
+ class UniversalTrackManager::Visit < ActiveRecord::Base
2
+ self.table_name = "visits"
3
+
4
+ belongs_to :campaign, class_name: "UniversalTrackManager::Campaign"
5
+ belongs_to :browser, class_name: "UniversalTrackManager::Browser"
6
+ end
@@ -0,0 +1,3 @@
1
+ module UniversalTrackManager
2
+ VERSION = "0.0.2"
3
+ end
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.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Fleetwood-Boldt
@@ -9,20 +9,77 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2019-11-19 00:00:00.000000000 Z
12
- dependencies: []
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: simplecov
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.17'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.17'
41
+ - !ruby/object:Gem::Dependency
42
+ name: appraisal
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.2'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.2'
13
55
  description: See https://github.com/jasonfb/universal_track_manager
14
56
  email: jason.fb@datatravels.com
15
57
  executables: []
16
58
  extensions: []
17
59
  extra_rdoc_files: []
18
60
  files:
19
- - lib/universal_track_manager.rb
61
+ - lib/generators/templates/create_universal_track_manager_tables.rb
62
+ - lib/generators/universal_track_manager/install_generator.rb
63
+ - lib/railtie.rb
64
+ - lib/universal-track-manager.rb
65
+ - lib/universal_track_manager/base.rb
66
+ - lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb
67
+ - lib/universal_track_manager/models/browser.rb
68
+ - lib/universal_track_manager/models/campaign.rb
69
+ - lib/universal_track_manager/models/visit.rb
70
+ - lib/version.rb
20
71
  homepage: http://rubygems.org/gems/unverisal-track-manager
21
72
  licenses:
22
73
  - MIT
23
74
  metadata:
24
75
  source_code_uri: https://github.com/jasonfb/universal_track_manager
25
- post_install_message:
76
+ post_install_message: |
77
+ ---------------------------------------------
78
+ Welcome to Universal Track Manager
79
+ to set up, please run
80
+
81
+ rails generate universal_track_manager:install
82
+ ---------------------------------------------
26
83
  rdoc_options: []
27
84
  require_paths:
28
85
  - lib
@@ -37,8 +94,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
37
94
  - !ruby/object:Gem::Version
38
95
  version: '0'
39
96
  requirements: []
40
- rubygems_version: 3.0.3
97
+ rubyforge_project:
98
+ rubygems_version: 2.7.9
41
99
  signing_key:
42
100
  specification_version: 4
43
- summary: A gem to track your visitors.
101
+ summary: A gem to track visitors to your website.
44
102
  test_files: []
@@ -1,13 +0,0 @@
1
-
2
-
3
- ["generators/**/*", "universal-track-manager/lib/**/*.rb"].each do |x|
4
- Dir.glob(File.join(File.dirname(__FILE__), x)) do |c|
5
- require(c)
6
- end
7
- end
8
-
9
- module UniversalTrackManager
10
- require "railtie.rb" if defined?(Rails)
11
- end
12
-
13
-