trailguide 0.1.28 → 0.1.29
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/trail_guide/adapters/participants/anonymous.rb +2 -28
- data/lib/trail_guide/adapters/participants/base.rb +62 -0
- data/lib/trail_guide/adapters/participants/cookie.rb +4 -22
- data/lib/trail_guide/adapters/participants/multi.rb +1 -10
- data/lib/trail_guide/adapters/participants/redis.rb +4 -17
- data/lib/trail_guide/adapters/participants/session.rb +4 -19
- data/lib/trail_guide/adapters/participants.rb +1 -0
- data/lib/trail_guide/experiments/base.rb +7 -3
- data/lib/trail_guide/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b540b83cf83733890a8bcceaad5036b17c25909e63d55d1f38da77be6549c3a
|
4
|
+
data.tar.gz: 045acd10dfef88c01b955c81ae8808e4bd00a5177411a10c5491461f540ce256
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9984483fce25ab0a2c3082cdea31235c10e32b5dd5d2f993bfa501f299efdc932e1d2c214898b12e2f675f1b04af2343978ceeb0d62a3f9edf91b4482a4758c5
|
7
|
+
data.tar.gz: a0fb4822dfa753142886e1cbb8dd34fb17173518314562e2f1e2f90ad8ac9927ebe0dc412d94a94ba1b3f85bfa74367eeb5cbc93cfdfb3f27c845b900ae0afd1
|
@@ -1,34 +1,8 @@
|
|
1
1
|
module TrailGuide
|
2
2
|
module Adapters
|
3
3
|
module Participants
|
4
|
-
class Anonymous
|
5
|
-
|
6
|
-
|
7
|
-
class << self
|
8
|
-
alias_method :configure, :new
|
9
|
-
def new(_context, &block)
|
10
|
-
configure(&block).new(_context)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def initialize(&block)
|
15
|
-
configure do |config|
|
16
|
-
yield(config) if block_given?
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
# instance method, creates a new adapter and passes through config
|
21
|
-
def new(_context)
|
22
|
-
Adapter.new(configuration)
|
23
|
-
end
|
24
|
-
|
25
|
-
class Adapter
|
26
|
-
attr_reader :config
|
27
|
-
|
28
|
-
def initialize(config)
|
29
|
-
@config = config
|
30
|
-
end
|
31
|
-
|
4
|
+
class Anonymous < Base
|
5
|
+
class Adapter < Base::Adapter
|
32
6
|
def [](key)
|
33
7
|
hash[key]
|
34
8
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module TrailGuide
|
2
|
+
module Adapters
|
3
|
+
module Participants
|
4
|
+
class Base
|
5
|
+
include Canfig::Instance
|
6
|
+
|
7
|
+
class << self
|
8
|
+
alias_method :configure, :new
|
9
|
+
def new(context, &block)
|
10
|
+
configure(&block).new(context)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(&block)
|
15
|
+
configure(&block) if block_given?
|
16
|
+
end
|
17
|
+
|
18
|
+
def new(context)
|
19
|
+
self.class::Adapter.new(context, configuration)
|
20
|
+
end
|
21
|
+
|
22
|
+
class Adapter
|
23
|
+
attr_reader :context, :config
|
24
|
+
alias_method :configuration, :config
|
25
|
+
|
26
|
+
def initialize(context, config)
|
27
|
+
@context = context
|
28
|
+
@config = config
|
29
|
+
end
|
30
|
+
|
31
|
+
def [](key)
|
32
|
+
raise NotImplementedError, "You must override the `[]` method in your inheriting adapter class"
|
33
|
+
end
|
34
|
+
|
35
|
+
def []=(key, value)
|
36
|
+
raise NotImplementedError, "You must override the `[]=` method in your inheriting adapter class"
|
37
|
+
end
|
38
|
+
|
39
|
+
def delete(key)
|
40
|
+
raise NotImplementedError, "You must override the `delete` method in your inheriting adapter class"
|
41
|
+
end
|
42
|
+
|
43
|
+
def destroy!
|
44
|
+
raise NotImplementedError, "You must override the `destroy!` method in your inheriting adapter class"
|
45
|
+
end
|
46
|
+
|
47
|
+
def keys
|
48
|
+
raise NotImplementedError, "You must override the `keys` method in your inheriting adapter class"
|
49
|
+
end
|
50
|
+
|
51
|
+
def key?(key)
|
52
|
+
raise NotImplementedError, "You must override the `key?` method in your inheriting adapter class"
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_h
|
56
|
+
raise NotImplementedError, "You must override the `to_h` method in your inheriting adapter class"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -1,17 +1,7 @@
|
|
1
1
|
module TrailGuide
|
2
2
|
module Adapters
|
3
3
|
module Participants
|
4
|
-
class Cookie
|
5
|
-
include Canfig::Instance
|
6
|
-
|
7
|
-
# TODO maybe be a little better about checking for action dispatch, etc.?
|
8
|
-
|
9
|
-
class << self
|
10
|
-
alias_method :configure, :new
|
11
|
-
def new(context, &block)
|
12
|
-
configure(&block).new(context)
|
13
|
-
end
|
14
|
-
end
|
4
|
+
class Cookie < Base
|
15
5
|
|
16
6
|
def initialize(&block)
|
17
7
|
configure do |config|
|
@@ -24,18 +14,10 @@ module TrailGuide
|
|
24
14
|
end
|
25
15
|
end
|
26
16
|
|
27
|
-
|
28
|
-
def new(context)
|
29
|
-
raise UnsupportedContextError, "Your current context (#{context}) does not support cookies" unless context.respond_to?(:cookies, true)
|
30
|
-
Adapter.new(context, configuration)
|
31
|
-
end
|
32
|
-
|
33
|
-
class Adapter
|
34
|
-
attr_reader :context, :config
|
35
|
-
|
17
|
+
class Adapter < Base::Adapter
|
36
18
|
def initialize(context, config)
|
37
|
-
|
38
|
-
|
19
|
+
raise UnsupportedContextError, "Your current context (#{context}) does not support cookies" unless context.respond_to?(:cookies, true)
|
20
|
+
super
|
39
21
|
end
|
40
22
|
|
41
23
|
def [](key)
|
@@ -1,15 +1,7 @@
|
|
1
1
|
module TrailGuide
|
2
2
|
module Adapters
|
3
3
|
module Participants
|
4
|
-
class Multi
|
5
|
-
include Canfig::Instance
|
6
|
-
|
7
|
-
class << self
|
8
|
-
alias_method :configure, :new
|
9
|
-
def new(context, &block)
|
10
|
-
configure(&block).new(context)
|
11
|
-
end
|
12
|
-
end
|
4
|
+
class Multi < Base
|
13
5
|
|
14
6
|
def initialize(&block)
|
15
7
|
configure do |config|
|
@@ -29,7 +21,6 @@ module TrailGuide
|
|
29
21
|
end
|
30
22
|
end
|
31
23
|
|
32
|
-
# instance method, creates a new adapter and passes through config
|
33
24
|
def new(context)
|
34
25
|
adapter = configuration.adapter.call(context)
|
35
26
|
adapter = configuration.send(adapter) if adapter.is_a?(Symbol)
|
@@ -1,15 +1,7 @@
|
|
1
1
|
module TrailGuide
|
2
2
|
module Adapters
|
3
3
|
module Participants
|
4
|
-
class Redis
|
5
|
-
include Canfig::Instance
|
6
|
-
|
7
|
-
class << self
|
8
|
-
alias_method :configure, :new
|
9
|
-
def new(context, **opts, &block)
|
10
|
-
configure(&block).new(context, **opts)
|
11
|
-
end
|
12
|
-
end
|
4
|
+
class Redis < Base
|
13
5
|
|
14
6
|
def initialize(&block)
|
15
7
|
configure do |config|
|
@@ -21,16 +13,11 @@ module TrailGuide
|
|
21
13
|
end
|
22
14
|
end
|
23
15
|
|
24
|
-
|
25
|
-
|
26
|
-
Adapter.new(context, configuration, **opts)
|
27
|
-
end
|
28
|
-
|
29
|
-
class Adapter
|
30
|
-
attr_reader :config, :storage_key
|
16
|
+
class Adapter < Base::Adapter
|
17
|
+
attr_reader :storage_key
|
31
18
|
|
32
19
|
def initialize(context, config, key: nil)
|
33
|
-
|
20
|
+
super(context, config)
|
34
21
|
|
35
22
|
if key
|
36
23
|
@storage_key = "#{config.namespace}:#{key}"
|
@@ -1,15 +1,7 @@
|
|
1
1
|
module TrailGuide
|
2
2
|
module Adapters
|
3
3
|
module Participants
|
4
|
-
class Session
|
5
|
-
include Canfig::Instance
|
6
|
-
|
7
|
-
class << self
|
8
|
-
alias_method :configure, :new
|
9
|
-
def new(context, &block)
|
10
|
-
configure(&block).new(context)
|
11
|
-
end
|
12
|
-
end
|
4
|
+
class Session < Base
|
13
5
|
|
14
6
|
def initialize(&block)
|
15
7
|
configure do |config|
|
@@ -19,18 +11,11 @@ module TrailGuide
|
|
19
11
|
end
|
20
12
|
end
|
21
13
|
|
22
|
-
|
23
|
-
def new(context)
|
24
|
-
raise UnsupportedContextError, "Your current context (#{context}) does not support sessions" unless context.respond_to?(:session, true)
|
25
|
-
Adapter.new(context, configuration)
|
26
|
-
end
|
27
|
-
|
28
|
-
class Adapter
|
29
|
-
attr_reader :context, :config
|
14
|
+
class Adapter < Base::Adapter
|
30
15
|
|
31
16
|
def initialize(context, config)
|
32
|
-
|
33
|
-
|
17
|
+
raise UnsupportedContextError, "Your current context (#{context}) does not support sessions" unless context.respond_to?(:session, true)
|
18
|
+
super
|
34
19
|
end
|
35
20
|
|
36
21
|
def [](key)
|
@@ -237,9 +237,7 @@ module TrailGuide
|
|
237
237
|
return control unless allow_participation?(metadata)
|
238
238
|
|
239
239
|
variant = algorithm_choose!(metadata: metadata)
|
240
|
-
variant
|
241
|
-
participant.participating!(variant)
|
242
|
-
run_callbacks(:on_choose, variant, metadata)
|
240
|
+
variant_chosen!(variant, metadata: metadata)
|
243
241
|
variant
|
244
242
|
end
|
245
243
|
|
@@ -247,6 +245,12 @@ module TrailGuide
|
|
247
245
|
algorithm.choose!(metadata: metadata)
|
248
246
|
end
|
249
247
|
|
248
|
+
def variant_chosen!(variant, metadata: nil)
|
249
|
+
variant.increment_participation!
|
250
|
+
participant.participating!(variant)
|
251
|
+
run_callbacks(:on_choose, variant, metadata)
|
252
|
+
end
|
253
|
+
|
250
254
|
def convert!(checkpoint=nil, metadata: nil)
|
251
255
|
return false if !running? || (winner? && !track_winner_conversions?)
|
252
256
|
return false unless participant.participating?
|
data/lib/trail_guide/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trailguide
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.29
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Rebec
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -138,6 +138,7 @@ files:
|
|
138
138
|
- lib/trail_guide/adapters.rb
|
139
139
|
- lib/trail_guide/adapters/participants.rb
|
140
140
|
- lib/trail_guide/adapters/participants/anonymous.rb
|
141
|
+
- lib/trail_guide/adapters/participants/base.rb
|
141
142
|
- lib/trail_guide/adapters/participants/cookie.rb
|
142
143
|
- lib/trail_guide/adapters/participants/multi.rb
|
143
144
|
- lib/trail_guide/adapters/participants/redis.rb
|