redis_analytics 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (226) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/app/controllers/redis_analytics/api_controller.rb +1 -1
  4. data/app/controllers/redis_analytics/visits_controller.rb +1 -1
  5. data/lib/redis_analytics/version.rb +1 -1
  6. data/redis_analytics.gemspec +0 -1
  7. data/spec/lib/redis_analytics/filter_spec.rb +3 -3
  8. data/spec/spec_helper.rb +1 -1
  9. metadata +48 -279
  10. data/Gemfile.lock +0 -176
  11. data/coverage/assets/0.8.0/application.css +0 -799
  12. data/coverage/assets/0.8.0/application.js +0 -1559
  13. data/coverage/assets/0.8.0/colorbox/border.png +0 -0
  14. data/coverage/assets/0.8.0/colorbox/controls.png +0 -0
  15. data/coverage/assets/0.8.0/colorbox/loading.gif +0 -0
  16. data/coverage/assets/0.8.0/colorbox/loading_background.png +0 -0
  17. data/coverage/assets/0.8.0/favicon_green.png +0 -0
  18. data/coverage/assets/0.8.0/favicon_red.png +0 -0
  19. data/coverage/assets/0.8.0/favicon_yellow.png +0 -0
  20. data/coverage/assets/0.8.0/loading.gif +0 -0
  21. data/coverage/assets/0.8.0/magnify.png +0 -0
  22. data/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  23. data/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  24. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  25. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  26. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  27. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  28. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  29. data/coverage/assets/0.8.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  30. data/coverage/assets/0.8.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
  31. data/coverage/assets/0.8.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  32. data/coverage/assets/0.8.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
  33. data/coverage/assets/0.8.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
  34. data/coverage/assets/0.8.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  35. data/coverage/index.html +0 -3526
  36. data/test/dummy/db/production.sqlite3 +0 -0
  37. data/test/dummy/log/development.log +0 -2790
  38. data/test/dummy/log/production.log +0 -6054
  39. data/test/dummy/public/assets/application-ac39e235d42f60499cd65a4b78076ba3.css +0 -14
  40. data/test/dummy/public/assets/application-ac39e235d42f60499cd65a4b78076ba3.css.gz +0 -0
  41. data/test/dummy/public/assets/application-c900658d554ff9f314a2e1b97cd68997.js +0 -10752
  42. data/test/dummy/public/assets/application-c900658d554ff9f314a2e1b97cd68997.js.gz +0 -0
  43. data/test/dummy/public/assets/manifest-567012ae8b6f03148f7121062750991f.json +0 -1
  44. data/test/dummy/public/assets/redis_analytics/redis_analytics-82322234eccfd3d7c55a2034ee41ab2a.js +0 -10785
  45. data/test/dummy/public/assets/redis_analytics/redis_analytics-82322234eccfd3d7c55a2034ee41ab2a.js.gz +0 -0
  46. data/test/dummy/public/assets/redis_analytics/redis_analytics-f13abe0904b7483ea8c8c08029e97be3.css +0 -64
  47. data/test/dummy/public/assets/redis_analytics/redis_analytics-f13abe0904b7483ea8c8c08029e97be3.css.gz +0 -0
  48. data/test/dummy/tmp/cache/assets/C86/E20/sprockets%2F04d6293b6d7c30b20475e886dc634936 +0 -0
  49. data/test/dummy/tmp/cache/assets/C88/400/sprockets%2F1bb834b9f3b720193591960cf7f31497 +0 -0
  50. data/test/dummy/tmp/cache/assets/C8D/800/sprockets%2Fb484d3480591b77bf84376f1f41a6457 +0 -0
  51. data/test/dummy/tmp/cache/assets/C97/230/sprockets%2Ff8c56a6d1d5685424871464fc480f956 +0 -0
  52. data/test/dummy/tmp/cache/assets/C98/560/sprockets%2Ff14a2366122e6017b965b32290b8abb0 +0 -0
  53. data/test/dummy/tmp/cache/assets/CAE/7D0/sprockets%2F1f0b25ca08195d3582e4fe04396e9270 +0 -0
  54. data/test/dummy/tmp/cache/assets/CB9/550/sprockets%2F0505a9fb5602a3fae429f389832747d8 +0 -0
  55. data/test/dummy/tmp/cache/assets/CBA/030/sprockets%2F510aa1c63fe533f77a197367b79f2919 +0 -0
  56. data/test/dummy/tmp/cache/assets/CBC/630/sprockets%2F8fca8928788707a4ba625519ab402d58 +0 -0
  57. data/test/dummy/tmp/cache/assets/CC6/EE0/sprockets%2Fb6d3cc91f7b3559f985a978176b44324 +0 -0
  58. data/test/dummy/tmp/cache/assets/CC9/9C0/sprockets%2F84294e9b30cf387e6d8a35f82616a796 +0 -0
  59. data/test/dummy/tmp/cache/assets/CDA/880/sprockets%2F6b1913c56c962748122caf34704afdb5 +0 -0
  60. data/test/dummy/tmp/cache/assets/CDD/BF0/sprockets%2F1f5080b606781094922ecaccd9d508f2 +0 -0
  61. data/test/dummy/tmp/cache/assets/CF0/BB0/sprockets%2F48cd49adc4f96c8324c46c45641b6865 +0 -0
  62. data/test/dummy/tmp/cache/assets/CFE/380/sprockets%2F8e8d04799794da144a9907a9f82e0cf8 +0 -0
  63. data/test/dummy/tmp/cache/assets/D06/470/sprockets%2F2e9124aa82b45552ba5a8307f4f16a8e +0 -0
  64. data/test/dummy/tmp/cache/assets/D06/B80/sprockets%2Fb658eb46471a1b356c0e13962f1a52ee +0 -0
  65. data/test/dummy/tmp/cache/assets/D07/520/sprockets%2F0176f74cb205f694569fa21a53b2fa0e +0 -0
  66. data/test/dummy/tmp/cache/assets/D0A/3C0/sprockets%2F8fd1601c6d442f22a88d0e43bb87117f +0 -0
  67. data/test/dummy/tmp/cache/assets/D10/130/sprockets%2F7af0bd97720d268b9835405c8bae2d06 +0 -0
  68. data/test/dummy/tmp/cache/assets/D15/450/sprockets%2Fae3344670b608424cdc864eca5496fb9 +0 -0
  69. data/test/dummy/tmp/cache/assets/D16/7F0/sprockets%2F73d738bf9b779ad016ed62131d85cc16 +0 -0
  70. data/test/dummy/tmp/cache/assets/D16/A30/sprockets%2F23659e6e2161bb90c6f382ecbef73906 +0 -0
  71. data/test/dummy/tmp/cache/assets/D2B/060/sprockets%2Fd5891eb52eb6329a928461796e9ddfe5 +0 -0
  72. data/test/dummy/tmp/cache/assets/D32/810/sprockets%2F640ab72cec151bc94248b091f6b763bb +0 -0
  73. data/test/dummy/tmp/cache/assets/D37/C50/sprockets%2F00afdaa74ea16690227f771ae0879e1c +0 -0
  74. data/test/dummy/tmp/cache/assets/D39/A80/sprockets%2Ff850350eb319d86a5e0c02c2279cffa5 +0 -0
  75. data/test/dummy/tmp/cache/assets/D3F/170/sprockets%2F3b7a50f2bb29ad782e0352fc784d582f +0 -0
  76. data/test/dummy/tmp/cache/assets/D54/280/sprockets%2F8e51b269010978fe78fa369f6dfa1bf6 +0 -0
  77. data/test/dummy/tmp/cache/assets/D5C/120/sprockets%2F6b74e64b0422b8c574caba3a1746acd2 +0 -0
  78. data/test/dummy/tmp/cache/assets/D5D/E00/sprockets%2Fee3d10401f2a2d4a84f4fe56181fe1c1 +0 -0
  79. data/test/dummy/tmp/cache/assets/D68/310/sprockets%2Fa6108a4fca3b4012f99dcf46e24f5f60 +0 -0
  80. data/test/dummy/tmp/cache/assets/D6C/8C0/sprockets%2F06e1e915faab12cbf879a6b15b9136e7 +0 -0
  81. data/test/dummy/tmp/cache/assets/D70/310/sprockets%2Fab142f83166b2fc048379c9dfddd355a +0 -0
  82. data/test/dummy/tmp/cache/assets/D74/9F0/sprockets%2F59ed8bd7c6ca0dbe0f1921ee14667375 +0 -0
  83. data/test/dummy/tmp/cache/assets/D76/270/sprockets%2F006a046ae88edf3f8c84dc30ef8056d8 +0 -0
  84. data/test/dummy/tmp/cache/assets/D82/590/sprockets%2Fa6f6f970aa669d95690af983eb2b6a5c +0 -0
  85. data/test/dummy/tmp/cache/assets/D8D/440/sprockets%2F486b3eff5dce57385a599ef92be18c65 +0 -0
  86. data/test/dummy/tmp/cache/assets/D93/FF0/sprockets%2Fd06dd1928f37e37a29edb4dbaeb20403 +0 -0
  87. data/test/dummy/tmp/cache/assets/D99/350/sprockets%2F31bdb7fc1c62c06d71678d04fd0db9b8 +0 -0
  88. data/test/dummy/tmp/cache/assets/D9C/070/sprockets%2F9be5d5a71da06ce64d0ed17b3937e15d +0 -0
  89. data/test/dummy/tmp/cache/assets/D9E/5B0/sprockets%2Fd3f2f56488b7ac4890a2ad0bfef7c322 +0 -0
  90. data/test/dummy/tmp/cache/assets/DA4/020/sprockets%2F0fc75dd594e2c890f93a6dcd7332aaa8 +0 -0
  91. data/test/dummy/tmp/cache/assets/DA4/6B0/sprockets%2F17a2e22cd7356ee86da5d99f0a08bbf7 +0 -0
  92. data/test/dummy/tmp/cache/assets/DA5/470/sprockets%2Fa49ebde3ec35e12d52892e188a5cfd90 +0 -0
  93. data/test/dummy/tmp/cache/assets/DA6/D90/sprockets%2Fe3d875d9f2fb7341ae0e31f64c90e6bf +0 -0
  94. data/test/dummy/tmp/cache/assets/DA7/CA0/sprockets%2F0a03bffc91afd8872e8986daf8a2309b +0 -0
  95. data/test/dummy/tmp/cache/assets/DAD/FC0/sprockets%2F9b6809cd65f83a6bfaee80543f9e0ab7 +0 -0
  96. data/test/dummy/tmp/cache/assets/DC4/410/sprockets%2F7c23fbd015fe022d7eed035b4ff3a59c +0 -0
  97. data/test/dummy/tmp/cache/assets/DCB/CA0/sprockets%2F940121ecc7ae38abf79cc78efadf2212 +0 -0
  98. data/test/dummy/tmp/cache/assets/DCC/C10/sprockets%2F7cb37eb6b6ca3028ffd5c5420d8d7fc1 +0 -0
  99. data/test/dummy/tmp/cache/assets/DCD/4E0/sprockets%2Fcff1de305ed821d80d98f4cafa27414d +0 -0
  100. data/test/dummy/tmp/cache/assets/E07/1E0/sprockets%2Fd79ac6cbbaf490e5a3f09ab8288d3c9e +0 -0
  101. data/test/dummy/tmp/cache/assets/E39/680/sprockets%2F1e91e9837edc18aeeaf8df3c82f2af0e +0 -0
  102. data/test/dummy/tmp/cache/assets/E56/670/sprockets%2Fbd0e4d12cea996e0d2eebaa879a17eca +0 -0
  103. data/test/dummy/tmp/cache/assets/E57/150/sprockets%2Fdfa6edddd9357edcafaf06c20d21e561 +0 -0
  104. data/test/dummy/tmp/cache/assets/E5B/2B0/sprockets%2Ffebbeb2ea0bcd485bf5b9bd6190b9f44 +0 -0
  105. data/test/dummy/tmp/cache/assets/development/sprockets/006eb7cc017cf18c3ea32cab97f0cc3c +0 -0
  106. data/test/dummy/tmp/cache/assets/development/sprockets/00afdaa74ea16690227f771ae0879e1c +0 -0
  107. data/test/dummy/tmp/cache/assets/development/sprockets/0125613fec11977628d50d4198ef25f3 +0 -0
  108. data/test/dummy/tmp/cache/assets/development/sprockets/04d6293b6d7c30b20475e886dc634936 +0 -0
  109. data/test/dummy/tmp/cache/assets/development/sprockets/0c6b5095a86cd9aa4d15f4258a08f315 +0 -0
  110. data/test/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  111. data/test/dummy/tmp/cache/assets/development/sprockets/17a2e22cd7356ee86da5d99f0a08bbf7 +0 -0
  112. data/test/dummy/tmp/cache/assets/development/sprockets/192691b9e0bedebfde12633bb3629d0b +0 -0
  113. data/test/dummy/tmp/cache/assets/development/sprockets/1e91e9837edc18aeeaf8df3c82f2af0e +0 -0
  114. data/test/dummy/tmp/cache/assets/development/sprockets/1f0b25ca08195d3582e4fe04396e9270 +0 -0
  115. data/test/dummy/tmp/cache/assets/development/sprockets/23659e6e2161bb90c6f382ecbef73906 +0 -0
  116. data/test/dummy/tmp/cache/assets/development/sprockets/23b9bf2d5f9b45144a2803844eaa826e +0 -0
  117. data/test/dummy/tmp/cache/assets/development/sprockets/243cc575289b3170af701574d19d6353 +0 -0
  118. data/test/dummy/tmp/cache/assets/development/sprockets/24abc0717cf109a24278323c0d6756a0 +0 -0
  119. data/test/dummy/tmp/cache/assets/development/sprockets/2b6cc5f28a12c36cd4095832a5107969 +0 -0
  120. data/test/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  121. data/test/dummy/tmp/cache/assets/development/sprockets/326592f095651b767387e7c1d2b01dfe +0 -0
  122. data/test/dummy/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  123. data/test/dummy/tmp/cache/assets/development/sprockets/3b2603753f496fe7b73a04ce200ea6c0 +0 -0
  124. data/test/dummy/tmp/cache/assets/development/sprockets/3bb822a002a8951f71e53f450090799b +0 -0
  125. data/test/dummy/tmp/cache/assets/development/sprockets/3f91dad02acd15d7437b62ddca53c58b +0 -0
  126. data/test/dummy/tmp/cache/assets/development/sprockets/486b3eff5dce57385a599ef92be18c65 +0 -0
  127. data/test/dummy/tmp/cache/assets/development/sprockets/48cd49adc4f96c8324c46c45641b6865 +0 -0
  128. data/test/dummy/tmp/cache/assets/development/sprockets/4b5d99d538ae32ad329cb37e413dbacc +0 -0
  129. data/test/dummy/tmp/cache/assets/development/sprockets/4b838eac074ecce8b8ae19c261677ab6 +0 -0
  130. data/test/dummy/tmp/cache/assets/development/sprockets/4e89e9cec1b5e275bfeb078a9abfef44 +0 -0
  131. data/test/dummy/tmp/cache/assets/development/sprockets/510aa1c63fe533f77a197367b79f2919 +0 -0
  132. data/test/dummy/tmp/cache/assets/development/sprockets/5cf60638cb580f41112a5a83eb3b72ef +0 -0
  133. data/test/dummy/tmp/cache/assets/development/sprockets/5dfbbe7f012f6cb7c29b1298cd9ff406 +0 -0
  134. data/test/dummy/tmp/cache/assets/development/sprockets/63afa0e9c559fa85d5c63b6f37728141 +0 -0
  135. data/test/dummy/tmp/cache/assets/development/sprockets/640ab72cec151bc94248b091f6b763bb +0 -0
  136. data/test/dummy/tmp/cache/assets/development/sprockets/6760a9b2947edeec5433ca0ff9d7a295 +0 -0
  137. data/test/dummy/tmp/cache/assets/development/sprockets/6b74e64b0422b8c574caba3a1746acd2 +0 -0
  138. data/test/dummy/tmp/cache/assets/development/sprockets/6c2f18f7338d56feecce32780357521c +0 -0
  139. data/test/dummy/tmp/cache/assets/development/sprockets/6d0077b1948c42a8892f40120649d217 +0 -0
  140. data/test/dummy/tmp/cache/assets/development/sprockets/6f292799ddb92a69f64c5a60c921a2d6 +0 -0
  141. data/test/dummy/tmp/cache/assets/development/sprockets/731ed4a2128ad4c7240bb520611c8404 +0 -0
  142. data/test/dummy/tmp/cache/assets/development/sprockets/73d738bf9b779ad016ed62131d85cc16 +0 -0
  143. data/test/dummy/tmp/cache/assets/development/sprockets/7477fb841e65b8c9c48c40c13935a851 +0 -0
  144. data/test/dummy/tmp/cache/assets/development/sprockets/77412054774bd02630c93c1e8ac6b26a +0 -0
  145. data/test/dummy/tmp/cache/assets/development/sprockets/7751914469530dae0646d92467e9d72e +0 -0
  146. data/test/dummy/tmp/cache/assets/development/sprockets/794a40bf52fa0deda8b4e5efa8ac523a +0 -0
  147. data/test/dummy/tmp/cache/assets/development/sprockets/7af0bd97720d268b9835405c8bae2d06 +0 -0
  148. data/test/dummy/tmp/cache/assets/development/sprockets/82ecc84179ce77914906a81d29b483cf +0 -0
  149. data/test/dummy/tmp/cache/assets/development/sprockets/8d62150b658b3a8b6fed7e8951f52392 +0 -0
  150. data/test/dummy/tmp/cache/assets/development/sprockets/8e51b269010978fe78fa369f6dfa1bf6 +0 -0
  151. data/test/dummy/tmp/cache/assets/development/sprockets/8e8d04799794da144a9907a9f82e0cf8 +0 -0
  152. data/test/dummy/tmp/cache/assets/development/sprockets/8ea331810c31cbe1ba34b91a02f769e7 +0 -0
  153. data/test/dummy/tmp/cache/assets/development/sprockets/8fd1601c6d442f22a88d0e43bb87117f +0 -0
  154. data/test/dummy/tmp/cache/assets/development/sprockets/953bc37b1ee0915247dba29773960202 +0 -0
  155. data/test/dummy/tmp/cache/assets/development/sprockets/978f6f32b21b72d3e89b0c0f6f3a4a83 +0 -0
  156. data/test/dummy/tmp/cache/assets/development/sprockets/994386d11af17e88b6d107b83f41f8b5 +0 -0
  157. data/test/dummy/tmp/cache/assets/development/sprockets/9b077a68a557a208cf34297edadebdd2 +0 -0
  158. data/test/dummy/tmp/cache/assets/development/sprockets/9b54afa4ef026f4c288feeec49f2f526 +0 -0
  159. data/test/dummy/tmp/cache/assets/development/sprockets/9b6809cd65f83a6bfaee80543f9e0ab7 +0 -0
  160. data/test/dummy/tmp/cache/assets/development/sprockets/9be5d5a71da06ce64d0ed17b3937e15d +0 -0
  161. data/test/dummy/tmp/cache/assets/development/sprockets/a29d0dc527ff5ce1252ccf6370514620 +0 -0
  162. data/test/dummy/tmp/cache/assets/development/sprockets/a317f594a79c3dd49a6f88b49aabc1b5 +0 -0
  163. data/test/dummy/tmp/cache/assets/development/sprockets/a49ebde3ec35e12d52892e188a5cfd90 +0 -0
  164. data/test/dummy/tmp/cache/assets/development/sprockets/a6108a4fca3b4012f99dcf46e24f5f60 +0 -0
  165. data/test/dummy/tmp/cache/assets/development/sprockets/aad6778bf60f6f1919628606c92cfd6f +0 -0
  166. data/test/dummy/tmp/cache/assets/development/sprockets/ab142f83166b2fc048379c9dfddd355a +0 -0
  167. data/test/dummy/tmp/cache/assets/development/sprockets/ae3344670b608424cdc864eca5496fb9 +0 -0
  168. data/test/dummy/tmp/cache/assets/development/sprockets/b01583a39abd5ce0a3d2b2967c6f75bd +0 -0
  169. data/test/dummy/tmp/cache/assets/development/sprockets/b2780e7c581a2f0cb1d61346c6d1c1cd +0 -0
  170. data/test/dummy/tmp/cache/assets/development/sprockets/b3f0354298e8a43af381a6e42a03f0bc +0 -0
  171. data/test/dummy/tmp/cache/assets/development/sprockets/b52b477f01cb65c5e1c6a91f6f0be20c +0 -0
  172. data/test/dummy/tmp/cache/assets/development/sprockets/b6fbc3e4c5191de2cc58174a3eeb7cfc +0 -0
  173. data/test/dummy/tmp/cache/assets/development/sprockets/bb39143b57041f96c48b71e92f7e09f2 +0 -0
  174. data/test/dummy/tmp/cache/assets/development/sprockets/be0b9e741941205338510e296868aab2 +0 -0
  175. data/test/dummy/tmp/cache/assets/development/sprockets/c9e69990b1552b575b271aaabbfc4eb5 +0 -0
  176. data/test/dummy/tmp/cache/assets/development/sprockets/c9eeea792acbd377e29de43d6b491291 +0 -0
  177. data/test/dummy/tmp/cache/assets/development/sprockets/cb67795d1180b371b5b749662b9adefb +0 -0
  178. data/test/dummy/tmp/cache/assets/development/sprockets/cfdf466647e83eb93e0d6630e4b51a25 +0 -0
  179. data/test/dummy/tmp/cache/assets/development/sprockets/cff1de305ed821d80d98f4cafa27414d +0 -0
  180. data/test/dummy/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  181. data/test/dummy/tmp/cache/assets/development/sprockets/d5891eb52eb6329a928461796e9ddfe5 +0 -0
  182. data/test/dummy/tmp/cache/assets/development/sprockets/d7491740e7757fe2ec57fd6d25461e5c +0 -0
  183. data/test/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  184. data/test/dummy/tmp/cache/assets/development/sprockets/d80f54242a6e7f4399481b7357d439a4 +0 -0
  185. data/test/dummy/tmp/cache/assets/development/sprockets/df16db3bfcc56fafc73b853b7999be1f +0 -0
  186. data/test/dummy/tmp/cache/assets/development/sprockets/dfa6edddd9357edcafaf06c20d21e561 +0 -0
  187. data/test/dummy/tmp/cache/assets/development/sprockets/e3d875d9f2fb7341ae0e31f64c90e6bf +0 -0
  188. data/test/dummy/tmp/cache/assets/development/sprockets/e7bd439b274a2155050b47e5a64ea72d +0 -0
  189. data/test/dummy/tmp/cache/assets/development/sprockets/ee3d10401f2a2d4a84f4fe56181fe1c1 +0 -0
  190. data/test/dummy/tmp/cache/assets/development/sprockets/f069f087fa68223029e7fb8547e5bc3b +0 -0
  191. data/test/dummy/tmp/cache/assets/development/sprockets/f14a2366122e6017b965b32290b8abb0 +0 -0
  192. data/test/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  193. data/test/dummy/tmp/cache/assets/development/sprockets/f9a412f49281cc7e6512f0787f7ba05f +0 -0
  194. data/test/dummy/tmp/cache/assets/development/sprockets/febbeb2ea0bcd485bf5b9bd6190b9f44 +0 -0
  195. data/test/dummy/tmp/cache/assets/production/sprockets/006eb7cc017cf18c3ea32cab97f0cc3c +0 -0
  196. data/test/dummy/tmp/cache/assets/production/sprockets/00afdaa74ea16690227f771ae0879e1c +0 -0
  197. data/test/dummy/tmp/cache/assets/production/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  198. data/test/dummy/tmp/cache/assets/production/sprockets/192691b9e0bedebfde12633bb3629d0b +0 -0
  199. data/test/dummy/tmp/cache/assets/production/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  200. data/test/dummy/tmp/cache/assets/production/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  201. data/test/dummy/tmp/cache/assets/production/sprockets/3b2603753f496fe7b73a04ce200ea6c0 +0 -0
  202. data/test/dummy/tmp/cache/assets/production/sprockets/4b838eac074ecce8b8ae19c261677ab6 +0 -0
  203. data/test/dummy/tmp/cache/assets/production/sprockets/5cf60638cb580f41112a5a83eb3b72ef +0 -0
  204. data/test/dummy/tmp/cache/assets/production/sprockets/63afa0e9c559fa85d5c63b6f37728141 +0 -0
  205. data/test/dummy/tmp/cache/assets/production/sprockets/6c2f18f7338d56feecce32780357521c +0 -0
  206. data/test/dummy/tmp/cache/assets/production/sprockets/6d0077b1948c42a8892f40120649d217 +0 -0
  207. data/test/dummy/tmp/cache/assets/production/sprockets/73d738bf9b779ad016ed62131d85cc16 +0 -0
  208. data/test/dummy/tmp/cache/assets/production/sprockets/7751914469530dae0646d92467e9d72e +0 -0
  209. data/test/dummy/tmp/cache/assets/production/sprockets/8d62150b658b3a8b6fed7e8951f52392 +0 -0
  210. data/test/dummy/tmp/cache/assets/production/sprockets/8ea331810c31cbe1ba34b91a02f769e7 +0 -0
  211. data/test/dummy/tmp/cache/assets/production/sprockets/953bc37b1ee0915247dba29773960202 +0 -0
  212. data/test/dummy/tmp/cache/assets/production/sprockets/9b54afa4ef026f4c288feeec49f2f526 +0 -0
  213. data/test/dummy/tmp/cache/assets/production/sprockets/a29d0dc527ff5ce1252ccf6370514620 +0 -0
  214. data/test/dummy/tmp/cache/assets/production/sprockets/a317f594a79c3dd49a6f88b49aabc1b5 +0 -0
  215. data/test/dummy/tmp/cache/assets/production/sprockets/b01583a39abd5ce0a3d2b2967c6f75bd +0 -0
  216. data/test/dummy/tmp/cache/assets/production/sprockets/cfdf466647e83eb93e0d6630e4b51a25 +0 -0
  217. data/test/dummy/tmp/cache/assets/production/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  218. data/test/dummy/tmp/cache/assets/production/sprockets/d7491740e7757fe2ec57fd6d25461e5c +0 -0
  219. data/test/dummy/tmp/cache/assets/production/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  220. data/test/dummy/tmp/cache/assets/production/sprockets/df16db3bfcc56fafc73b853b7999be1f +0 -0
  221. data/test/dummy/tmp/cache/assets/production/sprockets/dfa6edddd9357edcafaf06c20d21e561 +0 -0
  222. data/test/dummy/tmp/cache/assets/production/sprockets/e7bd439b274a2155050b47e5a64ea72d +0 -0
  223. data/test/dummy/tmp/cache/assets/production/sprockets/f069f087fa68223029e7fb8547e5bc3b +0 -0
  224. data/test/dummy/tmp/cache/assets/production/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  225. data/test/dummy/tmp/cache/assets/production/sprockets/f9a412f49281cc7e6512f0787f7ba05f +0 -0
  226. data/test/dummy/tmp/cache/assets/production/sprockets/febbeb2ea0bcd485bf5b9bd6190b9f44 +0 -0
@@ -1,3526 +0,0 @@
1
- <!DOCTYPE html>
2
- <html xmlns='http://www.w3.org/1999/xhtml'>
3
- <head>
4
- <title>Code coverage for Redis analytics</title>
5
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
6
- <script src='./assets/0.8.0/application.js' type='text/javascript'></script>
7
- <link href='./assets/0.8.0/application.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
8
- <link rel="shortcut icon" type="image/png" href="./assets/0.8.0/favicon_red.png" />
9
- <link rel="icon" type="image/png" href="./assets/0.8.0/favicon.png" />
10
- </head>
11
-
12
- <body>
13
- <div id="loading">
14
- <img src="./assets/0.8.0/loading.gif" alt="loading"/>
15
- </div>
16
- <div id="wrapper" style="display:none;">
17
- <div class="timestamp">Generated <abbr class="timeago" title="2014-05-17T00:31:13+05:30">2014-05-17T00:31:13+05:30</abbr></div>
18
- <ul class="group_tabs"></ul>
19
-
20
- <div id="content">
21
- <div class="file_list_container" id="AllFiles">
22
- <h2>
23
- <span class="group_name">All Files</span>
24
- (<span class="covered_percent"><span class="red">78.67%</span></span>
25
- covered at
26
- <span class="covered_strength">
27
- <span class="green">
28
- 7.07
29
- </span>
30
- </span> hits/line)
31
- </h2>
32
- <a name="AllFiles"></a>
33
- <div>
34
- <b>10</b> files in total.
35
- <b>286</b> relevant lines.
36
- <span class="green"><b>225</b> lines covered</span> and
37
- <span class="red"><b>61</b> lines missed </span>
38
- </div>
39
- <table class="file_list">
40
- <thead>
41
- <tr>
42
- <th>File</th>
43
- <th>% covered</th>
44
- <th>Lines</th>
45
- <th>Relevant Lines</th>
46
- <th>Lines covered</th>
47
- <th>Lines missed</th>
48
- <th>Avg. Hits / Line</th>
49
- </tr>
50
- </thead>
51
- <tbody>
52
-
53
- <tr>
54
- <td class="strong"><a href="#87808c78ef10e317cd1a78af909f967fb4f38793" class="src_link" title="lib/redis_analytics.rb">lib/redis_analytics.rb</a></td>
55
- <td class="green strong">100.0 %</td>
56
- <td>19</td>
57
- <td>15</td>
58
- <td>15</td>
59
- <td>0</td>
60
- <td>1.0</td>
61
- </tr>
62
-
63
- <tr>
64
- <td class="strong"><a href="#d05e12d08e01a7fce7224836c8d4d56bb0b49012" class="src_link" title="lib/redis_analytics/configuration.rb">lib/redis_analytics/configuration.rb</a></td>
65
- <td class="green strong">95.45 %</td>
66
- <td>101</td>
67
- <td>44</td>
68
- <td>42</td>
69
- <td>2</td>
70
- <td>3.7</td>
71
- </tr>
72
-
73
- <tr>
74
- <td class="strong"><a href="#092dae03526444499262440a90b632344ec5532e" class="src_link" title="lib/redis_analytics/engine.rb">lib/redis_analytics/engine.rb</a></td>
75
- <td class="red strong">75.0 %</td>
76
- <td>25</td>
77
- <td>12</td>
78
- <td>9</td>
79
- <td>3</td>
80
- <td>0.8</td>
81
- </tr>
82
-
83
- <tr>
84
- <td class="strong"><a href="#d8260f765f0e7fbb3f45d2dd48a4b3ef51f428dc" class="src_link" title="lib/redis_analytics/filter.rb">lib/redis_analytics/filter.rb</a></td>
85
- <td class="green strong">100.0 %</td>
86
- <td>32</td>
87
- <td>16</td>
88
- <td>16</td>
89
- <td>0</td>
90
- <td>2.0</td>
91
- </tr>
92
-
93
- <tr>
94
- <td class="strong"><a href="#72c2cd9bcf1cf9eef6be9a77b6d4b9d90c1b1e0e" class="src_link" title="lib/redis_analytics/helpers.rb">lib/redis_analytics/helpers.rb</a></td>
95
- <td class="red strong">21.74 %</td>
96
- <td>74</td>
97
- <td>46</td>
98
- <td>10</td>
99
- <td>36</td>
100
- <td>0.2</td>
101
- </tr>
102
-
103
- <tr>
104
- <td class="strong"><a href="#8aa33c01d706b233fb978d91503f1ccd32661a5f" class="src_link" title="lib/redis_analytics/metrics.rb">lib/redis_analytics/metrics.rb</a></td>
105
- <td class="red strong">67.35 %</td>
106
- <td>95</td>
107
- <td>49</td>
108
- <td>33</td>
109
- <td>16</td>
110
- <td>1.6</td>
111
- </tr>
112
-
113
- <tr>
114
- <td class="strong"><a href="#d0b8e9f6b08e86ae88c6c70a32d61857519ac074" class="src_link" title="lib/redis_analytics/time_ext.rb">lib/redis_analytics/time_ext.rb</a></td>
115
- <td class="red strong">71.43 %</td>
116
- <td>13</td>
117
- <td>7</td>
118
- <td>5</td>
119
- <td>2</td>
120
- <td>0.7</td>
121
- </tr>
122
-
123
- <tr>
124
- <td class="strong"><a href="#122f0359443d903f82b5e7f8a5e78017eeb5ff90" class="src_link" title="lib/redis_analytics/tracker.rb">lib/redis_analytics/tracker.rb</a></td>
125
- <td class="green strong">100.0 %</td>
126
- <td>45</td>
127
- <td>29</td>
128
- <td>29</td>
129
- <td>0</td>
130
- <td>3.1</td>
131
- </tr>
132
-
133
- <tr>
134
- <td class="strong"><a href="#5db319fbdc0ac2b6f41ed2c27275e13ebf67ca92" class="src_link" title="lib/redis_analytics/version.rb">lib/redis_analytics/version.rb</a></td>
135
- <td class="green strong">100.0 %</td>
136
- <td>4</td>
137
- <td>2</td>
138
- <td>2</td>
139
- <td>0</td>
140
- <td>1.0</td>
141
- </tr>
142
-
143
- <tr>
144
- <td class="strong"><a href="#f3b99339bc2e8f4bf4e1ad1356f4104c5de8aca5" class="src_link" title="lib/redis_analytics/visit.rb">lib/redis_analytics/visit.rb</a></td>
145
- <td class="green strong">96.97 %</td>
146
- <td>121</td>
147
- <td>66</td>
148
- <td>64</td>
149
- <td>2</td>
150
- <td>24.5</td>
151
- </tr>
152
-
153
- </tbody>
154
- </table>
155
- </div>
156
-
157
-
158
-
159
- </div>
160
-
161
- <div id="footer">
162
- Generated by <a href="http://github.com/colszowka/simplecov">simplecov</a> v0.8.2
163
- and simplecov-html v0.8.0<br/>
164
- using RSpec
165
- </div>
166
-
167
- <div class="source_files">
168
-
169
- <div class="source_table" id="87808c78ef10e317cd1a78af909f967fb4f38793">
170
- <div class="header">
171
- <h3>lib/redis_analytics.rb</h3>
172
- <h4><span class="green">100.0 %</span> covered</h4>
173
- <div>
174
- <b>15</b> relevant lines.
175
- <span class="green"><b>15</b> lines covered</span> and
176
- <span class="red"><b>0</b> lines missed.</span>
177
- </div>
178
- </div>
179
-
180
- <pre>
181
- <ol>
182
-
183
- <li class="covered" data-hits="1" data-linenumber="1">
184
- <span class="hits">1</span>
185
-
186
- <code class="ruby">require &#39;redis&#39;</code>
187
- </li>
188
-
189
- <li class="covered" data-hits="1" data-linenumber="2">
190
- <span class="hits">1</span>
191
-
192
- <code class="ruby">require &#39;browser&#39;</code>
193
- </li>
194
-
195
- <li class="covered" data-hits="1" data-linenumber="3">
196
- <span class="hits">1</span>
197
-
198
- <code class="ruby">require &#39;geoip&#39;</code>
199
- </li>
200
-
201
- <li class="never" data-hits="" data-linenumber="4">
202
-
203
-
204
- <code class="ruby"></code>
205
- </li>
206
-
207
- <li class="covered" data-hits="1" data-linenumber="5">
208
- <span class="hits">1</span>
209
-
210
- <code class="ruby">require &#39;redis_analytics&#39;</code>
211
- </li>
212
-
213
- <li class="never" data-hits="" data-linenumber="6">
214
-
215
-
216
- <code class="ruby"></code>
217
- </li>
218
-
219
- <li class="covered" data-hits="1" data-linenumber="7">
220
- <span class="hits">1</span>
221
-
222
- <code class="ruby">require &#39;redis_analytics/version&#39;</code>
223
- </li>
224
-
225
- <li class="covered" data-hits="1" data-linenumber="8">
226
- <span class="hits">1</span>
227
-
228
- <code class="ruby">require &#39;redis_analytics/time_ext&#39;</code>
229
- </li>
230
-
231
- <li class="covered" data-hits="1" data-linenumber="9">
232
- <span class="hits">1</span>
233
-
234
- <code class="ruby">require &#39;redis_analytics/filter&#39;</code>
235
- </li>
236
-
237
- <li class="covered" data-hits="1" data-linenumber="10">
238
- <span class="hits">1</span>
239
-
240
- <code class="ruby">require &#39;redis_analytics/configuration&#39;</code>
241
- </li>
242
-
243
- <li class="covered" data-hits="1" data-linenumber="11">
244
- <span class="hits">1</span>
245
-
246
- <code class="ruby">require &#39;redis_analytics/metrics&#39;</code>
247
- </li>
248
-
249
- <li class="covered" data-hits="1" data-linenumber="12">
250
- <span class="hits">1</span>
251
-
252
- <code class="ruby">require &#39;redis_analytics/visit&#39;</code>
253
- </li>
254
-
255
- <li class="covered" data-hits="1" data-linenumber="13">
256
- <span class="hits">1</span>
257
-
258
- <code class="ruby">require &#39;redis_analytics/helpers&#39;</code>
259
- </li>
260
-
261
- <li class="covered" data-hits="1" data-linenumber="14">
262
- <span class="hits">1</span>
263
-
264
- <code class="ruby">require &#39;redis_analytics/tracker&#39;</code>
265
- </li>
266
-
267
- <li class="covered" data-hits="1" data-linenumber="15">
268
- <span class="hits">1</span>
269
-
270
- <code class="ruby">require &#39;redis_analytics/engine&#39;</code>
271
- </li>
272
-
273
- <li class="never" data-hits="" data-linenumber="16">
274
-
275
-
276
- <code class="ruby"></code>
277
- </li>
278
-
279
- <li class="covered" data-hits="1" data-linenumber="17">
280
- <span class="hits">1</span>
281
-
282
- <code class="ruby">module RedisAnalytics</code>
283
- </li>
284
-
285
- <li class="covered" data-hits="1" data-linenumber="18">
286
- <span class="hits">1</span>
287
-
288
- <code class="ruby"> extend Configuration</code>
289
- </li>
290
-
291
- <li class="never" data-hits="" data-linenumber="19">
292
-
293
-
294
- <code class="ruby">end</code>
295
- </li>
296
-
297
- </ol>
298
- </pre>
299
- </div>
300
-
301
- <div class="source_table" id="d05e12d08e01a7fce7224836c8d4d56bb0b49012">
302
- <div class="header">
303
- <h3>lib/redis_analytics/configuration.rb</h3>
304
- <h4><span class="green">95.45 %</span> covered</h4>
305
- <div>
306
- <b>44</b> relevant lines.
307
- <span class="green"><b>42</b> lines covered</span> and
308
- <span class="red"><b>2</b> lines missed.</span>
309
- </div>
310
- </div>
311
-
312
- <pre>
313
- <ol>
314
-
315
- <li class="covered" data-hits="1" data-linenumber="1">
316
- <span class="hits">1</span>
317
-
318
- <code class="ruby">module RedisAnalytics</code>
319
- </li>
320
-
321
- <li class="covered" data-hits="1" data-linenumber="2">
322
- <span class="hits">1</span>
323
-
324
- <code class="ruby"> module Configuration</code>
325
- </li>
326
-
327
- <li class="never" data-hits="" data-linenumber="3">
328
-
329
-
330
- <code class="ruby"> # Redis connection instance</code>
331
- </li>
332
-
333
- <li class="covered" data-hits="1" data-linenumber="4">
334
- <span class="hits">1</span>
335
-
336
- <code class="ruby"> attr_accessor :redis_connection</code>
337
- </li>
338
-
339
- <li class="never" data-hits="" data-linenumber="5">
340
-
341
-
342
- <code class="ruby"></code>
343
- </li>
344
-
345
- <li class="never" data-hits="" data-linenumber="6">
346
-
347
-
348
- <code class="ruby"> # Redis namespace for keys</code>
349
- </li>
350
-
351
- <li class="covered" data-hits="1" data-linenumber="7">
352
- <span class="hits">1</span>
353
-
354
- <code class="ruby"> attr_writer :redis_namespace</code>
355
- </li>
356
-
357
- <li class="never" data-hits="" data-linenumber="8">
358
-
359
-
360
- <code class="ruby"></code>
361
- </li>
362
-
363
- <li class="never" data-hits="" data-linenumber="9">
364
-
365
-
366
- <code class="ruby"> # Name of the cookie which tracks first visitors</code>
367
- </li>
368
-
369
- <li class="covered" data-hits="1" data-linenumber="10">
370
- <span class="hits">1</span>
371
-
372
- <code class="ruby"> attr_writer :first_visit_cookie_name</code>
373
- </li>
374
-
375
- <li class="never" data-hits="" data-linenumber="11">
376
-
377
-
378
- <code class="ruby"></code>
379
- </li>
380
-
381
- <li class="never" data-hits="" data-linenumber="12">
382
-
383
-
384
- <code class="ruby"> # Name of the cookie which tracks current visits</code>
385
- </li>
386
-
387
- <li class="covered" data-hits="1" data-linenumber="13">
388
- <span class="hits">1</span>
389
-
390
- <code class="ruby"> attr_writer :current_visit_cookie_name</code>
391
- </li>
392
-
393
- <li class="never" data-hits="" data-linenumber="14">
394
-
395
-
396
- <code class="ruby"></code>
397
- </li>
398
-
399
- <li class="never" data-hits="" data-linenumber="15">
400
-
401
-
402
- <code class="ruby"> # Minutes the visit should timeout after (if no hit is received)</code>
403
- </li>
404
-
405
- <li class="covered" data-hits="1" data-linenumber="16">
406
- <span class="hits">1</span>
407
-
408
- <code class="ruby"> attr_writer :visit_timeout</code>
409
- </li>
410
-
411
- <li class="never" data-hits="" data-linenumber="17">
412
-
413
-
414
- <code class="ruby"></code>
415
- </li>
416
-
417
- <li class="never" data-hits="" data-linenumber="18">
418
-
419
-
420
- <code class="ruby"> # Endpoint for dashboard</code>
421
- </li>
422
-
423
- <li class="covered" data-hits="1" data-linenumber="19">
424
- <span class="hits">1</span>
425
-
426
- <code class="ruby"> attr_writer :dashboard_endpoint</code>
427
- </li>
428
-
429
- <li class="never" data-hits="" data-linenumber="20">
430
-
431
-
432
- <code class="ruby"></code>
433
- </li>
434
-
435
- <li class="never" data-hits="" data-linenumber="21">
436
-
437
-
438
- <code class="ruby"> # Endpoint for api</code>
439
- </li>
440
-
441
- <li class="covered" data-hits="1" data-linenumber="22">
442
- <span class="hits">1</span>
443
-
444
- <code class="ruby"> attr_writer :api_endpoint</code>
445
- </li>
446
-
447
- <li class="never" data-hits="" data-linenumber="23">
448
-
449
-
450
- <code class="ruby"></code>
451
- </li>
452
-
453
- <li class="covered" data-hits="1" data-linenumber="24">
454
- <span class="hits">1</span>
455
-
456
- <code class="ruby"> attr_writer :path_filters</code>
457
- </li>
458
-
459
- <li class="never" data-hits="" data-linenumber="25">
460
-
461
-
462
- <code class="ruby"></code>
463
- </li>
464
-
465
- <li class="covered" data-hits="1" data-linenumber="26">
466
- <span class="hits">1</span>
467
-
468
- <code class="ruby"> attr_writer :filters</code>
469
- </li>
470
-
471
- <li class="never" data-hits="" data-linenumber="27">
472
-
473
-
474
- <code class="ruby"></code>
475
- </li>
476
-
477
- <li class="never" data-hits="" data-linenumber="28">
478
-
479
-
480
- <code class="ruby"> # Path to the Geo IP Database file</code>
481
- </li>
482
-
483
- <li class="covered" data-hits="1" data-linenumber="29">
484
- <span class="hits">1</span>
485
-
486
- <code class="ruby"> attr_writer :geo_ip_data_path</code>
487
- </li>
488
-
489
- <li class="never" data-hits="" data-linenumber="30">
490
-
491
-
492
- <code class="ruby"></code>
493
- </li>
494
-
495
- <li class="never" data-hits="" data-linenumber="31">
496
-
497
-
498
- <code class="ruby"> # Redis namespace for keys</code>
499
- </li>
500
-
501
- <li class="covered" data-hits="1" data-linenumber="32">
502
- <span class="hits">1</span>
503
-
504
- <code class="ruby"> def redis_namespace</code>
505
- </li>
506
-
507
- <li class="covered" data-hits="6" data-linenumber="33">
508
- <span class="hits">6</span>
509
-
510
- <code class="ruby"> @redis_namespace ||= &#39;ra&#39;</code>
511
- </li>
512
-
513
- <li class="never" data-hits="" data-linenumber="34">
514
-
515
-
516
- <code class="ruby"> end</code>
517
- </li>
518
-
519
- <li class="never" data-hits="" data-linenumber="35">
520
-
521
-
522
- <code class="ruby"></code>
523
- </li>
524
-
525
- <li class="never" data-hits="" data-linenumber="36">
526
-
527
-
528
- <code class="ruby"> # Minutes the visit should timeout after (if no hit is received)</code>
529
- </li>
530
-
531
- <li class="covered" data-hits="1" data-linenumber="37">
532
- <span class="hits">1</span>
533
-
534
- <code class="ruby"> def visit_timeout</code>
535
- </li>
536
-
537
- <li class="covered" data-hits="6" data-linenumber="38">
538
- <span class="hits">6</span>
539
-
540
- <code class="ruby"> @visit_timeout ||= 30 # minutes</code>
541
- </li>
542
-
543
- <li class="never" data-hits="" data-linenumber="39">
544
-
545
-
546
- <code class="ruby"> end</code>
547
- </li>
548
-
549
- <li class="never" data-hits="" data-linenumber="40">
550
-
551
-
552
- <code class="ruby"></code>
553
- </li>
554
-
555
- <li class="never" data-hits="" data-linenumber="41">
556
-
557
-
558
- <code class="ruby"> # Name of the cookie which tracks first visitors (unknown visitors)</code>
559
- </li>
560
-
561
- <li class="covered" data-hits="1" data-linenumber="42">
562
- <span class="hits">1</span>
563
-
564
- <code class="ruby"> def first_visit_cookie_name</code>
565
- </li>
566
-
567
- <li class="covered" data-hits="22" data-linenumber="43">
568
- <span class="hits">22</span>
569
-
570
- <code class="ruby"> @first_visit_cookie_name ||= &#39;_rucn&#39;</code>
571
- </li>
572
-
573
- <li class="never" data-hits="" data-linenumber="44">
574
-
575
-
576
- <code class="ruby"> end</code>
577
- </li>
578
-
579
- <li class="never" data-hits="" data-linenumber="45">
580
-
581
-
582
- <code class="ruby"></code>
583
- </li>
584
-
585
- <li class="never" data-hits="" data-linenumber="46">
586
-
587
-
588
- <code class="ruby"> # Name of the cookie which tracks visits</code>
589
- </li>
590
-
591
- <li class="covered" data-hits="1" data-linenumber="47">
592
- <span class="hits">1</span>
593
-
594
- <code class="ruby"> def current_visit_cookie_name</code>
595
- </li>
596
-
597
- <li class="covered" data-hits="29" data-linenumber="48">
598
- <span class="hits">29</span>
599
-
600
- <code class="ruby"> @current_visit_cookie_name ||= &#39;_vcn&#39;</code>
601
- </li>
602
-
603
- <li class="never" data-hits="" data-linenumber="49">
604
-
605
-
606
- <code class="ruby"> end</code>
607
- </li>
608
-
609
- <li class="never" data-hits="" data-linenumber="50">
610
-
611
-
612
- <code class="ruby"></code>
613
- </li>
614
-
615
- <li class="covered" data-hits="1" data-linenumber="51">
616
- <span class="hits">1</span>
617
-
618
- <code class="ruby"> def filters</code>
619
- </li>
620
-
621
- <li class="covered" data-hits="6" data-linenumber="52">
622
- <span class="hits">6</span>
623
-
624
- <code class="ruby"> @filters ||= []</code>
625
- </li>
626
-
627
- <li class="never" data-hits="" data-linenumber="53">
628
-
629
-
630
- <code class="ruby"> end</code>
631
- </li>
632
-
633
- <li class="never" data-hits="" data-linenumber="54">
634
-
635
-
636
- <code class="ruby"></code>
637
- </li>
638
-
639
- <li class="covered" data-hits="1" data-linenumber="55">
640
- <span class="hits">1</span>
641
-
642
- <code class="ruby"> def path_filters</code>
643
- </li>
644
-
645
- <li class="covered" data-hits="6" data-linenumber="56">
646
- <span class="hits">6</span>
647
-
648
- <code class="ruby"> @path_filters ||= []</code>
649
- </li>
650
-
651
- <li class="never" data-hits="" data-linenumber="57">
652
-
653
-
654
- <code class="ruby"> end</code>
655
- </li>
656
-
657
- <li class="never" data-hits="" data-linenumber="58">
658
-
659
-
660
- <code class="ruby"></code>
661
- </li>
662
-
663
- <li class="covered" data-hits="1" data-linenumber="59">
664
- <span class="hits">1</span>
665
-
666
- <code class="ruby"> def add_filter(&amp;proc)</code>
667
- </li>
668
-
669
- <li class="covered" data-hits="1" data-linenumber="60">
670
- <span class="hits">1</span>
671
-
672
- <code class="ruby"> filters &lt;&lt; RedisAnalytics::Filter.new(proc)</code>
673
- </li>
674
-
675
- <li class="never" data-hits="" data-linenumber="61">
676
-
677
-
678
- <code class="ruby"> end</code>
679
- </li>
680
-
681
- <li class="never" data-hits="" data-linenumber="62">
682
-
683
-
684
- <code class="ruby"></code>
685
- </li>
686
-
687
- <li class="covered" data-hits="1" data-linenumber="63">
688
- <span class="hits">1</span>
689
-
690
- <code class="ruby"> def add_path_filter(path)</code>
691
- </li>
692
-
693
- <li class="covered" data-hits="1" data-linenumber="64">
694
- <span class="hits">1</span>
695
-
696
- <code class="ruby"> path_filters &lt;&lt; RedisAnalytics::PathFilter.new(path)</code>
697
- </li>
698
-
699
- <li class="never" data-hits="" data-linenumber="65">
700
-
701
-
702
- <code class="ruby"> end</code>
703
- </li>
704
-
705
- <li class="never" data-hits="" data-linenumber="66">
706
-
707
-
708
- <code class="ruby"></code>
709
- </li>
710
-
711
- <li class="covered" data-hits="1" data-linenumber="67">
712
- <span class="hits">1</span>
713
-
714
- <code class="ruby"> def geo_ip_data_path</code>
715
- </li>
716
-
717
- <li class="covered" data-hits="3" data-linenumber="68">
718
- <span class="hits">3</span>
719
-
720
- <code class="ruby"> @geo_ip_data_path = ::File.expand_path(::File.join(::File.dirname(__FILE__),&#39;..&#39;,&#39;..&#39;)) + &quot;/bin/GeoIP.dat&quot;</code>
721
- </li>
722
-
723
- <li class="never" data-hits="" data-linenumber="69">
724
-
725
-
726
- <code class="ruby"> end</code>
727
- </li>
728
-
729
- <li class="never" data-hits="" data-linenumber="70">
730
-
731
-
732
- <code class="ruby"></code>
733
- </li>
734
-
735
- <li class="covered" data-hits="1" data-linenumber="71">
736
- <span class="hits">1</span>
737
-
738
- <code class="ruby"> def visitor_recency_slices</code>
739
- </li>
740
-
741
- <li class="covered" data-hits="2" data-linenumber="72">
742
- <span class="hits">2</span>
743
-
744
- <code class="ruby"> @visitor_recency_slices ||= [1, 7, 30]</code>
745
- </li>
746
-
747
- <li class="never" data-hits="" data-linenumber="73">
748
-
749
-
750
- <code class="ruby"> end</code>
751
- </li>
752
-
753
- <li class="never" data-hits="" data-linenumber="74">
754
-
755
-
756
- <code class="ruby"></code>
757
- </li>
758
-
759
- <li class="covered" data-hits="1" data-linenumber="75">
760
- <span class="hits">1</span>
761
-
762
- <code class="ruby"> def default_range</code>
763
- </li>
764
-
765
- <li class="covered" data-hits="3" data-linenumber="76">
766
- <span class="hits">3</span>
767
-
768
- <code class="ruby"> @default_range = :day</code>
769
- </li>
770
-
771
- <li class="never" data-hits="" data-linenumber="77">
772
-
773
-
774
- <code class="ruby"> end</code>
775
- </li>
776
-
777
- <li class="never" data-hits="" data-linenumber="78">
778
-
779
-
780
- <code class="ruby"></code>
781
- </li>
782
-
783
- <li class="covered" data-hits="1" data-linenumber="79">
784
- <span class="hits">1</span>
785
-
786
- <code class="ruby"> def redis_key_timestamps # [format, expire in seconds or nil]</code>
787
- </li>
788
-
789
- <li class="covered" data-hits="40" data-linenumber="80">
790
- <span class="hits">40</span>
791
-
792
- <code class="ruby"> [&#39;%Y&#39;, &#39;%Y_%m&#39;, &#39;%Y_%m_%d&#39;, &#39;%Y_%m_%d_%H&#39;, &#39;%Y_%m_%d_%H_%M&#39;]</code>
793
- </li>
794
-
795
- <li class="never" data-hits="" data-linenumber="81">
796
-
797
-
798
- <code class="ruby"> end</code>
799
- </li>
800
-
801
- <li class="never" data-hits="" data-linenumber="82">
802
-
803
-
804
- <code class="ruby"></code>
805
- </li>
806
-
807
- <li class="covered" data-hits="1" data-linenumber="83">
808
- <span class="hits">1</span>
809
-
810
- <code class="ruby"> def time_range_formats</code>
811
- </li>
812
-
813
- <li class="covered" data-hits="2" data-linenumber="84">
814
- <span class="hits">2</span>
815
-
816
- <code class="ruby"> [[:year, :month, &quot;%b&quot;], [:week, :day, &quot;%a&quot;], [:day, :hour, &quot;%l%P&quot;]]</code>
817
- </li>
818
-
819
- <li class="never" data-hits="" data-linenumber="85">
820
-
821
-
822
- <code class="ruby"> end</code>
823
- </li>
824
-
825
- <li class="never" data-hits="" data-linenumber="86">
826
-
827
-
828
- <code class="ruby"></code>
829
- </li>
830
-
831
- <li class="covered" data-hits="1" data-linenumber="87">
832
- <span class="hits">1</span>
833
-
834
- <code class="ruby"> def configure</code>
835
- </li>
836
-
837
- <li class="covered" data-hits="6" data-linenumber="88">
838
- <span class="hits">6</span>
839
-
840
- <code class="ruby"> yield self</code>
841
- </li>
842
-
843
- <li class="never" data-hits="" data-linenumber="89">
844
-
845
-
846
- <code class="ruby"> end</code>
847
- </li>
848
-
849
- <li class="never" data-hits="" data-linenumber="90">
850
-
851
-
852
- <code class="ruby"></code>
853
- </li>
854
-
855
- <li class="covered" data-hits="1" data-linenumber="91">
856
- <span class="hits">1</span>
857
-
858
- <code class="ruby"> def api_endpoint</code>
859
- </li>
860
-
861
- <li class="missed" data-hits="0" data-linenumber="92">
862
-
863
-
864
- <code class="ruby"> @api_endpoint || dashboard_endpoint + &#39;/api&#39;</code>
865
- </li>
866
-
867
- <li class="never" data-hits="" data-linenumber="93">
868
-
869
-
870
- <code class="ruby"> end</code>
871
- </li>
872
-
873
- <li class="never" data-hits="" data-linenumber="94">
874
-
875
-
876
- <code class="ruby"></code>
877
- </li>
878
-
879
- <li class="covered" data-hits="1" data-linenumber="95">
880
- <span class="hits">1</span>
881
-
882
- <code class="ruby"> def dashboard_endpoint</code>
883
- </li>
884
-
885
- <li class="missed" data-hits="0" data-linenumber="96">
886
-
887
-
888
- <code class="ruby"> @dashboard_endpoint || &#39;/redis_analytics&#39;</code>
889
- </li>
890
-
891
- <li class="never" data-hits="" data-linenumber="97">
892
-
893
-
894
- <code class="ruby"> end</code>
895
- </li>
896
-
897
- <li class="never" data-hits="" data-linenumber="98">
898
-
899
-
900
- <code class="ruby"></code>
901
- </li>
902
-
903
- <li class="never" data-hits="" data-linenumber="99">
904
-
905
-
906
- <code class="ruby"> end</code>
907
- </li>
908
-
909
- <li class="never" data-hits="" data-linenumber="100">
910
-
911
-
912
- <code class="ruby">end</code>
913
- </li>
914
-
915
- <li class="never" data-hits="" data-linenumber="101">
916
-
917
-
918
- <code class="ruby"></code>
919
- </li>
920
-
921
- </ol>
922
- </pre>
923
- </div>
924
-
925
- <div class="source_table" id="092dae03526444499262440a90b632344ec5532e">
926
- <div class="header">
927
- <h3>lib/redis_analytics/engine.rb</h3>
928
- <h4><span class="red">75.0 %</span> covered</h4>
929
- <div>
930
- <b>12</b> relevant lines.
931
- <span class="green"><b>9</b> lines covered</span> and
932
- <span class="red"><b>3</b> lines missed.</span>
933
- </div>
934
- </div>
935
-
936
- <pre>
937
- <ol>
938
-
939
- <li class="covered" data-hits="1" data-linenumber="1">
940
- <span class="hits">1</span>
941
-
942
- <code class="ruby">require &#39;rails&#39;</code>
943
- </li>
944
-
945
- <li class="covered" data-hits="1" data-linenumber="2">
946
- <span class="hits">1</span>
947
-
948
- <code class="ruby">require &#39;jquery-rails&#39;</code>
949
- </li>
950
-
951
- <li class="never" data-hits="" data-linenumber="3">
952
-
953
-
954
- <code class="ruby"></code>
955
- </li>
956
-
957
- <li class="covered" data-hits="1" data-linenumber="4">
958
- <span class="hits">1</span>
959
-
960
- <code class="ruby">module RedisAnalytics</code>
961
- </li>
962
-
963
- <li class="covered" data-hits="1" data-linenumber="5">
964
- <span class="hits">1</span>
965
-
966
- <code class="ruby"> module Dashboard</code>
967
- </li>
968
-
969
- <li class="covered" data-hits="1" data-linenumber="6">
970
- <span class="hits">1</span>
971
-
972
- <code class="ruby"> class Engine &lt; ::Rails::Engine</code>
973
- </li>
974
-
975
- <li class="covered" data-hits="1" data-linenumber="7">
976
- <span class="hits">1</span>
977
-
978
- <code class="ruby"> isolate_namespace RedisAnalytics</code>
979
- </li>
980
-
981
- <li class="never" data-hits="" data-linenumber="8">
982
-
983
-
984
- <code class="ruby"> </code>
985
- </li>
986
-
987
- <li class="covered" data-hits="1" data-linenumber="9">
988
- <span class="hits">1</span>
989
-
990
- <code class="ruby"> initializer &quot;redis_analytics.middleware&quot; do |app|</code>
991
- </li>
992
-
993
- <li class="missed" data-hits="0" data-linenumber="10">
994
-
995
-
996
- <code class="ruby"> app.config.app_middleware.use &quot;RedisAnalytics::Tracker&quot;</code>
997
- </li>
998
-
999
- <li class="never" data-hits="" data-linenumber="11">
1000
-
1001
-
1002
- <code class="ruby"> end</code>
1003
- </li>
1004
-
1005
- <li class="never" data-hits="" data-linenumber="12">
1006
-
1007
-
1008
- <code class="ruby"> </code>
1009
- </li>
1010
-
1011
- <li class="covered" data-hits="1" data-linenumber="13">
1012
- <span class="hits">1</span>
1013
-
1014
- <code class="ruby"> initializer &quot;redis_analytics.view_helpers&quot; do |app|</code>
1015
- </li>
1016
-
1017
- <li class="missed" data-hits="0" data-linenumber="14">
1018
-
1019
-
1020
- <code class="ruby"> ActionController::Base.send :include, RedisAnalytics::Helpers</code>
1021
- </li>
1022
-
1023
- <li class="never" data-hits="" data-linenumber="15">
1024
-
1025
-
1026
- <code class="ruby"> end</code>
1027
- </li>
1028
-
1029
- <li class="never" data-hits="" data-linenumber="16">
1030
-
1031
-
1032
- <code class="ruby"> </code>
1033
- </li>
1034
-
1035
- <li class="covered" data-hits="1" data-linenumber="17">
1036
- <span class="hits">1</span>
1037
-
1038
- <code class="ruby"> initializer &quot;redis_analytics.precompile.hook&quot;, group: :all do |app|</code>
1039
- </li>
1040
-
1041
- <li class="missed" data-hits="0" data-linenumber="18">
1042
-
1043
-
1044
- <code class="ruby"> app.config.assets.precompile += %w[</code>
1045
- </li>
1046
-
1047
- <li class="never" data-hits="" data-linenumber="19">
1048
-
1049
-
1050
- <code class="ruby"> redis_analytics/redis_analytics.js</code>
1051
- </li>
1052
-
1053
- <li class="never" data-hits="" data-linenumber="20">
1054
-
1055
-
1056
- <code class="ruby"> redis_analytics/redis_analytics.css</code>
1057
- </li>
1058
-
1059
- <li class="never" data-hits="" data-linenumber="21">
1060
-
1061
-
1062
- <code class="ruby"> ]</code>
1063
- </li>
1064
-
1065
- <li class="never" data-hits="" data-linenumber="22">
1066
-
1067
-
1068
- <code class="ruby"> end</code>
1069
- </li>
1070
-
1071
- <li class="never" data-hits="" data-linenumber="23">
1072
-
1073
-
1074
- <code class="ruby"> end</code>
1075
- </li>
1076
-
1077
- <li class="never" data-hits="" data-linenumber="24">
1078
-
1079
-
1080
- <code class="ruby"> end</code>
1081
- </li>
1082
-
1083
- <li class="never" data-hits="" data-linenumber="25">
1084
-
1085
-
1086
- <code class="ruby">end</code>
1087
- </li>
1088
-
1089
- </ol>
1090
- </pre>
1091
- </div>
1092
-
1093
- <div class="source_table" id="d8260f765f0e7fbb3f45d2dd48a4b3ef51f428dc">
1094
- <div class="header">
1095
- <h3>lib/redis_analytics/filter.rb</h3>
1096
- <h4><span class="green">100.0 %</span> covered</h4>
1097
- <div>
1098
- <b>16</b> relevant lines.
1099
- <span class="green"><b>16</b> lines covered</span> and
1100
- <span class="red"><b>0</b> lines missed.</span>
1101
- </div>
1102
- </div>
1103
-
1104
- <pre>
1105
- <ol>
1106
-
1107
- <li class="covered" data-hits="1" data-linenumber="1">
1108
- <span class="hits">1</span>
1109
-
1110
- <code class="ruby">module RedisAnalytics</code>
1111
- </li>
1112
-
1113
- <li class="covered" data-hits="1" data-linenumber="2">
1114
- <span class="hits">1</span>
1115
-
1116
- <code class="ruby"> class Filter</code>
1117
- </li>
1118
-
1119
- <li class="covered" data-hits="1" data-linenumber="3">
1120
- <span class="hits">1</span>
1121
-
1122
- <code class="ruby"> attr_reader :filter_proc</code>
1123
- </li>
1124
-
1125
- <li class="never" data-hits="" data-linenumber="4">
1126
-
1127
-
1128
- <code class="ruby"></code>
1129
- </li>
1130
-
1131
- <li class="covered" data-hits="1" data-linenumber="5">
1132
- <span class="hits">1</span>
1133
-
1134
- <code class="ruby"> def initialize(filter_proc)</code>
1135
- </li>
1136
-
1137
- <li class="covered" data-hits="2" data-linenumber="6">
1138
- <span class="hits">2</span>
1139
-
1140
- <code class="ruby"> @filter_proc = filter_proc</code>
1141
- </li>
1142
-
1143
- <li class="never" data-hits="" data-linenumber="7">
1144
-
1145
-
1146
- <code class="ruby"> end</code>
1147
- </li>
1148
-
1149
- <li class="never" data-hits="" data-linenumber="8">
1150
-
1151
-
1152
- <code class="ruby"></code>
1153
- </li>
1154
-
1155
- <li class="covered" data-hits="1" data-linenumber="9">
1156
- <span class="hits">1</span>
1157
-
1158
- <code class="ruby"> def matches?(request, response)</code>
1159
- </li>
1160
-
1161
- <li class="covered" data-hits="5" data-linenumber="10">
1162
- <span class="hits">5</span>
1163
-
1164
- <code class="ruby"> filter_proc.call(request, response)</code>
1165
- </li>
1166
-
1167
- <li class="never" data-hits="" data-linenumber="11">
1168
-
1169
-
1170
- <code class="ruby"> end</code>
1171
- </li>
1172
-
1173
- <li class="never" data-hits="" data-linenumber="12">
1174
-
1175
-
1176
- <code class="ruby"></code>
1177
- </li>
1178
-
1179
- <li class="never" data-hits="" data-linenumber="13">
1180
-
1181
-
1182
- <code class="ruby"> end</code>
1183
- </li>
1184
-
1185
- <li class="never" data-hits="" data-linenumber="14">
1186
-
1187
-
1188
- <code class="ruby"></code>
1189
- </li>
1190
-
1191
- <li class="covered" data-hits="1" data-linenumber="15">
1192
- <span class="hits">1</span>
1193
-
1194
- <code class="ruby"> class PathFilter</code>
1195
- </li>
1196
-
1197
- <li class="covered" data-hits="1" data-linenumber="16">
1198
- <span class="hits">1</span>
1199
-
1200
- <code class="ruby"> attr_reader :filter_path</code>
1201
- </li>
1202
-
1203
- <li class="never" data-hits="" data-linenumber="17">
1204
-
1205
-
1206
- <code class="ruby"></code>
1207
- </li>
1208
-
1209
- <li class="covered" data-hits="1" data-linenumber="18">
1210
- <span class="hits">1</span>
1211
-
1212
- <code class="ruby"> def initialize(filter_path)</code>
1213
- </li>
1214
-
1215
- <li class="covered" data-hits="3" data-linenumber="19">
1216
- <span class="hits">3</span>
1217
-
1218
- <code class="ruby"> @filter_path = filter_path</code>
1219
- </li>
1220
-
1221
- <li class="never" data-hits="" data-linenumber="20">
1222
-
1223
-
1224
- <code class="ruby"> end</code>
1225
- </li>
1226
-
1227
- <li class="never" data-hits="" data-linenumber="21">
1228
-
1229
-
1230
- <code class="ruby"></code>
1231
- </li>
1232
-
1233
- <li class="covered" data-hits="1" data-linenumber="22">
1234
- <span class="hits">1</span>
1235
-
1236
- <code class="ruby"> def matches?(request_path)</code>
1237
- </li>
1238
-
1239
- <li class="covered" data-hits="6" data-linenumber="23">
1240
- <span class="hits">6</span>
1241
-
1242
- <code class="ruby"> if filter_path.is_a?(String)</code>
1243
- </li>
1244
-
1245
- <li class="covered" data-hits="5" data-linenumber="24">
1246
- <span class="hits">5</span>
1247
-
1248
- <code class="ruby"> request_path == filter_path</code>
1249
- </li>
1250
-
1251
- <li class="covered" data-hits="1" data-linenumber="25">
1252
- <span class="hits">1</span>
1253
-
1254
- <code class="ruby"> elsif filter_path.is_a?(Regexp)</code>
1255
- </li>
1256
-
1257
- <li class="covered" data-hits="1" data-linenumber="26">
1258
- <span class="hits">1</span>
1259
-
1260
- <code class="ruby"> request_path =~ filter_path</code>
1261
- </li>
1262
-
1263
- <li class="never" data-hits="" data-linenumber="27">
1264
-
1265
-
1266
- <code class="ruby"> end</code>
1267
- </li>
1268
-
1269
- <li class="never" data-hits="" data-linenumber="28">
1270
-
1271
-
1272
- <code class="ruby"> end</code>
1273
- </li>
1274
-
1275
- <li class="never" data-hits="" data-linenumber="29">
1276
-
1277
-
1278
- <code class="ruby"> end</code>
1279
- </li>
1280
-
1281
- <li class="never" data-hits="" data-linenumber="30">
1282
-
1283
-
1284
- <code class="ruby"></code>
1285
- </li>
1286
-
1287
- <li class="never" data-hits="" data-linenumber="31">
1288
-
1289
-
1290
- <code class="ruby">end</code>
1291
- </li>
1292
-
1293
- <li class="never" data-hits="" data-linenumber="32">
1294
-
1295
-
1296
- <code class="ruby"></code>
1297
- </li>
1298
-
1299
- </ol>
1300
- </pre>
1301
- </div>
1302
-
1303
- <div class="source_table" id="72c2cd9bcf1cf9eef6be9a77b6d4b9d90c1b1e0e">
1304
- <div class="header">
1305
- <h3>lib/redis_analytics/helpers.rb</h3>
1306
- <h4><span class="red">21.74 %</span> covered</h4>
1307
- <div>
1308
- <b>46</b> relevant lines.
1309
- <span class="green"><b>10</b> lines covered</span> and
1310
- <span class="red"><b>36</b> lines missed.</span>
1311
- </div>
1312
- </div>
1313
-
1314
- <pre>
1315
- <ol>
1316
-
1317
- <li class="covered" data-hits="1" data-linenumber="1">
1318
- <span class="hits">1</span>
1319
-
1320
- <code class="ruby">module RedisAnalytics</code>
1321
- </li>
1322
-
1323
- <li class="covered" data-hits="1" data-linenumber="2">
1324
- <span class="hits">1</span>
1325
-
1326
- <code class="ruby"> module Helpers</code>
1327
- </li>
1328
-
1329
- <li class="never" data-hits="" data-linenumber="3">
1330
-
1331
-
1332
- <code class="ruby"></code>
1333
- </li>
1334
-
1335
- <li class="covered" data-hits="1" data-linenumber="4">
1336
- <span class="hits">1</span>
1337
-
1338
- <code class="ruby"> FORMAT_SPECIFIER = [[&#39;%Y&#39;, 365], [&#39;%m&#39;, 30], [&#39;%d&#39;, 24], [&#39;%H&#39;, 60], [&#39;%M&#39;, 60]]</code>
1339
- </li>
1340
-
1341
- <li class="never" data-hits="" data-linenumber="5">
1342
-
1343
-
1344
- <code class="ruby"></code>
1345
- </li>
1346
-
1347
- <li class="covered" data-hits="1" data-linenumber="6">
1348
- <span class="hits">1</span>
1349
-
1350
- <code class="ruby"> GRANULARITY = [&#39;yearly&#39;, &#39;monthly&#39;, &#39;dayly&#39;, &#39;hourly&#39;, &#39;minutely&#39;]</code>
1351
- </li>
1352
-
1353
- <li class="never" data-hits="" data-linenumber="7">
1354
-
1355
-
1356
- <code class="ruby"></code>
1357
- </li>
1358
-
1359
- <li class="covered" data-hits="1" data-linenumber="8">
1360
- <span class="hits">1</span>
1361
-
1362
- <code class="ruby"> private</code>
1363
- </li>
1364
-
1365
- <li class="covered" data-hits="1" data-linenumber="9">
1366
- <span class="hits">1</span>
1367
-
1368
- <code class="ruby"> def method_missing(meth, *args, &amp;block)</code>
1369
- </li>
1370
-
1371
- <li class="missed" data-hits="0" data-linenumber="10">
1372
-
1373
-
1374
- <code class="ruby"> if meth.to_s =~ /^(minute|hour|dai|day|month|year)ly_([a-z_0-9]+)$/</code>
1375
- </li>
1376
-
1377
- <li class="missed" data-hits="0" data-linenumber="11">
1378
-
1379
-
1380
- <code class="ruby"> granularity = ($1 == &#39;dai&#39; ? &#39;day&#39; : $1) + &#39;ly&#39;</code>
1381
- </li>
1382
-
1383
- <li class="missed" data-hits="0" data-linenumber="12">
1384
-
1385
-
1386
- <code class="ruby"> metric_name = $2</code>
1387
- </li>
1388
-
1389
- <li class="missed" data-hits="0" data-linenumber="13">
1390
-
1391
-
1392
- <code class="ruby"> data(granularity, metric_name, *args)</code>
1393
- </li>
1394
-
1395
- <li class="never" data-hits="" data-linenumber="14">
1396
-
1397
-
1398
- <code class="ruby"> else</code>
1399
- </li>
1400
-
1401
- <li class="missed" data-hits="0" data-linenumber="15">
1402
-
1403
-
1404
- <code class="ruby"> super</code>
1405
- </li>
1406
-
1407
- <li class="never" data-hits="" data-linenumber="16">
1408
-
1409
-
1410
- <code class="ruby"> end</code>
1411
- </li>
1412
-
1413
- <li class="never" data-hits="" data-linenumber="17">
1414
-
1415
-
1416
- <code class="ruby"> end</code>
1417
- </li>
1418
-
1419
- <li class="never" data-hits="" data-linenumber="18">
1420
-
1421
-
1422
- <code class="ruby"></code>
1423
- </li>
1424
-
1425
- <li class="covered" data-hits="1" data-linenumber="19">
1426
- <span class="hits">1</span>
1427
-
1428
- <code class="ruby"> def metric_type(metric_name)</code>
1429
- </li>
1430
-
1431
- <li class="missed" data-hits="0" data-linenumber="20">
1432
-
1433
-
1434
- <code class="ruby"> RedisAnalytics.redis_connection.hget(&quot;#{RedisAnalytics.redis_namespace}:#METRICS&quot;, metric_name)</code>
1435
- </li>
1436
-
1437
- <li class="never" data-hits="" data-linenumber="21">
1438
-
1439
-
1440
- <code class="ruby"> end</code>
1441
- </li>
1442
-
1443
- <li class="never" data-hits="" data-linenumber="22">
1444
-
1445
-
1446
- <code class="ruby"></code>
1447
- </li>
1448
-
1449
- <li class="covered" data-hits="1" data-linenumber="23">
1450
- <span class="hits">1</span>
1451
-
1452
- <code class="ruby"> def data(granularity, metric_name, from_date, options = {})</code>
1453
- </li>
1454
-
1455
- <li class="missed" data-hits="0" data-linenumber="24">
1456
-
1457
-
1458
- <code class="ruby"> aggregate = options[:aggregate] || false</code>
1459
- </li>
1460
-
1461
- <li class="missed" data-hits="0" data-linenumber="25">
1462
-
1463
-
1464
- <code class="ruby"> x = granularity[0..-3]</code>
1465
- </li>
1466
-
1467
- <li class="never" data-hits="" data-linenumber="26">
1468
-
1469
-
1470
- <code class="ruby"></code>
1471
- </li>
1472
-
1473
- <li class="missed" data-hits="0" data-linenumber="27">
1474
-
1475
-
1476
- <code class="ruby"> to_date = (options[:to_date] || Time.now).send(&quot;end_of_#{x}&quot;)</code>
1477
- </li>
1478
-
1479
- <li class="missed" data-hits="0" data-linenumber="28">
1480
-
1481
-
1482
- <code class="ruby"> i = from_date.send(&quot;beginning_of_#{x}&quot;)</code>
1483
- </li>
1484
-
1485
- <li class="never" data-hits="" data-linenumber="29">
1486
-
1487
-
1488
- <code class="ruby"></code>
1489
- </li>
1490
-
1491
- <li class="missed" data-hits="0" data-linenumber="30">
1492
-
1493
-
1494
- <code class="ruby"> union = []</code>
1495
- </li>
1496
-
1497
- <li class="missed" data-hits="0" data-linenumber="31">
1498
-
1499
-
1500
- <code class="ruby"> time = []</code>
1501
- </li>
1502
-
1503
- <li class="never" data-hits="" data-linenumber="32">
1504
-
1505
-
1506
- <code class="ruby"> begin</code>
1507
- </li>
1508
-
1509
- <li class="missed" data-hits="0" data-linenumber="33">
1510
-
1511
-
1512
- <code class="ruby"> slice_key = i.strftime(FORMAT_SPECIFIER[0..GRANULARITY.index(granularity)].map{|x| x[0]}.join(&#39;_&#39;))</code>
1513
- </li>
1514
-
1515
- <li class="missed" data-hits="0" data-linenumber="34">
1516
-
1517
-
1518
- <code class="ruby"> union &lt;&lt; &quot;#{RedisAnalytics.redis_namespace}:#{metric_name}:#{slice_key}&quot;</code>
1519
- </li>
1520
-
1521
- <li class="missed" data-hits="0" data-linenumber="35">
1522
-
1523
-
1524
- <code class="ruby"> time &lt;&lt; slice_key.split(&#39;_&#39;)</code>
1525
- </li>
1526
-
1527
- <li class="missed" data-hits="0" data-linenumber="36">
1528
-
1529
-
1530
- <code class="ruby"> i += 1.send(x)</code>
1531
- </li>
1532
-
1533
- <li class="missed" data-hits="0" data-linenumber="37">
1534
-
1535
-
1536
- <code class="ruby"> end while i &lt;= to_date</code>
1537
- </li>
1538
-
1539
- <li class="missed" data-hits="0" data-linenumber="38">
1540
-
1541
-
1542
- <code class="ruby"> seq = get_next_seq</code>
1543
- </li>
1544
-
1545
- <li class="missed" data-hits="0" data-linenumber="39">
1546
-
1547
-
1548
- <code class="ruby"> if metric_type(metric_name) == &#39;String&#39;</code>
1549
- </li>
1550
-
1551
- <li class="missed" data-hits="0" data-linenumber="40">
1552
-
1553
-
1554
- <code class="ruby"> if aggregate</code>
1555
- </li>
1556
-
1557
- <li class="missed" data-hits="0" data-linenumber="41">
1558
-
1559
-
1560
- <code class="ruby"> union_key = &quot;#{RedisAnalytics.redis_namespace}:#{seq}&quot;</code>
1561
- </li>
1562
-
1563
- <li class="missed" data-hits="0" data-linenumber="42">
1564
-
1565
-
1566
- <code class="ruby"> RedisAnalytics.redis_connection.zunionstore(union_key, union)</code>
1567
- </li>
1568
-
1569
- <li class="missed" data-hits="0" data-linenumber="43">
1570
-
1571
-
1572
- <code class="ruby"> RedisAnalytics.redis_connection.expire(union_key, 100)</code>
1573
- </li>
1574
-
1575
- <li class="missed" data-hits="0" data-linenumber="44">
1576
-
1577
-
1578
- <code class="ruby"> return Hash[RedisAnalytics.redis_connection.zrange(union_key, 0, -1, :with_scores =&gt; true)]</code>
1579
- </li>
1580
-
1581
- <li class="never" data-hits="" data-linenumber="45">
1582
-
1583
-
1584
- <code class="ruby"> else</code>
1585
- </li>
1586
-
1587
- <li class="missed" data-hits="0" data-linenumber="46">
1588
-
1589
-
1590
- <code class="ruby"> return time.zip(union.map{|x| Hash[RedisAnalytics.redis_connection.zrange(x, 0, -1, :with_scores =&gt; true)]})</code>
1591
- </li>
1592
-
1593
- <li class="never" data-hits="" data-linenumber="47">
1594
-
1595
-
1596
- <code class="ruby"> end</code>
1597
- </li>
1598
-
1599
- <li class="missed" data-hits="0" data-linenumber="48">
1600
-
1601
-
1602
- <code class="ruby"> elsif metric_type(metric_name) == &#39;Fixnum&#39;</code>
1603
- </li>
1604
-
1605
- <li class="missed" data-hits="0" data-linenumber="49">
1606
-
1607
-
1608
- <code class="ruby"> if aggregate</code>
1609
- </li>
1610
-
1611
- <li class="missed" data-hits="0" data-linenumber="50">
1612
-
1613
-
1614
- <code class="ruby"> return RedisAnalytics.redis_connection.mget(*union).map(&amp;:to_i).inject(:+)</code>
1615
- </li>
1616
-
1617
- <li class="never" data-hits="" data-linenumber="51">
1618
-
1619
-
1620
- <code class="ruby"> else</code>
1621
- </li>
1622
-
1623
- <li class="missed" data-hits="0" data-linenumber="52">
1624
-
1625
-
1626
- <code class="ruby"> return time.zip(RedisAnalytics.redis_connection.mget(*union).map(&amp;:to_i))</code>
1627
- </li>
1628
-
1629
- <li class="never" data-hits="" data-linenumber="53">
1630
-
1631
-
1632
- <code class="ruby"> end</code>
1633
- </li>
1634
-
1635
- <li class="never" data-hits="" data-linenumber="54">
1636
-
1637
-
1638
- <code class="ruby"> else</code>
1639
- </li>
1640
-
1641
- <li class="missed" data-hits="0" data-linenumber="55">
1642
-
1643
-
1644
- <code class="ruby"> if Metrics.public_instance_methods.any?{|m| m.to_s =~ /^#{metric_name}_ratio_per_(hit|visit)$/}</code>
1645
- </li>
1646
-
1647
- <li class="missed" data-hits="0" data-linenumber="56">
1648
-
1649
-
1650
- <code class="ruby"> aggregate ? {} : time.zip([{}] * time.length)</code>
1651
- </li>
1652
-
1653
- <li class="missed" data-hits="0" data-linenumber="57">
1654
-
1655
-
1656
- <code class="ruby"> elsif Metrics.public_instance_methods.any?{|m| m.to_s =~ /^#{metric_name}_count_per_(hit|visit)$/}</code>
1657
- </li>
1658
-
1659
- <li class="missed" data-hits="0" data-linenumber="58">
1660
-
1661
-
1662
- <code class="ruby"> aggregate ? 0 : time.zip([0] * time.length)</code>
1663
- </li>
1664
-
1665
- <li class="never" data-hits="" data-linenumber="59">
1666
-
1667
-
1668
- <code class="ruby"> else</code>
1669
- </li>
1670
-
1671
- <li class="missed" data-hits="0" data-linenumber="60">
1672
-
1673
-
1674
- <code class="ruby"> aggregate ? 0 : time.zip([0] * time.length)</code>
1675
- </li>
1676
-
1677
- <li class="never" data-hits="" data-linenumber="61">
1678
-
1679
-
1680
- <code class="ruby"> end</code>
1681
- </li>
1682
-
1683
- <li class="never" data-hits="" data-linenumber="62">
1684
-
1685
-
1686
- <code class="ruby"> end</code>
1687
- </li>
1688
-
1689
- <li class="never" data-hits="" data-linenumber="63">
1690
-
1691
-
1692
- <code class="ruby"> end</code>
1693
- </li>
1694
-
1695
- <li class="never" data-hits="" data-linenumber="64">
1696
-
1697
-
1698
- <code class="ruby"></code>
1699
- </li>
1700
-
1701
- <li class="covered" data-hits="1" data-linenumber="65">
1702
- <span class="hits">1</span>
1703
-
1704
- <code class="ruby"> def get_next_seq</code>
1705
- </li>
1706
-
1707
- <li class="missed" data-hits="0" data-linenumber="66">
1708
-
1709
-
1710
- <code class="ruby"> seq = RedisAnalytics.redis_connection.incr(&quot;#{RedisAnalytics.redis_namespace}:#SEQUENCER&quot;)</code>
1711
- </li>
1712
-
1713
- <li class="never" data-hits="" data-linenumber="67">
1714
-
1715
-
1716
- <code class="ruby"> end</code>
1717
- </li>
1718
-
1719
- <li class="never" data-hits="" data-linenumber="68">
1720
-
1721
-
1722
- <code class="ruby"></code>
1723
- </li>
1724
-
1725
- <li class="covered" data-hits="1" data-linenumber="69">
1726
- <span class="hits">1</span>
1727
-
1728
- <code class="ruby"> def time_range</code>
1729
- </li>
1730
-
1731
- <li class="missed" data-hits="0" data-linenumber="70">
1732
-
1733
-
1734
- <code class="ruby"> (request.cookies[&quot;_rarng&quot;] || RedisAnalytics.default_range).to_sym</code>
1735
- </li>
1736
-
1737
- <li class="never" data-hits="" data-linenumber="71">
1738
-
1739
-
1740
- <code class="ruby"> end</code>
1741
- </li>
1742
-
1743
- <li class="never" data-hits="" data-linenumber="72">
1744
-
1745
-
1746
- <code class="ruby"> end</code>
1747
- </li>
1748
-
1749
- <li class="never" data-hits="" data-linenumber="73">
1750
-
1751
-
1752
- <code class="ruby">end</code>
1753
- </li>
1754
-
1755
- <li class="never" data-hits="" data-linenumber="74">
1756
-
1757
-
1758
- <code class="ruby"></code>
1759
- </li>
1760
-
1761
- </ol>
1762
- </pre>
1763
- </div>
1764
-
1765
- <div class="source_table" id="8aa33c01d706b233fb978d91503f1ccd32661a5f">
1766
- <div class="header">
1767
- <h3>lib/redis_analytics/metrics.rb</h3>
1768
- <h4><span class="red">67.35 %</span> covered</h4>
1769
- <div>
1770
- <b>49</b> relevant lines.
1771
- <span class="green"><b>33</b> lines covered</span> and
1772
- <span class="red"><b>16</b> lines missed.</span>
1773
- </div>
1774
- </div>
1775
-
1776
- <pre>
1777
- <ol>
1778
-
1779
- <li class="covered" data-hits="1" data-linenumber="1">
1780
- <span class="hits">1</span>
1781
-
1782
- <code class="ruby">module RedisAnalytics</code>
1783
- </li>
1784
-
1785
- <li class="covered" data-hits="1" data-linenumber="2">
1786
- <span class="hits">1</span>
1787
-
1788
- <code class="ruby"> module Metrics</code>
1789
- </li>
1790
-
1791
- <li class="never" data-hits="" data-linenumber="3">
1792
-
1793
-
1794
- <code class="ruby"></code>
1795
- </li>
1796
-
1797
- <li class="covered" data-hits="1" data-linenumber="4">
1798
- <span class="hits">1</span>
1799
-
1800
- <code class="ruby"> attr_reader :visit_time_count_per_visit</code>
1801
- </li>
1802
-
1803
- <li class="covered" data-hits="1" data-linenumber="5">
1804
- <span class="hits">1</span>
1805
-
1806
- <code class="ruby"> attr_reader :visits_count_per_visit, :first_visits_count_per_visit, :repeat_visits_count_per_visit</code>
1807
- </li>
1808
-
1809
- <li class="covered" data-hits="1" data-linenumber="6">
1810
- <span class="hits">1</span>
1811
-
1812
- <code class="ruby"> attr_reader :unique_visits_ratio_per_visit</code>
1813
- </li>
1814
-
1815
- <li class="covered" data-hits="1" data-linenumber="7">
1816
- <span class="hits">1</span>
1817
-
1818
- <code class="ruby"> attr_reader :page_views_count_per_hit, :second_page_views_count_per_hit</code>
1819
- </li>
1820
-
1821
- <li class="never" data-hits="" data-linenumber="8">
1822
-
1823
-
1824
- <code class="ruby"></code>
1825
- </li>
1826
-
1827
- <li class="never" data-hits="" data-linenumber="9">
1828
-
1829
-
1830
- <code class="ruby"> # Developers can override or define new public methods here</code>
1831
- </li>
1832
-
1833
- <li class="never" data-hits="" data-linenumber="10">
1834
-
1835
-
1836
- <code class="ruby"> # Methods should start with track and end with count or types</code>
1837
- </li>
1838
-
1839
- <li class="never" data-hits="" data-linenumber="11">
1840
-
1841
-
1842
- <code class="ruby"> # Return types should be Fixnum or String resp.</code>
1843
- </li>
1844
-
1845
- <li class="never" data-hits="" data-linenumber="12">
1846
-
1847
-
1848
- <code class="ruby"> # If you return nil or an error nothing will be tracked</code>
1849
- </li>
1850
-
1851
- <li class="never" data-hits="" data-linenumber="13">
1852
-
1853
-
1854
- <code class="ruby"></code>
1855
- </li>
1856
-
1857
- <li class="covered" data-hits="1" data-linenumber="14">
1858
- <span class="hits">1</span>
1859
-
1860
- <code class="ruby"> def browser_ratio_per_visit</code>
1861
- </li>
1862
-
1863
- <li class="covered" data-hits="3" data-linenumber="15">
1864
- <span class="hits">3</span>
1865
-
1866
- <code class="ruby"> user_agent.name.to_s</code>
1867
- </li>
1868
-
1869
- <li class="never" data-hits="" data-linenumber="16">
1870
-
1871
-
1872
- <code class="ruby"> end</code>
1873
- </li>
1874
-
1875
- <li class="never" data-hits="" data-linenumber="17">
1876
-
1877
-
1878
- <code class="ruby"></code>
1879
- </li>
1880
-
1881
- <li class="covered" data-hits="1" data-linenumber="18">
1882
- <span class="hits">1</span>
1883
-
1884
- <code class="ruby"> def platform_ratio_per_visit</code>
1885
- </li>
1886
-
1887
- <li class="covered" data-hits="3" data-linenumber="19">
1888
- <span class="hits">3</span>
1889
-
1890
- <code class="ruby"> user_agent.platform.to_s</code>
1891
- </li>
1892
-
1893
- <li class="never" data-hits="" data-linenumber="20">
1894
-
1895
-
1896
- <code class="ruby"> end</code>
1897
- </li>
1898
-
1899
- <li class="never" data-hits="" data-linenumber="21">
1900
-
1901
-
1902
- <code class="ruby"></code>
1903
- </li>
1904
-
1905
- <li class="covered" data-hits="1" data-linenumber="22">
1906
- <span class="hits">1</span>
1907
-
1908
- <code class="ruby"> def country_ratio_per_visit</code>
1909
- </li>
1910
-
1911
- <li class="covered" data-hits="3" data-linenumber="23">
1912
- <span class="hits">3</span>
1913
-
1914
- <code class="ruby"> if defined?(GeoIP)</code>
1915
- </li>
1916
-
1917
- <li class="covered" data-hits="3" data-linenumber="24">
1918
- <span class="hits">3</span>
1919
-
1920
- <code class="ruby"> begin</code>
1921
- </li>
1922
-
1923
- <li class="covered" data-hits="3" data-linenumber="25">
1924
- <span class="hits">3</span>
1925
-
1926
- <code class="ruby"> g = GeoIP.new(RedisAnalytics.geo_ip_data_path)</code>
1927
- </li>
1928
-
1929
- <li class="covered" data-hits="3" data-linenumber="26">
1930
- <span class="hits">3</span>
1931
-
1932
- <code class="ruby"> geo_country_code = g.country(@rack_request.ip).to_hash[:country_code2]</code>
1933
- </li>
1934
-
1935
- <li class="covered" data-hits="3" data-linenumber="27">
1936
- <span class="hits">3</span>
1937
-
1938
- <code class="ruby"> if geo_country_code and geo_country_code =~ /^[A-Z]{2}$/</code>
1939
- </li>
1940
-
1941
- <li class="missed" data-hits="0" data-linenumber="28">
1942
-
1943
-
1944
- <code class="ruby"> return geo_country_code</code>
1945
- </li>
1946
-
1947
- <li class="never" data-hits="" data-linenumber="29">
1948
-
1949
-
1950
- <code class="ruby"> end</code>
1951
- </li>
1952
-
1953
- <li class="missed" data-hits="0" data-linenumber="30">
1954
-
1955
-
1956
- <code class="ruby"> rescue Exception =&gt; e</code>
1957
- </li>
1958
-
1959
- <li class="missed" data-hits="0" data-linenumber="31">
1960
-
1961
-
1962
- <code class="ruby"> warn &quot;Unable to fetch country info #{e}&quot;</code>
1963
- </li>
1964
-
1965
- <li class="never" data-hits="" data-linenumber="32">
1966
-
1967
-
1968
- <code class="ruby"> end</code>
1969
- </li>
1970
-
1971
- <li class="never" data-hits="" data-linenumber="33">
1972
-
1973
-
1974
- <code class="ruby"> end</code>
1975
- </li>
1976
-
1977
- <li class="never" data-hits="" data-linenumber="34">
1978
-
1979
-
1980
- <code class="ruby"> end</code>
1981
- </li>
1982
-
1983
- <li class="never" data-hits="" data-linenumber="35">
1984
-
1985
-
1986
- <code class="ruby"></code>
1987
- </li>
1988
-
1989
- <li class="covered" data-hits="1" data-linenumber="36">
1990
- <span class="hits">1</span>
1991
-
1992
- <code class="ruby"> def recency_ratio_per_visit</code>
1993
- </li>
1994
-
1995
- <li class="never" data-hits="" data-linenumber="37">
1996
-
1997
-
1998
- <code class="ruby"> # tracking for visitor recency</code>
1999
- </li>
2000
-
2001
- <li class="covered" data-hits="3" data-linenumber="38">
2002
- <span class="hits">3</span>
2003
-
2004
- <code class="ruby"> if @last_visit_time # from first_visit_cookie</code>
2005
- </li>
2006
-
2007
- <li class="missed" data-hits="0" data-linenumber="39">
2008
-
2009
-
2010
- <code class="ruby"> days_since_last_visit = ((@t.to_i - @last_visit_time.to_i)/(24*3600)).round</code>
2011
- </li>
2012
-
2013
- <li class="missed" data-hits="0" data-linenumber="40">
2014
-
2015
-
2016
- <code class="ruby"> if days_since_last_visit &lt;= 1</code>
2017
- </li>
2018
-
2019
- <li class="missed" data-hits="0" data-linenumber="41">
2020
-
2021
-
2022
- <code class="ruby"> return &#39;d&#39;</code>
2023
- </li>
2024
-
2025
- <li class="missed" data-hits="0" data-linenumber="42">
2026
-
2027
-
2028
- <code class="ruby"> elsif days_since_last_visit &lt;= 7</code>
2029
- </li>
2030
-
2031
- <li class="missed" data-hits="0" data-linenumber="43">
2032
-
2033
-
2034
- <code class="ruby"> return &#39;w&#39;</code>
2035
- </li>
2036
-
2037
- <li class="missed" data-hits="0" data-linenumber="44">
2038
-
2039
-
2040
- <code class="ruby"> elsif days_since_last_visit &lt;= 30</code>
2041
- </li>
2042
-
2043
- <li class="missed" data-hits="0" data-linenumber="45">
2044
-
2045
-
2046
- <code class="ruby"> return &#39;m&#39;</code>
2047
- </li>
2048
-
2049
- <li class="never" data-hits="" data-linenumber="46">
2050
-
2051
-
2052
- <code class="ruby"> else</code>
2053
- </li>
2054
-
2055
- <li class="missed" data-hits="0" data-linenumber="47">
2056
-
2057
-
2058
- <code class="ruby"> return &#39;o&#39;</code>
2059
- </li>
2060
-
2061
- <li class="never" data-hits="" data-linenumber="48">
2062
-
2063
-
2064
- <code class="ruby"> end</code>
2065
- </li>
2066
-
2067
- <li class="never" data-hits="" data-linenumber="49">
2068
-
2069
-
2070
- <code class="ruby"> end</code>
2071
- </li>
2072
-
2073
- <li class="never" data-hits="" data-linenumber="50">
2074
-
2075
-
2076
- <code class="ruby"> end</code>
2077
- </li>
2078
-
2079
- <li class="never" data-hits="" data-linenumber="51">
2080
-
2081
-
2082
- <code class="ruby"></code>
2083
- </li>
2084
-
2085
- <li class="covered" data-hits="1" data-linenumber="52">
2086
- <span class="hits">1</span>
2087
-
2088
- <code class="ruby"> def device_ratio_per_visit</code>
2089
- </li>
2090
-
2091
- <li class="covered" data-hits="3" data-linenumber="53">
2092
- <span class="hits">3</span>
2093
-
2094
- <code class="ruby"> return ((user_agent.mobile? or user_agent.tablet?) ? &#39;mobile&#39; : &#39;desktop&#39;)</code>
2095
- </li>
2096
-
2097
- <li class="never" data-hits="" data-linenumber="54">
2098
-
2099
-
2100
- <code class="ruby"> end</code>
2101
- </li>
2102
-
2103
- <li class="never" data-hits="" data-linenumber="55">
2104
-
2105
-
2106
- <code class="ruby"></code>
2107
- </li>
2108
-
2109
- <li class="covered" data-hits="1" data-linenumber="56">
2110
- <span class="hits">1</span>
2111
-
2112
- <code class="ruby"> def referrer_ratio_per_visit</code>
2113
- </li>
2114
-
2115
- <li class="covered" data-hits="3" data-linenumber="57">
2116
- <span class="hits">3</span>
2117
-
2118
- <code class="ruby"> if @rack_request.referrer</code>
2119
- </li>
2120
-
2121
- <li class="missed" data-hits="0" data-linenumber="58">
2122
-
2123
-
2124
- <code class="ruby"> [&#39;google&#39;, &#39;bing&#39;, &#39;yahoo&#39;, &#39;cleartrip&#39;, &#39;github&#39;].each do |referrer|</code>
2125
- </li>
2126
-
2127
- <li class="never" data-hits="" data-linenumber="59">
2128
-
2129
-
2130
- <code class="ruby"> # this will track x.google.mysite.com as google so its buggy, fix the regex</code>
2131
- </li>
2132
-
2133
- <li class="missed" data-hits="0" data-linenumber="60">
2134
-
2135
-
2136
- <code class="ruby"> if m = @rack_request.referrer.match(/^(https?:\/\/)?([a-zA-Z0-9\.\-]+\.)?(#{referrer})\.([a-zA-Z\.]+)(:[0-9]+)?(\/.*)?$/)</code>
2137
- </li>
2138
-
2139
- <li class="missed" data-hits="0" data-linenumber="61">
2140
-
2141
-
2142
- <code class="ruby"> &quot;REFERRER =&gt; #{m.to_a[3]}&quot;</code>
2143
- </li>
2144
-
2145
- <li class="missed" data-hits="0" data-linenumber="62">
2146
-
2147
-
2148
- <code class="ruby"> referrer = m.to_a[3]</code>
2149
- </li>
2150
-
2151
- <li class="never" data-hits="" data-linenumber="63">
2152
-
2153
-
2154
- <code class="ruby"> else</code>
2155
- </li>
2156
-
2157
- <li class="missed" data-hits="0" data-linenumber="64">
2158
-
2159
-
2160
- <code class="ruby"> referrer = &#39;other&#39;</code>
2161
- </li>
2162
-
2163
- <li class="never" data-hits="" data-linenumber="65">
2164
-
2165
-
2166
- <code class="ruby"> end</code>
2167
- </li>
2168
-
2169
- <li class="never" data-hits="" data-linenumber="66">
2170
-
2171
-
2172
- <code class="ruby"> end</code>
2173
- </li>
2174
-
2175
- <li class="never" data-hits="" data-linenumber="67">
2176
-
2177
-
2178
- <code class="ruby"> else</code>
2179
- </li>
2180
-
2181
- <li class="covered" data-hits="3" data-linenumber="68">
2182
- <span class="hits">3</span>
2183
-
2184
- <code class="ruby"> referrer = &#39;organic&#39;</code>
2185
- </li>
2186
-
2187
- <li class="never" data-hits="" data-linenumber="69">
2188
-
2189
-
2190
- <code class="ruby"> end</code>
2191
- </li>
2192
-
2193
- <li class="covered" data-hits="3" data-linenumber="70">
2194
- <span class="hits">3</span>
2195
-
2196
- <code class="ruby"> return referrer</code>
2197
- </li>
2198
-
2199
- <li class="never" data-hits="" data-linenumber="71">
2200
-
2201
-
2202
- <code class="ruby"> end</code>
2203
- </li>
2204
-
2205
- <li class="never" data-hits="" data-linenumber="72">
2206
-
2207
-
2208
- <code class="ruby"></code>
2209
- </li>
2210
-
2211
- <li class="never" data-hits="" data-linenumber="73">
2212
-
2213
-
2214
- <code class="ruby"> # track the ratio of URL&#39;s visits</code>
2215
- </li>
2216
-
2217
- <li class="covered" data-hits="1" data-linenumber="74">
2218
- <span class="hits">1</span>
2219
-
2220
- <code class="ruby"> def url_ratio_per_hit</code>
2221
- </li>
2222
-
2223
- <li class="covered" data-hits="4" data-linenumber="75">
2224
- <span class="hits">4</span>
2225
-
2226
- <code class="ruby"> return @rack_request.path</code>
2227
- </li>
2228
-
2229
- <li class="never" data-hits="" data-linenumber="76">
2230
-
2231
-
2232
- <code class="ruby"> end</code>
2233
- </li>
2234
-
2235
- <li class="never" data-hits="" data-linenumber="77">
2236
-
2237
-
2238
- <code class="ruby"> </code>
2239
- </li>
2240
-
2241
- <li class="never" data-hits="" data-linenumber="78">
2242
-
2243
-
2244
- <code class="ruby"> # track the landing pages ratio</code>
2245
- </li>
2246
-
2247
- <li class="covered" data-hits="1" data-linenumber="79">
2248
- <span class="hits">1</span>
2249
-
2250
- <code class="ruby"> def landing_page_ratio_per_hit</code>
2251
- </li>
2252
-
2253
- <li class="covered" data-hits="4" data-linenumber="80">
2254
- <span class="hits">4</span>
2255
-
2256
- <code class="ruby"> return @rack_request.path if @page_view_seq_no.to_i == 0</code>
2257
- </li>
2258
-
2259
- <li class="never" data-hits="" data-linenumber="81">
2260
-
2261
-
2262
- <code class="ruby"> end</code>
2263
- </li>
2264
-
2265
- <li class="never" data-hits="" data-linenumber="82">
2266
-
2267
-
2268
- <code class="ruby"></code>
2269
- </li>
2270
-
2271
- <li class="never" data-hits="" data-linenumber="83">
2272
-
2273
-
2274
- <code class="ruby"> # track the landing pages ratio</code>
2275
- </li>
2276
-
2277
- <li class="covered" data-hits="1" data-linenumber="84">
2278
- <span class="hits">1</span>
2279
-
2280
- <code class="ruby"> def http_response_ratio_per_hit</code>
2281
- </li>
2282
-
2283
- <li class="covered" data-hits="4" data-linenumber="85">
2284
- <span class="hits">4</span>
2285
-
2286
- <code class="ruby"> return @rack_response.status.to_s</code>
2287
- </li>
2288
-
2289
- <li class="never" data-hits="" data-linenumber="86">
2290
-
2291
-
2292
- <code class="ruby"> end</code>
2293
- </li>
2294
-
2295
- <li class="never" data-hits="" data-linenumber="87">
2296
-
2297
-
2298
- <code class="ruby"></code>
2299
- </li>
2300
-
2301
- <li class="covered" data-hits="1" data-linenumber="88">
2302
- <span class="hits">1</span>
2303
-
2304
- <code class="ruby"> private</code>
2305
- </li>
2306
-
2307
- <li class="covered" data-hits="1" data-linenumber="89">
2308
- <span class="hits">1</span>
2309
-
2310
- <code class="ruby"> def user_agent</code>
2311
- </li>
2312
-
2313
- <li class="covered" data-hits="12" data-linenumber="90">
2314
- <span class="hits">12</span>
2315
-
2316
- <code class="ruby"> Browser.new(:ua =&gt; @rack_request.user_agent, :accept_language =&gt; &#39;en-us&#39;)</code>
2317
- </li>
2318
-
2319
- <li class="never" data-hits="" data-linenumber="91">
2320
-
2321
-
2322
- <code class="ruby"> end</code>
2323
- </li>
2324
-
2325
- <li class="never" data-hits="" data-linenumber="92">
2326
-
2327
-
2328
- <code class="ruby"></code>
2329
- </li>
2330
-
2331
- <li class="never" data-hits="" data-linenumber="93">
2332
-
2333
-
2334
- <code class="ruby"> end</code>
2335
- </li>
2336
-
2337
- <li class="never" data-hits="" data-linenumber="94">
2338
-
2339
-
2340
- <code class="ruby">end</code>
2341
- </li>
2342
-
2343
- <li class="never" data-hits="" data-linenumber="95">
2344
-
2345
-
2346
- <code class="ruby"></code>
2347
- </li>
2348
-
2349
- </ol>
2350
- </pre>
2351
- </div>
2352
-
2353
- <div class="source_table" id="d0b8e9f6b08e86ae88c6c70a32d61857519ac074">
2354
- <div class="header">
2355
- <h3>lib/redis_analytics/time_ext.rb</h3>
2356
- <h4><span class="red">71.43 %</span> covered</h4>
2357
- <div>
2358
- <b>7</b> relevant lines.
2359
- <span class="green"><b>5</b> lines covered</span> and
2360
- <span class="red"><b>2</b> lines missed.</span>
2361
- </div>
2362
- </div>
2363
-
2364
- <pre>
2365
- <ol>
2366
-
2367
- <li class="covered" data-hits="1" data-linenumber="1">
2368
- <span class="hits">1</span>
2369
-
2370
- <code class="ruby">require &#39;date&#39;</code>
2371
- </li>
2372
-
2373
- <li class="covered" data-hits="1" data-linenumber="2">
2374
- <span class="hits">1</span>
2375
-
2376
- <code class="ruby">module TimeExtensions</code>
2377
- </li>
2378
-
2379
- <li class="never" data-hits="" data-linenumber="3">
2380
-
2381
-
2382
- <code class="ruby"></code>
2383
- </li>
2384
-
2385
- <li class="covered" data-hits="1" data-linenumber="4">
2386
- <span class="hits">1</span>
2387
-
2388
- <code class="ruby"> def end_of_minute</code>
2389
- </li>
2390
-
2391
- <li class="missed" data-hits="0" data-linenumber="5">
2392
-
2393
-
2394
- <code class="ruby"> Time.local(self.year, self.mon, self.day, self.hour, self.min, 59)</code>
2395
- </li>
2396
-
2397
- <li class="never" data-hits="" data-linenumber="6">
2398
-
2399
-
2400
- <code class="ruby"> end</code>
2401
- </li>
2402
-
2403
- <li class="never" data-hits="" data-linenumber="7">
2404
-
2405
-
2406
- <code class="ruby"></code>
2407
- </li>
2408
-
2409
- <li class="covered" data-hits="1" data-linenumber="8">
2410
- <span class="hits">1</span>
2411
-
2412
- <code class="ruby"> def beginning_of_minute</code>
2413
- </li>
2414
-
2415
- <li class="missed" data-hits="0" data-linenumber="9">
2416
-
2417
-
2418
- <code class="ruby"> Time.local(self.year, self.mon, self.day, self.hour, self.min, 0)</code>
2419
- </li>
2420
-
2421
- <li class="never" data-hits="" data-linenumber="10">
2422
-
2423
-
2424
- <code class="ruby"> end</code>
2425
- </li>
2426
-
2427
- <li class="never" data-hits="" data-linenumber="11">
2428
-
2429
-
2430
- <code class="ruby">end</code>
2431
- </li>
2432
-
2433
- <li class="never" data-hits="" data-linenumber="12">
2434
-
2435
-
2436
- <code class="ruby"></code>
2437
- </li>
2438
-
2439
- <li class="covered" data-hits="1" data-linenumber="13">
2440
- <span class="hits">1</span>
2441
-
2442
- <code class="ruby">Time.send :include, TimeExtensions</code>
2443
- </li>
2444
-
2445
- </ol>
2446
- </pre>
2447
- </div>
2448
-
2449
- <div class="source_table" id="122f0359443d903f82b5e7f8a5e78017eeb5ff90">
2450
- <div class="header">
2451
- <h3>lib/redis_analytics/tracker.rb</h3>
2452
- <h4><span class="green">100.0 %</span> covered</h4>
2453
- <div>
2454
- <b>29</b> relevant lines.
2455
- <span class="green"><b>29</b> lines covered</span> and
2456
- <span class="red"><b>0</b> lines missed.</span>
2457
- </div>
2458
- </div>
2459
-
2460
- <pre>
2461
- <ol>
2462
-
2463
- <li class="never" data-hits="" data-linenumber="1">
2464
-
2465
-
2466
- <code class="ruby"># -*- coding: utf-8 -*-</code>
2467
- </li>
2468
-
2469
- <li class="covered" data-hits="1" data-linenumber="2">
2470
- <span class="hits">1</span>
2471
-
2472
- <code class="ruby">require &#39;digest/md5&#39;</code>
2473
- </li>
2474
-
2475
- <li class="covered" data-hits="1" data-linenumber="3">
2476
- <span class="hits">1</span>
2477
-
2478
- <code class="ruby">module RedisAnalytics</code>
2479
- </li>
2480
-
2481
- <li class="covered" data-hits="1" data-linenumber="4">
2482
- <span class="hits">1</span>
2483
-
2484
- <code class="ruby"> class Tracker</code>
2485
- </li>
2486
-
2487
- <li class="never" data-hits="" data-linenumber="5">
2488
-
2489
-
2490
- <code class="ruby"></code>
2491
- </li>
2492
-
2493
- <li class="covered" data-hits="1" data-linenumber="6">
2494
- <span class="hits">1</span>
2495
-
2496
- <code class="ruby"> def initialize(app)</code>
2497
- </li>
2498
-
2499
- <li class="covered" data-hits="2" data-linenumber="7">
2500
- <span class="hits">2</span>
2501
-
2502
- <code class="ruby"> @app = app</code>
2503
- </li>
2504
-
2505
- <li class="never" data-hits="" data-linenumber="8">
2506
-
2507
-
2508
- <code class="ruby"> end</code>
2509
- </li>
2510
-
2511
- <li class="never" data-hits="" data-linenumber="9">
2512
-
2513
-
2514
- <code class="ruby"></code>
2515
- </li>
2516
-
2517
- <li class="covered" data-hits="1" data-linenumber="10">
2518
- <span class="hits">1</span>
2519
-
2520
- <code class="ruby"> def call(env)</code>
2521
- </li>
2522
-
2523
- <li class="covered" data-hits="4" data-linenumber="11">
2524
- <span class="hits">4</span>
2525
-
2526
- <code class="ruby"> dup.call!(env)</code>
2527
- </li>
2528
-
2529
- <li class="never" data-hits="" data-linenumber="12">
2530
-
2531
-
2532
- <code class="ruby"> end</code>
2533
- </li>
2534
-
2535
- <li class="never" data-hits="" data-linenumber="13">
2536
-
2537
-
2538
- <code class="ruby"></code>
2539
- </li>
2540
-
2541
- <li class="covered" data-hits="1" data-linenumber="14">
2542
- <span class="hits">1</span>
2543
-
2544
- <code class="ruby"> def call!(env)</code>
2545
- </li>
2546
-
2547
- <li class="covered" data-hits="4" data-linenumber="15">
2548
- <span class="hits">4</span>
2549
-
2550
- <code class="ruby"> @env = env</code>
2551
- </li>
2552
-
2553
- <li class="covered" data-hits="4" data-linenumber="16">
2554
- <span class="hits">4</span>
2555
-
2556
- <code class="ruby"> @request = Rack::Request.new(env)</code>
2557
- </li>
2558
-
2559
- <li class="covered" data-hits="4" data-linenumber="17">
2560
- <span class="hits">4</span>
2561
-
2562
- <code class="ruby"> status, headers, body = @app.call(env)</code>
2563
- </li>
2564
-
2565
- <li class="covered" data-hits="4" data-linenumber="18">
2566
- <span class="hits">4</span>
2567
-
2568
- <code class="ruby"> @response = Rack::Response.new(body, status, headers)</code>
2569
- </li>
2570
-
2571
- <li class="covered" data-hits="4" data-linenumber="19">
2572
- <span class="hits">4</span>
2573
-
2574
- <code class="ruby"> record if should_record?</code>
2575
- </li>
2576
-
2577
- <li class="covered" data-hits="4" data-linenumber="20">
2578
- <span class="hits">4</span>
2579
-
2580
- <code class="ruby"> @response.finish</code>
2581
- </li>
2582
-
2583
- <li class="never" data-hits="" data-linenumber="21">
2584
-
2585
-
2586
- <code class="ruby"> end</code>
2587
- </li>
2588
-
2589
- <li class="never" data-hits="" data-linenumber="22">
2590
-
2591
-
2592
- <code class="ruby"></code>
2593
- </li>
2594
-
2595
- <li class="covered" data-hits="1" data-linenumber="23">
2596
- <span class="hits">1</span>
2597
-
2598
- <code class="ruby"> def should_record?</code>
2599
- </li>
2600
-
2601
- <li class="covered" data-hits="4" data-linenumber="24">
2602
- <span class="hits">4</span>
2603
-
2604
- <code class="ruby"> dashboard_path = Rails.application.routes.named_routes[:redis_analytics].path rescue nil</code>
2605
- </li>
2606
-
2607
- <li class="covered" data-hits="4" data-linenumber="25">
2608
- <span class="hits">4</span>
2609
-
2610
- <code class="ruby"> return false if dashboard_path =~ @request.path</code>
2611
- </li>
2612
-
2613
- <li class="covered" data-hits="4" data-linenumber="26">
2614
- <span class="hits">4</span>
2615
-
2616
- <code class="ruby"> return false unless @response.ok?</code>
2617
- </li>
2618
-
2619
- <li class="covered" data-hits="4" data-linenumber="27">
2620
- <span class="hits">4</span>
2621
-
2622
- <code class="ruby"> return false unless @response.content_type =~ /^text\/html/</code>
2623
- </li>
2624
-
2625
- <li class="covered" data-hits="4" data-linenumber="28">
2626
- <span class="hits">4</span>
2627
-
2628
- <code class="ruby"> RedisAnalytics.path_filters.each do |filter|</code>
2629
- </li>
2630
-
2631
- <li class="covered" data-hits="4" data-linenumber="29">
2632
- <span class="hits">4</span>
2633
-
2634
- <code class="ruby"> return false if filter.matches?(@request.path)</code>
2635
- </li>
2636
-
2637
- <li class="never" data-hits="" data-linenumber="30">
2638
-
2639
-
2640
- <code class="ruby"> end</code>
2641
- </li>
2642
-
2643
- <li class="covered" data-hits="4" data-linenumber="31">
2644
- <span class="hits">4</span>
2645
-
2646
- <code class="ruby"> RedisAnalytics.filters.each do |filter|</code>
2647
- </li>
2648
-
2649
- <li class="covered" data-hits="4" data-linenumber="32">
2650
- <span class="hits">4</span>
2651
-
2652
- <code class="ruby"> return false if filter.matches?(@request, @response)</code>
2653
- </li>
2654
-
2655
- <li class="never" data-hits="" data-linenumber="33">
2656
-
2657
-
2658
- <code class="ruby"> end</code>
2659
- </li>
2660
-
2661
- <li class="covered" data-hits="4" data-linenumber="34">
2662
- <span class="hits">4</span>
2663
-
2664
- <code class="ruby"> return true</code>
2665
- </li>
2666
-
2667
- <li class="never" data-hits="" data-linenumber="35">
2668
-
2669
-
2670
- <code class="ruby"> end</code>
2671
- </li>
2672
-
2673
- <li class="never" data-hits="" data-linenumber="36">
2674
-
2675
-
2676
- <code class="ruby"></code>
2677
- </li>
2678
-
2679
- <li class="covered" data-hits="1" data-linenumber="37">
2680
- <span class="hits">1</span>
2681
-
2682
- <code class="ruby"> def record</code>
2683
- </li>
2684
-
2685
- <li class="covered" data-hits="4" data-linenumber="38">
2686
- <span class="hits">4</span>
2687
-
2688
- <code class="ruby"> v = Visit.new(@request, @response)</code>
2689
- </li>
2690
-
2691
- <li class="covered" data-hits="4" data-linenumber="39">
2692
- <span class="hits">4</span>
2693
-
2694
- <code class="ruby"> @response = v.record</code>
2695
- </li>
2696
-
2697
- <li class="covered" data-hits="4" data-linenumber="40">
2698
- <span class="hits">4</span>
2699
-
2700
- <code class="ruby"> @response.set_cookie(RedisAnalytics.current_visit_cookie_name, v.updated_current_visit_info)</code>
2701
- </li>
2702
-
2703
- <li class="covered" data-hits="4" data-linenumber="41">
2704
- <span class="hits">4</span>
2705
-
2706
- <code class="ruby"> @response.set_cookie(RedisAnalytics.first_visit_cookie_name, v.updated_first_visit_info)</code>
2707
- </li>
2708
-
2709
- <li class="never" data-hits="" data-linenumber="42">
2710
-
2711
-
2712
- <code class="ruby"> end</code>
2713
- </li>
2714
-
2715
- <li class="never" data-hits="" data-linenumber="43">
2716
-
2717
-
2718
- <code class="ruby"></code>
2719
- </li>
2720
-
2721
- <li class="never" data-hits="" data-linenumber="44">
2722
-
2723
-
2724
- <code class="ruby"> end</code>
2725
- </li>
2726
-
2727
- <li class="never" data-hits="" data-linenumber="45">
2728
-
2729
-
2730
- <code class="ruby">end</code>
2731
- </li>
2732
-
2733
- </ol>
2734
- </pre>
2735
- </div>
2736
-
2737
- <div class="source_table" id="5db319fbdc0ac2b6f41ed2c27275e13ebf67ca92">
2738
- <div class="header">
2739
- <h3>lib/redis_analytics/version.rb</h3>
2740
- <h4><span class="green">100.0 %</span> covered</h4>
2741
- <div>
2742
- <b>2</b> relevant lines.
2743
- <span class="green"><b>2</b> lines covered</span> and
2744
- <span class="red"><b>0</b> lines missed.</span>
2745
- </div>
2746
- </div>
2747
-
2748
- <pre>
2749
- <ol>
2750
-
2751
- <li class="covered" data-hits="1" data-linenumber="1">
2752
- <span class="hits">1</span>
2753
-
2754
- <code class="ruby">module RedisAnalytics</code>
2755
- </li>
2756
-
2757
- <li class="covered" data-hits="1" data-linenumber="2">
2758
- <span class="hits">1</span>
2759
-
2760
- <code class="ruby"> VERSION = &#39;1.0.0&#39;</code>
2761
- </li>
2762
-
2763
- <li class="never" data-hits="" data-linenumber="3">
2764
-
2765
-
2766
- <code class="ruby">end</code>
2767
- </li>
2768
-
2769
- <li class="never" data-hits="" data-linenumber="4">
2770
-
2771
-
2772
- <code class="ruby"></code>
2773
- </li>
2774
-
2775
- </ol>
2776
- </pre>
2777
- </div>
2778
-
2779
- <div class="source_table" id="f3b99339bc2e8f4bf4e1ad1356f4104c5de8aca5">
2780
- <div class="header">
2781
- <h3>lib/redis_analytics/visit.rb</h3>
2782
- <h4><span class="green">96.97 %</span> covered</h4>
2783
- <div>
2784
- <b>66</b> relevant lines.
2785
- <span class="green"><b>64</b> lines covered</span> and
2786
- <span class="red"><b>2</b> lines missed.</span>
2787
- </div>
2788
- </div>
2789
-
2790
- <pre>
2791
- <ol>
2792
-
2793
- <li class="covered" data-hits="1" data-linenumber="1">
2794
- <span class="hits">1</span>
2795
-
2796
- <code class="ruby">module RedisAnalytics</code>
2797
- </li>
2798
-
2799
- <li class="covered" data-hits="1" data-linenumber="2">
2800
- <span class="hits">1</span>
2801
-
2802
- <code class="ruby"> class Visit</code>
2803
- </li>
2804
-
2805
- <li class="covered" data-hits="1" data-linenumber="3">
2806
- <span class="hits">1</span>
2807
-
2808
- <code class="ruby"> include Metrics</code>
2809
- </li>
2810
-
2811
- <li class="never" data-hits="" data-linenumber="4">
2812
-
2813
-
2814
- <code class="ruby"></code>
2815
- </li>
2816
-
2817
- <li class="never" data-hits="" data-linenumber="5">
2818
-
2819
-
2820
- <code class="ruby"> # This class represents one unique visit</code>
2821
- </li>
2822
-
2823
- <li class="never" data-hits="" data-linenumber="6">
2824
-
2825
-
2826
- <code class="ruby"> # User may have never visited the site</code>
2827
- </li>
2828
-
2829
- <li class="never" data-hits="" data-linenumber="7">
2830
-
2831
-
2832
- <code class="ruby"> # User may have visited before but his visit is expired</code>
2833
- </li>
2834
-
2835
- <li class="never" data-hits="" data-linenumber="8">
2836
-
2837
-
2838
- <code class="ruby"> # Everything counted here is unique for a visit</code>
2839
- </li>
2840
-
2841
- <li class="never" data-hits="" data-linenumber="9">
2842
-
2843
-
2844
- <code class="ruby"></code>
2845
- </li>
2846
-
2847
- <li class="never" data-hits="" data-linenumber="10">
2848
-
2849
-
2850
- <code class="ruby"> # helpers</code>
2851
- </li>
2852
-
2853
- <li class="covered" data-hits="1" data-linenumber="11">
2854
- <span class="hits">1</span>
2855
-
2856
- <code class="ruby"> def for_each_time_range(t)</code>
2857
- </li>
2858
-
2859
- <li class="covered" data-hits="228" data-linenumber="12">
2860
- <span class="hits">228</span>
2861
-
2862
- <code class="ruby"> RedisAnalytics.redis_key_timestamps.map{|x, y| t.strftime(x)}.each do |ts|</code>
2863
- </li>
2864
-
2865
- <li class="covered" data-hits="190" data-linenumber="13">
2866
- <span class="hits">190</span>
2867
-
2868
- <code class="ruby"> yield(ts)</code>
2869
- </li>
2870
-
2871
- <li class="never" data-hits="" data-linenumber="14">
2872
-
2873
-
2874
- <code class="ruby"> end</code>
2875
- </li>
2876
-
2877
- <li class="never" data-hits="" data-linenumber="15">
2878
-
2879
-
2880
- <code class="ruby"> end</code>
2881
- </li>
2882
-
2883
- <li class="never" data-hits="" data-linenumber="16">
2884
-
2885
-
2886
- <code class="ruby"></code>
2887
- </li>
2888
-
2889
- <li class="covered" data-hits="1" data-linenumber="17">
2890
- <span class="hits">1</span>
2891
-
2892
- <code class="ruby"> def first_visit_info</code>
2893
- </li>
2894
-
2895
- <li class="covered" data-hits="12" data-linenumber="18">
2896
- <span class="hits">12</span>
2897
-
2898
- <code class="ruby"> cookie = @rack_request.cookies[RedisAnalytics.first_visit_cookie_name]</code>
2899
- </li>
2900
-
2901
- <li class="covered" data-hits="12" data-linenumber="19">
2902
- <span class="hits">12</span>
2903
-
2904
- <code class="ruby"> return cookie ? cookie.split(&#39;.&#39;) : []</code>
2905
- </li>
2906
-
2907
- <li class="never" data-hits="" data-linenumber="20">
2908
-
2909
-
2910
- <code class="ruby"> end</code>
2911
- </li>
2912
-
2913
- <li class="never" data-hits="" data-linenumber="21">
2914
-
2915
-
2916
- <code class="ruby"></code>
2917
- </li>
2918
-
2919
- <li class="covered" data-hits="1" data-linenumber="22">
2920
- <span class="hits">1</span>
2921
-
2922
- <code class="ruby"> def current_visit_info</code>
2923
- </li>
2924
-
2925
- <li class="covered" data-hits="19" data-linenumber="23">
2926
- <span class="hits">19</span>
2927
-
2928
- <code class="ruby"> cookie = @rack_request.cookies[RedisAnalytics.current_visit_cookie_name]</code>
2929
- </li>
2930
-
2931
- <li class="covered" data-hits="19" data-linenumber="24">
2932
- <span class="hits">19</span>
2933
-
2934
- <code class="ruby"> return cookie ? cookie.split(&#39;.&#39;) : []</code>
2935
- </li>
2936
-
2937
- <li class="never" data-hits="" data-linenumber="25">
2938
-
2939
-
2940
- <code class="ruby"> end</code>
2941
- </li>
2942
-
2943
- <li class="never" data-hits="" data-linenumber="26">
2944
-
2945
-
2946
- <code class="ruby"></code>
2947
- </li>
2948
-
2949
- <li class="never" data-hits="" data-linenumber="27">
2950
-
2951
-
2952
- <code class="ruby"> # method used in analytics.rb to initialize visit</code>
2953
- </li>
2954
-
2955
- <li class="covered" data-hits="1" data-linenumber="28">
2956
- <span class="hits">1</span>
2957
-
2958
- <code class="ruby"> def initialize(request, response)</code>
2959
- </li>
2960
-
2961
- <li class="covered" data-hits="4" data-linenumber="29">
2962
- <span class="hits">4</span>
2963
-
2964
- <code class="ruby"> @t = Time.now</code>
2965
- </li>
2966
-
2967
- <li class="covered" data-hits="4" data-linenumber="30">
2968
- <span class="hits">4</span>
2969
-
2970
- <code class="ruby"> @redis_key_prefix = &quot;#{RedisAnalytics.redis_namespace}:&quot;</code>
2971
- </li>
2972
-
2973
- <li class="covered" data-hits="4" data-linenumber="31">
2974
- <span class="hits">4</span>
2975
-
2976
- <code class="ruby"> @rack_request = request</code>
2977
- </li>
2978
-
2979
- <li class="covered" data-hits="4" data-linenumber="32">
2980
- <span class="hits">4</span>
2981
-
2982
- <code class="ruby"> @rack_response = response</code>
2983
- </li>
2984
-
2985
- <li class="covered" data-hits="4" data-linenumber="33">
2986
- <span class="hits">4</span>
2987
-
2988
- <code class="ruby"> @first_visit_seq = first_visit_info[0] || current_visit_info[0]</code>
2989
- </li>
2990
-
2991
- <li class="covered" data-hits="4" data-linenumber="34">
2992
- <span class="hits">4</span>
2993
-
2994
- <code class="ruby"> @current_visit_seq = current_visit_info[1]</code>
2995
- </li>
2996
-
2997
- <li class="never" data-hits="" data-linenumber="35">
2998
-
2999
-
3000
- <code class="ruby"></code>
3001
- </li>
3002
-
3003
- <li class="covered" data-hits="4" data-linenumber="36">
3004
- <span class="hits">4</span>
3005
-
3006
- <code class="ruby"> @first_visit_time = first_visit_info[1]</code>
3007
- </li>
3008
-
3009
- <li class="covered" data-hits="4" data-linenumber="37">
3010
- <span class="hits">4</span>
3011
-
3012
- <code class="ruby"> @last_visit_time = first_visit_info[2]</code>
3013
- </li>
3014
-
3015
- <li class="never" data-hits="" data-linenumber="38">
3016
-
3017
-
3018
- <code class="ruby"></code>
3019
- </li>
3020
-
3021
- <li class="covered" data-hits="4" data-linenumber="39">
3022
- <span class="hits">4</span>
3023
-
3024
- <code class="ruby"> @page_view_seq_no = current_visit_info[2] || 0</code>
3025
- </li>
3026
-
3027
- <li class="covered" data-hits="4" data-linenumber="40">
3028
- <span class="hits">4</span>
3029
-
3030
- <code class="ruby"> @last_visit_start_time = current_visit_info[3]</code>
3031
- </li>
3032
-
3033
- <li class="covered" data-hits="4" data-linenumber="41">
3034
- <span class="hits">4</span>
3035
-
3036
- <code class="ruby"> @last_visit_end_time = current_visit_info[4]</code>
3037
- </li>
3038
-
3039
- <li class="never" data-hits="" data-linenumber="42">
3040
-
3041
-
3042
- <code class="ruby"> end</code>
3043
- </li>
3044
-
3045
- <li class="never" data-hits="" data-linenumber="43">
3046
-
3047
-
3048
- <code class="ruby"></code>
3049
- </li>
3050
-
3051
- <li class="never" data-hits="" data-linenumber="44">
3052
-
3053
-
3054
- <code class="ruby"> # called from analytics.rb</code>
3055
- </li>
3056
-
3057
- <li class="covered" data-hits="1" data-linenumber="45">
3058
- <span class="hits">1</span>
3059
-
3060
- <code class="ruby"> def record</code>
3061
- </li>
3062
-
3063
- <li class="covered" data-hits="4" data-linenumber="46">
3064
- <span class="hits">4</span>
3065
-
3066
- <code class="ruby"> if @current_visit_seq</code>
3067
- </li>
3068
-
3069
- <li class="covered" data-hits="1" data-linenumber="47">
3070
- <span class="hits">1</span>
3071
-
3072
- <code class="ruby"> track(&quot;visit_time&quot;, @t.to_i - @last_visit_end_time.to_i)</code>
3073
- </li>
3074
-
3075
- <li class="never" data-hits="" data-linenumber="48">
3076
-
3077
-
3078
- <code class="ruby"> else</code>
3079
- </li>
3080
-
3081
- <li class="covered" data-hits="3" data-linenumber="49">
3082
- <span class="hits">3</span>
3083
-
3084
- <code class="ruby"> @current_visit_seq ||= counter(&quot;visits&quot;)</code>
3085
- </li>
3086
-
3087
- <li class="covered" data-hits="3" data-linenumber="50">
3088
- <span class="hits">3</span>
3089
-
3090
- <code class="ruby"> track(&quot;visits&quot;, 1) # track core &#39;visit&#39; metric</code>
3091
- </li>
3092
-
3093
- <li class="covered" data-hits="3" data-linenumber="51">
3094
- <span class="hits">3</span>
3095
-
3096
- <code class="ruby"> if @first_visit_seq</code>
3097
- </li>
3098
-
3099
- <li class="missed" data-hits="0" data-linenumber="52">
3100
-
3101
-
3102
- <code class="ruby"> track(&quot;repeat_visits&quot;, 1)</code>
3103
- </li>
3104
-
3105
- <li class="never" data-hits="" data-linenumber="53">
3106
-
3107
-
3108
- <code class="ruby"> else</code>
3109
- </li>
3110
-
3111
- <li class="covered" data-hits="3" data-linenumber="54">
3112
- <span class="hits">3</span>
3113
-
3114
- <code class="ruby"> @first_visit_seq ||= counter(&quot;unique_visits&quot;)</code>
3115
- </li>
3116
-
3117
- <li class="covered" data-hits="3" data-linenumber="55">
3118
- <span class="hits">3</span>
3119
-
3120
- <code class="ruby"> track(&quot;first_visits&quot;, 1)</code>
3121
- </li>
3122
-
3123
- <li class="covered" data-hits="3" data-linenumber="56">
3124
- <span class="hits">3</span>
3125
-
3126
- <code class="ruby"> track(&quot;unique_visits&quot;, 1)</code>
3127
- </li>
3128
-
3129
- <li class="never" data-hits="" data-linenumber="57">
3130
-
3131
-
3132
- <code class="ruby"> end</code>
3133
- </li>
3134
-
3135
- <li class="covered" data-hits="3" data-linenumber="58">
3136
- <span class="hits">3</span>
3137
-
3138
- <code class="ruby"> exec_custom_methods(&#39;visit&#39;) # custom methods that are measured on a per-visit basis</code>
3139
- </li>
3140
-
3141
- <li class="never" data-hits="" data-linenumber="59">
3142
-
3143
-
3144
- <code class="ruby"> end</code>
3145
- </li>
3146
-
3147
- <li class="covered" data-hits="4" data-linenumber="60">
3148
- <span class="hits">4</span>
3149
-
3150
- <code class="ruby"> exec_custom_methods(&#39;hit&#39;) # custom methods that are measured on a per-page-view (per-hit) basis</code>
3151
- </li>
3152
-
3153
- <li class="covered" data-hits="4" data-linenumber="61">
3154
- <span class="hits">4</span>
3155
-
3156
- <code class="ruby"> track(&quot;page_views&quot;, 1) # track core &#39;page_view&#39; metric</code>
3157
- </li>
3158
-
3159
- <li class="covered" data-hits="4" data-linenumber="62">
3160
- <span class="hits">4</span>
3161
-
3162
- <code class="ruby"> track(&quot;second_page_views&quot;, 1) if @page_view_seq_no.to_i == 1 # @last_visit_start_time and (@last_visit_start_time.to_i == @last_visit_end_time.to_i)</code>
3163
- </li>
3164
-
3165
- <li class="covered" data-hits="4" data-linenumber="63">
3166
- <span class="hits">4</span>
3167
-
3168
- <code class="ruby"> @rack_response</code>
3169
- </li>
3170
-
3171
- <li class="never" data-hits="" data-linenumber="64">
3172
-
3173
-
3174
- <code class="ruby"> end</code>
3175
- </li>
3176
-
3177
- <li class="never" data-hits="" data-linenumber="65">
3178
-
3179
-
3180
- <code class="ruby"></code>
3181
- </li>
3182
-
3183
- <li class="covered" data-hits="1" data-linenumber="66">
3184
- <span class="hits">1</span>
3185
-
3186
- <code class="ruby"> def exec_custom_methods(type)</code>
3187
- </li>
3188
-
3189
- <li class="covered" data-hits="7" data-linenumber="67">
3190
- <span class="hits">7</span>
3191
-
3192
- <code class="ruby"> Metrics.public_instance_methods.each do |meth|</code>
3193
- </li>
3194
-
3195
- <li class="covered" data-hits="112" data-linenumber="68">
3196
- <span class="hits">112</span>
3197
-
3198
- <code class="ruby"> if m = meth.to_s.match(/^([a-z_]*)_(count|ratio)_per_#{type}$/)</code>
3199
- </li>
3200
-
3201
- <li class="covered" data-hits="53" data-linenumber="69">
3202
- <span class="hits">53</span>
3203
-
3204
- <code class="ruby"> begin</code>
3205
- </li>
3206
-
3207
- <li class="covered" data-hits="53" data-linenumber="70">
3208
- <span class="hits">53</span>
3209
-
3210
- <code class="ruby"> return_value = self.send(meth)</code>
3211
- </li>
3212
-
3213
- <li class="covered" data-hits="53" data-linenumber="71">
3214
- <span class="hits">53</span>
3215
-
3216
- <code class="ruby"> track(m.to_a[1], return_value) if return_value</code>
3217
- </li>
3218
-
3219
- <li class="never" data-hits="" data-linenumber="72">
3220
-
3221
-
3222
- <code class="ruby"> rescue =&gt; e</code>
3223
- </li>
3224
-
3225
- <li class="missed" data-hits="0" data-linenumber="73">
3226
-
3227
-
3228
- <code class="ruby"> warn &quot;#{meth} resulted in an exception #{e}&quot;</code>
3229
- </li>
3230
-
3231
- <li class="never" data-hits="" data-linenumber="74">
3232
-
3233
-
3234
- <code class="ruby"> end</code>
3235
- </li>
3236
-
3237
- <li class="never" data-hits="" data-linenumber="75">
3238
-
3239
-
3240
- <code class="ruby"> end</code>
3241
- </li>
3242
-
3243
- <li class="never" data-hits="" data-linenumber="76">
3244
-
3245
-
3246
- <code class="ruby"> end</code>
3247
- </li>
3248
-
3249
- <li class="never" data-hits="" data-linenumber="77">
3250
-
3251
-
3252
- <code class="ruby"> end</code>
3253
- </li>
3254
-
3255
- <li class="never" data-hits="" data-linenumber="78">
3256
-
3257
-
3258
- <code class="ruby"></code>
3259
- </li>
3260
-
3261
- <li class="never" data-hits="" data-linenumber="79">
3262
-
3263
-
3264
- <code class="ruby"> # helpers</code>
3265
- </li>
3266
-
3267
- <li class="covered" data-hits="1" data-linenumber="80">
3268
- <span class="hits">1</span>
3269
-
3270
- <code class="ruby"> def counter(metric_name)</code>
3271
- </li>
3272
-
3273
- <li class="covered" data-hits="6" data-linenumber="81">
3274
- <span class="hits">6</span>
3275
-
3276
- <code class="ruby"> n = RedisAnalytics.redis_connection.incr(&quot;#{@redis_key_prefix}#{metric_name}&quot;)</code>
3277
- </li>
3278
-
3279
- <li class="never" data-hits="" data-linenumber="82">
3280
-
3281
-
3282
- <code class="ruby"> # to debug, uncomment this line</code>
3283
- </li>
3284
-
3285
- <li class="never" data-hits="" data-linenumber="83">
3286
-
3287
-
3288
- <code class="ruby"> # puts &quot;COUNT #{metric_name} -&gt; #{n}&quot;</code>
3289
- </li>
3290
-
3291
- <li class="covered" data-hits="6" data-linenumber="84">
3292
- <span class="hits">6</span>
3293
-
3294
- <code class="ruby"> return n</code>
3295
- </li>
3296
-
3297
- <li class="never" data-hits="" data-linenumber="85">
3298
-
3299
-
3300
- <code class="ruby"> end</code>
3301
- </li>
3302
-
3303
- <li class="never" data-hits="" data-linenumber="86">
3304
-
3305
-
3306
- <code class="ruby"></code>
3307
- </li>
3308
-
3309
- <li class="covered" data-hits="1" data-linenumber="87">
3310
- <span class="hits">1</span>
3311
-
3312
- <code class="ruby"> def updated_current_visit_info</code>
3313
- </li>
3314
-
3315
- <li class="covered" data-hits="4" data-linenumber="88">
3316
- <span class="hits">4</span>
3317
-
3318
- <code class="ruby"> value = [@first_visit_seq.to_i, @current_visit_seq.to_i, @page_view_seq_no.to_i + 1, (@last_visit_start_time || @t).to_i, @t.to_i]</code>
3319
- </li>
3320
-
3321
- <li class="never" data-hits="" data-linenumber="89">
3322
-
3323
-
3324
- <code class="ruby"> # to debug, uncomment this line</code>
3325
- </li>
3326
-
3327
- <li class="never" data-hits="" data-linenumber="90">
3328
-
3329
-
3330
- <code class="ruby"> # puts &quot;UPDATING VCN COOKIE -&gt; #{value}&quot;</code>
3331
- </li>
3332
-
3333
- <li class="covered" data-hits="4" data-linenumber="91">
3334
- <span class="hits">4</span>
3335
-
3336
- <code class="ruby"> expires = @t + RedisAnalytics.visit_timeout.to_i.minutes</code>
3337
- </li>
3338
-
3339
- <li class="covered" data-hits="4" data-linenumber="92">
3340
- <span class="hits">4</span>
3341
-
3342
- <code class="ruby"> {:value =&gt; value.join(&#39;.&#39;), :expires =&gt; expires}</code>
3343
- </li>
3344
-
3345
- <li class="never" data-hits="" data-linenumber="93">
3346
-
3347
-
3348
- <code class="ruby"> end</code>
3349
- </li>
3350
-
3351
- <li class="never" data-hits="" data-linenumber="94">
3352
-
3353
-
3354
- <code class="ruby"></code>
3355
- </li>
3356
-
3357
- <li class="covered" data-hits="1" data-linenumber="95">
3358
- <span class="hits">1</span>
3359
-
3360
- <code class="ruby"> def updated_first_visit_info</code>
3361
- </li>
3362
-
3363
- <li class="covered" data-hits="4" data-linenumber="96">
3364
- <span class="hits">4</span>
3365
-
3366
- <code class="ruby"> value = [@first_visit_seq.to_i, (@first_visit_time || @t).to_i, @t.to_i]</code>
3367
- </li>
3368
-
3369
- <li class="never" data-hits="" data-linenumber="97">
3370
-
3371
-
3372
- <code class="ruby"> # to debug, uncomment this line</code>
3373
- </li>
3374
-
3375
- <li class="never" data-hits="" data-linenumber="98">
3376
-
3377
-
3378
- <code class="ruby"> # puts &quot;UPDATING RUCN COOKIE -&gt; #{value}&quot;</code>
3379
- </li>
3380
-
3381
- <li class="covered" data-hits="4" data-linenumber="99">
3382
- <span class="hits">4</span>
3383
-
3384
- <code class="ruby"> expires = @t + 1.year</code>
3385
- </li>
3386
-
3387
- <li class="covered" data-hits="4" data-linenumber="100">
3388
- <span class="hits">4</span>
3389
-
3390
- <code class="ruby"> {:value =&gt; value.join(&#39;.&#39;), :expires =&gt; expires}</code>
3391
- </li>
3392
-
3393
- <li class="never" data-hits="" data-linenumber="101">
3394
-
3395
-
3396
- <code class="ruby"> end</code>
3397
- </li>
3398
-
3399
- <li class="never" data-hits="" data-linenumber="102">
3400
-
3401
-
3402
- <code class="ruby"></code>
3403
- </li>
3404
-
3405
- <li class="covered" data-hits="1" data-linenumber="103">
3406
- <span class="hits">1</span>
3407
-
3408
- <code class="ruby"> def track(metric_name, metric_value)</code>
3409
- </li>
3410
-
3411
- <li class="covered" data-hits="38" data-linenumber="104">
3412
- <span class="hits">38</span>
3413
-
3414
- <code class="ruby"> n = 0</code>
3415
- </li>
3416
-
3417
- <li class="covered" data-hits="38" data-linenumber="105">
3418
- <span class="hits">38</span>
3419
-
3420
- <code class="ruby"> RedisAnalytics.redis_connection.hmset(&quot;#{@redis_key_prefix}#METRICS&quot;, metric_name, metric_value.class)</code>
3421
- </li>
3422
-
3423
- <li class="covered" data-hits="38" data-linenumber="106">
3424
- <span class="hits">38</span>
3425
-
3426
- <code class="ruby"> for_each_time_range(@t) do |ts|</code>
3427
- </li>
3428
-
3429
- <li class="covered" data-hits="190" data-linenumber="107">
3430
- <span class="hits">190</span>
3431
-
3432
- <code class="ruby"> key = &quot;#{@redis_key_prefix}#{metric_name}:#{ts}&quot;</code>
3433
- </li>
3434
-
3435
- <li class="covered" data-hits="190" data-linenumber="108">
3436
- <span class="hits">190</span>
3437
-
3438
- <code class="ruby"> if metric_value.is_a?(Fixnum)</code>
3439
- </li>
3440
-
3441
- <li class="covered" data-hits="75" data-linenumber="109">
3442
- <span class="hits">75</span>
3443
-
3444
- <code class="ruby"> n = RedisAnalytics.redis_connection.incrby(key, metric_value)</code>
3445
- </li>
3446
-
3447
- <li class="never" data-hits="" data-linenumber="110">
3448
-
3449
-
3450
- <code class="ruby"> else</code>
3451
- </li>
3452
-
3453
- <li class="covered" data-hits="115" data-linenumber="111">
3454
- <span class="hits">115</span>
3455
-
3456
- <code class="ruby"> n = RedisAnalytics.redis_connection.zincrby(key, 1, metric_value)</code>
3457
- </li>
3458
-
3459
- <li class="never" data-hits="" data-linenumber="112">
3460
-
3461
-
3462
- <code class="ruby"> end</code>
3463
- </li>
3464
-
3465
- <li class="never" data-hits="" data-linenumber="113">
3466
-
3467
-
3468
- <code class="ruby"> end</code>
3469
- </li>
3470
-
3471
- <li class="never" data-hits="" data-linenumber="114">
3472
-
3473
-
3474
- <code class="ruby"> # to debug, uncomment this line</code>
3475
- </li>
3476
-
3477
- <li class="never" data-hits="" data-linenumber="115">
3478
-
3479
-
3480
- <code class="ruby"> # puts &quot;TRACK #{metric_name} -&gt; #{n}&quot; </code>
3481
- </li>
3482
-
3483
- <li class="covered" data-hits="38" data-linenumber="116">
3484
- <span class="hits">38</span>
3485
-
3486
- <code class="ruby"> return n</code>
3487
- </li>
3488
-
3489
- <li class="never" data-hits="" data-linenumber="117">
3490
-
3491
-
3492
- <code class="ruby"> end</code>
3493
- </li>
3494
-
3495
- <li class="never" data-hits="" data-linenumber="118">
3496
-
3497
-
3498
- <code class="ruby"></code>
3499
- </li>
3500
-
3501
- <li class="never" data-hits="" data-linenumber="119">
3502
-
3503
-
3504
- <code class="ruby"> end</code>
3505
- </li>
3506
-
3507
- <li class="never" data-hits="" data-linenumber="120">
3508
-
3509
-
3510
- <code class="ruby">end</code>
3511
- </li>
3512
-
3513
- <li class="never" data-hits="" data-linenumber="121">
3514
-
3515
-
3516
- <code class="ruby"></code>
3517
- </li>
3518
-
3519
- </ol>
3520
- </pre>
3521
- </div>
3522
-
3523
- </div>
3524
- </div>
3525
- </body>
3526
- </html>