ablab 0.2.4 → 0.2.5
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 +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
|