ablab 0.2.4 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ablab.rb +17 -6
- data/lib/ablab/helper.rb +1 -1
- data/lib/ablab/version.rb +1 -1
- data/spec/ablab/helper_spec.rb +6 -0
- data/spec/ablab_spec.rb +40 -20
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a5e004cc3855d75784fb6725f3593f7aef46bae
|
4
|
+
data.tar.gz: 884592f7d393d1a5c0609b72ce2b3d43d6fb514a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b35e42099d1eea2f4e92f5a295dedcf04dcb1a3e49e0b923b02fe321569266fc86703a9c23d0a5d5cf454db1d15e968be650aa1c390cbabfb74f420a0eca567
|
7
|
+
data.tar.gz: d2ccb3dcec40eecc47889db8ed08277b7b1fda33fafa45c1dc332045e874406a5b368a2cb72e9e408487c41f76e73660137b08d8650cfeed27f69db1a0f77301
|
data/lib/ablab.rb
CHANGED
@@ -39,6 +39,14 @@ module Ablab
|
|
39
39
|
end
|
40
40
|
@dashboard_credentials
|
41
41
|
end
|
42
|
+
|
43
|
+
def on_track(&block)
|
44
|
+
(@callbacks ||= []) << block
|
45
|
+
end
|
46
|
+
|
47
|
+
def callbacks
|
48
|
+
@callbacks || []
|
49
|
+
end
|
42
50
|
end
|
43
51
|
|
44
52
|
class InvalidCredentials < ArgumentError; end
|
@@ -85,16 +93,16 @@ module Ablab
|
|
85
93
|
@result.data
|
86
94
|
end
|
87
95
|
|
88
|
-
def run(session_id)
|
89
|
-
Run.new(self, session_id)
|
96
|
+
def run(session_id, request)
|
97
|
+
Run.new(self, session_id, request)
|
90
98
|
end
|
91
99
|
end
|
92
100
|
|
93
101
|
class Run
|
94
|
-
attr_reader :experiment, :session_id
|
102
|
+
attr_reader :experiment, :session_id, :request
|
95
103
|
|
96
|
-
def initialize(experiment, session_id)
|
97
|
-
@experiment, @session_id = experiment, session_id
|
104
|
+
def initialize(experiment, session_id, request)
|
105
|
+
@experiment, @session_id, @request = experiment, session_id, request
|
98
106
|
end
|
99
107
|
|
100
108
|
def in_group?(name)
|
@@ -126,7 +134,10 @@ module Ablab
|
|
126
134
|
|
127
135
|
def perform_callbacks!(event)
|
128
136
|
experiment.callbacks.each do |cbk|
|
129
|
-
cbk.call(event, experiment.name, group, session_id)
|
137
|
+
cbk.call(event, experiment.name, group, session_id, request)
|
138
|
+
end
|
139
|
+
Ablab.callbacks.each do |cbk|
|
140
|
+
cbk.call(event, experiment.name, group, session_id, request)
|
130
141
|
end
|
131
142
|
end
|
132
143
|
end
|
data/lib/ablab/helper.rb
CHANGED
data/lib/ablab/version.rb
CHANGED
data/spec/ablab/helper_spec.rb
CHANGED
@@ -4,6 +4,8 @@ require 'ostruct'
|
|
4
4
|
describe Ablab::Helper do
|
5
5
|
let(:cookies) { Hash.new }
|
6
6
|
|
7
|
+
let(:request) { double(:request) }
|
8
|
+
|
7
9
|
let(:controller) do
|
8
10
|
Class.new do
|
9
11
|
include Ablab::Helper
|
@@ -23,6 +25,10 @@ describe Ablab::Helper do
|
|
23
25
|
end
|
24
26
|
end
|
25
27
|
|
28
|
+
before do
|
29
|
+
allow(controller).to receive(:request).and_return(request)
|
30
|
+
end
|
31
|
+
|
26
32
|
it 'calls helper_method if the including class implements it' do
|
27
33
|
klass = Class.new do
|
28
34
|
def self.helper_method(_); end
|
data/spec/ablab_spec.rb
CHANGED
@@ -53,6 +53,14 @@ describe Ablab do
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
+
describe ".on_track" do
|
57
|
+
it "adds a tracking callback" do
|
58
|
+
block = Proc.new {}
|
59
|
+
ab.on_track(&block)
|
60
|
+
expect(ab.callbacks).to eq([block])
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
56
64
|
describe Ablab::Experiment do
|
57
65
|
let(:experiment) do
|
58
66
|
Ablab::Experiment.new('foo') do; end
|
@@ -150,62 +158,64 @@ describe Ablab do
|
|
150
158
|
end
|
151
159
|
end
|
152
160
|
|
161
|
+
let(:request) { double(:request) }
|
162
|
+
|
153
163
|
let(:run) do
|
154
|
-
Ablab::Run.new(experiment, '86wfd8w6df')
|
164
|
+
Ablab::Run.new(experiment, '86wfd8w6df', request)
|
155
165
|
end
|
156
166
|
|
157
167
|
it 'gets assigned to the right group' do
|
158
|
-
run = Ablab::Run.new(experiment,
|
168
|
+
run = Ablab::Run.new(experiment, 'abc', request)
|
159
169
|
allow(run).to receive(:draw).and_return 0
|
160
170
|
expect(run).to be_in_group(:control)
|
161
|
-
run = Ablab::Run.new(experiment,
|
171
|
+
run = Ablab::Run.new(experiment, 'abc', request)
|
162
172
|
allow(run).to receive(:draw).and_return 334
|
163
173
|
expect(run).to be_in_group(:a)
|
164
|
-
run = Ablab::Run.new(experiment,
|
174
|
+
run = Ablab::Run.new(experiment, 'abc', request)
|
165
175
|
allow(run).to receive(:draw).and_return 999
|
166
176
|
expect(run).to be_in_group(:b)
|
167
177
|
end
|
168
178
|
|
169
179
|
it 'assigns the same session ID to the same group' do
|
170
|
-
run1 = Ablab::Run.new(experiment, '
|
171
|
-
run2 = Ablab::Run.new(experiment, '
|
180
|
+
run1 = Ablab::Run.new(experiment, 'abc', request)
|
181
|
+
run2 = Ablab::Run.new(experiment, 'abc', request)
|
172
182
|
expect(run1.group).to eq(run2.group)
|
173
183
|
end
|
174
184
|
|
175
185
|
it 'selects only the given percentage of users' do
|
176
186
|
experiment.percentage_of_visitors 30
|
177
|
-
run = Ablab::Run.new(experiment,
|
187
|
+
run = Ablab::Run.new(experiment, 'abc', request)
|
178
188
|
allow(run).to receive(:draw).and_return 0
|
179
189
|
expect(run).to be_in_group(:control)
|
180
|
-
run = Ablab::Run.new(experiment,
|
190
|
+
run = Ablab::Run.new(experiment, 'abc', request)
|
181
191
|
allow(run).to receive(:draw).and_return 100
|
182
192
|
expect(run).to be_in_group(:a)
|
183
|
-
run = Ablab::Run.new(experiment,
|
193
|
+
run = Ablab::Run.new(experiment, 'abc', request)
|
184
194
|
allow(run).to receive(:draw).and_return 200
|
185
195
|
expect(run).to be_in_group(:b)
|
186
|
-
run = Ablab::Run.new(experiment,
|
196
|
+
run = Ablab::Run.new(experiment, 'abc', request)
|
187
197
|
allow(run).to receive(:draw).and_return 300
|
188
198
|
expect(run.group).to be_nil
|
189
199
|
end
|
190
200
|
|
191
201
|
describe "#draw" do
|
192
202
|
it "is stable across ruby processes" do
|
193
|
-
d1 = Ablab::Run.new(experiment, '8asd7f8asf7').draw
|
203
|
+
d1 = Ablab::Run.new(experiment, '8asd7f8asf7', request).draw
|
194
204
|
dir = File.expand_path(File.dirname(__FILE__), '../lib')
|
195
|
-
d2 = `bundle exec ruby -I#{dir} -e "require 'ablab'; require 'ostruct'; puts Ablab::Run.new(OpenStruct.new(name: :foo), '8asd7f8asf7').draw"`
|
205
|
+
d2 = `bundle exec ruby -I#{dir} -e "require 'ablab'; require 'ostruct'; puts Ablab::Run.new(OpenStruct.new(name: :foo), '8asd7f8asf7', nil).draw"`
|
196
206
|
expect(d1).to eq(d2.to_i)
|
197
207
|
end
|
198
208
|
|
199
209
|
it "returns an integer number < 1000" do
|
200
210
|
expect(
|
201
|
-
(0..100).map { |i| Ablab::Run.new(experiment, "#{i}").draw }.all? { |x| x.is_a?(Integer) && x < 1000 }
|
211
|
+
(0..100).map { |i| Ablab::Run.new(experiment, "#{i}", request).draw }.all? { |x| x.is_a?(Integer) && x < 1000 }
|
202
212
|
).to be(true)
|
203
213
|
end
|
204
214
|
end
|
205
215
|
|
206
216
|
describe "#group" do
|
207
217
|
it "returns one of the groups" do
|
208
|
-
expect(Ablab::Run.new(experiment, rand(12345).to_s).group).to be_in([:a, :b, :control])
|
218
|
+
expect(Ablab::Run.new(experiment, rand(12345).to_s, request).group).to be_in([:a, :b, :control])
|
209
219
|
end
|
210
220
|
end
|
211
221
|
|
@@ -218,11 +228,16 @@ describe Ablab do
|
|
218
228
|
|
219
229
|
it "performs callbacks" do
|
220
230
|
x = nil
|
221
|
-
|
222
|
-
|
231
|
+
y = nil
|
232
|
+
allow(Ablab).to receive(:callbacks) {
|
233
|
+
[ -> (*args) { y = args } ]
|
234
|
+
}
|
235
|
+
experiment.on_track do |event, experiment, group, session, request|
|
236
|
+
x = [event, experiment, group, session, request]
|
223
237
|
end
|
224
238
|
run.track_view!
|
225
|
-
expect(x).to eq([:view, :foo, run.group, run.session_id])
|
239
|
+
expect(x).to eq([:view, :foo, run.group, run.session_id, request])
|
240
|
+
expect(y).to eq([:view, :foo, run.group, run.session_id, request])
|
226
241
|
end
|
227
242
|
end
|
228
243
|
|
@@ -235,11 +250,16 @@ describe Ablab do
|
|
235
250
|
|
236
251
|
it "performs callbacks" do
|
237
252
|
x = nil
|
238
|
-
|
239
|
-
|
253
|
+
y = nil
|
254
|
+
allow(Ablab).to receive(:callbacks) {
|
255
|
+
[ -> (*args) { y = args } ]
|
256
|
+
}
|
257
|
+
experiment.on_track do |event, experiment, group, session, request|
|
258
|
+
x = [event, experiment, group, session, request]
|
240
259
|
end
|
241
260
|
run.track_success!
|
242
|
-
expect(x).to eq([:success, :foo, run.group, run.session_id])
|
261
|
+
expect(x).to eq([:success, :foo, run.group, run.session_id, request])
|
262
|
+
expect(y).to eq([:success, :foo, run.group, run.session_id, request])
|
243
263
|
end
|
244
264
|
end
|
245
265
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ablab
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luca Ongaro
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|