segment 2.2.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,120 @@
1
+ require 'spec_helper'
2
+
3
+ module Segment
4
+ class Analytics
5
+ describe Analytics do
6
+ let(:analytics) { Segment::Analytics.new :write_key => WRITE_KEY, :stub => true }
7
+
8
+ describe '#track' do
9
+ it 'errors without an event' do
10
+ expect { analytics.track(:user_id => 'user') }.to raise_error(ArgumentError)
11
+ end
12
+
13
+ it 'errors without a user_id' do
14
+ expect { analytics.track(:event => 'Event') }.to raise_error(ArgumentError)
15
+ end
16
+
17
+ it 'does not error with the required options' do
18
+ expect do
19
+ analytics.track Queued::TRACK
20
+ sleep(1)
21
+ end.to_not raise_error
22
+ end
23
+ end
24
+
25
+ describe '#identify' do
26
+ it 'errors without a user_id' do
27
+ expect { analytics.identify :traits => {} }.to raise_error(ArgumentError)
28
+ end
29
+
30
+ it 'does not error with the required options' do
31
+ analytics.identify Queued::IDENTIFY
32
+ sleep(1)
33
+ end
34
+ end
35
+
36
+ describe '#alias' do
37
+ it 'errors without from' do
38
+ expect { analytics.alias :user_id => 1234 }.to raise_error(ArgumentError)
39
+ end
40
+
41
+ it 'errors without to' do
42
+ expect { analytics.alias :previous_id => 1234 }.to raise_error(ArgumentError)
43
+ end
44
+
45
+ it 'does not error with the required options' do
46
+ expect do
47
+ analytics.alias ALIAS
48
+ sleep(1)
49
+ end.to_not raise_error
50
+ end
51
+ end
52
+
53
+ describe '#group' do
54
+ it 'errors without group_id' do
55
+ expect { analytics.group :user_id => 'foo' }.to raise_error(ArgumentError)
56
+ end
57
+
58
+ it 'errors without user_id or anonymous_id' do
59
+ expect { analytics.group :group_id => 'foo' }.to raise_error(ArgumentError)
60
+ end
61
+
62
+ it 'does not error with the required options' do
63
+ expect do
64
+ analytics.group Queued::GROUP
65
+ sleep(1)
66
+ end.to_not raise_error
67
+ end
68
+ end
69
+
70
+ describe '#page' do
71
+ it 'errors without user_id or anonymous_id' do
72
+ expect { analytics.page :name => 'foo' }.to raise_error(ArgumentError)
73
+ end
74
+
75
+ it 'does not error with the required options' do
76
+ expect do
77
+ analytics.page Queued::PAGE
78
+ sleep(1)
79
+ end.to_not raise_error
80
+ end
81
+ end
82
+
83
+ describe '#screen' do
84
+ it 'errors without user_id or anonymous_id' do
85
+ expect { analytics.screen :name => 'foo' }.to raise_error(ArgumentError)
86
+ end
87
+
88
+ it 'does not error with the required options' do
89
+ expect do
90
+ analytics.screen Queued::SCREEN
91
+ sleep(1)
92
+ end.to_not raise_error
93
+ end
94
+ end
95
+
96
+ describe '#flush' do
97
+ it 'flushes without error' do
98
+ expect do
99
+ analytics.identify Queued::IDENTIFY
100
+ analytics.flush
101
+ end.to_not raise_error
102
+ end
103
+ end
104
+
105
+ describe '#respond_to?' do
106
+ it 'responds to all public instance methods of Segment::Analytics::Client' do
107
+ expect(analytics).to respond_to(*Segment::Analytics::Client.public_instance_methods(false))
108
+ end
109
+ end
110
+
111
+ describe '#method' do
112
+ Segment::Analytics::Client.public_instance_methods(false).each do |public_method|
113
+ it "returns a Method object with '#{public_method}' as argument" do
114
+ expect(analytics.method(public_method).class).to eq(Method)
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,128 @@
1
+ # https://github.com/codecov/codecov-ruby#usage
2
+ require 'simplecov'
3
+ SimpleCov.start
4
+ require 'codecov'
5
+ SimpleCov.formatter = SimpleCov::Formatter::Codecov
6
+
7
+ require 'segment/analytics'
8
+ require 'active_support/time'
9
+ require './spec/helpers/runscope_client'
10
+
11
+ # Setting timezone for ActiveSupport::TimeWithZone to UTC
12
+ Time.zone = 'UTC'
13
+
14
+ module Segment
15
+ class Analytics
16
+ WRITE_KEY = 'testsecret'
17
+
18
+ TRACK = {
19
+ :event => 'Ruby Library test event',
20
+ :properties => {
21
+ :type => 'Chocolate',
22
+ :is_a_lie => true,
23
+ :layers => 20,
24
+ :created => Time.new
25
+ }
26
+ }
27
+
28
+ IDENTIFY = {
29
+ :traits => {
30
+ :likes_animals => true,
31
+ :instrument => 'Guitar',
32
+ :age => 25
33
+ }
34
+ }
35
+
36
+ ALIAS = {
37
+ :previous_id => 1234,
38
+ :user_id => 'abcd'
39
+ }
40
+
41
+ GROUP = {}
42
+
43
+ PAGE = {
44
+ :name => 'home'
45
+ }
46
+
47
+ SCREEN = {
48
+ :name => 'main'
49
+ }
50
+
51
+ USER_ID = 1234
52
+ GROUP_ID = 1234
53
+
54
+ # Hashes sent to the client, snake_case
55
+ module Queued
56
+ TRACK = TRACK.merge :user_id => USER_ID
57
+ IDENTIFY = IDENTIFY.merge :user_id => USER_ID
58
+ GROUP = GROUP.merge :group_id => GROUP_ID, :user_id => USER_ID
59
+ PAGE = PAGE.merge :user_id => USER_ID
60
+ SCREEN = SCREEN.merge :user_id => USER_ID
61
+ end
62
+
63
+ # Hashes which are sent from the worker, camel_cased
64
+ module Requested
65
+ TRACK = TRACK.merge({
66
+ :userId => USER_ID,
67
+ :type => 'track'
68
+ })
69
+
70
+ IDENTIFY = IDENTIFY.merge({
71
+ :userId => USER_ID,
72
+ :type => 'identify'
73
+ })
74
+
75
+ GROUP = GROUP.merge({
76
+ :groupId => GROUP_ID,
77
+ :userId => USER_ID,
78
+ :type => 'group'
79
+ })
80
+
81
+ PAGE = PAGE.merge :userId => USER_ID
82
+ SCREEN = SCREEN.merge :userId => USER_ID
83
+ end
84
+ end
85
+ end
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
+
106
+ # usage:
107
+ # it "should return a result of 5" do
108
+ # eventually(options: {timeout: 1}) { long_running_thing.result.should eq(5) }
109
+ # end
110
+
111
+ module AsyncHelper
112
+ def eventually(options = {})
113
+ timeout = options[:timeout] || 2
114
+ interval = options[:interval] || 0.1
115
+ time_limit = Time.now + timeout
116
+ loop do
117
+ begin
118
+ yield
119
+ return
120
+ rescue RSpec::Expectations::ExpectationNotMetError => error
121
+ raise error if Time.now >= time_limit
122
+ sleep interval
123
+ end
124
+ end
125
+ end
126
+ end
127
+
128
+ include AsyncHelper
metadata ADDED
@@ -0,0 +1,205 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: segment
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.2.5
5
+ platform: ruby
6
+ authors:
7
+ - Segment
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-05-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: commander
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: tzinfo
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.2.1
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 1.2.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: activesupport
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
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
+ - - "~>"
102
+ - !ruby/object:Gem::Version
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
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.51.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
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
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 0.1.4
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 0.1.4
139
+ description: The Segment ruby analytics library
140
+ email: friends@segment.com
141
+ executables:
142
+ - analytics
143
+ extensions: []
144
+ extra_rdoc_files: []
145
+ files:
146
+ - Gemfile
147
+ - Gemfile.lock
148
+ - History.md
149
+ - Makefile
150
+ - README.md
151
+ - RELEASING.md
152
+ - Rakefile
153
+ - analytics-ruby.gemspec
154
+ - bin/analytics
155
+ - codecov.yml
156
+ - lib/analytics-ruby.rb
157
+ - lib/segment.rb
158
+ - lib/segment/analytics.rb
159
+ - lib/segment/analytics/backoff_policy.rb
160
+ - lib/segment/analytics/client.rb
161
+ - lib/segment/analytics/defaults.rb
162
+ - lib/segment/analytics/logging.rb
163
+ - lib/segment/analytics/message.rb
164
+ - lib/segment/analytics/message_batch.rb
165
+ - lib/segment/analytics/request.rb
166
+ - lib/segment/analytics/response.rb
167
+ - lib/segment/analytics/utils.rb
168
+ - lib/segment/analytics/version.rb
169
+ - lib/segment/analytics/worker.rb
170
+ - spec/helpers/runscope_client.rb
171
+ - spec/segment/analytics/backoff_policy_spec.rb
172
+ - spec/segment/analytics/client_spec.rb
173
+ - spec/segment/analytics/e2e_spec.rb
174
+ - spec/segment/analytics/message_batch_spec.rb
175
+ - spec/segment/analytics/message_spec.rb
176
+ - spec/segment/analytics/request_spec.rb
177
+ - spec/segment/analytics/response_spec.rb
178
+ - spec/segment/analytics/worker_spec.rb
179
+ - spec/segment/analytics_spec.rb
180
+ - spec/spec_helper.rb
181
+ homepage: https://github.com/segmentio/analytics-ruby
182
+ licenses:
183
+ - MIT
184
+ metadata: {}
185
+ post_install_message:
186
+ rdoc_options: []
187
+ require_paths:
188
+ - lib
189
+ required_ruby_version: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ required_rubygems_version: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - ">="
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ requirements: []
200
+ rubyforge_project:
201
+ rubygems_version: 2.5.2
202
+ signing_key:
203
+ specification_version: 4
204
+ summary: Segment analytics library
205
+ test_files: []