universal-track-manager 0.0.1 → 0.0.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: 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
-