user_trackers 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 45254bd500709a6f99312f7c71f347d032fae676
4
+ data.tar.gz: daf9b64ed846830ee912a80ab06ef2370ec8de56
5
+ SHA512:
6
+ metadata.gz: f7ac6a9f98d9b621d100a0513a6a2455557ba1959ca87ebc36a82435e3de93a1be8c85d320461bcce8d89c2debda286400fc18efc9146a9b1c938cb0ede3d191
7
+ data.tar.gz: 47809b292fe84f0d4e8c632ed7e5f17c1f0eff2fc7c1ee6025e18ffc9c9a1e461e33716209479283a25bb00acebf4755e67db900e0d025b3d5e05d0bc4754360
data/README.md ADDED
@@ -0,0 +1,43 @@
1
+ # UserTrackers
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/user_trackers`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'user_trackers'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install user_trackers
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/user_trackers. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
36
+
37
+ ## License
38
+
39
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
40
+
41
+ ## Code of Conduct
42
+
43
+ Everyone interacting in the UserTrackers project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/user_trackers/blob/master/CODE_OF_CONDUCT.md).
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "user_trackers"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,2 @@
1
+
2
+ #coletera mix
@@ -0,0 +1,19 @@
1
+ module UserTrackers
2
+ class InstallGenerator < Rails::Generators::Base
3
+ source_root File.expand_path('../templates', __dir__)
4
+
5
+ def create_configuration_files
6
+ copy_file "user_trackers.rb", "config/initializers/user_trackers.rb"
7
+ copy_file "user_trackers.yml", "config/user_trackers.yml"
8
+ end
9
+
10
+ def generate_model
11
+ invoke "active_record:model", ['UserEvent', [
12
+ "user_id:integer:index",
13
+ "event_name:string:index",
14
+ "event_details:json",
15
+ "anonymous_id:integer"
16
+ ]], migration: true
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,54 @@
1
+ require "user_trackers/configuration"
2
+ require "user_trackers/mixpanel_tracker"
3
+ require "user_trackers/intercom_tracker"
4
+ require "user_trackers/slack_tracker"
5
+
6
+ require 'mixpanel-ruby'
7
+ require 'intercom'
8
+ require 'slack-ruby-client'
9
+
10
+ module UserTrackers
11
+
12
+ class << self
13
+ attr_accessor :options
14
+ end
15
+
16
+ def self.options
17
+ @options ||= Configuration.get_yml_options
18
+ end
19
+
20
+ def self.configure_mixpanel
21
+ yield(MixpanelTracker)
22
+ end
23
+
24
+ def self.configure_slack
25
+ yield(SlackTracker)
26
+ end
27
+
28
+ def self.configure_intercom
29
+ yield(IntercomTracker)
30
+ end
31
+
32
+ def self.ignore_event?(event_name, tracker = nil)
33
+ ignore_events = tracker ? options[Rails.env.to_sym][tracker][:ignore_events] : options[Rails.env.to_sym][:ignore_events]
34
+ ignore_events.include?(event_name) || ignore_events.include?('*')
35
+ end
36
+
37
+ def self.track(user_id, event_name, event_attributes = {}, anonymous_id = nil)
38
+ if(!ignore_event? (event_name))
39
+ if(!ignore_event?(event_name, :db))
40
+ UserEvent.create(user_id: user_id, event_name: event_name, event_details: event_attributes, anonymous_id: anonymous_id)
41
+ end
42
+ if(!ignore_event?(event_name, :mixpanel))
43
+ MixpanelTracker.track(user_id, event_name, event_attributes, anonymous_id)
44
+ end
45
+ if(!ignore_event?(event_name, :intercom))
46
+ IntercomTracker.track(user_id, event_name, event_attributes, anonymous_id)
47
+ end
48
+ if(!ignore_event?(event_name, :slack))
49
+ SlackTracker.track(user_id, event_name, event_attributes, anonymous_id)
50
+ end
51
+ end
52
+ end
53
+
54
+ end
@@ -0,0 +1,35 @@
1
+ module Configuration
2
+
3
+ def self.get_yml_options
4
+ config_dir = File.join(".", "config")
5
+ config_file_path = nil
6
+ %w[user_trackers.yml user_trackers.yml.erb].each do |config_file|
7
+ path = File.join(config_dir, config_file)
8
+ config_file_path ||= path if File.exist?(path)
9
+ end
10
+
11
+ opts = parse_config(config_file_path) if config_file_path
12
+ opts
13
+ end
14
+
15
+ def self.parse_config(path)
16
+ opts = YAML.load(ERB.new(File.read(path)).result) || {}
17
+
18
+ if opts.respond_to? :deep_symbolize_keys!
19
+ opts.deep_symbolize_keys!
20
+ else
21
+ symbolize_keys_deep!(opts)
22
+ end
23
+
24
+ opts
25
+ end
26
+
27
+ def self.symbolize_keys_deep!(hash)
28
+ hash.keys.each do |k|
29
+ symkey = k.respond_to?(:to_sym) ? k.to_sym : k
30
+ hash[symkey] = hash.delete k
31
+ symbolize_keys_deep! hash[symkey] if hash[symkey].is_a? Hash
32
+ end
33
+ end
34
+
35
+ end
@@ -0,0 +1,17 @@
1
+ module UserTrackers
2
+ module IntercomTracker
3
+ class << self
4
+ attr_accessor :client
5
+ end
6
+
7
+ def self.client
8
+ opts = UserTrackers.options
9
+ @client ||= Intercom::Client.new(token: opts[Rails.env.to_sym][:intercom][:token])
10
+ end
11
+
12
+ def self.track(user_id, event_name, event_attributes = {}, anonymous_id = nil)
13
+ client.users.create(user_attributes(user_id, event_name, event_attributes, anonymous_id))
14
+ client.events.create(event_attributes(user_id, event_name, event_attributes, anonymous_id))
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ module UserTrackers
2
+ module MixpanelTracker
3
+ class << self
4
+ attr_accessor :client
5
+ end
6
+
7
+ def self.client
8
+ opts = UserTrackers.options
9
+ @client ||= Mixpanel::Tracker.new(opts[Rails.env.to_sym][:mixpanel][:token])
10
+ end
11
+
12
+ def self.track(user_id, event_name, event_attributes = {}, anonymous_id = nil)
13
+ client.people.set(user_id, user_attributes(user_id, event_name, event_attributes, anonymous_id))
14
+ client.track(
15
+ user_id || anonymous_id,
16
+ event_name || "",
17
+ event_attributes(user_id, event_name, event_attributes, anonymous_id) || {}
18
+ )
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,27 @@
1
+ module UserTrackers
2
+ module SlackTracker
3
+ class << self
4
+ attr_accessor :client
5
+ attr_accessor :activity_channel
6
+ end
7
+
8
+ def self.client
9
+ opts = UserTrackers.options
10
+ if(!@client)
11
+ Slack.configure do |config|
12
+ config.token = opts[Rails.env.to_sym][:slack][:token]
13
+ end
14
+ @activity_channel = opts[Rails.env.to_sym][:slack][:activity_channel]
15
+ @client = Slack::Web::Client.new
16
+ end
17
+ @client
18
+ end
19
+
20
+ def self.track(user_id, event_name, event_attributes = {}, anonymous_id = nil)
21
+ client.chat_postMessage(
22
+ channel: @activity_channel,
23
+ text: message_for_event(user_id, event_name, event_attributes, anonymous_id)
24
+ )
25
+ end
26
+ end
27
+ end
metadata ADDED
@@ -0,0 +1,137 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: user_trackers
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Camilo Barraza
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2010-04-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sidekiq
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mixpanel-ruby
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: intercom
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: slack-ruby-client
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: minitest
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '5.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '5.0'
97
+ description: user trackers gem
98
+ email: cbarraza11@gmail.com
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files: []
102
+ files:
103
+ - README.md
104
+ - bin/console
105
+ - bin/setup
106
+ - lib/generators/templates/user_trackers.rb
107
+ - lib/generators/user_trackers/install_generator.rb
108
+ - lib/user_trackers.rb
109
+ - lib/user_trackers/configuration.rb
110
+ - lib/user_trackers/intercom_tracker.rb
111
+ - lib/user_trackers/mixpanel_tracker.rb
112
+ - lib/user_trackers/slack_tracker.rb
113
+ homepage: https://rubygems.org/gems/user_trackers
114
+ licenses:
115
+ - MIT
116
+ metadata: {}
117
+ post_install_message:
118
+ rdoc_options: []
119
+ require_paths:
120
+ - lib
121
+ required_ruby_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ requirements: []
132
+ rubyforge_project:
133
+ rubygems_version: 2.6.11
134
+ signing_key:
135
+ specification_version: 4
136
+ summary: user trackers gem
137
+ test_files: []