camping-abingo 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README +3 -0
- data/doc/classes/ABingoCampingPlugin.html +188 -0
- data/doc/classes/ABingoCampingPlugin.src/M000016.html +18 -0
- data/doc/classes/ABingoCampingPlugin.src/M000017.html +18 -0
- data/doc/classes/ABingoCampingPlugin.src/M000018.html +19 -0
- data/doc/classes/ABingoCampingPlugin.src/M000034.html +18 -0
- data/doc/classes/ABingoCampingPlugin.src/M000035.html +18 -0
- data/doc/classes/ABingoCampingPlugin.src/M000036.html +19 -0
- data/doc/classes/ABingoCampingPlugin/ABingo.html +121 -0
- data/doc/classes/ABingoCampingPlugin/Controllers.html +191 -0
- data/doc/classes/ABingoCampingPlugin/Controllers.src/M000022.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Controllers.src/M000023.html +26 -0
- data/doc/classes/ABingoCampingPlugin/Controllers.src/M000040.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Controllers.src/M000041.html +26 -0
- data/doc/classes/ABingoCampingPlugin/Filters.html +158 -0
- data/doc/classes/ABingoCampingPlugin/Filters.src/M000037.html +26 -0
- data/doc/classes/ABingoCampingPlugin/Filters.src/M000055.html +26 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.html +372 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000024.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000025.html +19 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000026.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000027.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000028.html +36 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000029.html +28 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000030.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000031.html +48 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000032.html +32 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000033.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000034.html +26 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000035.html +20 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000036.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000042.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000043.html +19 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000044.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000045.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000046.html +36 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000047.html +28 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000048.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000049.html +48 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000050.html +32 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000051.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000052.html +26 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000053.html +20 -0
- data/doc/classes/ABingoCampingPlugin/Helpers.src/M000054.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Models.html +208 -0
- data/doc/classes/ABingoCampingPlugin/Models.src/M000038.html +22 -0
- data/doc/classes/ABingoCampingPlugin/Models.src/M000039.html +39 -0
- data/doc/classes/ABingoCampingPlugin/Models.src/M000040.html +21 -0
- data/doc/classes/ABingoCampingPlugin/Models.src/M000056.html +22 -0
- data/doc/classes/ABingoCampingPlugin/Models.src/M000057.html +39 -0
- data/doc/classes/ABingoCampingPlugin/Models.src/M000058.html +21 -0
- data/doc/classes/ABingoCampingPlugin/Models/Alternative.html +181 -0
- data/doc/classes/ABingoCampingPlugin/Models/Alternative.src/M000041.html +20 -0
- data/doc/classes/ABingoCampingPlugin/Models/Alternative.src/M000042.html +21 -0
- data/doc/classes/ABingoCampingPlugin/Models/Alternative.src/M000043.html +21 -0
- data/doc/classes/ABingoCampingPlugin/Models/Alternative.src/M000059.html +20 -0
- data/doc/classes/ABingoCampingPlugin/Models/Alternative.src/M000060.html +21 -0
- data/doc/classes/ABingoCampingPlugin/Models/Alternative.src/M000061.html +21 -0
- data/doc/classes/ABingoCampingPlugin/Models/Experiment.html +273 -0
- data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000044.html +21 -0
- data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000045.html +21 -0
- data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000046.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000047.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000048.html +20 -0
- data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000049.html +23 -0
- data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000050.html +29 -0
- data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000051.html +50 -0
- data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000052.html +28 -0
- data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000062.html +21 -0
- data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000063.html +21 -0
- data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000064.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000065.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000066.html +20 -0
- data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000067.html +23 -0
- data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000068.html +29 -0
- data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000069.html +50 -0
- data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000070.html +28 -0
- data/doc/classes/ABingoCampingPlugin/Views.html +196 -0
- data/doc/classes/ABingoCampingPlugin/Views.src/M000019.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Views.src/M000020.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Views.src/M000021.html +30 -0
- data/doc/classes/ABingoCampingPlugin/Views.src/M000037.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Views.src/M000038.html +18 -0
- data/doc/classes/ABingoCampingPlugin/Views.src/M000039.html +30 -0
- data/doc/classes/Abingo.html +429 -0
- data/doc/classes/Abingo.src/M000001.html +18 -0
- data/doc/classes/Abingo.src/M000002.html +18 -0
- data/doc/classes/Abingo.src/M000003.html +18 -0
- data/doc/classes/Abingo.src/M000004.html +22 -0
- data/doc/classes/Abingo.src/M000005.html +69 -0
- data/doc/classes/Abingo.src/M000006.html +47 -0
- data/doc/classes/Abingo.src/M000007.html +31 -0
- data/doc/classes/Abingo.src/M000008.html +36 -0
- data/doc/classes/Abingo.src/M000009.html +18 -0
- data/doc/classes/Abingo.src/M000010.html +36 -0
- data/doc/classes/Abingo.src/M000011.html +22 -0
- data/doc/classes/Abingo.src/M000012.html +21 -0
- data/doc/classes/Abingo.src/M000013.html +18 -0
- data/doc/classes/Abingo.src/M000014.html +39 -0
- data/doc/classes/Abingo.src/M000015.html +25 -0
- data/doc/classes/ActiveSupport.html +107 -0
- data/doc/classes/ActiveSupport/Cache.html +111 -0
- data/doc/classes/ActiveSupport/Cache/MemoryStore.html +137 -0
- data/doc/classes/ActiveSupport/Cache/MemoryStore.src/M000016.html +18 -0
- data/doc/classes/CampingABingoTest.html +149 -0
- data/doc/classes/CampingABingoTest.src/M000017.html +24 -0
- data/doc/classes/CampingABingoTest/Controllers.html +116 -0
- data/doc/classes/CampingABingoTest/Controllers/Index.html +137 -0
- data/doc/classes/CampingABingoTest/Controllers/Index.src/M000024.html +18 -0
- data/doc/classes/CampingABingoTest/Controllers/Landing.html +137 -0
- data/doc/classes/CampingABingoTest/Controllers/Landing.src/M000026.html +18 -0
- data/doc/classes/CampingABingoTest/Controllers/SignIn.html +152 -0
- data/doc/classes/CampingABingoTest/Controllers/SignIn.src/M000030.html +18 -0
- data/doc/classes/CampingABingoTest/Controllers/SignIn.src/M000031.html +34 -0
- data/doc/classes/CampingABingoTest/Controllers/SignOut.html +137 -0
- data/doc/classes/CampingABingoTest/Controllers/SignOut.src/M000029.html +21 -0
- data/doc/classes/CampingABingoTest/Controllers/SignUp.html +152 -0
- data/doc/classes/CampingABingoTest/Controllers/SignUp.src/M000027.html +23 -0
- data/doc/classes/CampingABingoTest/Controllers/SignUp.src/M000028.html +33 -0
- data/doc/classes/CampingABingoTest/Controllers/Welcome.html +137 -0
- data/doc/classes/CampingABingoTest/Controllers/Welcome.src/M000025.html +18 -0
- data/doc/classes/CampingABingoTest/Helpers.html +112 -0
- data/doc/classes/CampingABingoTest/Models.html +119 -0
- data/doc/classes/CampingABingoTest/Models/CreateUserSchema.html +152 -0
- data/doc/classes/CampingABingoTest/Models/CreateUserSchema.src/M000032.html +26 -0
- data/doc/classes/CampingABingoTest/Models/CreateUserSchema.src/M000033.html +19 -0
- data/doc/classes/CampingABingoTest/Models/User.html +111 -0
- data/doc/classes/CampingABingoTest/Views.html +206 -0
- data/doc/classes/CampingABingoTest/Views.src/M000018.html +70 -0
- data/doc/classes/CampingABingoTest/Views.src/M000019.html +22 -0
- data/doc/classes/CampingABingoTest/Views.src/M000020.html +51 -0
- data/doc/classes/CampingABingoTest/Views.src/M000021.html +31 -0
- data/doc/classes/CampingABingoTest/Views.src/M000022.html +31 -0
- data/doc/classes/CampingABingoTest/Views.src/M000023.html +20 -0
- data/doc/created.rid +1 -0
- data/doc/files/examples/camping-abingo-test/camping-abingo-test_rb.html +101 -0
- data/doc/files/lib/camping-abingo_rb.html +457 -0
- data/doc/fr_class_index.html +52 -0
- data/doc/fr_file_index.html +28 -0
- data/doc/fr_method_index.html +96 -0
- data/doc/index.html +24 -0
- data/lib/camping-abingo.rb +1233 -0
- metadata +279 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>cache (Abingo)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/camping-abingo.rb, line 262</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">cache</span>
|
15
|
+
<span class="ruby-ivar">@@cache</span> <span class="ruby-operator">||</span> <span class="ruby-constant">ActiveSupport</span><span class="ruby-operator">::</span><span class="ruby-constant">Cache</span>.<span class="ruby-identifier">lookup_store</span>(<span class="ruby-identifier">:memory_store</span>) <span class="ruby-comment cmt"># Camping-specific change to explicitly request a cache store</span>
|
16
|
+
<span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>identity= (Abingo)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/camping-abingo.rb, line 273</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">identity=</span>(<span class="ruby-identifier">new_identity</span>)
|
15
|
+
<span class="ruby-ivar">@@identity</span> = <span class="ruby-identifier">new_identity</span>.<span class="ruby-identifier">to_s</span>
|
16
|
+
<span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>identity (Abingo)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/camping-abingo.rb, line 277</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">identity</span>
|
15
|
+
<span class="ruby-ivar">@@identity</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">rand</span>(<span class="ruby-value">10</span> <span class="ruby-operator">**</span> <span class="ruby-value">10</span>).<span class="ruby-identifier">to_i</span>.<span class="ruby-identifier">to_s</span>
|
16
|
+
<span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>flip (Abingo)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/camping-abingo.rb, line 283</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">flip</span>(<span class="ruby-identifier">test_name</span>)
|
15
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
|
16
|
+
<span class="ruby-keyword kw">yield</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">test</span>(<span class="ruby-identifier">test_name</span>, [<span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>]))
|
17
|
+
<span class="ruby-keyword kw">else</span>
|
18
|
+
<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">test</span>(<span class="ruby-identifier">test_name</span>, [<span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>])
|
19
|
+
<span class="ruby-keyword kw">end</span>
|
20
|
+
<span class="ruby-keyword kw">end</span></pre>
|
21
|
+
</body>
|
22
|
+
</html>
|
@@ -0,0 +1,69 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>test (Abingo)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/camping-abingo.rb, line 295</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">test</span>(<span class="ruby-identifier">test_name</span>, <span class="ruby-identifier">alternatives</span>, <span class="ruby-identifier">options</span> = {})
|
15
|
+
<span class="ruby-constant">ABingoCampingPlugin</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">"test #{test_name} alternatives: #{alternatives.inspect} options:#{options.inspect} for #{Abingo.identity}"</span>
|
16
|
+
<span class="ruby-identifier">short_circuit</span> = <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">read</span>(<span class="ruby-node">"Abingo::Experiment::short_circuit(#{test_name})"</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-value str">" "</span>, <span class="ruby-value str">"_"</span>))
|
17
|
+
<span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">short_circuit</span>.<span class="ruby-identifier">nil?</span>
|
18
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">short_circuit</span> <span class="ruby-comment cmt">#Test has been stopped, pick canonical alternative.</span>
|
19
|
+
<span class="ruby-keyword kw">end</span>
|
20
|
+
|
21
|
+
<span class="ruby-keyword kw">unless</span> <span class="ruby-constant">ABingoCampingPlugin</span><span class="ruby-operator">::</span><span class="ruby-constant">Models</span><span class="ruby-operator">::</span><span class="ruby-constant">Experiment</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">test_name</span>) <span class="ruby-comment cmt"># Camping-specific</span>
|
22
|
+
<span class="ruby-identifier">lock_key</span> = <span class="ruby-node">"Abingo::lock_for_creation(#{test_name.gsub(" ", "_")})"</span>
|
23
|
+
<span class="ruby-identifier">creation_required</span> = <span class="ruby-keyword kw">true</span>
|
24
|
+
|
25
|
+
<span class="ruby-comment cmt">#this prevents (most) repeated creations of experiments in high concurrency environments.</span>
|
26
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">lock_key</span>)
|
27
|
+
<span class="ruby-identifier">creation_required</span> = <span class="ruby-keyword kw">false</span>
|
28
|
+
<span class="ruby-keyword kw">while</span> <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">lock_key</span>)
|
29
|
+
<span class="ruby-identifier">sleep</span>(<span class="ruby-value">0</span><span class="ruby-value">.1</span>)
|
30
|
+
<span class="ruby-keyword kw">end</span>
|
31
|
+
<span class="ruby-identifier">creation_required</span> = <span class="ruby-constant">ABingoCampingPlugin</span><span class="ruby-operator">::</span><span class="ruby-constant">Models</span><span class="ruby-operator">::</span><span class="ruby-constant">Experiment</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">test_name</span>) <span class="ruby-comment cmt"># Camping-specific</span>
|
32
|
+
<span class="ruby-keyword kw">end</span>
|
33
|
+
|
34
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">creation_required</span>
|
35
|
+
<span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">lock_key</span>, <span class="ruby-value">1</span>, <span class="ruby-identifier">:expires_in</span> =<span class="ruby-operator">></span> <span class="ruby-value">5</span>.<span class="ruby-identifier">seconds</span>)
|
36
|
+
<span class="ruby-identifier">conversion_name</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:conversion</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:conversion_name</span>]
|
37
|
+
<span class="ruby-constant">ABingoCampingPlugin</span><span class="ruby-operator">::</span><span class="ruby-constant">Models</span><span class="ruby-operator">::</span><span class="ruby-constant">Experiment</span>.<span class="ruby-identifier">start_experiment!</span>(<span class="ruby-identifier">test_name</span>, <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">parse_alternatives</span>(<span class="ruby-identifier">alternatives</span>), <span class="ruby-identifier">conversion_name</span>) <span class="ruby-comment cmt"># Camping-specific</span>
|
38
|
+
<span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">lock_key</span>)
|
39
|
+
<span class="ruby-keyword kw">end</span>
|
40
|
+
<span class="ruby-keyword kw">end</span>
|
41
|
+
|
42
|
+
<span class="ruby-identifier">choice</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">find_alternative_for_user</span>(<span class="ruby-identifier">test_name</span>, <span class="ruby-identifier">alternatives</span>)
|
43
|
+
<span class="ruby-identifier">participating_tests</span> = <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">read</span>(<span class="ruby-node">"Abingo::participating_tests::#{Abingo.identity}"</span>) <span class="ruby-operator">||</span> []
|
44
|
+
|
45
|
+
<span class="ruby-comment cmt">#Set this user to participate in this experiment, and increment participants count.</span>
|
46
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:multiple_participation</span>] <span class="ruby-operator">||</span> <span class="ruby-operator">!</span>(<span class="ruby-identifier">participating_tests</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">test_name</span>))
|
47
|
+
<span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">participating_tests</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">test_name</span>)
|
48
|
+
<span class="ruby-identifier">participating_tests</span> = <span class="ruby-identifier">participating_tests</span> <span class="ruby-operator">+</span> [<span class="ruby-identifier">test_name</span>]
|
49
|
+
<span class="ruby-identifier">expires_in</span> = <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">expires_in</span>
|
50
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">expires_in</span>
|
51
|
+
<span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">write</span>(<span class="ruby-node">"Abingo::participating_tests::#{Abingo.identity}"</span>, <span class="ruby-identifier">participating_tests</span>, {<span class="ruby-identifier">:expires_in</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">expires_in</span>})
|
52
|
+
<span class="ruby-keyword kw">else</span>
|
53
|
+
<span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">write</span>(<span class="ruby-node">"Abingo::participating_tests::#{Abingo.identity}"</span>, <span class="ruby-identifier">participating_tests</span>)
|
54
|
+
<span class="ruby-keyword kw">end</span>
|
55
|
+
<span class="ruby-keyword kw">end</span>
|
56
|
+
<span class="ruby-comment cmt">#If we're only counting known humans, then postpone scoring participation until after we know the user is human.</span>
|
57
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-operator">!</span><span class="ruby-ivar">@@options</span>[<span class="ruby-identifier">:count_humans_only</span>] <span class="ruby-operator">||</span> <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">is_human?</span>)
|
58
|
+
<span class="ruby-constant">ABingoCampingPlugin</span><span class="ruby-operator">::</span><span class="ruby-constant">Models</span><span class="ruby-operator">::</span><span class="ruby-constant">Alternative</span>.<span class="ruby-identifier">score_participation</span>(<span class="ruby-identifier">test_name</span>) <span class="ruby-comment cmt"># Camping-specific</span>
|
59
|
+
<span class="ruby-keyword kw">end</span>
|
60
|
+
<span class="ruby-keyword kw">end</span>
|
61
|
+
|
62
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
|
63
|
+
<span class="ruby-keyword kw">yield</span>(<span class="ruby-identifier">choice</span>)
|
64
|
+
<span class="ruby-keyword kw">else</span>
|
65
|
+
<span class="ruby-identifier">choice</span>
|
66
|
+
<span class="ruby-keyword kw">end</span>
|
67
|
+
<span class="ruby-keyword kw">end</span></pre>
|
68
|
+
</body>
|
69
|
+
</html>
|
@@ -0,0 +1,47 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>bingo! (Abingo)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/camping-abingo.rb, line 361</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">bingo!</span>(<span class="ruby-identifier">name</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">options</span> = {})
|
15
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">name</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Array</span>
|
16
|
+
<span class="ruby-identifier">name</span>.<span class="ruby-identifier">map</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">single_test</span><span class="ruby-operator">|</span>
|
17
|
+
<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">bingo!</span>(<span class="ruby-identifier">single_test</span>, <span class="ruby-identifier">options</span>)
|
18
|
+
<span class="ruby-keyword kw">end</span>
|
19
|
+
<span class="ruby-keyword kw">else</span>
|
20
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">name</span>.<span class="ruby-identifier">nil?</span>
|
21
|
+
<span class="ruby-comment cmt">#Score all participating tests</span>
|
22
|
+
<span class="ruby-identifier">participating_tests</span> = <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">read</span>(<span class="ruby-node">"Abingo::participating_tests::#{Abingo.identity}"</span>) <span class="ruby-operator">||</span> []
|
23
|
+
<span class="ruby-identifier">participating_tests</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">participating_test</span><span class="ruby-operator">|</span>
|
24
|
+
<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">bingo!</span>(<span class="ruby-identifier">participating_test</span>, <span class="ruby-identifier">options</span>)
|
25
|
+
<span class="ruby-keyword kw">end</span>
|
26
|
+
<span class="ruby-keyword kw">else</span> <span class="ruby-comment cmt">#Could be a test name or conversion name.</span>
|
27
|
+
<span class="ruby-identifier">conversion_name</span> = <span class="ruby-identifier">name</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-value str">" "</span>, <span class="ruby-value str">"_"</span>)
|
28
|
+
<span class="ruby-identifier">tests_listening_to_conversion</span> = <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">read</span>(<span class="ruby-node">"Abingo::tests_listening_to_conversion#{conversion_name}"</span>)
|
29
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">tests_listening_to_conversion</span>
|
30
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">tests_listening_to_conversion</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">1</span>
|
31
|
+
<span class="ruby-identifier">tests_listening_to_conversion</span>.<span class="ruby-identifier">map</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">individual_test</span><span class="ruby-operator">|</span>
|
32
|
+
<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">score_conversion!</span>(<span class="ruby-identifier">individual_test</span>.<span class="ruby-identifier">to_s</span>)
|
33
|
+
<span class="ruby-keyword kw">end</span>
|
34
|
+
<span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">tests_listening_to_conversion</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
|
35
|
+
<span class="ruby-identifier">test_name_str</span> = <span class="ruby-identifier">tests_listening_to_conversion</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">to_s</span>
|
36
|
+
<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">score_conversion!</span>(<span class="ruby-identifier">test_name_str</span>)
|
37
|
+
<span class="ruby-keyword kw">end</span>
|
38
|
+
<span class="ruby-keyword kw">else</span>
|
39
|
+
<span class="ruby-comment cmt">#No tests listening for this conversion. Assume it is just a test name.</span>
|
40
|
+
<span class="ruby-identifier">test_name_str</span> = <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span>
|
41
|
+
<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">score_conversion!</span>(<span class="ruby-identifier">test_name_str</span>)
|
42
|
+
<span class="ruby-keyword kw">end</span>
|
43
|
+
<span class="ruby-keyword kw">end</span>
|
44
|
+
<span class="ruby-keyword kw">end</span>
|
45
|
+
<span class="ruby-keyword kw">end</span></pre>
|
46
|
+
</body>
|
47
|
+
</html>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>participating_tests (Abingo)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/camping-abingo.rb, line 394</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">participating_tests</span>(<span class="ruby-identifier">only_current</span> = <span class="ruby-keyword kw">true</span>)
|
15
|
+
<span class="ruby-identifier">identity</span> = <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">identity</span>
|
16
|
+
<span class="ruby-identifier">participating_tests</span> = <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">read</span>(<span class="ruby-node">"Abingo::participating_tests::#{identity}"</span>) <span class="ruby-operator">||</span> []
|
17
|
+
<span class="ruby-identifier">tests_and_alternatives</span> = <span class="ruby-identifier">participating_tests</span>.<span class="ruby-identifier">inject</span>({}) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">acc</span>, <span class="ruby-identifier">test_name</span><span class="ruby-operator">|</span>
|
18
|
+
<span class="ruby-identifier">alternatives_key</span> = <span class="ruby-node">"Abingo::Experiment::#{test_name}::alternatives"</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-value str">" "</span>,<span class="ruby-value str">"_"</span>)
|
19
|
+
<span class="ruby-identifier">alternatives</span> = <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">alternatives_key</span>)
|
20
|
+
<span class="ruby-identifier">acc</span>[<span class="ruby-identifier">test_name</span>] = <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">find_alternative_for_user</span>(<span class="ruby-identifier">test_name</span>, <span class="ruby-identifier">alternatives</span>)
|
21
|
+
<span class="ruby-identifier">acc</span>
|
22
|
+
<span class="ruby-keyword kw">end</span>
|
23
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">only_current</span>)
|
24
|
+
<span class="ruby-identifier">tests_and_alternatives</span>.<span class="ruby-identifier">reject!</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span>
|
25
|
+
<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">read</span>(<span class="ruby-node">"Abingo::Experiment::short_circuit(#{key})"</span>)
|
26
|
+
<span class="ruby-keyword kw">end</span>
|
27
|
+
<span class="ruby-keyword kw">end</span>
|
28
|
+
<span class="ruby-identifier">tests_and_alternatives</span>
|
29
|
+
<span class="ruby-keyword kw">end</span></pre>
|
30
|
+
</body>
|
31
|
+
</html>
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>human! (Abingo)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/camping-abingo.rb, line 412</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">human!</span>
|
15
|
+
<span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">fetch</span>(<span class="ruby-node">"Abingo::is_human(#{Abingo.identity})"</span>, {<span class="ruby-identifier">:expires_in</span> =<span class="ruby-operator">></span> <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">expires_in</span>(<span class="ruby-keyword kw">true</span>)}) <span class="ruby-keyword kw">do</span>
|
16
|
+
<span class="ruby-comment cmt">#Now that we know the user is human, score participation for all their tests. (Further participation will *not* be lazy evaluated.)</span>
|
17
|
+
|
18
|
+
<span class="ruby-comment cmt">#Score all tests which have been deferred.</span>
|
19
|
+
<span class="ruby-identifier">participating_tests</span> = <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">read</span>(<span class="ruby-node">"Abingo::participating_tests::#{Abingo.identity}"</span>) <span class="ruby-operator">||</span> []
|
20
|
+
|
21
|
+
<span class="ruby-comment cmt">#Refresh cache expiry for this user to match that of known humans.</span>
|
22
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-ivar">@@options</span>[<span class="ruby-identifier">:expires_in_for_bots</span>] <span class="ruby-operator">&&</span> <span class="ruby-operator">!</span><span class="ruby-identifier">participating_tests</span>.<span class="ruby-identifier">blank?</span>)
|
23
|
+
<span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">write</span>(<span class="ruby-node">"Abingo::participating_tests::#{Abingo.identity}"</span>, <span class="ruby-identifier">participating_tests</span>, {<span class="ruby-identifier">:expires_in</span> =<span class="ruby-operator">></span> <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">expires_in</span>(<span class="ruby-keyword kw">true</span>)})
|
24
|
+
<span class="ruby-keyword kw">end</span>
|
25
|
+
|
26
|
+
<span class="ruby-identifier">participating_tests</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">test_name</span><span class="ruby-operator">|</span>
|
27
|
+
<span class="ruby-constant">Alternative</span>.<span class="ruby-identifier">score_participation</span>(<span class="ruby-identifier">test_name</span>)
|
28
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">conversions</span> = <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">read</span>(<span class="ruby-node">"Abingo::conversions(#{Abingo.identity},#{test_name}"</span>)
|
29
|
+
<span class="ruby-identifier">conversions</span>.<span class="ruby-identifier">times</span> { <span class="ruby-constant">Alternative</span>.<span class="ruby-identifier">score_conversion</span>(<span class="ruby-identifier">test_name</span>) }
|
30
|
+
<span class="ruby-keyword kw">end</span>
|
31
|
+
<span class="ruby-keyword kw">end</span>
|
32
|
+
<span class="ruby-keyword kw">true</span> <span class="ruby-comment cmt">#Marks this user as human in the cache.</span>
|
33
|
+
<span class="ruby-keyword kw">end</span>
|
34
|
+
<span class="ruby-keyword kw">end</span></pre>
|
35
|
+
</body>
|
36
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>is_human? (Abingo)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/camping-abingo.rb, line 436</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">is_human?</span>
|
15
|
+
<span class="ruby-operator">!</span><span class="ruby-operator">!</span><span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">read</span>(<span class="ruby-node">"Abingo::is_human(#{Abingo.identity})"</span>)
|
16
|
+
<span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>parse_alternatives (Abingo)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/camping-abingo.rb, line 452</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">parse_alternatives</span>(<span class="ruby-identifier">alternatives</span>)
|
15
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">alternatives</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Array</span>
|
16
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">alternatives</span>
|
17
|
+
<span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">alternatives</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Integer</span>
|
18
|
+
<span class="ruby-keyword kw">return</span> (<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-identifier">alternatives</span>).<span class="ruby-identifier">to_a</span>
|
19
|
+
<span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">alternatives</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Range</span>
|
20
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">alternatives</span>.<span class="ruby-identifier">to_a</span>
|
21
|
+
<span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">alternatives</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Hash</span>
|
22
|
+
<span class="ruby-identifier">alternatives_array</span> = []
|
23
|
+
<span class="ruby-identifier">alternatives</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span>
|
24
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">value</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Integer</span>
|
25
|
+
<span class="ruby-identifier">alternatives_array</span> <span class="ruby-operator">+=</span> [<span class="ruby-identifier">key</span>] <span class="ruby-operator">*</span> <span class="ruby-identifier">value</span>
|
26
|
+
<span class="ruby-keyword kw">else</span>
|
27
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-node">"You gave a hash with #{key} => #{value} as an element. The value must be an integral weight."</span>
|
28
|
+
<span class="ruby-keyword kw">end</span>
|
29
|
+
<span class="ruby-keyword kw">end</span>
|
30
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">alternatives_array</span>
|
31
|
+
<span class="ruby-keyword kw">else</span>
|
32
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-node">"I don't know how to turn [#{alternatives}] into an array of alternatives."</span>
|
33
|
+
<span class="ruby-keyword kw">end</span>
|
34
|
+
<span class="ruby-keyword kw">end</span></pre>
|
35
|
+
</body>
|
36
|
+
</html>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>retrieve_alternatives (Abingo)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/camping-abingo.rb, line 474</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">retrieve_alternatives</span>(<span class="ruby-identifier">test_name</span>, <span class="ruby-identifier">alternatives</span>)
|
15
|
+
<span class="ruby-identifier">cache_key</span> = <span class="ruby-node">"Abingo::Experiment::#{test_name}::alternatives"</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-value str">" "</span>,<span class="ruby-value str">"_"</span>)
|
16
|
+
<span class="ruby-identifier">alternative_array</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">fetch</span>(<span class="ruby-identifier">cache_key</span>) <span class="ruby-keyword kw">do</span>
|
17
|
+
<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">parse_alternatives</span>(<span class="ruby-identifier">alternatives</span>)
|
18
|
+
<span class="ruby-keyword kw">end</span>
|
19
|
+
<span class="ruby-identifier">alternative_array</span>
|
20
|
+
<span class="ruby-keyword kw">end</span></pre>
|
21
|
+
</body>
|
22
|
+
</html>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>find_alternative_for_user (Abingo)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/camping-abingo.rb, line 482</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">find_alternative_for_user</span>(<span class="ruby-identifier">test_name</span>, <span class="ruby-identifier">alternatives</span>)
|
15
|
+
<span class="ruby-identifier">alternatives_array</span> = <span class="ruby-identifier">retrieve_alternatives</span>(<span class="ruby-identifier">test_name</span>, <span class="ruby-identifier">alternatives</span>)
|
16
|
+
<span class="ruby-identifier">selected_alternative</span> = <span class="ruby-identifier">alternatives_array</span>[<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">modulo_choice</span>(<span class="ruby-identifier">test_name</span>, <span class="ruby-identifier">alternatives_array</span>.<span class="ruby-identifier">size</span>)]
|
17
|
+
<span class="ruby-constant">ABingoCampingPlugin</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">"find_alternative_for_user(#{test_name}, #{alternatives}, #{self.identity}) > #{selected_alternative}"</span>
|
18
|
+
<span class="ruby-identifier">selected_alternative</span>
|
19
|
+
<span class="ruby-keyword kw">end</span></pre>
|
20
|
+
</body>
|
21
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>modulo_choice (Abingo)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/camping-abingo.rb, line 492</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">modulo_choice</span>(<span class="ruby-identifier">test_name</span>, <span class="ruby-identifier">choices_count</span>)
|
15
|
+
<span class="ruby-constant">Digest</span><span class="ruby-operator">::</span><span class="ruby-constant">MD5</span>.<span class="ruby-identifier">hexdigest</span>(<span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">salt</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">test_name</span> <span class="ruby-operator">+</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">identity</span>.<span class="ruby-identifier">to_s</span>).<span class="ruby-identifier">to_i</span>(<span class="ruby-value">16</span>) <span class="ruby-operator">%</span> <span class="ruby-identifier">choices_count</span>
|
16
|
+
<span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>score_conversion! (Abingo)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/camping-abingo.rb, line 496</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">score_conversion!</span>(<span class="ruby-identifier">test_name</span>)
|
15
|
+
<span class="ruby-identifier">test_name</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-value str">" "</span>, <span class="ruby-value str">"_"</span>)
|
16
|
+
<span class="ruby-identifier">participating_tests</span> = <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">read</span>(<span class="ruby-node">"Abingo::participating_tests::#{Abingo.identity}"</span>) <span class="ruby-operator">||</span> []
|
17
|
+
<span class="ruby-constant">ABingoCampingPlugin</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">"score_conversion (#{test_name}) participating_tests=#{participating_tests.inspect} flag=#{participating_tests.include?(test_name)} options=#{options.inspect}"</span>
|
18
|
+
|
19
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:assume_participation</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">participating_tests</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">test_name</span>)
|
20
|
+
<span class="ruby-identifier">cache_key</span> = <span class="ruby-node">"Abingo::conversions(#{Abingo.identity},#{test_name}"</span>
|
21
|
+
<span class="ruby-constant">ABingoCampingPlugin</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">"score_conversion cache_key=#{cache_key}"</span>
|
22
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:multiple_conversions</span>] <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">cache_key</span>)
|
23
|
+
<span class="ruby-constant">ABingoCampingPlugin</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">"score_conversion is human=#{!options[:count_humans_only] || Abingo.is_human?}"</span>
|
24
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">options</span>[<span class="ruby-identifier">:count_humans_only</span>] <span class="ruby-operator">||</span> <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">is_human?</span>
|
25
|
+
<span class="ruby-constant">ABingoCampingPlugin</span><span class="ruby-operator">::</span><span class="ruby-constant">Models</span><span class="ruby-operator">::</span><span class="ruby-constant">Alternative</span>.<span class="ruby-identifier">score_conversion</span>(<span class="ruby-identifier">test_name</span>) <span class="ruby-comment cmt"># Camping-specific</span>
|
26
|
+
<span class="ruby-keyword kw">end</span>
|
27
|
+
|
28
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">cache_key</span>)
|
29
|
+
<span class="ruby-constant">ABingoCampingPlugin</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">"score_conversion increment #{cache_key}"</span>
|
30
|
+
<span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">increment</span>(<span class="ruby-identifier">cache_key</span>)
|
31
|
+
<span class="ruby-keyword kw">else</span>
|
32
|
+
<span class="ruby-constant">ABingoCampingPlugin</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">"score_conversion write #{cache_key}"</span>
|
33
|
+
<span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">cache</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">cache_key</span>, <span class="ruby-value">1</span>)
|
34
|
+
<span class="ruby-keyword kw">end</span>
|
35
|
+
<span class="ruby-keyword kw">end</span>
|
36
|
+
<span class="ruby-keyword kw">end</span>
|
37
|
+
<span class="ruby-keyword kw">end</span></pre>
|
38
|
+
</body>
|
39
|
+
</html>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>expires_in (Abingo)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/camping-abingo.rb, line 521</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">expires_in</span>(<span class="ruby-identifier">known_human</span> = <span class="ruby-keyword kw">false</span>)
|
15
|
+
<span class="ruby-identifier">expires_in</span> = <span class="ruby-keyword kw">nil</span>
|
16
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-ivar">@@options</span>[<span class="ruby-identifier">:expires_in</span>])
|
17
|
+
<span class="ruby-identifier">expires_in</span> = <span class="ruby-ivar">@@options</span>[<span class="ruby-identifier">:expires_in</span>]
|
18
|
+
<span class="ruby-keyword kw">end</span>
|
19
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-ivar">@@options</span>[<span class="ruby-identifier">:count_humans_only</span>] <span class="ruby-operator">&&</span> <span class="ruby-ivar">@@options</span>[<span class="ruby-identifier">:expires_in_for_bots</span>] <span class="ruby-operator">&&</span> <span class="ruby-operator">!</span>(<span class="ruby-identifier">known_human</span> <span class="ruby-operator">||</span> <span class="ruby-constant">Abingo</span>.<span class="ruby-identifier">is_human?</span>))
|
20
|
+
<span class="ruby-identifier">expires_in</span> = <span class="ruby-ivar">@@options</span>[<span class="ruby-identifier">:expires_in_for_bots</span>]
|
21
|
+
<span class="ruby-keyword kw">end</span>
|
22
|
+
<span class="ruby-identifier">expires_in</span>
|
23
|
+
<span class="ruby-keyword kw">end</span></pre>
|
24
|
+
</body>
|
25
|
+
</html>
|