camping-abingo 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
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>