vinted-ab 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 67031305b2c5c180288a616ff7d931d4918604dc
4
- data.tar.gz: de313c446acea2eda841eea20930c82938628c0c
3
+ metadata.gz: 9b99ce135ea2599d2b7eed9d8a99652741fb5e63
4
+ data.tar.gz: d2a4c0f817404e112e425374c9647a675e687c86
5
5
  SHA512:
6
- metadata.gz: 8cd252fbb99403b6405401584879f9a410450adbaf2b8efa1c942d113e6046089fea519c90c7d4a9ae449e3e45a236acc1fc2ec0d9762071dcde2e2b88e07712
7
- data.tar.gz: e0f21c86e0a21c40359da87572cfcfc9a23b955ea4d61c0730b547ea80d16a565e85c9a4c75da3551fbabda8f7c76703ae07c8cb7fa35f3bf3edeb8dc90fe9bd
6
+ metadata.gz: 32e40803fc1a40193395ff3220b23ce6ccb5c7d96cadedb68ea0f186783d2ab66396a49d1b4d31c5ec76c53bf5d3497a263a2df41107a2597e079ccb3354bb77
7
+ data.tar.gz: 1229b0fe8d22740adbf0e04377dc490bd5f20366bfaacace608cf04f7b7d224b24aa80a483b59720ec18325cb3e04c9f3d1f5ab8047f1f5bec265c66b8a37741
data/README.md CHANGED
@@ -15,7 +15,7 @@ Each identifier is assigned to a bucket, using a hashing function. Buckets can t
15
15
  ```ruby
16
16
  ab = Ab::Tests.new(configuration, identifier)
17
17
 
18
- # defining callbacks
18
+ # defining callbacks, will use caller's context
19
19
  Ab::Tests.before_picking_variant { |test| puts "picking variant for #{test}" }
20
20
  Ab::Tests.after_picking_variant { |test, variant| puts "#{variant_name}" }
21
21
 
@@ -113,3 +113,8 @@ seeded_identifier = test.seed + identifier.to_string
113
113
  weight_id = SHA256.hexdigest(seeded_identifier).to_int % chance_weight_sum
114
114
  test.variants.find { |variant| variant.accumulated_chance_weight > weight_id }
115
115
  ```
116
+
117
+ ## Other Implementations
118
+
119
+ * [Java](https://github.com/vinted/ab-java) - intended to be used on Android, but not limited to that
120
+ * [Objective-C](https://github.com/vinted/ab-ios) - intended to be used on iOS devices
data/ab.gemspec CHANGED
@@ -19,7 +19,6 @@ Gem::Specification.new do |spec|
19
19
  spec.test_files = `git ls-files -- {spec}/*`.split("\n")
20
20
  spec.require_paths = ['lib']
21
21
 
22
- spec.add_runtime_dependency 'hooks', '~> 0.4', '>= 0.4.0'
23
22
  spec.add_development_dependency 'bundler', '~> 1.3'
24
23
  spec.add_development_dependency 'rake', '~> 10.1', '>= 10.1.0'
25
24
  spec.add_development_dependency 'rspec', '~> 2.14', '>= 2.14.0'
data/lib/ab.rb CHANGED
@@ -1,4 +1,3 @@
1
- require 'hooks'
2
1
  require 'ab/version'
3
2
  require 'ab/null_test'
4
3
  require 'ab/variant'
@@ -1,8 +1,5 @@
1
1
  module Ab
2
2
  class AssignedTest
3
- include Hooks
4
- define_hooks :before_picking_variant, :after_picking_variant
5
-
6
3
  def initialize(test, id)
7
4
  @test, @id = test, id
8
5
  @test.variants.map(&:name).each do |name|
@@ -10,16 +7,27 @@ module Ab
10
7
  end
11
8
  end
12
9
 
10
+ class << self
11
+ attr_reader :before, :after
12
+ def before_picking_variant(&block)
13
+ @before = block
14
+ end
15
+
16
+ def after_picking_variant(&block)
17
+ @after = block
18
+ end
19
+ end
20
+
13
21
  def variant
14
22
  @variant ||= begin
15
23
  return unless part_of_test?
16
24
  return unless running?
17
25
 
18
- run_hook :before_picking_variant, @test.name
26
+ AssignedTest.before.call(@test.name) if AssignedTest.before.respond_to?(:call)
19
27
  picked_variant = @test.variants.find { |v| v.accumulated_chance_weight > weight_id }
20
28
 
21
29
  result = picked_variant.name if picked_variant
22
- run_hook :after_picking_variant, @test.name, result
30
+ AssignedTest.after.call(@test.name, result) if AssignedTest.after.respond_to?(:call)
23
31
  result
24
32
  end
25
33
  end
data/lib/ab/tests.rb CHANGED
@@ -1,13 +1,13 @@
1
1
  module Ab
2
2
  class Tests
3
- include Hooks
4
- define_hooks :before_picking_variant, :after_picking_variant
3
+ class << self
4
+ def before_picking_variant(&block)
5
+ AssignedTest.before_picking_variant(&block)
6
+ end
5
7
 
6
- Ab::AssignedTest.before_picking_variant do |test|
7
- Ab::Tests.run_hook :before_picking_variant, test
8
- end
9
- Ab::AssignedTest.after_picking_variant do |test, variant|
10
- Ab::Tests.run_hook :after_picking_variant, test, variant
8
+ def after_picking_variant(&block)
9
+ AssignedTest.after_picking_variant(&block)
10
+ end
11
11
  end
12
12
 
13
13
  def initialize(json, id)
data/lib/ab/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ab
2
- VERSION = '0.2.1'
2
+ VERSION = '0.2.2'
3
3
  end
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "test": "already_finished",
3
3
  "variants": {
4
- "": [291605, 304029, 260623, 330108, 579320, 530360, 372392, 700813, 244200, 541818, 432400, 943631, 437817, 226191, 569129, 436127, 490360, 929904, 603358, 437705, 878118, 807422, 972099, 404677, 67694, 384045, 48608, 518304, 830501, 902758, 915681, 211550, 748688, 606226, 309490, 12909, 762, 560680, 945245, 795680, 358793, 850366, 278017, 765934, 378015, 156624, 878811, 814470, 830857, 712438]
4
+ "": [null, 291605, 304029, 260623, 330108, 579320, 530360, 372392, 700813, 244200, 541818, 432400, 943631, 437817, 226191, 569129, 436127, 490360, 929904, 603358, 437705, 878118, 807422, 972099, 404677, 67694, 384045, 48608, 518304, 830501, 902758, 915681, 211550, 748688, 606226, 309490, 12909, 762, 560680, 945245, 795680, 358793, 850366, 278017, 765934, 378015, 156624, 878811, 814470, 830857, 712438]
5
5
  }
6
6
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "test": "has_not_started",
3
3
  "variants": {
4
- "": [183045, 691488, 793455, 522272, 961068, 778995, 753374, 995071, 219, 9, 765648, 519309, 581785, 419174, 62315, 901724, 739080, 528967, 744073, 751906, 886404, 457847, 817084, 160980, 302650, 911722, 447343, 871078, 450743, 879249, 276816, 826730, 697169, 344382, 511211, 154169, 55093, 648220, 964453, 862546, 208317, 16098, 341078, 111032, 277598, 876165, 650530, 446612, 583245, 7724]
4
+ "": [null, 183045, 691488, 793455, 522272, 961068, 778995, 753374, 995071, 219, 9, 765648, 519309, 581785, 419174, 62315, 901724, 739080, 528967, 744073, 751906, 886404, 457847, 817084, 160980, 302650, 911722, 447343, 871078, 450743, 879249, 276816, 826730, 697169, 344382, 511211, 154169, 55093, 648220, 964453, 862546, 208317, 16098, 341078, 111032, 277598, 876165, 650530, 446612, 583245, 7724]
5
5
  }
6
6
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "test": "no_buckets",
3
3
  "variants": {
4
- "": [221661, 512005, 429796, 860028, 10044, 249906, 491257, 188883, 793187, 86200, 155542, 257569, 534172, 506476, 461784, 123346, 882492, 933085, 105147, 575351, 756286, 293415, 946852, 894051, 109248, 285169, 499834, 422777, 793, 353968, 470821, 300689, 994515, 352756, 527621, 811497, 12865, 405584, 783387, 23868, 1577, 402157, 645302, 921879, 743877, 65532, 729269, 704958, 473143, 621616]
4
+ "": [null, 221661, 512005, 429796, 860028, 10044, 249906, 491257, 188883, 793187, 86200, 155542, 257569, 534172, 506476, 461784, 123346, 882492, 933085, 105147, 575351, 756286, 293415, 946852, 894051, 109248, 285169, 499834, 422777, 793, 353968, 470821, 300689, 994515, 352756, 527621, 811497, 12865, 405584, 783387, 23868, 1577, 402157, 645302, 921879, 743877, 65532, 729269, 704958, 473143, 621616]
5
5
  }
6
6
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "test": "zero_buckets",
3
3
  "variants": {
4
- "": [407157, 680726, 413486, 225300, 884397, 493575, 77961, 191171, 540935, 504825, 276950, 750121, 964532, 987549, 250191, 644840, 906385, 584061, 56659, 397052, 544631, 107797, 485280, 418972, 547068, 726896, 224553, 369481, 713741, 739533, 639550, 895066, 397180, 829280, 581343, 566108, 438772, 173296, 99849, 106325, 308317, 135582, 82913, 994233, 882570, 72915, 699850, 161517, 420297, 836392]
4
+ "": [null, 407157, 680726, 413486, 225300, 884397, 493575, 77961, 191171, 540935, 504825, 276950, 750121, 964532, 987549, 250191, 644840, 906385, 584061, 56659, 397052, 544631, 107797, 485280, 418972, 547068, 726896, 224553, 369481, 713741, 739533, 639550, 895066, 397180, 829280, 581343, 566108, 438772, 173296, 99849, 106325, 308317, 135582, 82913, 994233, 882570, 72915, 699850, 161517, 420297, 836392]
5
5
  }
6
6
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "test": "zero_weight",
3
3
  "variants": {
4
- "": [407157, 680726, 413486, 225300, 884397, 493575, 77961, 191171, 540935, 504825, 276950, 750121, 964532, 987549, 250191, 644840, 906385, 584061, 56659, 397052, 544631, 107797, 485280, 418972, 547068, 726896, 224553, 369481, 713741, 739533, 639550, 895066, 397180, 829280, 581343, 566108, 438772, 173296, 99849, 106325, 308317, 135582, 82913, 994233, 882570, 72915, 699850, 161517, 420297, 836392]
4
+ "": [null, 407157, 680726, 413486, 225300, 884397, 493575, 77961, 191171, 540935, 504825, 276950, 750121, 964532, 987549, 250191, 644840, 906385, 584061, 56659, 397052, 544631, 107797, 485280, 418972, 547068, 726896, 224553, 369481, 713741, 739533, 639550, 895066, 397180, 829280, 581343, 566108, 438772, 173296, 99849, 106325, 308317, 135582, 82913, 994233, 882570, 72915, 699850, 161517, 420297, 836392]
5
5
  }
6
6
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vinted-ab
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mindaugas Mozūras
@@ -9,140 +9,120 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-06-19 00:00:00.000000000 Z
12
+ date: 2014-07-07 00:00:00.000000000 Z
13
13
  dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: hooks
16
- requirement: !ruby/object:Gem::Requirement
17
- requirements:
18
- - - ~>
19
- - !ruby/object:Gem::Version
20
- version: '0.4'
21
- - - '>='
22
- - !ruby/object:Gem::Version
23
- version: 0.4.0
24
- type: :runtime
25
- prerelease: false
26
- version_requirements: !ruby/object:Gem::Requirement
27
- requirements:
28
- - - ~>
29
- - !ruby/object:Gem::Version
30
- version: '0.4'
31
- - - '>='
32
- - !ruby/object:Gem::Version
33
- version: 0.4.0
34
14
  - !ruby/object:Gem::Dependency
35
15
  name: bundler
36
16
  requirement: !ruby/object:Gem::Requirement
37
17
  requirements:
38
- - - ~>
18
+ - - "~>"
39
19
  - !ruby/object:Gem::Version
40
20
  version: '1.3'
41
21
  type: :development
42
22
  prerelease: false
43
23
  version_requirements: !ruby/object:Gem::Requirement
44
24
  requirements:
45
- - - ~>
25
+ - - "~>"
46
26
  - !ruby/object:Gem::Version
47
27
  version: '1.3'
48
28
  - !ruby/object:Gem::Dependency
49
29
  name: rake
50
30
  requirement: !ruby/object:Gem::Requirement
51
31
  requirements:
52
- - - ~>
32
+ - - "~>"
53
33
  - !ruby/object:Gem::Version
54
34
  version: '10.1'
55
- - - '>='
35
+ - - ">="
56
36
  - !ruby/object:Gem::Version
57
37
  version: 10.1.0
58
38
  type: :development
59
39
  prerelease: false
60
40
  version_requirements: !ruby/object:Gem::Requirement
61
41
  requirements:
62
- - - ~>
42
+ - - "~>"
63
43
  - !ruby/object:Gem::Version
64
44
  version: '10.1'
65
- - - '>='
45
+ - - ">="
66
46
  - !ruby/object:Gem::Version
67
47
  version: 10.1.0
68
48
  - !ruby/object:Gem::Dependency
69
49
  name: rspec
70
50
  requirement: !ruby/object:Gem::Requirement
71
51
  requirements:
72
- - - ~>
52
+ - - "~>"
73
53
  - !ruby/object:Gem::Version
74
54
  version: '2.14'
75
- - - '>='
55
+ - - ">="
76
56
  - !ruby/object:Gem::Version
77
57
  version: 2.14.0
78
58
  type: :development
79
59
  prerelease: false
80
60
  version_requirements: !ruby/object:Gem::Requirement
81
61
  requirements:
82
- - - ~>
62
+ - - "~>"
83
63
  - !ruby/object:Gem::Version
84
64
  version: '2.14'
85
- - - '>='
65
+ - - ">="
86
66
  - !ruby/object:Gem::Version
87
67
  version: 2.14.0
88
68
  - !ruby/object:Gem::Dependency
89
69
  name: json-schema
90
70
  requirement: !ruby/object:Gem::Requirement
91
71
  requirements:
92
- - - ~>
72
+ - - "~>"
93
73
  - !ruby/object:Gem::Version
94
74
  version: 2.2.2
95
- - - '>='
75
+ - - ">="
96
76
  - !ruby/object:Gem::Version
97
77
  version: 2.2.2
98
78
  type: :development
99
79
  prerelease: false
100
80
  version_requirements: !ruby/object:Gem::Requirement
101
81
  requirements:
102
- - - ~>
82
+ - - "~>"
103
83
  - !ruby/object:Gem::Version
104
84
  version: 2.2.2
105
- - - '>='
85
+ - - ">="
106
86
  - !ruby/object:Gem::Version
107
87
  version: 2.2.2
108
88
  - !ruby/object:Gem::Dependency
109
89
  name: ruby-prof
110
90
  requirement: !ruby/object:Gem::Requirement
111
91
  requirements:
112
- - - ~>
92
+ - - "~>"
113
93
  - !ruby/object:Gem::Version
114
94
  version: 0.15.0
115
- - - '>='
95
+ - - ">="
116
96
  - !ruby/object:Gem::Version
117
97
  version: 0.15.0
118
98
  type: :development
119
99
  prerelease: false
120
100
  version_requirements: !ruby/object:Gem::Requirement
121
101
  requirements:
122
- - - ~>
102
+ - - "~>"
123
103
  - !ruby/object:Gem::Version
124
104
  version: 0.15.0
125
- - - '>='
105
+ - - ">="
126
106
  - !ruby/object:Gem::Version
127
107
  version: 0.15.0
128
108
  - !ruby/object:Gem::Dependency
129
109
  name: pry
130
110
  requirement: !ruby/object:Gem::Requirement
131
111
  requirements:
132
- - - ~>
112
+ - - "~>"
133
113
  - !ruby/object:Gem::Version
134
114
  version: 0.10.0
135
- - - '>='
115
+ - - ">="
136
116
  - !ruby/object:Gem::Version
137
117
  version: 0.10.0
138
118
  type: :development
139
119
  prerelease: false
140
120
  version_requirements: !ruby/object:Gem::Requirement
141
121
  requirements:
142
- - - ~>
122
+ - - "~>"
143
123
  - !ruby/object:Gem::Version
144
124
  version: 0.10.0
145
- - - '>='
125
+ - - ">="
146
126
  - !ruby/object:Gem::Version
147
127
  version: 0.10.0
148
128
  description:
@@ -153,8 +133,8 @@ executables: []
153
133
  extensions: []
154
134
  extra_rdoc_files: []
155
135
  files:
156
- - .gitignore
157
- - .rubocop.yml
136
+ - ".gitignore"
137
+ - ".rubocop.yml"
158
138
  - Gemfile
159
139
  - LICENSE
160
140
  - README.md
@@ -208,17 +188,17 @@ require_paths:
208
188
  - lib
209
189
  required_ruby_version: !ruby/object:Gem::Requirement
210
190
  requirements:
211
- - - '>='
191
+ - - ">="
212
192
  - !ruby/object:Gem::Version
213
193
  version: '0'
214
194
  required_rubygems_version: !ruby/object:Gem::Requirement
215
195
  requirements:
216
- - - '>='
196
+ - - ">="
217
197
  - !ruby/object:Gem::Version
218
198
  version: 1.3.6
219
199
  requirements: []
220
200
  rubyforge_project:
221
- rubygems_version: 2.2.2
201
+ rubygems_version: 2.3.0
222
202
  signing_key:
223
203
  specification_version: 4
224
204
  summary: AB testing gem used internally by Vinted