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 +4 -4
- data/lib/generators/templates/create_universal_track_manager_tables.rb +2 -6
- data/lib/generators/templates/universal_track_manager.rb +2 -2
- data/lib/generators/universal_track_manager/install_generator.rb +22 -3
- data/lib/universal_track_manager.rb +10 -2
- data/lib/universal_track_manager/controllers/concerns/universal_track_manager_concern.rb +30 -50
- data/lib/universal_track_manager/models/visit.rb +7 -6
- data/lib/version.rb +2 -2
- metadata +26 -10
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 3d480176796bb905c66f3e4eb2904402232548966be5183768033636b9e50d7b
         | 
| 4 | 
            +
              data.tar.gz: 0a7762ea705d448444a4113e254c49ba9e77588a4880197c5244e46388266637
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 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 | 
            -
             | 
| 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 | 
            -
                   | 
| 18 | 
            +
                  #GENERATOR INSERTS CAMPAIGN INDEX HERE
         | 
| 23 19 |  | 
| 24 20 | 
             
                  create_table :visits do |t|
         | 
| 25 21 | 
             
                    t.datetime :first_pageload
         | 
| @@ -1,4 +1,7 @@ | |
| 1 | 
            -
             | 
| 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 | 
            -
                   | 
| 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 | 
            -
                   | 
| 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( | 
| 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 | 
            -
                 | 
| 38 | 
            +
                params = {
         | 
| 57 39 | 
             
                  first_pageload: now,
         | 
| 58 40 | 
             
                  last_pageload: now,
         | 
| 59 41 | 
             
                  ip_v4_address: ip_address,
         | 
| 60 | 
            -
                   | 
| 61 | 
            -
             | 
| 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?( | 
| 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 | 
            -
                 | 
| 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 | 
            -
                   | 
| 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 | 
            -
                 | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 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 !  | 
| 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 | 
            -
                 | 
| 19 | 
            -
                  campaign | 
| 20 | 
            -
             | 
| 21 | 
            -
                   | 
| 22 | 
            -
             | 
| 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
         | 
    
        data/lib/version.rb
    CHANGED
    
    | @@ -1,3 +1,3 @@ | |
| 1 1 | 
             
            module UniversalTrackManager
         | 
| 2 | 
            -
              VERSION = "0. | 
| 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. | 
| 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- | 
| 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 | 
| 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 | 
| 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:  | 
| 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. | 
| 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: []
         |