vinted-ab 0.2.6 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rubocop.yml +4 -1
- data/.travis.yml +5 -3
- data/ab.gemspec +2 -4
- data/lib/ab/assigned_test.rb +8 -4
- data/lib/ab/test.rb +1 -1
- data/lib/ab/tests.rb +30 -14
- data/lib/ab/version.rb +1 -1
- data/spec/null_test_spec.rb +2 -2
- metadata +5 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d069e34f8671a2ccc55a6924afb1e255888b4ca740a4a03dbbdd6f360d907b58
|
4
|
+
data.tar.gz: f51aa39c3be297dca1b7fa89d99e414d85505f4bdea797631412540d0e0d1db0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9fbd2529f3c958a563221756ba9f74fd1f89f734d424768a3232f4277ba53f71a00addce8bd45479b9622167597e9d7483bc6139a924667be45045956513e9c6
|
7
|
+
data.tar.gz: 9128f66932480f1fe744e833f599ece23250e317a9787a4864791ee2d8381a42ad3bbad9d5e5076c1b12f745ce54021e941f33532263d15e45d1b1d1e2e63d78
|
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
data/ab.gemspec
CHANGED
@@ -15,14 +15,12 @@ Gem::Specification.new do |spec|
|
|
15
15
|
spec.required_rubygems_version = '>= 1.3.6'
|
16
16
|
spec.license = 'MIT'
|
17
17
|
|
18
|
-
spec.files = `git ls-files`.split(
|
18
|
+
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
19
19
|
spec.test_files = `git ls-files -- {spec}/*`.split("\n")
|
20
20
|
spec.require_paths = ['lib']
|
21
21
|
|
22
|
-
spec.add_development_dependency 'rake', '~>
|
22
|
+
spec.add_development_dependency 'rake', '~> 11.0'
|
23
23
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
24
24
|
spec.add_development_dependency 'rspec-its', '~> 1.0'
|
25
25
|
spec.add_development_dependency 'json-schema', '~> 2.2.2', '>= 2.2.2'
|
26
|
-
spec.add_development_dependency 'ruby-prof', '~> 0.15.0', '>= 0.15.0'
|
27
|
-
spec.add_development_dependency 'pry', '~> 0.10.0', '>= 0.10.0'
|
28
26
|
end
|
data/lib/ab/assigned_test.rb
CHANGED
@@ -3,10 +3,8 @@ module Ab
|
|
3
3
|
include Ab::MissingVariant
|
4
4
|
|
5
5
|
def initialize(test, id)
|
6
|
-
@test
|
7
|
-
|
8
|
-
define_singleton_method("#{name}?") { name == variant }
|
9
|
-
end
|
6
|
+
@test = test
|
7
|
+
@id = id
|
10
8
|
end
|
11
9
|
|
12
10
|
class << self
|
@@ -20,6 +18,12 @@ module Ab
|
|
20
18
|
end
|
21
19
|
end
|
22
20
|
|
21
|
+
def method_missing(name, *args, &block)
|
22
|
+
variant_query = name.to_s[0..-2]
|
23
|
+
return variant == variant_query if variant_method?(name) && variants.include?(variant_query)
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
23
27
|
def variant(run_callbacks = true)
|
24
28
|
@variant ||= begin
|
25
29
|
return unless part_of_test?
|
data/lib/ab/test.rb
CHANGED
data/lib/ab/tests.rb
CHANGED
@@ -13,29 +13,45 @@ module Ab
|
|
13
13
|
def initialize(json, id)
|
14
14
|
json ||= {}
|
15
15
|
config = json.is_a?(Hash) ? json : JSON.parse(json)
|
16
|
-
|
17
|
-
salt = config['salt']
|
18
|
-
bucket_count = config['bucket_count']
|
19
|
-
|
20
|
-
tests = (config['ab_tests'] || []).map { |test| Test.new(test, salt, bucket_count) }
|
21
|
-
|
22
|
-
@assigned_tests = tests.map do |test|
|
23
|
-
assigned_test = AssignedTest.new(test, id)
|
24
|
-
define_singleton_method(test.name) { assigned_test }
|
25
|
-
[test.name, assigned_test]
|
26
|
-
end
|
16
|
+
@ab_tests = config['ab_tests'] || []
|
17
|
+
@salt = config['salt']
|
18
|
+
@bucket_count = config['bucket_count']
|
19
|
+
@id = id
|
27
20
|
end
|
28
21
|
|
29
22
|
def all
|
30
|
-
|
23
|
+
grouped_ab_tests.keys.map { |name| [name, assigned_test(name).variant(false)] }.to_h
|
31
24
|
end
|
32
25
|
|
33
|
-
def method_missing(*)
|
34
|
-
|
26
|
+
def method_missing(name, *)
|
27
|
+
assigned_test(name.to_s) || null_test
|
35
28
|
end
|
36
29
|
|
37
30
|
def respond_to_missing?(*)
|
38
31
|
true
|
39
32
|
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def null_test
|
37
|
+
@null_test ||= NullTest.new
|
38
|
+
end
|
39
|
+
|
40
|
+
def assigned_test(name)
|
41
|
+
@assigned_tests ||= {}
|
42
|
+
if grouped_ab_tests.key?(name)
|
43
|
+
@assigned_tests[name] ||= begin
|
44
|
+
test = Test.new(grouped_ab_tests[name], @salt, @bucket_count)
|
45
|
+
AssignedTest.new(test, @id)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def grouped_ab_tests
|
51
|
+
@grouped_ab_tests ||= @ab_tests.reduce({}) do |hash, test|
|
52
|
+
hash[test['name']] = test
|
53
|
+
hash
|
54
|
+
end
|
55
|
+
end
|
40
56
|
end
|
41
57
|
end
|
data/lib/ab/version.rb
CHANGED
data/spec/null_test_spec.rb
CHANGED
@@ -12,12 +12,12 @@ module Ab
|
|
12
12
|
before { Ab.config.logger.should_not_receive(:debug) }
|
13
13
|
|
14
14
|
specify 'does not raise' do
|
15
|
-
|
15
|
+
-> { subject.bla? }.should_not raise_error
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
19
|
specify 'raises for method not ending in question mark' do
|
20
|
-
|
20
|
+
-> { subject.bla }.should raise_error
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
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.
|
4
|
+
version: 0.2.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mindaugas Mozūras
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2019-02-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -17,14 +17,14 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
20
|
+
version: '11.0'
|
21
21
|
type: :development
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
27
|
+
version: '11.0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rspec
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -73,46 +73,6 @@ dependencies:
|
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: 2.2.2
|
76
|
-
- !ruby/object:Gem::Dependency
|
77
|
-
name: ruby-prof
|
78
|
-
requirement: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: 0.15.0
|
83
|
-
- - ">="
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version: 0.15.0
|
86
|
-
type: :development
|
87
|
-
prerelease: false
|
88
|
-
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
requirements:
|
90
|
-
- - "~>"
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
version: 0.15.0
|
93
|
-
- - ">="
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
version: 0.15.0
|
96
|
-
- !ruby/object:Gem::Dependency
|
97
|
-
name: pry
|
98
|
-
requirement: !ruby/object:Gem::Requirement
|
99
|
-
requirements:
|
100
|
-
- - "~>"
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version: 0.10.0
|
103
|
-
- - ">="
|
104
|
-
- !ruby/object:Gem::Version
|
105
|
-
version: 0.10.0
|
106
|
-
type: :development
|
107
|
-
prerelease: false
|
108
|
-
version_requirements: !ruby/object:Gem::Requirement
|
109
|
-
requirements:
|
110
|
-
- - "~>"
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
version: 0.10.0
|
113
|
-
- - ">="
|
114
|
-
- !ruby/object:Gem::Version
|
115
|
-
version: 0.10.0
|
116
76
|
description:
|
117
77
|
email:
|
118
78
|
- mindaugas.mozuras@gmail.com
|
@@ -191,7 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
191
151
|
version: 1.3.6
|
192
152
|
requirements: []
|
193
153
|
rubyforge_project:
|
194
|
-
rubygems_version: 2.
|
154
|
+
rubygems_version: 2.7.6
|
195
155
|
signing_key:
|
196
156
|
specification_version: 4
|
197
157
|
summary: AB testing gem used internally by Vinted
|