liveqa 1.4.6 → 1.8.3

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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -0
  3. data/.travis.yml +1 -0
  4. data/README.md +94 -7
  5. data/lib/liveqa/api_operation/delete.rb +38 -0
  6. data/lib/liveqa/api_resource.rb +7 -6
  7. data/lib/liveqa/async_handlers/base.rb +1 -3
  8. data/lib/liveqa/config.rb +35 -11
  9. data/lib/liveqa/event.rb +4 -10
  10. data/lib/liveqa/group.rb +14 -0
  11. data/lib/liveqa/identity.rb +16 -0
  12. data/lib/liveqa/liveqa_object.rb +48 -8
  13. data/lib/liveqa/message.rb +31 -10
  14. data/lib/liveqa/plugins/rack/middleware.rb +50 -36
  15. data/lib/liveqa/plugins/rails/data.rb +19 -0
  16. data/lib/liveqa/plugins/rails/middleware_data.rb +2 -18
  17. data/lib/liveqa/plugins/sidekiq/client_middleware.rb +1 -1
  18. data/lib/liveqa/plugins/sidekiq/server_middleware.rb +2 -2
  19. data/lib/liveqa/plugins.rb +1 -0
  20. data/lib/liveqa/request.rb +2 -0
  21. data/lib/liveqa/store.rb +1 -1
  22. data/lib/liveqa/util.rb +81 -1
  23. data/lib/liveqa/version.rb +1 -1
  24. data/lib/liveqa/watcher.rb +15 -0
  25. data/lib/liveqa.rb +82 -4
  26. data/spec/lib/liveqa/api_resource_spec.rb +109 -0
  27. data/spec/lib/liveqa/async_handlers/base_spec.rb +13 -3
  28. data/spec/lib/liveqa/config_spec.rb +8 -6
  29. data/spec/lib/liveqa/event_spec.rb +2 -23
  30. data/spec/lib/liveqa/group_spec.rb +15 -0
  31. data/spec/lib/liveqa/identity_spec.rb +15 -0
  32. data/spec/lib/liveqa/liveqa_object_spec.rb +53 -2
  33. data/spec/lib/liveqa/message_spec.rb +75 -8
  34. data/spec/lib/liveqa/plugins/rack/middleware_spec.rb +8 -2
  35. data/spec/lib/liveqa/plugins/rails/data_spec.rb +22 -0
  36. data/spec/lib/liveqa/plugins/rails/middleware_data_spec.rb +2 -23
  37. data/spec/lib/liveqa/plugins/sidekiq/server_middleware_spec.rb +6 -12
  38. data/spec/lib/liveqa/util_spec.rb +40 -0
  39. data/spec/lib/liveqa/watcher_spec.rb +25 -0
  40. data/spec/lib/liveqa_spec.rb +88 -5
  41. data/spec/spec_helper.rb +3 -1
  42. metadata +17 -2
@@ -3,9 +3,77 @@ require 'spec_helper'
3
3
  describe LiveQA::Message do
4
4
  subject(:base) { LiveQA::Message }
5
5
 
6
- describe '#to_h' do
6
+ describe '#base' do
7
+ let(:expected_hash) {{
8
+ message_id: kind_of(String),
9
+ timestamp: kind_of(String),
10
+ session_tracker_id: kind_of(String),
11
+ }}
12
+
13
+ it { expect(base.base).to match(expected_hash) }
14
+
15
+ context 'with store' do
16
+ before do
17
+ LiveQA::Store.set(:session_tracker_id, 'hello')
18
+ end
19
+
20
+ let(:expected_hash) {{
21
+ message_id: kind_of(String),
22
+ timestamp: kind_of(String),
23
+ session_tracker_id: 'hello',
24
+ }}
25
+
26
+ it { expect(base.base).to match(expected_hash) }
27
+ end
28
+
29
+ context 'with metadata' do
30
+
31
+
32
+ let(:expected_hash) {{
33
+ message_id: kind_of(String),
34
+ timestamp: kind_of(String),
35
+ session_tracker_id: kind_of(String),
36
+ metadata: {
37
+ deployment_id: 42
38
+ }
39
+ }}
40
+
41
+ context 'hash type' do
42
+ before do
43
+ LiveQA.configurations.metadata = {
44
+ deployment_id: 42
45
+ }
46
+ end
47
+
48
+ it { expect(base.base).to match(expected_hash) }
49
+ end
50
+
51
+ context 'proc type' do
52
+ before do
53
+ LiveQA.configurations.metadata = {
54
+ deployment_id: lambda { 84 / 2 }
55
+ }
56
+ end
57
+
58
+ it { expect(base.base).to match(expected_hash) }
59
+ end
60
+
61
+ context 'proc & raise type' do
62
+ before do
63
+ LiveQA.configurations.metadata = {
64
+ deployment_id: -> { 84 / 2 },
65
+ other_id: -> { hello }
66
+ }
67
+ end
68
+
69
+ it { expect(base.base).to match(expected_hash) }
70
+ end
71
+ end
72
+
73
+ end
74
+
75
+ describe '#extended' do
7
76
  let(:expected_hash) {{
8
- tracker_id: kind_of(String),
9
77
  message_id: kind_of(String),
10
78
  timestamp: kind_of(String),
11
79
  session_tracker_id: kind_of(String),
@@ -20,11 +88,11 @@ describe LiveQA::Message do
20
88
  }
21
89
  }}
22
90
 
23
- it { expect(base.to_h).to match(expected_hash) }
91
+ it { expect(base.extended).to match(expected_hash) }
24
92
 
25
93
  context 'with store' do
26
94
  before do
27
- LiveQA::Store.set(:tracker_id, 'hello')
95
+ LiveQA::Store.set(:session_tracker_id, 'hello')
28
96
  LiveQA::Store.set(:request,
29
97
  url: 'http://www.test.com/',
30
98
  ssl: true,
@@ -49,13 +117,12 @@ describe LiveQA::Message do
49
117
  )
50
118
 
51
119
  LiveQA::Store.bulk_set(
52
- environement: 'production',
120
+ environment: 'production',
53
121
  server_software: 'WEBrick/1.3.1 (Ruby/2.2.7/2017-03-28)'
54
122
  )
55
123
  end
56
124
 
57
125
  let(:expected_hash) {{
58
- tracker_id: 'hello',
59
126
  message_id: kind_of(String),
60
127
  timestamp: kind_of(String),
61
128
  session_tracker_id: 'hello',
@@ -91,10 +158,10 @@ describe LiveQA::Message do
91
158
  process_at: '2017-12-15T03:45:10Z',
92
159
  args: ['LiveQA::Event']
93
160
  },
94
- environement: 'production'
161
+ environment: 'production'
95
162
  }}
96
163
 
97
- it { expect(base.to_h).to match(expected_hash) }
164
+ it { expect(base.extended).to match(expected_hash) }
98
165
  end
99
166
  end
100
167
 
@@ -4,7 +4,7 @@ require 'liveqa/plugins/rack/middleware'
4
4
 
5
5
  describe LiveQA::Plugins::Rack::Middleware do
6
6
 
7
- let(:app) { RackApp.new }
7
+ let(:app) { lambda { |env| [200, {'Content-Type' => 'text/plain'}, ['All responses are OK']] } }
8
8
  let(:middleware) { LiveQA::Plugins::Rack::Middleware.new(app) }
9
9
 
10
10
  context 'reset the store' do
@@ -12,14 +12,20 @@ describe LiveQA::Plugins::Rack::Middleware do
12
12
  2.times { middleware.call({}) }
13
13
  end
14
14
 
15
- it { expect(app.last_value).to eq(1) }
15
+ #it { expect(app.last_value).to eq(1) }
16
16
  it { expect(LiveQA::Store.store).to eq({}) }
17
17
  end
18
18
 
19
19
  it 'reset the store with error' do
20
+ allow(middleware).to receive(:call).and_raise(RuntimeError)
20
21
  expect { middleware.call(error: true) }.to raise_error(RuntimeError)
21
22
 
22
23
  expect(LiveQA::Store.store).to eq({})
23
24
  end
24
25
 
26
+ it 'includes the secure flag in the cookie for a HTTPS connection' do
27
+ response = middleware.call({'HTTP_X_FORWARDED_SSL' => 'on'})
28
+ expect(response[1]['Set-Cookie']).to match(%r{liveqa_tracker_id.*secure.*})
29
+ end
30
+
25
31
  end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+ require 'rails'
3
+ require 'liveqa/plugins/rails/data'
4
+
5
+ describe LiveQA::Plugins::Rails::Data do
6
+
7
+ let(:middleware) { LiveQA::Plugins::Rails::Data }
8
+
9
+ describe '#store_data' do
10
+
11
+ context 'blank store' do
12
+ before { middleware.store_data }
13
+
14
+ let(:expected) {{
15
+ environment: kind_of(String)
16
+ }}
17
+
18
+ it { expect(LiveQA::Store.store).to match(expected) }
19
+ end
20
+
21
+ end
22
+ end
@@ -19,16 +19,9 @@ describe LiveQA::Plugins::Rails::MiddlewareData do
19
19
  before { middleware.store_data(request) }
20
20
 
21
21
  let(:expected) {{
22
- environement: kind_of(String),
23
22
  request: {
24
23
  id: '42a'
25
- },
26
- stack: [
27
- {
28
- name: 'rails',
29
- version: kind_of(String)
30
- }
31
- ]
24
+ }
32
25
  }}
33
26
 
34
27
  it { expect(LiveQA::Store.store).to match(expected) }
@@ -37,31 +30,17 @@ describe LiveQA::Plugins::Rails::MiddlewareData do
37
30
  context 'update the store' do
38
31
  before do
39
32
  LiveQA::Store.set(:request, { xhr: false })
40
- LiveQA::Store.set(:stack, [{ name: 'rack' }])
41
33
  end
42
34
  before { middleware.store_data(request) }
43
35
 
44
36
  let(:expected) {{
45
- environement: kind_of(String),
46
37
  request: {
47
38
  id: '42a',
48
39
  xhr: false
49
- },
50
- stack: [
51
- {
52
- name: 'rack'
53
- },
54
- {
55
- name: 'rails',
56
- version: kind_of(String)
57
- }
58
- ]
40
+ }
59
41
  }}
60
42
 
61
43
  it { expect(LiveQA::Store.store).to match(expected) }
62
44
  end
63
-
64
-
65
45
  end
66
-
67
46
  end
@@ -14,11 +14,7 @@ describe LiveQA::Plugins::Sidekiq::ServerMiddleware do
14
14
  'queue' => 'default',
15
15
  'jid' => '24cc849f71325b62ef470901',
16
16
  'created_at' => 1513299839.2563882,
17
- 'liveqa_store' => {
18
- 'tracker_id' => '06a09f70-6219-4860-babc-18aa47a62f7f',
19
- 'user_agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36',
20
- 'ip' => '127.0.0.1'
21
- },
17
+ 'liveqa_session_tracker_id' => '06a09f70-6219-4860-babc-18aa47a62f7f',
22
18
  'enqueued_at' => 1513300328.8271549,
23
19
  'error_message' => 'exit',
24
20
  'error_class' => 'SystemExit',
@@ -38,22 +34,20 @@ describe LiveQA::Plugins::Sidekiq::ServerMiddleware do
38
34
  before { middleware.call('MyWorker', job_attr, 'default') {} }
39
35
 
40
36
  let(:expected) {{
41
- tracker_id: '06a09f70-6219-4860-babc-18aa47a62f7f',
42
- user_agent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36',
43
- ip: '127.0.0.1',
37
+ session_tracker_id: '06a09f70-6219-4860-babc-18aa47a62f7f',
44
38
  worker: {
45
39
  name: 'sidekiq',
46
40
  version: kind_of(String),
47
41
  queue: 'default',
48
42
  class: 'MyWorker',
49
43
  id: '24cc849f71325b62ef470901',
50
- created_at: '2017-12-15T01:03:59Z',
51
- process_at: '2017-12-15T01:12:08Z',
44
+ created_at: '2017-12-15T01:03:59.256Z',
45
+ process_at: '2017-12-15T01:12:08.827Z',
52
46
  args: ['42'],
53
47
  retried: true,
54
48
  retry_number: 1,
55
- failed_at: '2017-12-15T01:09:26Z'
56
- }
49
+ failed_at: '2017-12-15T01:09:26.646Z'
50
+ },
57
51
  }}
58
52
 
59
53
  it { expect(LiveQA::Store.store).to match(expected) }
@@ -2,6 +2,15 @@ require 'spec_helper'
2
2
 
3
3
  describe LiveQA::Util do
4
4
 
5
+ describe '#camelize' do
6
+ it { expect(LiveQA::Util.except_keys({ a: 1, b: 2 }, :b)).to eq({ a: 1 }) }
7
+ end
8
+
9
+ describe '#camelize' do
10
+ it { expect(LiveQA::Util.camelize('model')).to eq("Model") }
11
+ it { expect(LiveQA::Util.camelize('my_model')).to eq("MyModel") }
12
+ end
13
+
5
14
  describe '#compact' do
6
15
  it { expect(LiveQA::Util.compact(test: nil, other: 'test')).to eq(other: 'test') }
7
16
  end
@@ -120,4 +129,35 @@ describe LiveQA::Util do
120
129
  it { expect(LiveQA::Util.deep_obfuscate_value(payload, fields)).to eq(expected) }
121
130
  end
122
131
 
132
+ describe '.properties' do
133
+ before { LiveQA.configurations.custom_object_properties = { user: %w[id email name] }}
134
+
135
+ let(:group) { double('Group', id: 10, name: "John Doe", state: 'active', class: double('Class', name: 'Group')) }
136
+ let(:user) { double('User', id: 42, name: "John Doe", email: "admin@email.com", state: 'active', class: double('Class', name: 'User')) }
137
+ let(:error_message) {{ email: ["can't be blank", "Looks like you've entered an invalid email address"] }}
138
+
139
+ let(:expected) {{
140
+ 'group' => {
141
+ 'id' => group.id,
142
+ 'name' => group.name
143
+ },
144
+ 'user' => {
145
+ 'id' => user.id,
146
+ 'email' => user.email,
147
+ 'name' => user.name
148
+ },
149
+ invited_by: {
150
+ 'id' => user.id,
151
+ 'email' => user.email,
152
+ 'name' => user.name
153
+ },
154
+ errors: error_message,
155
+ other: 81.to_f,
156
+ another: 42,
157
+ 'float' => 81.to_f
158
+ }}
159
+
160
+ it { expect(LiveQA::Util.properties(group, user, 81.to_f, invited_by: user, errors: error_message, other: 81.to_f, another: 42)).to match(expected) }
161
+ end
162
+
123
163
  end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe LiveQA::Identity do
4
+
5
+ describe '#create' do
6
+ let(:response) { double('LiveQA::Request', body: "{\"object\":\"watcher\",\"id\":1}") }
7
+ before { expect(LiveQA::Request).to receive(:execute).and_return(response) }
8
+
9
+ subject(:create) { LiveQA::Watcher.create(template_flow: 'My Flow', expected_times: 42) }
10
+
11
+ it { is_expected.to be_successful }
12
+ it { expect(create.id).to eq(1) }
13
+ end
14
+
15
+ describe '#delete' do
16
+ let(:response) { double('LiveQA::Request', body: "{\"object\":\"watcher\",\"id\":1}") }
17
+ before { expect(LiveQA::Request).to receive(:execute).and_return(response) }
18
+
19
+ subject(:delete) { LiveQA::Watcher.delete(1) }
20
+
21
+ it { is_expected.to be_successful }
22
+ it { expect(delete.id).to eq(1) }
23
+ end
24
+
25
+ end
@@ -16,7 +16,6 @@ describe LiveQA::Event do
16
16
  name: 'test',
17
17
  message_id: kind_of(String),
18
18
  timestamp: kind_of(String),
19
- tracker_id: kind_of(String),
20
19
  session_tracker_id: kind_of(String),
21
20
  properties: {
22
21
  total: 10
@@ -29,10 +28,10 @@ describe LiveQA::Event do
29
28
  server: {
30
29
  host: kind_of(String),
31
30
  pid: kind_of(Numeric)
32
- }
31
+ },
33
32
  }}
34
33
 
35
- it { expect(LiveQA::Event).to receive(:create).with(expected_arg, { no_ssl: true }).and_return(response) }
34
+ it { expect(LiveQA::Event).to receive(:create).with(hash_including(expected_arg), { no_ssl: true }).and_return(response) }
36
35
 
37
36
  context 'not enabled' do
38
37
  before { LiveQA.configurations.enabled = false }
@@ -63,10 +62,10 @@ describe LiveQA::Event do
63
62
  server: {
64
63
  host: kind_of(String),
65
64
  pid: kind_of(Numeric)
66
- }
65
+ },
67
66
  }}
68
67
 
69
- it { expect(LiveQA::Event).to receive(:create).with(expected_arg, { no_ssl: true }).and_return(response) }
68
+ it { expect(LiveQA::Event).to receive(:create).with(hash_including(expected_arg), { no_ssl: true }).and_return(response) }
70
69
 
71
70
  context 'not enabled' do
72
71
  before { LiveQA.configurations.enabled = false }
@@ -75,4 +74,88 @@ describe LiveQA::Event do
75
74
  end
76
75
  end
77
76
 
77
+ describe '.set_group' do
78
+ let(:response) { double('LiveQA::Group', successful?: true) }
79
+ after { LiveQA.set_group(42, { properties: { name: 'John Group' }}, { no_ssl: true }) }
80
+
81
+ let(:expected_arg) {{
82
+ properties: {
83
+ name: 'John Group'
84
+ },
85
+ message_id: kind_of(String),
86
+ timestamp: kind_of(String),
87
+ session_tracker_id: kind_of(String),
88
+ }}
89
+
90
+ it { expect(LiveQA::Group).to receive(:update).with(42, expected_arg, { no_ssl: true }).and_return(response) }
91
+
92
+ context 'not enabled' do
93
+ before { LiveQA.configurations.enabled = false }
94
+
95
+ it { expect(LiveQA::Group).to_not receive(:update) }
96
+ end
97
+ end
98
+
99
+ describe '.set_identity' do
100
+ let(:response) { double('LiveQA::Identity', successful?: true) }
101
+ after { LiveQA.set_identity(42, { properties: { name: 'John Doe' }}, { no_ssl: true }) }
102
+
103
+ let(:expected_arg) {{
104
+ properties: {
105
+ name: 'John Doe'
106
+ },
107
+ message_id: kind_of(String),
108
+ timestamp: kind_of(String),
109
+ session_tracker_id: kind_of(String),
110
+ }}
111
+
112
+ it { expect(LiveQA::Identity).to receive(:update).with(42, expected_arg, { no_ssl: true }).and_return(response) }
113
+
114
+ context 'not enabled' do
115
+ before { LiveQA.configurations.enabled = false }
116
+
117
+ it { expect(LiveQA::Identity).to_not receive(:update) }
118
+ end
119
+ end
120
+
121
+ describe '.watch' do
122
+ let(:response) { double('LiveQA::Identity', successful?: true) }
123
+
124
+
125
+ context 'with session' do
126
+ after { LiveQA.watch('My Flow', { expected_times: 42 }, { no_ssl: true }) }
127
+
128
+ let(:expected_arg) {{
129
+ template_flow: 'My Flow',
130
+ expected_times: 42,
131
+ message_id: kind_of(String),
132
+ timestamp: kind_of(String),
133
+ session_tracker_id: kind_of(String),
134
+ }}
135
+
136
+ it { expect(LiveQA::Watcher).to receive(:create).with(expected_arg, { no_ssl: true }).and_return(response) }
137
+ end
138
+
139
+ context 'with session' do
140
+ after { LiveQA.watch('My Flow', { expected_times: 42, without_session: true }, { no_ssl: true }) }
141
+
142
+ let(:expected_arg) {{
143
+ template_flow: 'My Flow',
144
+ expected_times: 42,
145
+ message_id: kind_of(String),
146
+ timestamp: kind_of(String),
147
+ }}
148
+
149
+ it { expect(LiveQA::Watcher).to receive(:create).with(expected_arg, { no_ssl: true }).and_return(response) }
150
+ end
151
+
152
+ context 'not enabled' do
153
+ after { LiveQA.watch('My Flow', { expected_times: 42 }, { no_ssl: true }) }
154
+
155
+ before { LiveQA.configurations.enabled = false }
156
+
157
+ it { expect(LiveQA::Watcher).to_not receive(:create) }
158
+ end
159
+ end
160
+
78
161
  end
data/spec/spec_helper.rb CHANGED
@@ -15,7 +15,9 @@ RSpec.configure do |config|
15
15
  config.before(:each) do
16
16
  LiveQA.configure do |config|
17
17
  config.api_host = 'localhost:4003'
18
- config.api_key = 'MVulkyYgAf1Xqc09eLbvONymxZCSwA-yevXRsBHx226lxdwIs5ppG942'
18
+ config.account_token = 'acc_xx'
19
+ config.space_name = 'LiveQA'
20
+ config.environment_name = 'test'
19
21
  config.http_secure = false
20
22
  end
21
23
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: liveqa
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.6
4
+ version: 1.8.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - LiveQA
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-20 00:00:00.000000000 Z
11
+ date: 2018-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faker
@@ -97,6 +97,7 @@ files:
97
97
  - README.md
98
98
  - Rakefile
99
99
  - lib/liveqa.rb
100
+ - lib/liveqa/api_operation/delete.rb
100
101
  - lib/liveqa/api_operation/save.rb
101
102
  - lib/liveqa/api_resource.rb
102
103
  - lib/liveqa/async_handlers/base.rb
@@ -104,11 +105,14 @@ files:
104
105
  - lib/liveqa/config.rb
105
106
  - lib/liveqa/errors.rb
106
107
  - lib/liveqa/event.rb
108
+ - lib/liveqa/group.rb
109
+ - lib/liveqa/identity.rb
107
110
  - lib/liveqa/library_name.rb
108
111
  - lib/liveqa/liveqa_object.rb
109
112
  - lib/liveqa/message.rb
110
113
  - lib/liveqa/plugins.rb
111
114
  - lib/liveqa/plugins/rack/middleware.rb
115
+ - lib/liveqa/plugins/rails/data.rb
112
116
  - lib/liveqa/plugins/rails/middleware_data.rb
113
117
  - lib/liveqa/plugins/rails/railtie.rb
114
118
  - lib/liveqa/plugins/sidekiq/client_middleware.rb
@@ -118,19 +122,25 @@ files:
118
122
  - lib/liveqa/store.rb
119
123
  - lib/liveqa/util.rb
120
124
  - lib/liveqa/version.rb
125
+ - lib/liveqa/watcher.rb
121
126
  - liveqa.gemspec
127
+ - spec/lib/liveqa/api_resource_spec.rb
122
128
  - spec/lib/liveqa/async_handlers/base_spec.rb
123
129
  - spec/lib/liveqa/async_handlers/sidekiq_spec.rb
124
130
  - spec/lib/liveqa/config_spec.rb
125
131
  - spec/lib/liveqa/event_spec.rb
132
+ - spec/lib/liveqa/group_spec.rb
133
+ - spec/lib/liveqa/identity_spec.rb
126
134
  - spec/lib/liveqa/liveqa_object_spec.rb
127
135
  - spec/lib/liveqa/message_spec.rb
128
136
  - spec/lib/liveqa/plugins/rack/middleware_spec.rb
137
+ - spec/lib/liveqa/plugins/rails/data_spec.rb
129
138
  - spec/lib/liveqa/plugins/rails/middleware_data_spec.rb
130
139
  - spec/lib/liveqa/plugins/sidekiq/client_middleware_spec.rb
131
140
  - spec/lib/liveqa/plugins/sidekiq/server_middleware_spec.rb
132
141
  - spec/lib/liveqa/store_spec.rb
133
142
  - spec/lib/liveqa/util_spec.rb
143
+ - spec/lib/liveqa/watcher_spec.rb
134
144
  - spec/lib/liveqa_spec.rb
135
145
  - spec/spec_helper.rb
136
146
  - spec/support/rack_app.rb
@@ -159,18 +169,23 @@ signing_key:
159
169
  specification_version: 4
160
170
  summary: LiveQA ruby integration
161
171
  test_files:
172
+ - spec/lib/liveqa/api_resource_spec.rb
162
173
  - spec/lib/liveqa/async_handlers/base_spec.rb
163
174
  - spec/lib/liveqa/async_handlers/sidekiq_spec.rb
164
175
  - spec/lib/liveqa/config_spec.rb
165
176
  - spec/lib/liveqa/event_spec.rb
177
+ - spec/lib/liveqa/group_spec.rb
178
+ - spec/lib/liveqa/identity_spec.rb
166
179
  - spec/lib/liveqa/liveqa_object_spec.rb
167
180
  - spec/lib/liveqa/message_spec.rb
168
181
  - spec/lib/liveqa/plugins/rack/middleware_spec.rb
182
+ - spec/lib/liveqa/plugins/rails/data_spec.rb
169
183
  - spec/lib/liveqa/plugins/rails/middleware_data_spec.rb
170
184
  - spec/lib/liveqa/plugins/sidekiq/client_middleware_spec.rb
171
185
  - spec/lib/liveqa/plugins/sidekiq/server_middleware_spec.rb
172
186
  - spec/lib/liveqa/store_spec.rb
173
187
  - spec/lib/liveqa/util_spec.rb
188
+ - spec/lib/liveqa/watcher_spec.rb
174
189
  - spec/lib/liveqa_spec.rb
175
190
  - spec/spec_helper.rb
176
191
  - spec/support/rack_app.rb