hawkei 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -0
  3. data/.rspec +1 -0
  4. data/.rubocop.yml +48 -0
  5. data/.ruby-version +1 -0
  6. data/.tool-versions +1 -0
  7. data/.travis.yml +11 -0
  8. data/Gemfile +12 -0
  9. data/LICENCE +21 -0
  10. data/Makefile +9 -0
  11. data/README.md +17 -0
  12. data/Rakefile +4 -0
  13. data/hawkei.gemspec +28 -0
  14. data/lib/hawkei/api_operation/delete.rb +38 -0
  15. data/lib/hawkei/api_operation/save.rb +57 -0
  16. data/lib/hawkei/api_resource.rb +130 -0
  17. data/lib/hawkei/batch.rb +18 -0
  18. data/lib/hawkei/config.rb +123 -0
  19. data/lib/hawkei/errors.rb +41 -0
  20. data/lib/hawkei/formated_logger.rb +45 -0
  21. data/lib/hawkei/hawkei_object.rb +179 -0
  22. data/lib/hawkei/library_name.rb +3 -0
  23. data/lib/hawkei/message.rb +79 -0
  24. data/lib/hawkei/plugins/rack/middleware.rb +139 -0
  25. data/lib/hawkei/plugins/rails/data.rb +19 -0
  26. data/lib/hawkei/plugins/rails/middleware_data.rb +28 -0
  27. data/lib/hawkei/plugins/rails/railtie.rb +23 -0
  28. data/lib/hawkei/plugins/sidekiq/client_middleware.rb +19 -0
  29. data/lib/hawkei/plugins/sidekiq/load.rb +14 -0
  30. data/lib/hawkei/plugins/sidekiq/server_middleware.rb +48 -0
  31. data/lib/hawkei/plugins.rb +17 -0
  32. data/lib/hawkei/processor/async.rb +50 -0
  33. data/lib/hawkei/processor/batch.rb +84 -0
  34. data/lib/hawkei/processor/worker.rb +113 -0
  35. data/lib/hawkei/request.rb +134 -0
  36. data/lib/hawkei/store.rb +49 -0
  37. data/lib/hawkei/util.rb +180 -0
  38. data/lib/hawkei/version.rb +3 -0
  39. data/lib/hawkei/watcher.rb +15 -0
  40. data/lib/hawkei.rb +170 -0
  41. data/spec/lib/hawkei/api_resource_spec.rb +109 -0
  42. data/spec/lib/hawkei/batch_spec.rb +14 -0
  43. data/spec/lib/hawkei/config_spec.rb +36 -0
  44. data/spec/lib/hawkei/formated_logger_spec.rb +99 -0
  45. data/spec/lib/hawkei/hawkei_object_spec.rb +123 -0
  46. data/spec/lib/hawkei/message_spec.rb +178 -0
  47. data/spec/lib/hawkei/plugins/rack/middleware_spec.rb +88 -0
  48. data/spec/lib/hawkei/plugins/rails/data_spec.rb +22 -0
  49. data/spec/lib/hawkei/plugins/rails/middleware_data_spec.rb +46 -0
  50. data/spec/lib/hawkei/plugins/sidekiq/client_middleware_spec.rb +15 -0
  51. data/spec/lib/hawkei/plugins/sidekiq/server_middleware_spec.rb +58 -0
  52. data/spec/lib/hawkei/processor/async_spec.rb +36 -0
  53. data/spec/lib/hawkei/processor/batch_spec.rb +51 -0
  54. data/spec/lib/hawkei/processor/worker_spec.rb +100 -0
  55. data/spec/lib/hawkei/store_spec.rb +82 -0
  56. data/spec/lib/hawkei/util_spec.rb +132 -0
  57. data/spec/lib/hawkei/watcher_spec.rb +25 -0
  58. data/spec/lib/hawkei_spec.rb +175 -0
  59. data/spec/spec_helper.rb +33 -0
  60. data/spec/support/rack_app.rb +12 -0
  61. metadata +206 -0
@@ -0,0 +1,175 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Hawkei' do
4
+ let(:processor_mock) { double('Processor', enqueue: true) }
5
+
6
+ describe '.configurations' do
7
+ it { expect(Hawkei.configurations).to be_a(Hawkei::Config) }
8
+ end
9
+
10
+ describe '.track' do
11
+ let(:expected_arg) {{
12
+ user_id: 42,
13
+ name: 'test',
14
+ message_id: kind_of(String),
15
+ timestamp: kind_of(String),
16
+ session_tracker_id: kind_of(String),
17
+ properties: {
18
+ total: 10
19
+ },
20
+ library: {
21
+ name: "hawkei",
22
+ language: "ruby",
23
+ version: kind_of(String)
24
+ },
25
+ server: {
26
+ host: kind_of(String),
27
+ pid: kind_of(Numeric),
28
+ software: 'rspec',
29
+ },
30
+ }}
31
+
32
+ context 'async' do
33
+ before do
34
+ allow(Hawkei).to receive(:processor).and_return(processor_mock)
35
+ Hawkei.track('test', { user_id: 42, properties: { total: 10 }}, no_ssl: true, space_name: 'test')
36
+ end
37
+
38
+ it { expect(processor_mock).to have_received(:enqueue).with(action: 'track_events:create', payload: hash_including(expected_arg), options: { space_name: 'test' }) }
39
+ end
40
+
41
+ context 'not enabled' do
42
+ before do
43
+ Hawkei.configurations.enabled = false
44
+ Hawkei.track('test', { user_id: 42, properties: { total: 10 }}, no_ssl: true, space_name: 'test')
45
+ end
46
+
47
+ it { expect(processor_mock).to_not have_received(:enqueue) }
48
+ end
49
+ end
50
+
51
+ describe '.identify' do
52
+ let(:expected_arg) {{
53
+ tracker_id: 'xx',
54
+ properties: {
55
+ name: 'John Doe'
56
+ },
57
+ user_id: 42,
58
+ message_id: kind_of(String),
59
+ timestamp: kind_of(String),
60
+ session_tracker_id: kind_of(String),
61
+ library: {
62
+ name: "hawkei",
63
+ language: "ruby",
64
+ version: kind_of(String)
65
+ },
66
+ server: {
67
+ host: kind_of(String),
68
+ pid: kind_of(Numeric),
69
+ software: 'rspec',
70
+ },
71
+ }}
72
+
73
+ context 'async' do
74
+ before do
75
+ allow(Hawkei).to receive(:processor).and_return(processor_mock)
76
+ Hawkei.identify(42, { tracker_id: 'xx', properties: { name: 'John Doe' }}, no_ssl: true, space_name: 'test')
77
+ end
78
+
79
+ it { expect(processor_mock).to have_received(:enqueue).with(action: 'identify_events:create', payload: hash_including(expected_arg), options: { space_name: 'test' }) }
80
+ end
81
+
82
+ context 'not enabled' do
83
+ before do
84
+ Hawkei.configurations.enabled = false
85
+ Hawkei.identify(42, { tracker_id: 'xx', properties: { name: 'John Doe' }}, no_ssl: true, space_name: 'test')
86
+ end
87
+
88
+ it { expect(processor_mock).to_not have_received(:enqueue) }
89
+ end
90
+ end
91
+
92
+ describe '.group' do
93
+ let(:expected_arg) {{
94
+ properties: {
95
+ name: 'John Group'
96
+ },
97
+ message_id: kind_of(String),
98
+ timestamp: kind_of(String),
99
+ session_tracker_id: kind_of(String),
100
+ }}
101
+
102
+ context 'async' do
103
+ before do
104
+ allow(Hawkei).to receive(:processor).and_return(processor_mock)
105
+ Hawkei.group(42, { properties: { name: 'John Group' }}, no_ssl: true, space_name: 'test')
106
+ end
107
+
108
+ it { expect(processor_mock).to have_received(:enqueue).with(action: 'group_events:create', payload: hash_including(expected_arg.merge(group_id: 42)), options: { space_name: 'test' }) }
109
+ end
110
+
111
+ context 'not enabled' do
112
+ before do
113
+ Hawkei.configurations.enabled = false
114
+ Hawkei.group(42, { properties: { name: 'John Group' }}, no_ssl: true, space_name: 'test')
115
+ end
116
+
117
+ it { expect(processor_mock).to_not have_received(:enqueue) }
118
+ end
119
+ end
120
+
121
+ describe '.watch' do
122
+ let(:expected_arg) {{
123
+ template_flow: 'My Hawkei',
124
+ expected_times: 42,
125
+ message_id: kind_of(String),
126
+ timestamp: kind_of(String),
127
+ session_tracker_id: kind_of(String),
128
+ }}
129
+ let(:response) { double('Hawkei::Watcher', successful?: true) }
130
+
131
+ context 'async' do
132
+ before do
133
+ allow(Hawkei).to receive(:processor).and_return(processor_mock)
134
+ Hawkei.watch('My Hawkei', { expected_times: 42 }, no_ssl: true, space_name: 'test')
135
+ end
136
+
137
+ it { expect(processor_mock).to have_received(:enqueue).with(action: 'watchers:create', payload: hash_including(expected_arg), options: { space_name: 'test' }) }
138
+ end
139
+
140
+ context 'without async' do
141
+ before do
142
+ allow(Hawkei::Watcher).to receive(:create).and_return(response)
143
+ Hawkei.watch('My Hawkei', { expected_times: 42 }, no_ssl: true, space_name: 'test', sync: true)
144
+ end
145
+
146
+ it { expect(Hawkei::Watcher).to have_received(:create).with(hash_including(expected_arg), { no_ssl: true, space_name: 'test', sync: true }) }
147
+ end
148
+
149
+ context 'not enabled' do
150
+ before do
151
+ Hawkei.configurations.enabled = false
152
+ Hawkei.watch('My Hawkei', { expected_times: 42 }, no_ssl: true, space_name: 'test')
153
+ end
154
+
155
+ it { expect(Hawkei::Watcher).to_not receive(:create) }
156
+ end
157
+
158
+ context 'without session' do
159
+ let(:expected_arg) {{
160
+ template_flow: 'My Hawkei',
161
+ expected_times: 42,
162
+ message_id: kind_of(String),
163
+ timestamp: kind_of(String),
164
+ }}
165
+
166
+ before do
167
+ allow(Hawkei).to receive(:processor).and_return(processor_mock)
168
+ Hawkei.watch('My Hawkei', { expected_times: 42, without_session: true }, no_ssl: true, space_name: 'test')
169
+ end
170
+
171
+ it { expect(processor_mock).to have_received(:enqueue).with(action: 'watchers:create', payload: hash_including(expected_arg), options: { space_name: 'test' }) }
172
+ end
173
+ end
174
+
175
+ end
@@ -0,0 +1,33 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'hawkei'
4
+ require 'rspec'
5
+ require 'pry'
6
+
7
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
8
+
9
+ RSpec.configure do |config|
10
+ config.expect_with :rspec do |c|
11
+ c.syntax = :expect
12
+ end
13
+ config.mock_with :rspec
14
+
15
+ config.before(:each) do
16
+ Hawkei.configure do |config|
17
+ config.api_host = 'localhost:4003'
18
+ config.api_key = 'acc_xx'
19
+ config.space_name = 'Hawkei'
20
+ config.environment_name = 'test'
21
+ config.http_secure = false
22
+ end
23
+ end
24
+
25
+ config.after(:each) do
26
+ Hawkei::Store.clear!
27
+ end
28
+
29
+ config.before(:each) do
30
+ Hawkei::Store.clear!
31
+ end
32
+
33
+ end
@@ -0,0 +1,12 @@
1
+ class RackApp
2
+ attr_reader :last_value, :store_active
3
+
4
+ def call(env)
5
+ Hawkei::Store.store[:foo] ||= 0
6
+ Hawkei::Store.store[:foo] += 1
7
+
8
+ @last_value = Hawkei::Store.store[:foo]
9
+
10
+ raise 'ERROR' if env[:error]
11
+ end
12
+ end
metadata ADDED
@@ -0,0 +1,206 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hawkei
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Hawkei
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-09-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: concurrent-ruby
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.1.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.1.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: faker
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.9.1
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.9.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
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
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 0.9.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 0.9.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.8'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.8'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 0.61.1
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 0.61.1
97
+ description: Hawkei ruby integration
98
+ email:
99
+ - support@hawkei.io
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitignore"
105
+ - ".rspec"
106
+ - ".rubocop.yml"
107
+ - ".ruby-version"
108
+ - ".tool-versions"
109
+ - ".travis.yml"
110
+ - Gemfile
111
+ - LICENCE
112
+ - Makefile
113
+ - README.md
114
+ - Rakefile
115
+ - hawkei.gemspec
116
+ - lib/hawkei.rb
117
+ - lib/hawkei/api_operation/delete.rb
118
+ - lib/hawkei/api_operation/save.rb
119
+ - lib/hawkei/api_resource.rb
120
+ - lib/hawkei/batch.rb
121
+ - lib/hawkei/config.rb
122
+ - lib/hawkei/errors.rb
123
+ - lib/hawkei/formated_logger.rb
124
+ - lib/hawkei/hawkei_object.rb
125
+ - lib/hawkei/library_name.rb
126
+ - lib/hawkei/message.rb
127
+ - lib/hawkei/plugins.rb
128
+ - lib/hawkei/plugins/rack/middleware.rb
129
+ - lib/hawkei/plugins/rails/data.rb
130
+ - lib/hawkei/plugins/rails/middleware_data.rb
131
+ - lib/hawkei/plugins/rails/railtie.rb
132
+ - lib/hawkei/plugins/sidekiq/client_middleware.rb
133
+ - lib/hawkei/plugins/sidekiq/load.rb
134
+ - lib/hawkei/plugins/sidekiq/server_middleware.rb
135
+ - lib/hawkei/processor/async.rb
136
+ - lib/hawkei/processor/batch.rb
137
+ - lib/hawkei/processor/worker.rb
138
+ - lib/hawkei/request.rb
139
+ - lib/hawkei/store.rb
140
+ - lib/hawkei/util.rb
141
+ - lib/hawkei/version.rb
142
+ - lib/hawkei/watcher.rb
143
+ - spec/lib/hawkei/api_resource_spec.rb
144
+ - spec/lib/hawkei/batch_spec.rb
145
+ - spec/lib/hawkei/config_spec.rb
146
+ - spec/lib/hawkei/formated_logger_spec.rb
147
+ - spec/lib/hawkei/hawkei_object_spec.rb
148
+ - spec/lib/hawkei/message_spec.rb
149
+ - spec/lib/hawkei/plugins/rack/middleware_spec.rb
150
+ - spec/lib/hawkei/plugins/rails/data_spec.rb
151
+ - spec/lib/hawkei/plugins/rails/middleware_data_spec.rb
152
+ - spec/lib/hawkei/plugins/sidekiq/client_middleware_spec.rb
153
+ - spec/lib/hawkei/plugins/sidekiq/server_middleware_spec.rb
154
+ - spec/lib/hawkei/processor/async_spec.rb
155
+ - spec/lib/hawkei/processor/batch_spec.rb
156
+ - spec/lib/hawkei/processor/worker_spec.rb
157
+ - spec/lib/hawkei/store_spec.rb
158
+ - spec/lib/hawkei/util_spec.rb
159
+ - spec/lib/hawkei/watcher_spec.rb
160
+ - spec/lib/hawkei_spec.rb
161
+ - spec/spec_helper.rb
162
+ - spec/support/rack_app.rb
163
+ homepage: https://github.com/hawkei-io/hawkei-ruby
164
+ licenses:
165
+ - MIT
166
+ metadata: {}
167
+ post_install_message:
168
+ rdoc_options: []
169
+ require_paths:
170
+ - lib
171
+ required_ruby_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ required_rubygems_version: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ requirements: []
182
+ rubygems_version: 3.0.3
183
+ signing_key:
184
+ specification_version: 4
185
+ summary: Hawkei ruby integration
186
+ test_files:
187
+ - spec/lib/hawkei/api_resource_spec.rb
188
+ - spec/lib/hawkei/batch_spec.rb
189
+ - spec/lib/hawkei/config_spec.rb
190
+ - spec/lib/hawkei/formated_logger_spec.rb
191
+ - spec/lib/hawkei/hawkei_object_spec.rb
192
+ - spec/lib/hawkei/message_spec.rb
193
+ - spec/lib/hawkei/plugins/rack/middleware_spec.rb
194
+ - spec/lib/hawkei/plugins/rails/data_spec.rb
195
+ - spec/lib/hawkei/plugins/rails/middleware_data_spec.rb
196
+ - spec/lib/hawkei/plugins/sidekiq/client_middleware_spec.rb
197
+ - spec/lib/hawkei/plugins/sidekiq/server_middleware_spec.rb
198
+ - spec/lib/hawkei/processor/async_spec.rb
199
+ - spec/lib/hawkei/processor/batch_spec.rb
200
+ - spec/lib/hawkei/processor/worker_spec.rb
201
+ - spec/lib/hawkei/store_spec.rb
202
+ - spec/lib/hawkei/util_spec.rb
203
+ - spec/lib/hawkei/watcher_spec.rb
204
+ - spec/lib/hawkei_spec.rb
205
+ - spec/spec_helper.rb
206
+ - spec/support/rack_app.rb