omnikiq 0.1.0

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: c4121b6ebf9f51bd0e9020663ac39cff9cfe1864
4
+ data.tar.gz: 3a989e94a75d2dc74a511500536569fc91fb4093
5
+ SHA512:
6
+ metadata.gz: c52418f0c0e1de3d7d46c4baa08838a7cc27a4551798cb28ac8abe7b4234d46bd8a9eed80f0a309cfcc3e108caccafc9947d22b00e47128e02132f8a6e11e920
7
+ data.tar.gz: eebf1bab2bcfd1716b2e12fdfdea88242e8ba33a0de175775f032bfc6a0e505a474a9042d9b2c4549d6f523dee8b9a3484a6e51f17c7e56acb9043e6ede375b4
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env puma
2
+
3
+ directory '/var/www/omnikiq/current'
4
+ rackup '/var/www/omnikiq/current/config.ru'
5
+ environment ENV['RACK_ENV']
6
+
7
+ pidfile '/var/www/omnikiq/shared/tmp/pids/puma.pid'
8
+ state_path '/var/www/omnikiq/shared/tmp/pids/puma.state'
9
+ stdout_redirect '/var/www/omnikiq/shared/log/puma_access.log', '/var/www/omnikiq/shared/log/puma_error.log', true
10
+
11
+ threads 0, 2
12
+
13
+ bind 'unix:/var/www/omnikiq/shared/tmp/sockets/puma.sock'
14
+ workers 2
15
+
16
+ preload_app!
17
+
18
+ on_restart do
19
+ puts 'Refreshing Gemfile'
20
+ ENV['BUNDLE_GEMFILE'] = '/var/www/omnikiq/current/Gemfile'
21
+ end
data/lib/omnikiq.rb ADDED
@@ -0,0 +1,42 @@
1
+ require 'sidekiq'
2
+ require 'mixpanel-ruby'
3
+
4
+ require 'omnikiq/configuration'
5
+ require 'omnikiq/trackers/base'
6
+
7
+ module OmniKiq
8
+ class << self
9
+ attr_writer :configuration
10
+ end
11
+
12
+ module Trackers
13
+ autoload :MixpanelAlias, 'omnikiq/trackers/mixpanel_alias'
14
+ autoload :MixpanelEvents, 'omnikiq/trackers/mixpanel_events'
15
+ autoload :MixpanelPeople, 'omnikiq/trackers/mixpanel_people'
16
+ end
17
+
18
+ def self.configuration
19
+ @configuration ||= begin
20
+ config = OmniKiq::Configuration.new
21
+ config
22
+ end
23
+ end
24
+
25
+ def self.configure
26
+ yield configuration if block_given?
27
+ configure_client
28
+ end
29
+
30
+ def self.configure_client
31
+ Sidekiq.configure_client do |config|
32
+ config.redis = {
33
+ url: OmniKiq.configuration.redis_url,
34
+ namespace: OmniKiq.configuration.redis_namespace,
35
+ size: 10
36
+ }
37
+ end
38
+ end
39
+
40
+ # default config for the client
41
+ configure_client
42
+ end
@@ -0,0 +1,59 @@
1
+ module OmniKiq
2
+ class Configuration
3
+ # Module that holds `attr_reader` declarations. It's in a separate
4
+ # module to allow us to override those methods and use `super`.
5
+ # @private
6
+ READERS = Module.new
7
+ include READERS
8
+
9
+ # @private
10
+ def self.define_reader(name)
11
+ READERS.class_eval do
12
+ remove_method name if method_defined?(name)
13
+ attr_reader name
14
+ end
15
+ end
16
+
17
+ # @private
18
+ def self.define_aliases(name, alias_name)
19
+ alias_method alias_name, name
20
+ alias_method "#{alias_name}=", "#{name}="
21
+ define_predicate_for alias_name
22
+ end
23
+
24
+ # @private
25
+ def self.define_predicate_for(*names)
26
+ names.each { |name| alias_method "#{name}?", name }
27
+ end
28
+ # @private
29
+ #
30
+ # Invoked by the `add_setting` instance method. Use that method on a
31
+ # `Configuration` instance rather than this class method.
32
+ def self.add_setting(name, opts = {})
33
+ attr_writer name
34
+ add_read_only_setting name
35
+ Array(opts[:alias_with]).each do |alias_name|
36
+ define_aliases(name, alias_name)
37
+ end
38
+ end
39
+ # @private
40
+ #
41
+ # As `add_setting` but only add the reader.
42
+ def self.add_read_only_setting(name, _opts = {})
43
+ define_reader name
44
+ define_predicate_for name
45
+ end
46
+
47
+ add_setting :mixpanel_api_key
48
+ add_setting :redis_url
49
+ add_setting :redis_namespace
50
+ add_setting :test_mode
51
+
52
+ def initialize
53
+ @mixpanel_api_key = ''
54
+ @redis_url = 'redis://localhost:6379'
55
+ @redis_namespace = ENV['RACK_ENV'] || 'default'
56
+ @test_mode = false
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,13 @@
1
+ module OmniKiq
2
+ module Trackers
3
+ class Base
4
+ include Sidekiq::Worker
5
+
6
+ attr_writer :mixpanel_tracker
7
+
8
+ def mixpanel_tracker
9
+ @mixpanel_tracker ||= Mixpanel::Tracker.new(OmniKiq.configuration.mixpanel_api_key)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ module OmniKiq
2
+ module Trackers
3
+ class MixpanelAlias < Base
4
+ def perform(email, distinct_id)
5
+ mixpanel_tracker.alias(email, distinct_id)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ require 'sidekiq'
2
+ require 'mixpanel-ruby'
3
+
4
+ module OmniKiq
5
+ module Trackers
6
+ class MixpanelEvents < Base
7
+ def perform(email, event_name, params, ip = 0)
8
+ mixpanel_tracker.track(email, event_name, params, ip)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require 'sidekiq'
2
+ require 'mixpanel-ruby'
3
+
4
+ module OmniKiq
5
+ module Trackers
6
+ class MixpanelPeople < Base
7
+ def perform(distinct_id, params, ip = 0)
8
+ mixpanel_tracker.people.set(distinct_id, params, ip)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe OmniKiq::Configuration do
4
+ subject { OmniKiq::Configuration.new }
5
+
6
+ describe 'sensible defaults' do
7
+ its(:mixpanel_api_key) { is_expected.to eq '' }
8
+ its(:redis_url) { is_expected.to eq 'redis://localhost:6379' }
9
+ its(:redis_namespace) { 'default' }
10
+ end
11
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe OmniKiq do
4
+ describe :configure do
5
+ subject { OmniKiq.configuration }
6
+
7
+ before do
8
+ OmniKiq.configure do |c|
9
+ c.mixpanel_api_key = 'mixpanel id'
10
+ end
11
+ end
12
+
13
+ its(:mixpanel_api_key) { is_expected.to eq 'mixpanel id' }
14
+
15
+ it 'sets to new config settings to the sidekiq client' do
16
+ expect(OmniKiq).to receive(:configure_client)
17
+
18
+ OmniKiq.configure do |c|
19
+ c.mixpanel_api_key = 'mixpanel id'
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,13 @@
1
+ require 'rubygems'
2
+
3
+ ENV['RACK_ENV'] ||= 'test'
4
+
5
+ require 'omnikiq'
6
+ require 'rspec/its'
7
+
8
+ # Require all of the RSpec Support libraries
9
+ Dir[File.expand_path(File.join('../support/**/*.rb'), __FILE__)].each { |f| require f }
10
+
11
+ require 'simplecov'
12
+ require 'simplecov-teamcity-summary'
13
+ SimpleCov.start 'teamcity'
@@ -0,0 +1,4 @@
1
+ RSpec.configure do |config|
2
+ config.mock_with :rspec
3
+ config.expect_with :rspec
4
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe OmniKiq::Trackers::MixpanelAlias do
4
+ describe :perform do
5
+ let(:mixpanel_alias) { OmniKiq::Trackers::MixpanelAlias.new }
6
+ let(:mixpanel_tracker) { double(Mixpanel::Tracker) }
7
+
8
+ subject { mixpanel_alias.perform('oh@yeah.com', '42') }
9
+
10
+ before do
11
+ mixpanel_alias.mixpanel_tracker = mixpanel_tracker
12
+ end
13
+
14
+ it 'will call alias with the correct params' do
15
+ expect(mixpanel_tracker).to receive(:alias).with('oh@yeah.com', '42')
16
+ subject
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe OmniKiq::Trackers::MixpanelEvents do
4
+ describe :perform do
5
+ let(:mixpanel_events) { OmniKiq::Trackers::MixpanelEvents.new }
6
+ let(:mixpanel_tracker) { double(Mixpanel::Tracker) }
7
+
8
+ subject { mixpanel_events.perform('devil@feel.i', 'find love', {}) }
9
+
10
+ before do
11
+ mixpanel_events.mixpanel_tracker = mixpanel_tracker
12
+ end
13
+
14
+ it 'will call track with correct params' do
15
+ expect(mixpanel_tracker).to receive(:track).with('devil@feel.i', 'find love', {}, 0)
16
+ subject
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe OmniKiq::Trackers::MixpanelPeople do
4
+ describe :perform do
5
+ let(:mixpanel_people) { OmniKiq::Trackers::MixpanelPeople.new }
6
+ let(:mixpanel_tracker) { double(Mixpanel::Tracker) }
7
+
8
+ subject { mixpanel_people.perform('42', {}) }
9
+
10
+ before do
11
+ mixpanel_people.mixpanel_tracker = mixpanel_tracker
12
+ end
13
+
14
+ it 'will call set with correct params' do
15
+ people = double(:people)
16
+ expect(mixpanel_tracker).to receive(:people).and_return(people)
17
+ expect(people).to receive(:set).with('42', {}, 0)
18
+ subject
19
+ end
20
+ end
21
+ end
metadata ADDED
@@ -0,0 +1,135 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: omnikiq
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Adrian Nistor
8
+ - Alexandru Calinoiu
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-12-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: mixpanel-ruby
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1'
28
+ - !ruby/object:Gem::Dependency
29
+ name: sidekiq
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '3'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '3'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rake
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '10'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '10'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rspec
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '3'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '3'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec-its
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '1'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '1'
84
+ description: A gem used to defer posts to mixpanel in a background worker.
85
+ email: nistor.adrian@agilefreaks.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - lib/capistrano/templates/puma.rb
91
+ - lib/omnikiq.rb
92
+ - lib/omnikiq/configuration.rb
93
+ - lib/omnikiq/trackers/base.rb
94
+ - lib/omnikiq/trackers/mixpanel_alias.rb
95
+ - lib/omnikiq/trackers/mixpanel_events.rb
96
+ - lib/omnikiq/trackers/mixpanel_people.rb
97
+ - spec/configuration_spec.rb
98
+ - spec/omnikiq_spec.rb
99
+ - spec/spec_helper.rb
100
+ - spec/support/rspec.rb
101
+ - spec/trackers/mixpanel_alias_spec.rb
102
+ - spec/trackers/mixpanel_events_spec.rb
103
+ - spec/trackers/mixpanel_people_spec.rb
104
+ homepage: https://github.com/Agilefreaks/OmniKiq
105
+ licenses:
106
+ - "© 2015 Omnipaste"
107
+ metadata: {}
108
+ post_install_message:
109
+ rdoc_options: []
110
+ require_paths:
111
+ - lib
112
+ required_ruby_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: 2.1.5
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ requirements: []
123
+ rubyforge_project:
124
+ rubygems_version: 2.4.5
125
+ signing_key:
126
+ specification_version: 4
127
+ summary: Integrate mixpanel and sidekiq in your ruby app
128
+ test_files:
129
+ - spec/configuration_spec.rb
130
+ - spec/omnikiq_spec.rb
131
+ - spec/spec_helper.rb
132
+ - spec/support/rspec.rb
133
+ - spec/trackers/mixpanel_alias_spec.rb
134
+ - spec/trackers/mixpanel_events_spec.rb
135
+ - spec/trackers/mixpanel_people_spec.rb