analytics-ruby 2.2.3.pre → 2.2.4.pre
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 +5 -5
- data/History.md +16 -0
- data/Makefile +17 -8
- data/README.md +2 -2
- data/RELEASING.md +2 -3
- data/Rakefile +17 -1
- data/analytics-ruby.gemspec +10 -2
- data/codecov.yml +2 -0
- data/lib/analytics-ruby.rb +1 -0
- data/lib/segment/analytics.rb +9 -2
- data/lib/segment/analytics/backoff_policy.rb +49 -0
- data/lib/segment/analytics/client.rb +148 -99
- data/lib/segment/analytics/defaults.rb +20 -4
- data/lib/segment/analytics/logging.rb +2 -4
- data/lib/segment/analytics/message.rb +26 -0
- data/lib/segment/analytics/message_batch.rb +58 -0
- data/lib/segment/analytics/request.rb +84 -32
- data/lib/segment/analytics/response.rb +0 -1
- data/lib/segment/analytics/utils.rb +19 -16
- data/lib/segment/analytics/version.rb +1 -1
- data/lib/segment/analytics/worker.rb +11 -10
- data/spec/helpers/runscope_client.rb +38 -0
- data/spec/segment/analytics/backoff_policy_spec.rb +92 -0
- data/spec/segment/analytics/client_spec.rb +61 -44
- data/spec/segment/analytics/e2e_spec.rb +48 -0
- data/spec/segment/analytics/message_batch_spec.rb +49 -0
- data/spec/segment/analytics/message_spec.rb +35 -0
- data/spec/segment/analytics/request_spec.rb +87 -34
- data/spec/segment/analytics/worker_spec.rb +24 -16
- data/spec/spec_helper.rb +32 -6
- metadata +73 -17
- data/Gemfile.lock +0 -43
- data/analytics-ruby-2.0.13.gem +0 -0
- data/analytics-ruby-2.1.0.gem +0 -0
- data/analytics-ruby-2.2.2.gem +0 -0
@@ -3,11 +3,14 @@ require 'spec_helper'
|
|
3
3
|
module Segment
|
4
4
|
class Analytics
|
5
5
|
describe Worker do
|
6
|
-
describe
|
6
|
+
describe '#init' do
|
7
7
|
it 'accepts string keys' do
|
8
8
|
queue = Queue.new
|
9
|
-
worker = Segment::Analytics::Worker.new(queue,
|
10
|
-
|
9
|
+
worker = Segment::Analytics::Worker.new(queue,
|
10
|
+
'secret',
|
11
|
+
'batch_size' => 100)
|
12
|
+
batch = worker.instance_variable_get(:@batch)
|
13
|
+
expect(batch.instance_variable_get(:@max_message_count)).to eq(100)
|
11
14
|
end
|
12
15
|
end
|
13
16
|
|
@@ -35,25 +38,29 @@ module Segment
|
|
35
38
|
end.to_not raise_error
|
36
39
|
end
|
37
40
|
|
38
|
-
it 'executes the error handler
|
39
|
-
Segment::Analytics::Request
|
41
|
+
it 'executes the error handler if the request is invalid' do
|
42
|
+
Segment::Analytics::Request
|
43
|
+
.any_instance
|
44
|
+
.stub(:post)
|
45
|
+
.and_return(Segment::Analytics::Response.new(400, 'Some error'))
|
40
46
|
|
41
47
|
status = error = nil
|
42
|
-
on_error =
|
48
|
+
on_error = proc do |yielded_status, yielded_error|
|
43
49
|
sleep 0.2 # Make this take longer than thread spin-up (below)
|
44
50
|
status, error = yielded_status, yielded_error
|
45
51
|
end
|
46
52
|
|
47
53
|
queue = Queue.new
|
48
54
|
queue << {}
|
49
|
-
worker =
|
55
|
+
worker = described_class.new(queue, 'secret', :on_error => on_error)
|
50
56
|
|
51
|
-
# This is to ensure that Client#flush doesn
|
57
|
+
# This is to ensure that Client#flush doesn't finish before calling
|
58
|
+
# the error handler.
|
52
59
|
Thread.new { worker.run }
|
53
60
|
sleep 0.1 # First give thread time to spin-up.
|
54
61
|
sleep 0.01 while worker.is_requesting?
|
55
62
|
|
56
|
-
Segment::Analytics::Request
|
63
|
+
Segment::Analytics::Request.any_instance.unstub(:post)
|
57
64
|
|
58
65
|
expect(queue).to be_empty
|
59
66
|
expect(status).to eq(400)
|
@@ -61,7 +68,7 @@ module Segment
|
|
61
68
|
end
|
62
69
|
|
63
70
|
it 'does not call on_error if the request is good' do
|
64
|
-
on_error =
|
71
|
+
on_error = proc do |status, error|
|
65
72
|
puts "#{status}, #{error}"
|
66
73
|
end
|
67
74
|
|
@@ -69,7 +76,9 @@ module Segment
|
|
69
76
|
|
70
77
|
queue = Queue.new
|
71
78
|
queue << Requested::TRACK
|
72
|
-
worker =
|
79
|
+
worker = described_class.new(queue,
|
80
|
+
'testsecret',
|
81
|
+
:on_error => on_error)
|
73
82
|
worker.run
|
74
83
|
|
75
84
|
expect(queue).to be_empty
|
@@ -89,12 +98,11 @@ module Segment
|
|
89
98
|
queue << Requested::TRACK
|
90
99
|
worker = Segment::Analytics::Worker.new(queue, 'testsecret')
|
91
100
|
|
92
|
-
Thread.new
|
93
|
-
worker.run
|
94
|
-
expect(worker.is_requesting?).to eq(false)
|
95
|
-
end
|
96
|
-
|
101
|
+
worker_thread = Thread.new { worker.run }
|
97
102
|
eventually { expect(worker.is_requesting?).to eq(true) }
|
103
|
+
|
104
|
+
worker_thread.join
|
105
|
+
expect(worker.is_requesting?).to eq(false)
|
98
106
|
end
|
99
107
|
end
|
100
108
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
|
+
# https://github.com/codecov/codecov-ruby#usage
|
2
|
+
require 'simplecov'
|
3
|
+
SimpleCov.start
|
4
|
+
require 'codecov'
|
5
|
+
SimpleCov.formatter = SimpleCov::Formatter::Codecov
|
6
|
+
|
1
7
|
require 'segment/analytics'
|
2
8
|
require 'active_support/time'
|
9
|
+
require './spec/helpers/runscope_client'
|
3
10
|
|
4
11
|
# Setting timezone for ActiveSupport::TimeWithZone to UTC
|
5
12
|
Time.zone = 'UTC'
|
@@ -18,7 +25,7 @@ module Segment
|
|
18
25
|
}
|
19
26
|
}
|
20
27
|
|
21
|
-
IDENTIFY =
|
28
|
+
IDENTIFY = {
|
22
29
|
:traits => {
|
23
30
|
:likes_animals => true,
|
24
31
|
:instrument => 'Guitar',
|
@@ -77,6 +84,25 @@ module Segment
|
|
77
84
|
end
|
78
85
|
end
|
79
86
|
|
87
|
+
# A worker that doesn't consume jobs
|
88
|
+
class NoopWorker
|
89
|
+
def run
|
90
|
+
# Does nothing
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
# A backoff policy that returns a fixed list of values
|
95
|
+
class FakeBackoffPolicy
|
96
|
+
def initialize(interval_values)
|
97
|
+
@interval_values = interval_values
|
98
|
+
end
|
99
|
+
|
100
|
+
def next_interval
|
101
|
+
raise 'FakeBackoffPolicy has no values left' if @interval_values.empty?
|
102
|
+
@interval_values.shift
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
80
106
|
# usage:
|
81
107
|
# it "should return a result of 5" do
|
82
108
|
# eventually(options: {timeout: 1}) { long_running_thing.result.should eq(5) }
|
@@ -90,13 +116,13 @@ module AsyncHelper
|
|
90
116
|
loop do
|
91
117
|
begin
|
92
118
|
yield
|
93
|
-
|
119
|
+
return
|
120
|
+
rescue RSpec::Expectations::ExpectationNotMetError => error
|
121
|
+
raise error if Time.now >= time_limit
|
122
|
+
sleep interval
|
94
123
|
end
|
95
|
-
return if error.nil?
|
96
|
-
raise error if Time.now >= time_limit
|
97
|
-
sleep interval
|
98
124
|
end
|
99
125
|
end
|
100
126
|
end
|
101
127
|
|
102
|
-
include AsyncHelper
|
128
|
+
include AsyncHelper
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: analytics-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.4.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Segment.io
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: commander
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '3.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '3.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: tzinfo
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,22 +70,72 @@ dependencies:
|
|
70
70
|
name: activesupport
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 4.1.11
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 4.1.11
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: faraday
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.13'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.13'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pmap
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
74
102
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
76
|
-
|
103
|
+
version: '1.1'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1.1'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubocop
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
77
116
|
- !ruby/object:Gem::Version
|
78
|
-
version:
|
117
|
+
version: 0.51.0
|
79
118
|
type: :development
|
80
119
|
prerelease: false
|
81
120
|
version_requirements: !ruby/object:Gem::Requirement
|
82
121
|
requirements:
|
83
|
-
- - "
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 0.51.0
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: codecov
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
84
130
|
- !ruby/object:Gem::Version
|
85
|
-
version:
|
86
|
-
|
131
|
+
version: 0.1.4
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
87
137
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
138
|
+
version: 0.1.4
|
89
139
|
description: The Segment.io ruby analytics library
|
90
140
|
email: friends@segment.io
|
91
141
|
executables:
|
@@ -94,28 +144,34 @@ extensions: []
|
|
94
144
|
extra_rdoc_files: []
|
95
145
|
files:
|
96
146
|
- Gemfile
|
97
|
-
- Gemfile.lock
|
98
147
|
- History.md
|
99
148
|
- Makefile
|
100
149
|
- README.md
|
101
150
|
- RELEASING.md
|
102
151
|
- Rakefile
|
103
|
-
- analytics-ruby-2.0.13.gem
|
104
|
-
- analytics-ruby-2.1.0.gem
|
105
|
-
- analytics-ruby-2.2.2.gem
|
106
152
|
- analytics-ruby.gemspec
|
107
153
|
- bin/analytics
|
154
|
+
- codecov.yml
|
155
|
+
- lib/analytics-ruby.rb
|
108
156
|
- lib/segment.rb
|
109
157
|
- lib/segment/analytics.rb
|
158
|
+
- lib/segment/analytics/backoff_policy.rb
|
110
159
|
- lib/segment/analytics/client.rb
|
111
160
|
- lib/segment/analytics/defaults.rb
|
112
161
|
- lib/segment/analytics/logging.rb
|
162
|
+
- lib/segment/analytics/message.rb
|
163
|
+
- lib/segment/analytics/message_batch.rb
|
113
164
|
- lib/segment/analytics/request.rb
|
114
165
|
- lib/segment/analytics/response.rb
|
115
166
|
- lib/segment/analytics/utils.rb
|
116
167
|
- lib/segment/analytics/version.rb
|
117
168
|
- lib/segment/analytics/worker.rb
|
169
|
+
- spec/helpers/runscope_client.rb
|
170
|
+
- spec/segment/analytics/backoff_policy_spec.rb
|
118
171
|
- spec/segment/analytics/client_spec.rb
|
172
|
+
- spec/segment/analytics/e2e_spec.rb
|
173
|
+
- spec/segment/analytics/message_batch_spec.rb
|
174
|
+
- spec/segment/analytics/message_spec.rb
|
119
175
|
- spec/segment/analytics/request_spec.rb
|
120
176
|
- spec/segment/analytics/response_spec.rb
|
121
177
|
- spec/segment/analytics/worker_spec.rb
|
@@ -141,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
197
|
version: 1.3.1
|
142
198
|
requirements: []
|
143
199
|
rubyforge_project:
|
144
|
-
rubygems_version: 2.
|
200
|
+
rubygems_version: 2.7.5
|
145
201
|
signing_key:
|
146
202
|
specification_version: 4
|
147
203
|
summary: Segment.io analytics library
|
data/Gemfile.lock
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
analytics-ruby (2.2.2)
|
5
|
-
commander (~> 4.4)
|
6
|
-
|
7
|
-
GEM
|
8
|
-
remote: http://rubygems.org/
|
9
|
-
specs:
|
10
|
-
activesupport (3.2.22)
|
11
|
-
i18n (~> 0.6, >= 0.6.4)
|
12
|
-
multi_json (~> 1.0)
|
13
|
-
commander (4.4.3)
|
14
|
-
highline (~> 1.7.2)
|
15
|
-
diff-lcs (1.2.5)
|
16
|
-
highline (1.7.8)
|
17
|
-
i18n (0.7.0)
|
18
|
-
multi_json (1.11.2)
|
19
|
-
rake (10.4.2)
|
20
|
-
rspec (2.99.0)
|
21
|
-
rspec-core (~> 2.99.0)
|
22
|
-
rspec-expectations (~> 2.99.0)
|
23
|
-
rspec-mocks (~> 2.99.0)
|
24
|
-
rspec-core (2.99.2)
|
25
|
-
rspec-expectations (2.99.2)
|
26
|
-
diff-lcs (>= 1.1.3, < 2.0)
|
27
|
-
rspec-mocks (2.99.4)
|
28
|
-
thread_safe (0.3.5)
|
29
|
-
tzinfo (1.2.1)
|
30
|
-
thread_safe (~> 0.1)
|
31
|
-
|
32
|
-
PLATFORMS
|
33
|
-
ruby
|
34
|
-
|
35
|
-
DEPENDENCIES
|
36
|
-
activesupport (>= 3.0.0, < 4.0.0)
|
37
|
-
analytics-ruby!
|
38
|
-
rake (~> 10.3)
|
39
|
-
rspec (~> 2.0)
|
40
|
-
tzinfo (= 1.2.1)
|
41
|
-
|
42
|
-
BUNDLED WITH
|
43
|
-
1.15.4
|
data/analytics-ruby-2.0.13.gem
DELETED
Binary file
|
data/analytics-ruby-2.1.0.gem
DELETED
Binary file
|
data/analytics-ruby-2.2.2.gem
DELETED
Binary file
|