camping-abingo 1.0.3

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.
Files changed (143) hide show
  1. data/README +3 -0
  2. data/doc/classes/ABingoCampingPlugin.html +188 -0
  3. data/doc/classes/ABingoCampingPlugin.src/M000016.html +18 -0
  4. data/doc/classes/ABingoCampingPlugin.src/M000017.html +18 -0
  5. data/doc/classes/ABingoCampingPlugin.src/M000018.html +19 -0
  6. data/doc/classes/ABingoCampingPlugin.src/M000034.html +18 -0
  7. data/doc/classes/ABingoCampingPlugin.src/M000035.html +18 -0
  8. data/doc/classes/ABingoCampingPlugin.src/M000036.html +19 -0
  9. data/doc/classes/ABingoCampingPlugin/ABingo.html +121 -0
  10. data/doc/classes/ABingoCampingPlugin/Controllers.html +191 -0
  11. data/doc/classes/ABingoCampingPlugin/Controllers.src/M000022.html +18 -0
  12. data/doc/classes/ABingoCampingPlugin/Controllers.src/M000023.html +26 -0
  13. data/doc/classes/ABingoCampingPlugin/Controllers.src/M000040.html +18 -0
  14. data/doc/classes/ABingoCampingPlugin/Controllers.src/M000041.html +26 -0
  15. data/doc/classes/ABingoCampingPlugin/Filters.html +158 -0
  16. data/doc/classes/ABingoCampingPlugin/Filters.src/M000037.html +26 -0
  17. data/doc/classes/ABingoCampingPlugin/Filters.src/M000055.html +26 -0
  18. data/doc/classes/ABingoCampingPlugin/Helpers.html +372 -0
  19. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000024.html +18 -0
  20. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000025.html +19 -0
  21. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000026.html +18 -0
  22. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000027.html +18 -0
  23. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000028.html +36 -0
  24. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000029.html +28 -0
  25. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000030.html +18 -0
  26. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000031.html +48 -0
  27. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000032.html +32 -0
  28. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000033.html +18 -0
  29. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000034.html +26 -0
  30. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000035.html +20 -0
  31. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000036.html +18 -0
  32. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000042.html +18 -0
  33. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000043.html +19 -0
  34. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000044.html +18 -0
  35. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000045.html +18 -0
  36. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000046.html +36 -0
  37. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000047.html +28 -0
  38. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000048.html +18 -0
  39. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000049.html +48 -0
  40. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000050.html +32 -0
  41. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000051.html +18 -0
  42. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000052.html +26 -0
  43. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000053.html +20 -0
  44. data/doc/classes/ABingoCampingPlugin/Helpers.src/M000054.html +18 -0
  45. data/doc/classes/ABingoCampingPlugin/Models.html +208 -0
  46. data/doc/classes/ABingoCampingPlugin/Models.src/M000038.html +22 -0
  47. data/doc/classes/ABingoCampingPlugin/Models.src/M000039.html +39 -0
  48. data/doc/classes/ABingoCampingPlugin/Models.src/M000040.html +21 -0
  49. data/doc/classes/ABingoCampingPlugin/Models.src/M000056.html +22 -0
  50. data/doc/classes/ABingoCampingPlugin/Models.src/M000057.html +39 -0
  51. data/doc/classes/ABingoCampingPlugin/Models.src/M000058.html +21 -0
  52. data/doc/classes/ABingoCampingPlugin/Models/Alternative.html +181 -0
  53. data/doc/classes/ABingoCampingPlugin/Models/Alternative.src/M000041.html +20 -0
  54. data/doc/classes/ABingoCampingPlugin/Models/Alternative.src/M000042.html +21 -0
  55. data/doc/classes/ABingoCampingPlugin/Models/Alternative.src/M000043.html +21 -0
  56. data/doc/classes/ABingoCampingPlugin/Models/Alternative.src/M000059.html +20 -0
  57. data/doc/classes/ABingoCampingPlugin/Models/Alternative.src/M000060.html +21 -0
  58. data/doc/classes/ABingoCampingPlugin/Models/Alternative.src/M000061.html +21 -0
  59. data/doc/classes/ABingoCampingPlugin/Models/Experiment.html +273 -0
  60. data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000044.html +21 -0
  61. data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000045.html +21 -0
  62. data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000046.html +18 -0
  63. data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000047.html +18 -0
  64. data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000048.html +20 -0
  65. data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000049.html +23 -0
  66. data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000050.html +29 -0
  67. data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000051.html +50 -0
  68. data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000052.html +28 -0
  69. data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000062.html +21 -0
  70. data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000063.html +21 -0
  71. data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000064.html +18 -0
  72. data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000065.html +18 -0
  73. data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000066.html +20 -0
  74. data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000067.html +23 -0
  75. data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000068.html +29 -0
  76. data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000069.html +50 -0
  77. data/doc/classes/ABingoCampingPlugin/Models/Experiment.src/M000070.html +28 -0
  78. data/doc/classes/ABingoCampingPlugin/Views.html +196 -0
  79. data/doc/classes/ABingoCampingPlugin/Views.src/M000019.html +18 -0
  80. data/doc/classes/ABingoCampingPlugin/Views.src/M000020.html +18 -0
  81. data/doc/classes/ABingoCampingPlugin/Views.src/M000021.html +30 -0
  82. data/doc/classes/ABingoCampingPlugin/Views.src/M000037.html +18 -0
  83. data/doc/classes/ABingoCampingPlugin/Views.src/M000038.html +18 -0
  84. data/doc/classes/ABingoCampingPlugin/Views.src/M000039.html +30 -0
  85. data/doc/classes/Abingo.html +429 -0
  86. data/doc/classes/Abingo.src/M000001.html +18 -0
  87. data/doc/classes/Abingo.src/M000002.html +18 -0
  88. data/doc/classes/Abingo.src/M000003.html +18 -0
  89. data/doc/classes/Abingo.src/M000004.html +22 -0
  90. data/doc/classes/Abingo.src/M000005.html +69 -0
  91. data/doc/classes/Abingo.src/M000006.html +47 -0
  92. data/doc/classes/Abingo.src/M000007.html +31 -0
  93. data/doc/classes/Abingo.src/M000008.html +36 -0
  94. data/doc/classes/Abingo.src/M000009.html +18 -0
  95. data/doc/classes/Abingo.src/M000010.html +36 -0
  96. data/doc/classes/Abingo.src/M000011.html +22 -0
  97. data/doc/classes/Abingo.src/M000012.html +21 -0
  98. data/doc/classes/Abingo.src/M000013.html +18 -0
  99. data/doc/classes/Abingo.src/M000014.html +39 -0
  100. data/doc/classes/Abingo.src/M000015.html +25 -0
  101. data/doc/classes/ActiveSupport.html +107 -0
  102. data/doc/classes/ActiveSupport/Cache.html +111 -0
  103. data/doc/classes/ActiveSupport/Cache/MemoryStore.html +137 -0
  104. data/doc/classes/ActiveSupport/Cache/MemoryStore.src/M000016.html +18 -0
  105. data/doc/classes/CampingABingoTest.html +149 -0
  106. data/doc/classes/CampingABingoTest.src/M000017.html +24 -0
  107. data/doc/classes/CampingABingoTest/Controllers.html +116 -0
  108. data/doc/classes/CampingABingoTest/Controllers/Index.html +137 -0
  109. data/doc/classes/CampingABingoTest/Controllers/Index.src/M000024.html +18 -0
  110. data/doc/classes/CampingABingoTest/Controllers/Landing.html +137 -0
  111. data/doc/classes/CampingABingoTest/Controllers/Landing.src/M000026.html +18 -0
  112. data/doc/classes/CampingABingoTest/Controllers/SignIn.html +152 -0
  113. data/doc/classes/CampingABingoTest/Controllers/SignIn.src/M000030.html +18 -0
  114. data/doc/classes/CampingABingoTest/Controllers/SignIn.src/M000031.html +34 -0
  115. data/doc/classes/CampingABingoTest/Controllers/SignOut.html +137 -0
  116. data/doc/classes/CampingABingoTest/Controllers/SignOut.src/M000029.html +21 -0
  117. data/doc/classes/CampingABingoTest/Controllers/SignUp.html +152 -0
  118. data/doc/classes/CampingABingoTest/Controllers/SignUp.src/M000027.html +23 -0
  119. data/doc/classes/CampingABingoTest/Controllers/SignUp.src/M000028.html +33 -0
  120. data/doc/classes/CampingABingoTest/Controllers/Welcome.html +137 -0
  121. data/doc/classes/CampingABingoTest/Controllers/Welcome.src/M000025.html +18 -0
  122. data/doc/classes/CampingABingoTest/Helpers.html +112 -0
  123. data/doc/classes/CampingABingoTest/Models.html +119 -0
  124. data/doc/classes/CampingABingoTest/Models/CreateUserSchema.html +152 -0
  125. data/doc/classes/CampingABingoTest/Models/CreateUserSchema.src/M000032.html +26 -0
  126. data/doc/classes/CampingABingoTest/Models/CreateUserSchema.src/M000033.html +19 -0
  127. data/doc/classes/CampingABingoTest/Models/User.html +111 -0
  128. data/doc/classes/CampingABingoTest/Views.html +206 -0
  129. data/doc/classes/CampingABingoTest/Views.src/M000018.html +70 -0
  130. data/doc/classes/CampingABingoTest/Views.src/M000019.html +22 -0
  131. data/doc/classes/CampingABingoTest/Views.src/M000020.html +51 -0
  132. data/doc/classes/CampingABingoTest/Views.src/M000021.html +31 -0
  133. data/doc/classes/CampingABingoTest/Views.src/M000022.html +31 -0
  134. data/doc/classes/CampingABingoTest/Views.src/M000023.html +20 -0
  135. data/doc/created.rid +1 -0
  136. data/doc/files/examples/camping-abingo-test/camping-abingo-test_rb.html +101 -0
  137. data/doc/files/lib/camping-abingo_rb.html +457 -0
  138. data/doc/fr_class_index.html +52 -0
  139. data/doc/fr_file_index.html +28 -0
  140. data/doc/fr_method_index.html +96 -0
  141. data/doc/index.html +24 -0
  142. data/lib/camping-abingo.rb +1233 -0
  143. 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>abingo_view_helpers (ABingoCampingPlugin::Views)</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 1083</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">abingo_view_helpers</span>
15
+ <span class="ruby-value str">&quot;\ndef ab_test(test_name, alternatives = nil, options = {}, &amp;block)\n\nif (Abingo.options[:enable_specification] &amp;&amp; !params[test_name].nil?)\nchoice = params[test_name]\nelsif (Abingo.options[:enable_override_in_session] &amp;&amp; !session[test_name].nil?)\nchoice = session[test_name]\nelsif (alternatives.nil?)\nchoice = Abingo.flip(test_name)\nelse\nchoice = Abingo.test(test_name, alternatives, options)\nend\n\nif block\ncontent_tag = capture(choice, &amp;block)\nblock_called_from_erb?(block) ? concat(content_tag) : content_tag\nelse\nchoice\nend\nend\n\ndef bingo!(test_name, options = {})\nAbingo.bingo!(test_name, options)\nend\n\n#This causes an AJAX post against the URL. That URL should call Abingo.human!\n#This guarantees that anyone calling Abingo.human! is capable of at least minimal Javascript execution, and thus is (probably) not a robot.\ndef include_humanizing_javascript(url = \&quot;/abingo/mark_human\&quot;, style = :jquery) # Camping-specific\najax_call_script = nil\nif (style == :prototype)\najax_call_script = \&quot;var a=Math.floor(Math.random()*11); var b=Math.floor(Math.random()*11);var x=new Ajax.Request('\&quot; + url + \&quot;', {parameters:{a: a, b: b, c: a+b}})\&quot;\nelsif (style == :jquery)\najax_call_script = \&quot;var a=Math.floor(Math.random()*11); var b=Math.floor(Math.random()*11);var x=jQuery.post('\&quot; + url + \&quot;', {a: a, b: b, c: a+b})\&quot;\nend\n#ajax_call_script.nil? ? \&quot;\&quot; : \&quot;&lt;script type='text/javascript'&gt;\&quot; + ajax_call_script + \&quot;&lt;/script&gt;\&quot;\n\nreturn unless !ajax_call_script.nil?\n\nscript :type=&gt; 'text/javascript' do\n%Q|ajax_call_script|\nend\n\nend\n\n&quot;</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>common_abingo_views (ABingoCampingPlugin::Views)</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 1134</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">common_abingo_views</span>
15
+ <span class="ruby-value str">&quot;\ndef abingo_dashboard\ndiv.abingo_dashboard! do\nh1 \&quot;ABingo All Experiments\&quot;\n\n@experiments.each do | experiment |\nabingo_experiment(experiment)\nend\nend\nend\n\ndef abingo_experiment(experiment)\nshort_circuit = \&quot;\&quot;\nAbingo.cache.read(\&quot;ABingoCampingPlugin::Models::Experiment::short_circuit(\&quot;+experiment.test_name+\&quot;)\&quot;.gsub(\&quot; \&quot;, \&quot;\&quot;))\n\nh2 { span { experiment.id.to_s + ' - ' + experiment.test_name.titleize }\nspan(\&quot;[Completed]\&quot;) if experiment.status != \&quot;Live\&quot;\n}\n\ntable.abingo_experiment_table :style=&gt;\&quot;\&quot; do\ntr { th {\&quot;Name\&quot;};\nth {\&quot;Participants\&quot;};\nth {\&quot;Conversions\&quot;};\nth {\&quot;Notes\&quot; }\n}\n\ntr.abingo_experiment_row { td {\&quot;Experiment Total: \&quot;};\ntd { experiment.participants.to_s };\ntd { experiment.conversions.to_s + '(' + experiment.pretty_conversion_rate + ')' };\ntd { };\n}\n\nexperiment.alternatives.each do | alternative |\ntr.abingo_alternative_row { td { h(alternative.content) };\ntd { alternative.participants.to_s };\ntd { alternative.conversions.to_s + '(' + alternative.pretty_conversion_rate + ')' };\ntd {\nunless experiment.status != \&quot;Live\&quot;\n\nonclickfn = &lt;&lt;-JAVASCRIPT\nif (confirm('Are you sure you want to terminate this experiment? This is not reversible.')) {\nvar f = document.createElement('form');\nf.style.display = 'none';\nthis.parentNode.appendChild(f);\nf.method = 'POST';\nf.action = this.href;\nf.submit();\n};\nreturn false;\nJAVASCRIPT\n\na \&quot;Terminate this Alternative\&quot;, :onclick=&gt;onclickfn, :href=&gt; \&quot;/abingo/terminate?alternative_id=\&quot; + alternative.id.to_s\nelse\nif alternative.content == short_circuit\nspan \&quot;(All users seeing this.)\&quot;\nend\nend\n};\n}\nend\n\ntr.abingo_experiment_row { td :colspan=&gt;'24' do\nspan(\&quot;Significance test results: \&quot; + experiment.describe_result_in_words)\nend\n}\n\nend\nend\n\ndef abingo_termination_notice\nh1 \&quot;ABingo Dashboard - Termination Notice\&quot;\ndiv { @abingo_notice }\nend\n\ndef abingo_dashboard_restricted_access\nh1 \&quot;ABingo Dashboard - Restricted Access\&quot;\ndiv \&quot;Only the administrator can access the ABingo Dashboard.\&quot;\nend\n\n&quot;</span>
16
+ <span class="ruby-keyword kw">end</span></pre>
17
+ </body>
18
+ </html>
@@ -0,0 +1,30 @@
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>include_abingo_views (ABingoCampingPlugin::Views)</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 1221</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">include_abingo_views</span>
15
+ <span class="ruby-identifier">module_eval</span> <span class="ruby-constant">ABingoCampingPlugin</span><span class="ruby-operator">::</span><span class="ruby-constant">Views</span>.<span class="ruby-identifier">abingo_view_helpers</span>
16
+ <span class="ruby-identifier">module_eval</span> <span class="ruby-constant">ABingoCampingPlugin</span><span class="ruby-operator">::</span><span class="ruby-constant">Views</span>.<span class="ruby-identifier">common_abingo_views</span>
17
+
18
+ <span class="ruby-identifier">module_eval</span> <span class="ruby-keyword kw">do</span>
19
+ <span class="ruby-identifier">app_module_name</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">&quot;::&quot;</span>).<span class="ruby-identifier">first</span>
20
+ <span class="ruby-identifier">mab_class_name</span> = <span class="ruby-node">&quot;#{app_module_name}::Mab&quot;</span>
21
+ <span class="ruby-identifier">mab_class</span> = <span class="ruby-identifier">mab_class_name</span>.<span class="ruby-identifier">constantize</span>
22
+
23
+ <span class="ruby-comment cmt"># unless mab_class.public_instance_methods.include? 'register' </span>
24
+ <span class="ruby-comment cmt"># module_eval ABingoCampingPlugin::Views.register_view</span>
25
+ <span class="ruby-comment cmt"># end</span>
26
+ <span class="ruby-keyword kw">end</span>
27
+
28
+ <span class="ruby-keyword kw">end</span></pre>
29
+ </body>
30
+ </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>abingo_view_helpers (ABingoCampingPlugin::Views)</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 1083</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">abingo_view_helpers</span>
15
+ <span class="ruby-value str">&quot;\ndef ab_test(test_name, alternatives = nil, options = {}, &amp;block)\n\nif (Abingo.options[:enable_specification] &amp;&amp; !params[test_name].nil?)\nchoice = params[test_name]\nelsif (Abingo.options[:enable_override_in_session] &amp;&amp; !session[test_name].nil?)\nchoice = session[test_name]\nelsif (alternatives.nil?)\nchoice = Abingo.flip(test_name)\nelse\nchoice = Abingo.test(test_name, alternatives, options)\nend\n\nif block\ncontent_tag = capture(choice, &amp;block)\nblock_called_from_erb?(block) ? concat(content_tag) : content_tag\nelse\nchoice\nend\nend\n\ndef bingo!(test_name, options = {})\nAbingo.bingo!(test_name, options)\nend\n\n#This causes an AJAX post against the URL. That URL should call Abingo.human!\n#This guarantees that anyone calling Abingo.human! is capable of at least minimal Javascript execution, and thus is (probably) not a robot.\ndef include_humanizing_javascript(url = \&quot;/abingo/mark_human\&quot;, style = :jquery) # Camping-specific\najax_call_script = nil\nif (style == :prototype)\najax_call_script = \&quot;var a=Math.floor(Math.random()*11); var b=Math.floor(Math.random()*11);var x=new Ajax.Request('\&quot; + url + \&quot;', {parameters:{a: a, b: b, c: a+b}})\&quot;\nelsif (style == :jquery)\najax_call_script = \&quot;var a=Math.floor(Math.random()*11); var b=Math.floor(Math.random()*11);var x=jQuery.post('\&quot; + url + \&quot;', {a: a, b: b, c: a+b})\&quot;\nend\n#ajax_call_script.nil? ? \&quot;\&quot; : \&quot;&lt;script type='text/javascript'&gt;\&quot; + ajax_call_script + \&quot;&lt;/script&gt;\&quot;\n\nreturn unless !ajax_call_script.nil?\n\nscript :type=&gt; 'text/javascript' do\n%Q|ajax_call_script|\nend\n\nend\n\n&quot;</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>common_abingo_views (ABingoCampingPlugin::Views)</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 1134</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">common_abingo_views</span>
15
+ <span class="ruby-value str">&quot;\ndef abingo_dashboard\ndiv.abingo_dashboard! do\nh1 \&quot;ABingo All Experiments\&quot;\n\n@experiments.each do | experiment |\nabingo_experiment(experiment)\nend\nend\nend\n\ndef abingo_experiment(experiment)\nshort_circuit = \&quot;\&quot;\nAbingo.cache.read(\&quot;ABingoCampingPlugin::Models::Experiment::short_circuit(\&quot;+experiment.test_name+\&quot;)\&quot;.gsub(\&quot; \&quot;, \&quot;\&quot;))\n\nh2 { span { experiment.id.to_s + ' - ' + experiment.test_name.titleize }\nspan(\&quot;[Completed]\&quot;) if experiment.status != \&quot;Live\&quot;\n}\n\ntable.abingo_experiment_table :style=&gt;\&quot;\&quot; do\ntr { th {\&quot;Name\&quot;};\nth {\&quot;Participants\&quot;};\nth {\&quot;Conversions\&quot;};\nth {\&quot;Notes\&quot; }\n}\n\ntr.abingo_experiment_row { td {\&quot;Experiment Total: \&quot;};\ntd { experiment.participants.to_s };\ntd { experiment.conversions.to_s + '(' + experiment.pretty_conversion_rate + ')' };\ntd { };\n}\n\nexperiment.alternatives.each do | alternative |\ntr.abingo_alternative_row { td { h(alternative.content) };\ntd { alternative.participants.to_s };\ntd { alternative.conversions.to_s + '(' + alternative.pretty_conversion_rate + ')' };\ntd {\nunless experiment.status != \&quot;Live\&quot;\n\nonclickfn = &lt;&lt;-JAVASCRIPT\nif (confirm('Are you sure you want to terminate this experiment? This is not reversible.')) {\nvar f = document.createElement('form');\nf.style.display = 'none';\nthis.parentNode.appendChild(f);\nf.method = 'POST';\nf.action = this.href;\nf.submit();\n};\nreturn false;\nJAVASCRIPT\n\na \&quot;Terminate this Alternative\&quot;, :onclick=&gt;onclickfn, :href=&gt; \&quot;/abingo/terminate?alternative_id=\&quot; + alternative.id.to_s\nelse\nif alternative.content == short_circuit\nspan \&quot;(All users seeing this.)\&quot;\nend\nend\n};\n}\nend\n\ntr.abingo_experiment_row { td :colspan=&gt;'24' do\nspan(\&quot;Significance test results: \&quot; + experiment.describe_result_in_words)\nend\n}\n\nend\nend\n\ndef abingo_termination_notice\nh1 \&quot;ABingo Dashboard - Termination Notice\&quot;\ndiv { @abingo_notice }\nend\n\ndef abingo_dashboard_restricted_access\nh1 \&quot;ABingo Dashboard - Restricted Access\&quot;\ndiv \&quot;Only the administrator can access the ABingo Dashboard.\&quot;\nend\n\n&quot;</span>
16
+ <span class="ruby-keyword kw">end</span></pre>
17
+ </body>
18
+ </html>
@@ -0,0 +1,30 @@
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>include_abingo_views (ABingoCampingPlugin::Views)</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 1221</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">include_abingo_views</span>
15
+ <span class="ruby-identifier">module_eval</span> <span class="ruby-constant">ABingoCampingPlugin</span><span class="ruby-operator">::</span><span class="ruby-constant">Views</span>.<span class="ruby-identifier">abingo_view_helpers</span>
16
+ <span class="ruby-identifier">module_eval</span> <span class="ruby-constant">ABingoCampingPlugin</span><span class="ruby-operator">::</span><span class="ruby-constant">Views</span>.<span class="ruby-identifier">common_abingo_views</span>
17
+
18
+ <span class="ruby-identifier">module_eval</span> <span class="ruby-keyword kw">do</span>
19
+ <span class="ruby-identifier">app_module_name</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">&quot;::&quot;</span>).<span class="ruby-identifier">first</span>
20
+ <span class="ruby-identifier">mab_class_name</span> = <span class="ruby-node">&quot;#{app_module_name}::Mab&quot;</span>
21
+ <span class="ruby-identifier">mab_class</span> = <span class="ruby-identifier">mab_class_name</span>.<span class="ruby-identifier">constantize</span>
22
+
23
+ <span class="ruby-comment cmt"># unless mab_class.public_instance_methods.include? 'register' </span>
24
+ <span class="ruby-comment cmt"># module_eval ABingoCampingPlugin::Views.register_view</span>
25
+ <span class="ruby-comment cmt"># end</span>
26
+ <span class="ruby-keyword kw">end</span>
27
+
28
+ <span class="ruby-keyword kw">end</span></pre>
29
+ </body>
30
+ </html>
@@ -0,0 +1,429 @@
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 xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: Abingo</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">Abingo</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../files/lib/camping-abingo_rb.html">
59
+ lib/camping-abingo.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ Object
69
+ </td>
70
+ </tr>
71
+ </table>
72
+ </div>
73
+ <!-- banner header -->
74
+
75
+ <div id="bodyContent">
76
+
77
+
78
+
79
+ <div id="contextContent">
80
+
81
+ <div id="description">
82
+ <p>
83
+ Main <a href="Abingo.html">Abingo</a> class
84
+ </p>
85
+
86
+ </div>
87
+
88
+
89
+ </div>
90
+
91
+ <div id="method-list">
92
+ <h3 class="section-bar">Methods</h3>
93
+
94
+ <div class="name-list">
95
+ <a href="#M000006">bingo!</a>&nbsp;&nbsp;
96
+ <a href="#M000001">cache</a>&nbsp;&nbsp;
97
+ <a href="#M000015">expires_in</a>&nbsp;&nbsp;
98
+ <a href="#M000012">find_alternative_for_user</a>&nbsp;&nbsp;
99
+ <a href="#M000004">flip</a>&nbsp;&nbsp;
100
+ <a href="#M000008">human!</a>&nbsp;&nbsp;
101
+ <a href="#M000003">identity</a>&nbsp;&nbsp;
102
+ <a href="#M000002">identity=</a>&nbsp;&nbsp;
103
+ <a href="#M000009">is_human?</a>&nbsp;&nbsp;
104
+ <a href="#M000013">modulo_choice</a>&nbsp;&nbsp;
105
+ <a href="#M000010">parse_alternatives</a>&nbsp;&nbsp;
106
+ <a href="#M000007">participating_tests</a>&nbsp;&nbsp;
107
+ <a href="#M000011">retrieve_alternatives</a>&nbsp;&nbsp;
108
+ <a href="#M000014">score_conversion!</a>&nbsp;&nbsp;
109
+ <a href="#M000005">test</a>&nbsp;&nbsp;
110
+ </div>
111
+ </div>
112
+
113
+ </div>
114
+
115
+
116
+ <!-- if includes -->
117
+
118
+ <div id="section">
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+ <!-- if method_list -->
128
+ <div id="methods">
129
+ <h3 class="section-bar">Public Class methods</h3>
130
+
131
+ <div id="method-M000006" class="method-detail">
132
+ <a name="M000006"></a>
133
+
134
+ <div class="method-heading">
135
+ <a href="Abingo.src/M000006.html" target="Code" class="method-signature"
136
+ onclick="popupCode('Abingo.src/M000006.html');return false;">
137
+ <span class="method-name">bingo!</span><span class="method-args">(name = nil, options = {})</span>
138
+ </a>
139
+ </div>
140
+
141
+ <div class="method-description">
142
+ <p>
143
+ Scores conversions for tests. test_name_or_array supports three types of
144
+ input:
145
+ </p>
146
+ <p>
147
+ A conversion name: scores a conversion for any <a
148
+ href="Abingo.html#M000005">test</a> the user is participating in which
149
+ </p>
150
+ <pre>
151
+ is listening to the specified conversion.
152
+ </pre>
153
+ <p>
154
+ A <a href="Abingo.html#M000005">test</a> name: scores a conversion for the
155
+ named <a href="Abingo.html#M000005">test</a> if the user is participating
156
+ in it.
157
+ </p>
158
+ <p>
159
+ An array of either of the above: for each element of the array, process as
160
+ above.
161
+ </p>
162
+ <p>
163
+ nil: score a conversion for every <a href="Abingo.html#M000005">test</a>
164
+ the u
165
+ </p>
166
+ </div>
167
+ </div>
168
+
169
+ <div id="method-M000001" class="method-detail">
170
+ <a name="M000001"></a>
171
+
172
+ <div class="method-heading">
173
+ <a href="Abingo.src/M000001.html" target="Code" class="method-signature"
174
+ onclick="popupCode('Abingo.src/M000001.html');return false;">
175
+ <span class="method-name">cache</span><span class="method-args">()</span>
176
+ </a>
177
+ </div>
178
+
179
+ <div class="method-description">
180
+ </div>
181
+ </div>
182
+
183
+ <div id="method-M000004" class="method-detail">
184
+ <a name="M000004"></a>
185
+
186
+ <div class="method-heading">
187
+ <a href="Abingo.src/M000004.html" target="Code" class="method-signature"
188
+ onclick="popupCode('Abingo.src/M000004.html');return false;">
189
+ <span class="method-name">flip</span><span class="method-args">(test_name) {|self.test(test_name, [true, false])| ...}</span>
190
+ </a>
191
+ </div>
192
+
193
+ <div class="method-description">
194
+ <p>
195
+ A simple convenience method for doing an A/B <a
196
+ href="Abingo.html#M000005">test</a>. Returns true or false. If you pass it
197
+ a block, it will bind the choice to the variable given to the block.
198
+ </p>
199
+ </div>
200
+ </div>
201
+
202
+ <div id="method-M000008" class="method-detail">
203
+ <a name="M000008"></a>
204
+
205
+ <div class="method-heading">
206
+ <a href="Abingo.src/M000008.html" target="Code" class="method-signature"
207
+ onclick="popupCode('Abingo.src/M000008.html');return false;">
208
+ <span class="method-name">human!</span><span class="method-args">()</span>
209
+ </a>
210
+ </div>
211
+
212
+ <div class="method-description">
213
+ <p>
214
+ Marks that this user is human.
215
+ </p>
216
+ </div>
217
+ </div>
218
+
219
+ <div id="method-M000003" class="method-detail">
220
+ <a name="M000003"></a>
221
+
222
+ <div class="method-heading">
223
+ <a href="Abingo.src/M000003.html" target="Code" class="method-signature"
224
+ onclick="popupCode('Abingo.src/M000003.html');return false;">
225
+ <span class="method-name">identity</span><span class="method-args">()</span>
226
+ </a>
227
+ </div>
228
+
229
+ <div class="method-description">
230
+ </div>
231
+ </div>
232
+
233
+ <div id="method-M000002" class="method-detail">
234
+ <a name="M000002"></a>
235
+
236
+ <div class="method-heading">
237
+ <a href="Abingo.src/M000002.html" target="Code" class="method-signature"
238
+ onclick="popupCode('Abingo.src/M000002.html');return false;">
239
+ <span class="method-name">identity=</span><span class="method-args">(new_identity)</span>
240
+ </a>
241
+ </div>
242
+
243
+ <div class="method-description">
244
+ <p>
245
+ This method gives a unique <a href="Abingo.html#M000003">identity</a> to a
246
+ user. It can be absolutely anything you want, as long as it is consistent.
247
+ </p>
248
+ <p>
249
+ We use the <a href="Abingo.html#M000003">identity</a> to determine,
250
+ deterministically, which alternative a user sees. This means that if you
251
+ use Abingo.identify_user on someone at login, they will always see the same
252
+ alternative for a particular <a href="Abingo.html#M000005">test</a> which
253
+ is past the login screen. For details and usage notes, see the docs.
254
+ </p>
255
+ </div>
256
+ </div>
257
+
258
+ <div id="method-M000007" class="method-detail">
259
+ <a name="M000007"></a>
260
+
261
+ <div class="method-heading">
262
+ <a href="Abingo.src/M000007.html" target="Code" class="method-signature"
263
+ onclick="popupCode('Abingo.src/M000007.html');return false;">
264
+ <span class="method-name">participating_tests</span><span class="method-args">(only_current = true)</span>
265
+ </a>
266
+ </div>
267
+
268
+ <div class="method-description">
269
+ </div>
270
+ </div>
271
+
272
+ <div id="method-M000005" class="method-detail">
273
+ <a name="M000005"></a>
274
+
275
+ <div class="method-heading">
276
+ <a href="Abingo.src/M000005.html" target="Code" class="method-signature"
277
+ onclick="popupCode('Abingo.src/M000005.html');return false;">
278
+ <span class="method-name">test</span><span class="method-args">(test_name, alternatives, options = {}) {|choice| ...}</span>
279
+ </a>
280
+ </div>
281
+
282
+ <div class="method-description">
283
+ <p>
284
+ This is the meat of A/Bingo. options accepts
285
+ </p>
286
+ <pre>
287
+ :multiple_participation (true or false)
288
+ :conversion name of conversion to listen for (alias: conversion_name)
289
+ </pre>
290
+ </div>
291
+ </div>
292
+
293
+ <h3 class="section-bar">Protected Class methods</h3>
294
+
295
+ <div id="method-M000015" class="method-detail">
296
+ <a name="M000015"></a>
297
+
298
+ <div class="method-heading">
299
+ <a href="Abingo.src/M000015.html" target="Code" class="method-signature"
300
+ onclick="popupCode('Abingo.src/M000015.html');return false;">
301
+ <span class="method-name">expires_in</span><span class="method-args">(known_human = false)</span>
302
+ </a>
303
+ </div>
304
+
305
+ <div class="method-description">
306
+ </div>
307
+ </div>
308
+
309
+ <div id="method-M000012" class="method-detail">
310
+ <a name="M000012"></a>
311
+
312
+ <div class="method-heading">
313
+ <a href="Abingo.src/M000012.html" target="Code" class="method-signature"
314
+ onclick="popupCode('Abingo.src/M000012.html');return false;">
315
+ <span class="method-name">find_alternative_for_user</span><span class="method-args">(test_name, alternatives)</span>
316
+ </a>
317
+ </div>
318
+
319
+ <div class="method-description">
320
+ </div>
321
+ </div>
322
+
323
+ <div id="method-M000009" class="method-detail">
324
+ <a name="M000009"></a>
325
+
326
+ <div class="method-heading">
327
+ <a href="Abingo.src/M000009.html" target="Code" class="method-signature"
328
+ onclick="popupCode('Abingo.src/M000009.html');return false;">
329
+ <span class="method-name">is_human?</span><span class="method-args">()</span>
330
+ </a>
331
+ </div>
332
+
333
+ <div class="method-description">
334
+ </div>
335
+ </div>
336
+
337
+ <div id="method-M000013" class="method-detail">
338
+ <a name="M000013"></a>
339
+
340
+ <div class="method-heading">
341
+ <a href="Abingo.src/M000013.html" target="Code" class="method-signature"
342
+ onclick="popupCode('Abingo.src/M000013.html');return false;">
343
+ <span class="method-name">modulo_choice</span><span class="method-args">(test_name, choices_count)</span>
344
+ </a>
345
+ </div>
346
+
347
+ <div class="method-description">
348
+ <p>
349
+ Quickly determines what alternative to show a given user. Given a <a
350
+ href="Abingo.html#M000005">test</a> name and their <a
351
+ href="Abingo.html#M000003">identity</a>, we hash them together (which, for
352
+ MD5, provably introduces enough entropy that we don&#8216;t care) otherwise
353
+ </p>
354
+ </div>
355
+ </div>
356
+
357
+ <div id="method-M000010" class="method-detail">
358
+ <a name="M000010"></a>
359
+
360
+ <div class="method-heading">
361
+ <a href="Abingo.src/M000010.html" target="Code" class="method-signature"
362
+ onclick="popupCode('Abingo.src/M000010.html');return false;">
363
+ <span class="method-name">parse_alternatives</span><span class="method-args">(alternatives)</span>
364
+ </a>
365
+ </div>
366
+
367
+ <div class="method-description">
368
+ <p>
369
+ For programmer convenience, we allow you to specify what the alternatives
370
+ for an experiment are in a few ways. Thus, we need to actually be able to
371
+ handle all of them. We fire this parser very infrequently (once per <a
372
+ href="Abingo.html#M000005">test</a>, typically) so it can be as complicated
373
+ as we want.
374
+ </p>
375
+ <pre>
376
+ Integer =&gt; a number 1 through N
377
+ Range =&gt; a number within the range
378
+ Array =&gt; an element of the array.
379
+ Hash =&gt; assumes a hash of something to int. We pick one of the
380
+ somethings, weighted accorded to the ints provided. e.g.
381
+ {:a =&gt; 2, :b =&gt; 3} produces :a 40% of the time, :b 60%.
382
+ </pre>
383
+ <p>
384
+ Alternatives are always represented internally as an array.
385
+ </p>
386
+ </div>
387
+ </div>
388
+
389
+ <div id="method-M000011" class="method-detail">
390
+ <a name="M000011"></a>
391
+
392
+ <div class="method-heading">
393
+ <a href="Abingo.src/M000011.html" target="Code" class="method-signature"
394
+ onclick="popupCode('Abingo.src/M000011.html');return false;">
395
+ <span class="method-name">retrieve_alternatives</span><span class="method-args">(test_name, alternatives)</span>
396
+ </a>
397
+ </div>
398
+
399
+ <div class="method-description">
400
+ </div>
401
+ </div>
402
+
403
+ <div id="method-M000014" class="method-detail">
404
+ <a name="M000014"></a>
405
+
406
+ <div class="method-heading">
407
+ <a href="Abingo.src/M000014.html" target="Code" class="method-signature"
408
+ onclick="popupCode('Abingo.src/M000014.html');return false;">
409
+ <span class="method-name">score_conversion!</span><span class="method-args">(test_name)</span>
410
+ </a>
411
+ </div>
412
+
413
+ <div class="method-description">
414
+ </div>
415
+ </div>
416
+
417
+
418
+ </div>
419
+
420
+
421
+ </div>
422
+
423
+
424
+ <div id="validator-badges">
425
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
426
+ </div>
427
+
428
+ </body>
429
+ </html>