redis_analytics 0.6.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (291) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile.lock +159 -40
  3. data/{LICENSE → MIT-LICENSE} +0 -0
  4. data/README.md +54 -64
  5. data/TODO.md +1 -0
  6. data/app/controllers/redis_analytics/api_controller.rb +50 -0
  7. data/app/controllers/redis_analytics/application_controller.rb +4 -0
  8. data/app/controllers/redis_analytics/visits_controller.rb +9 -0
  9. data/app/helpers/redis_analytics/application_helper.rb +4 -0
  10. data/app/helpers/redis_analytics/visits_helper.rb +74 -0
  11. data/app/views/layouts/redis_analytics/application.html.erb +17 -0
  12. data/app/views/redis_analytics/application/_footer.html.erb +3 -0
  13. data/{lib/redis_analytics/dashboard/views/footer.erb → app/views/redis_analytics/application/_footer.html.erb~} +0 -0
  14. data/{lib/redis_analytics/dashboard/views/header.erb → app/views/redis_analytics/application/_header.html.erb} +1 -1
  15. data/{lib/redis_analytics/dashboard/views/widgets/bounce_rate.erb → app/views/redis_analytics/visits/_bounce_rate.html.erb} +1 -1
  16. data/{lib/redis_analytics/dashboard/views/widgets/browsers_donut.erb → app/views/redis_analytics/visits/_browsers_donut.html.erb} +1 -1
  17. data/{lib/redis_analytics/dashboard/views/widgets/first_visits.erb → app/views/redis_analytics/visits/_first_visits.html.erb} +1 -1
  18. data/{lib/redis_analytics/dashboard/views/widgets/page_depth.erb → app/views/redis_analytics/visits/_page_depth.html.erb} +1 -1
  19. data/{lib/redis_analytics/dashboard/views/widgets/referers_donut.erb → app/views/redis_analytics/visits/_referers_donut.html.erb} +0 -0
  20. data/{lib/redis_analytics/dashboard/views/widgets/total_page_views.erb → app/views/redis_analytics/visits/_total_page_views.html.erb} +1 -1
  21. data/{lib/redis_analytics/dashboard/views/widgets/total_visits.erb → app/views/redis_analytics/visits/_total_visits.html.erb} +1 -1
  22. data/app/views/redis_analytics/visits/_unique_visits_line.html.erb +26 -0
  23. data/{lib/redis_analytics/dashboard/views/widgets/unique_visits_line.erb → app/views/redis_analytics/visits/_unique_visits_line.html.erb~} +1 -1
  24. data/app/views/redis_analytics/visits/_visit_duration.html.erb +3 -0
  25. data/{lib/redis_analytics/dashboard/views/widgets/visit_spark.erb → app/views/redis_analytics/visits/_visit_spark.html.erb} +1 -1
  26. data/{lib/redis_analytics/dashboard/views/widgets/visitor_recency_slices.erb → app/views/redis_analytics/visits/_visitor_recency_slices.html.erb} +1 -1
  27. data/{lib/redis_analytics/dashboard/views/widgets/visits_area.erb → app/views/redis_analytics/visits/_visits_area.html.erb} +2 -2
  28. data/{lib/redis_analytics/dashboard/views/widgets/visits_donut.erb → app/views/redis_analytics/visits/_visits_donut.html.erb} +0 -0
  29. data/{lib/redis_analytics/dashboard/views/visits_js.erb → app/views/redis_analytics/visits/_visits_js.html.erb} +13 -10
  30. data/{lib/redis_analytics/dashboard/views/widgets/world_map.erb → app/views/redis_analytics/visits/_world_map.html.erb} +1 -1
  31. data/app/views/redis_analytics/visits/index.html.erb +69 -0
  32. data/{lib/redis_analytics/dashboard/views/visits.erb → app/views/redis_analytics/visits/index.html.erb~} +0 -0
  33. data/bin/GeoIP.dat +0 -0
  34. data/config.ru +2 -2
  35. data/config/routes.rb +5 -0
  36. data/coverage/assets/0.8.0/application.css +799 -0
  37. data/coverage/assets/0.8.0/application.js +1559 -0
  38. data/coverage/assets/0.8.0/colorbox/border.png +0 -0
  39. data/coverage/assets/0.8.0/colorbox/controls.png +0 -0
  40. data/coverage/assets/0.8.0/colorbox/loading.gif +0 -0
  41. data/coverage/assets/0.8.0/colorbox/loading_background.png +0 -0
  42. data/coverage/assets/0.8.0/favicon_green.png +0 -0
  43. data/coverage/assets/0.8.0/favicon_red.png +0 -0
  44. data/coverage/assets/0.8.0/favicon_yellow.png +0 -0
  45. data/coverage/assets/0.8.0/loading.gif +0 -0
  46. data/coverage/assets/0.8.0/magnify.png +0 -0
  47. data/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  48. data/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  49. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  50. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  51. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  52. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  53. data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  54. data/coverage/assets/0.8.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  55. data/coverage/assets/0.8.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
  56. data/coverage/assets/0.8.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  57. data/coverage/assets/0.8.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
  58. data/coverage/assets/0.8.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
  59. data/coverage/assets/0.8.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  60. data/coverage/index.html +3484 -0
  61. data/lib/redis_analytics.rb +5 -12
  62. data/lib/redis_analytics/configuration.rb +2 -3
  63. data/lib/redis_analytics/engine.rb +18 -0
  64. data/lib/redis_analytics/filter.rb +1 -2
  65. data/lib/redis_analytics/helpers.rb +1 -2
  66. data/lib/redis_analytics/metrics.rb +1 -2
  67. data/lib/redis_analytics/time_ext.rb +0 -76
  68. data/lib/redis_analytics/tracker.rb +35 -24
  69. data/lib/redis_analytics/version.rb +2 -3
  70. data/lib/redis_analytics/visit.rb +4 -5
  71. data/lib/tasks/redis_analytics_tasks.rake +4 -0
  72. data/redis_analytics.gemspec +20 -20
  73. data/script/rails +8 -0
  74. data/spec/lib/redis_analytics/analytics_spec.rb +0 -59
  75. data/spec/lib/redis_analytics/configuration_spec.rb +19 -19
  76. data/spec/lib/redis_analytics/{dashboard_spec.rb → engine_spec.rb} +2 -8
  77. data/spec/lib/redis_analytics/filter_spec.rb +4 -4
  78. data/spec/lib/redis_analytics/tracker_spec.rb +45 -6
  79. data/spec/spec_helper.rb +2 -2
  80. data/test/dummy/README.rdoc +261 -0
  81. data/test/dummy/Rakefile +7 -0
  82. data/test/dummy/app/assets/javascripts/application.js +15 -0
  83. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  84. data/test/dummy/app/controllers/application_controller.rb +3 -0
  85. data/test/dummy/app/helpers/application_helper.rb +2 -0
  86. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  87. data/test/dummy/config.ru +4 -0
  88. data/test/dummy/config/application.rb +67 -0
  89. data/test/dummy/config/boot.rb +10 -0
  90. data/test/dummy/config/database.yml +25 -0
  91. data/test/dummy/config/environment.rb +5 -0
  92. data/test/dummy/config/environments/development.rb +37 -0
  93. data/test/dummy/config/environments/production.rb +67 -0
  94. data/test/dummy/config/environments/test.rb +37 -0
  95. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  96. data/test/dummy/config/initializers/inflections.rb +15 -0
  97. data/test/dummy/config/initializers/mime_types.rb +5 -0
  98. data/test/dummy/config/initializers/secret_token.rb +7 -0
  99. data/test/dummy/config/initializers/session_store.rb +8 -0
  100. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  101. data/test/dummy/config/locales/en.yml +5 -0
  102. data/test/dummy/config/routes.rb +4 -0
  103. data/test/dummy/db/development.sqlite3 +0 -0
  104. data/test/dummy/db/production.sqlite3 +0 -0
  105. data/test/dummy/log/development.log +1605 -0
  106. data/test/dummy/log/production.log +882 -0
  107. data/test/dummy/public/404.html +26 -0
  108. data/test/dummy/public/422.html +26 -0
  109. data/test/dummy/public/500.html +25 -0
  110. data/test/dummy/public/assets/application-ac39e235d42f60499cd65a4b78076ba3.css +14 -0
  111. data/test/dummy/public/assets/application-ac39e235d42f60499cd65a4b78076ba3.css.gz +0 -0
  112. data/test/dummy/public/assets/application-c900658d554ff9f314a2e1b97cd68997.js +10752 -0
  113. data/test/dummy/public/assets/application-c900658d554ff9f314a2e1b97cd68997.js.gz +0 -0
  114. data/test/dummy/public/assets/manifest-5bcba723c313582b1d428fc3bf592b29.json +1 -0
  115. data/test/dummy/public/favicon.ico +0 -0
  116. data/test/dummy/script/rails +6 -0
  117. data/test/dummy/tmp/cache/assets/C86/E20/sprockets%2F04d6293b6d7c30b20475e886dc634936 +0 -0
  118. data/test/dummy/tmp/cache/assets/C88/400/sprockets%2F1bb834b9f3b720193591960cf7f31497 +0 -0
  119. data/test/dummy/tmp/cache/assets/C8D/800/sprockets%2Fb484d3480591b77bf84376f1f41a6457 +0 -0
  120. data/test/dummy/tmp/cache/assets/C97/230/sprockets%2Ff8c56a6d1d5685424871464fc480f956 +0 -0
  121. data/test/dummy/tmp/cache/assets/C98/560/sprockets%2Ff14a2366122e6017b965b32290b8abb0 +0 -0
  122. data/test/dummy/tmp/cache/assets/CAE/7D0/sprockets%2F1f0b25ca08195d3582e4fe04396e9270 +0 -0
  123. data/test/dummy/tmp/cache/assets/CB9/550/sprockets%2F0505a9fb5602a3fae429f389832747d8 +0 -0
  124. data/test/dummy/tmp/cache/assets/CBA/030/sprockets%2F510aa1c63fe533f77a197367b79f2919 +0 -0
  125. data/test/dummy/tmp/cache/assets/CBC/630/sprockets%2F8fca8928788707a4ba625519ab402d58 +0 -0
  126. data/test/dummy/tmp/cache/assets/CC6/EE0/sprockets%2Fb6d3cc91f7b3559f985a978176b44324 +0 -0
  127. data/test/dummy/tmp/cache/assets/CC9/9C0/sprockets%2F84294e9b30cf387e6d8a35f82616a796 +0 -0
  128. data/test/dummy/tmp/cache/assets/CDA/880/sprockets%2F6b1913c56c962748122caf34704afdb5 +0 -0
  129. data/test/dummy/tmp/cache/assets/CDD/BF0/sprockets%2F1f5080b606781094922ecaccd9d508f2 +0 -0
  130. data/test/dummy/tmp/cache/assets/CF0/BB0/sprockets%2F48cd49adc4f96c8324c46c45641b6865 +0 -0
  131. data/test/dummy/tmp/cache/assets/CFE/380/sprockets%2F8e8d04799794da144a9907a9f82e0cf8 +0 -0
  132. data/test/dummy/tmp/cache/assets/D06/470/sprockets%2F2e9124aa82b45552ba5a8307f4f16a8e +0 -0
  133. data/test/dummy/tmp/cache/assets/D06/B80/sprockets%2Fb658eb46471a1b356c0e13962f1a52ee +0 -0
  134. data/test/dummy/tmp/cache/assets/D07/520/sprockets%2F0176f74cb205f694569fa21a53b2fa0e +0 -0
  135. data/test/dummy/tmp/cache/assets/D0A/3C0/sprockets%2F8fd1601c6d442f22a88d0e43bb87117f +0 -0
  136. data/test/dummy/tmp/cache/assets/D10/130/sprockets%2F7af0bd97720d268b9835405c8bae2d06 +0 -0
  137. data/test/dummy/tmp/cache/assets/D15/450/sprockets%2Fae3344670b608424cdc864eca5496fb9 +0 -0
  138. data/test/dummy/tmp/cache/assets/D16/7F0/sprockets%2F73d738bf9b779ad016ed62131d85cc16 +0 -0
  139. data/test/dummy/tmp/cache/assets/D16/A30/sprockets%2F23659e6e2161bb90c6f382ecbef73906 +0 -0
  140. data/test/dummy/tmp/cache/assets/D2B/060/sprockets%2Fd5891eb52eb6329a928461796e9ddfe5 +0 -0
  141. data/test/dummy/tmp/cache/assets/D32/810/sprockets%2F640ab72cec151bc94248b091f6b763bb +0 -0
  142. data/test/dummy/tmp/cache/assets/D37/C50/sprockets%2F00afdaa74ea16690227f771ae0879e1c +0 -0
  143. data/test/dummy/tmp/cache/assets/D39/A80/sprockets%2Ff850350eb319d86a5e0c02c2279cffa5 +0 -0
  144. data/test/dummy/tmp/cache/assets/D3F/170/sprockets%2F3b7a50f2bb29ad782e0352fc784d582f +0 -0
  145. data/test/dummy/tmp/cache/assets/D54/280/sprockets%2F8e51b269010978fe78fa369f6dfa1bf6 +0 -0
  146. data/test/dummy/tmp/cache/assets/D5C/120/sprockets%2F6b74e64b0422b8c574caba3a1746acd2 +0 -0
  147. data/test/dummy/tmp/cache/assets/D5D/E00/sprockets%2Fee3d10401f2a2d4a84f4fe56181fe1c1 +0 -0
  148. data/test/dummy/tmp/cache/assets/D68/310/sprockets%2Fa6108a4fca3b4012f99dcf46e24f5f60 +0 -0
  149. data/test/dummy/tmp/cache/assets/D6C/8C0/sprockets%2F06e1e915faab12cbf879a6b15b9136e7 +0 -0
  150. data/test/dummy/tmp/cache/assets/D70/310/sprockets%2Fab142f83166b2fc048379c9dfddd355a +0 -0
  151. data/test/dummy/tmp/cache/assets/D74/9F0/sprockets%2F59ed8bd7c6ca0dbe0f1921ee14667375 +0 -0
  152. data/test/dummy/tmp/cache/assets/D76/270/sprockets%2F006a046ae88edf3f8c84dc30ef8056d8 +0 -0
  153. data/test/dummy/tmp/cache/assets/D82/590/sprockets%2Fa6f6f970aa669d95690af983eb2b6a5c +0 -0
  154. data/test/dummy/tmp/cache/assets/D8D/440/sprockets%2F486b3eff5dce57385a599ef92be18c65 +0 -0
  155. data/test/dummy/tmp/cache/assets/D93/FF0/sprockets%2Fd06dd1928f37e37a29edb4dbaeb20403 +0 -0
  156. data/test/dummy/tmp/cache/assets/D99/350/sprockets%2F31bdb7fc1c62c06d71678d04fd0db9b8 +0 -0
  157. data/test/dummy/tmp/cache/assets/D9C/070/sprockets%2F9be5d5a71da06ce64d0ed17b3937e15d +0 -0
  158. data/test/dummy/tmp/cache/assets/D9E/5B0/sprockets%2Fd3f2f56488b7ac4890a2ad0bfef7c322 +0 -0
  159. data/test/dummy/tmp/cache/assets/DA4/020/sprockets%2F0fc75dd594e2c890f93a6dcd7332aaa8 +0 -0
  160. data/test/dummy/tmp/cache/assets/DA4/6B0/sprockets%2F17a2e22cd7356ee86da5d99f0a08bbf7 +0 -0
  161. data/test/dummy/tmp/cache/assets/DA5/470/sprockets%2Fa49ebde3ec35e12d52892e188a5cfd90 +0 -0
  162. data/test/dummy/tmp/cache/assets/DA6/D90/sprockets%2Fe3d875d9f2fb7341ae0e31f64c90e6bf +0 -0
  163. data/test/dummy/tmp/cache/assets/DA7/CA0/sprockets%2F0a03bffc91afd8872e8986daf8a2309b +0 -0
  164. data/test/dummy/tmp/cache/assets/DAD/FC0/sprockets%2F9b6809cd65f83a6bfaee80543f9e0ab7 +0 -0
  165. data/test/dummy/tmp/cache/assets/DC4/410/sprockets%2F7c23fbd015fe022d7eed035b4ff3a59c +0 -0
  166. data/test/dummy/tmp/cache/assets/DCB/CA0/sprockets%2F940121ecc7ae38abf79cc78efadf2212 +0 -0
  167. data/test/dummy/tmp/cache/assets/DCC/C10/sprockets%2F7cb37eb6b6ca3028ffd5c5420d8d7fc1 +0 -0
  168. data/test/dummy/tmp/cache/assets/DCD/4E0/sprockets%2Fcff1de305ed821d80d98f4cafa27414d +0 -0
  169. data/test/dummy/tmp/cache/assets/E07/1E0/sprockets%2Fd79ac6cbbaf490e5a3f09ab8288d3c9e +0 -0
  170. data/test/dummy/tmp/cache/assets/E39/680/sprockets%2F1e91e9837edc18aeeaf8df3c82f2af0e +0 -0
  171. data/test/dummy/tmp/cache/assets/E56/670/sprockets%2Fbd0e4d12cea996e0d2eebaa879a17eca +0 -0
  172. data/test/dummy/tmp/cache/assets/E57/150/sprockets%2Fdfa6edddd9357edcafaf06c20d21e561 +0 -0
  173. data/test/dummy/tmp/cache/assets/E5B/2B0/sprockets%2Ffebbeb2ea0bcd485bf5b9bd6190b9f44 +0 -0
  174. data/test/dummy/tmp/cache/assets/development/sprockets/006eb7cc017cf18c3ea32cab97f0cc3c +0 -0
  175. data/test/dummy/tmp/cache/assets/development/sprockets/00afdaa74ea16690227f771ae0879e1c +0 -0
  176. data/test/dummy/tmp/cache/assets/development/sprockets/0125613fec11977628d50d4198ef25f3 +0 -0
  177. data/test/dummy/tmp/cache/assets/development/sprockets/04d6293b6d7c30b20475e886dc634936 +0 -0
  178. data/test/dummy/tmp/cache/assets/development/sprockets/0c6b5095a86cd9aa4d15f4258a08f315 +0 -0
  179. data/test/dummy/tmp/cache/assets/development/sprockets/17a2e22cd7356ee86da5d99f0a08bbf7 +0 -0
  180. data/test/dummy/tmp/cache/assets/development/sprockets/192691b9e0bedebfde12633bb3629d0b +0 -0
  181. data/test/dummy/tmp/cache/assets/development/sprockets/1e91e9837edc18aeeaf8df3c82f2af0e +0 -0
  182. data/test/dummy/tmp/cache/assets/development/sprockets/1f0b25ca08195d3582e4fe04396e9270 +0 -0
  183. data/test/dummy/tmp/cache/assets/development/sprockets/23659e6e2161bb90c6f382ecbef73906 +0 -0
  184. data/test/dummy/tmp/cache/assets/development/sprockets/23b9bf2d5f9b45144a2803844eaa826e +0 -0
  185. data/test/dummy/tmp/cache/assets/development/sprockets/243cc575289b3170af701574d19d6353 +0 -0
  186. data/test/dummy/tmp/cache/assets/development/sprockets/24abc0717cf109a24278323c0d6756a0 +0 -0
  187. data/test/dummy/tmp/cache/assets/development/sprockets/2b6cc5f28a12c36cd4095832a5107969 +0 -0
  188. data/test/dummy/tmp/cache/assets/development/sprockets/326592f095651b767387e7c1d2b01dfe +0 -0
  189. data/test/dummy/tmp/cache/assets/development/sprockets/3bb822a002a8951f71e53f450090799b +0 -0
  190. data/test/dummy/tmp/cache/assets/development/sprockets/3f91dad02acd15d7437b62ddca53c58b +0 -0
  191. data/test/dummy/tmp/cache/assets/development/sprockets/486b3eff5dce57385a599ef92be18c65 +0 -0
  192. data/test/dummy/tmp/cache/assets/development/sprockets/48cd49adc4f96c8324c46c45641b6865 +0 -0
  193. data/test/dummy/tmp/cache/assets/development/sprockets/4b5d99d538ae32ad329cb37e413dbacc +0 -0
  194. data/test/dummy/tmp/cache/assets/development/sprockets/4e89e9cec1b5e275bfeb078a9abfef44 +0 -0
  195. data/test/dummy/tmp/cache/assets/development/sprockets/510aa1c63fe533f77a197367b79f2919 +0 -0
  196. data/test/dummy/tmp/cache/assets/development/sprockets/5cf60638cb580f41112a5a83eb3b72ef +0 -0
  197. data/test/dummy/tmp/cache/assets/development/sprockets/5dfbbe7f012f6cb7c29b1298cd9ff406 +0 -0
  198. data/test/dummy/tmp/cache/assets/development/sprockets/640ab72cec151bc94248b091f6b763bb +0 -0
  199. data/test/dummy/tmp/cache/assets/development/sprockets/6760a9b2947edeec5433ca0ff9d7a295 +0 -0
  200. data/test/dummy/tmp/cache/assets/development/sprockets/6b74e64b0422b8c574caba3a1746acd2 +0 -0
  201. data/test/dummy/tmp/cache/assets/development/sprockets/6c2f18f7338d56feecce32780357521c +0 -0
  202. data/test/dummy/tmp/cache/assets/development/sprockets/6f292799ddb92a69f64c5a60c921a2d6 +0 -0
  203. data/test/dummy/tmp/cache/assets/development/sprockets/731ed4a2128ad4c7240bb520611c8404 +0 -0
  204. data/test/dummy/tmp/cache/assets/development/sprockets/73d738bf9b779ad016ed62131d85cc16 +0 -0
  205. data/test/dummy/tmp/cache/assets/development/sprockets/7477fb841e65b8c9c48c40c13935a851 +0 -0
  206. data/test/dummy/tmp/cache/assets/development/sprockets/77412054774bd02630c93c1e8ac6b26a +0 -0
  207. data/test/dummy/tmp/cache/assets/development/sprockets/7751914469530dae0646d92467e9d72e +0 -0
  208. data/test/dummy/tmp/cache/assets/development/sprockets/794a40bf52fa0deda8b4e5efa8ac523a +0 -0
  209. data/test/dummy/tmp/cache/assets/development/sprockets/7af0bd97720d268b9835405c8bae2d06 +0 -0
  210. data/test/dummy/tmp/cache/assets/development/sprockets/82ecc84179ce77914906a81d29b483cf +0 -0
  211. data/test/dummy/tmp/cache/assets/development/sprockets/8d62150b658b3a8b6fed7e8951f52392 +0 -0
  212. data/test/dummy/tmp/cache/assets/development/sprockets/8e51b269010978fe78fa369f6dfa1bf6 +0 -0
  213. data/test/dummy/tmp/cache/assets/development/sprockets/8e8d04799794da144a9907a9f82e0cf8 +0 -0
  214. data/test/dummy/tmp/cache/assets/development/sprockets/8ea331810c31cbe1ba34b91a02f769e7 +0 -0
  215. data/test/dummy/tmp/cache/assets/development/sprockets/8fd1601c6d442f22a88d0e43bb87117f +0 -0
  216. data/test/dummy/tmp/cache/assets/development/sprockets/953bc37b1ee0915247dba29773960202 +0 -0
  217. data/test/dummy/tmp/cache/assets/development/sprockets/978f6f32b21b72d3e89b0c0f6f3a4a83 +0 -0
  218. data/test/dummy/tmp/cache/assets/development/sprockets/994386d11af17e88b6d107b83f41f8b5 +0 -0
  219. data/test/dummy/tmp/cache/assets/development/sprockets/9b077a68a557a208cf34297edadebdd2 +0 -0
  220. data/test/dummy/tmp/cache/assets/development/sprockets/9b54afa4ef026f4c288feeec49f2f526 +0 -0
  221. data/test/dummy/tmp/cache/assets/development/sprockets/9b6809cd65f83a6bfaee80543f9e0ab7 +0 -0
  222. data/test/dummy/tmp/cache/assets/development/sprockets/9be5d5a71da06ce64d0ed17b3937e15d +0 -0
  223. data/test/dummy/tmp/cache/assets/development/sprockets/a29d0dc527ff5ce1252ccf6370514620 +0 -0
  224. data/test/dummy/tmp/cache/assets/development/sprockets/a49ebde3ec35e12d52892e188a5cfd90 +0 -0
  225. data/test/dummy/tmp/cache/assets/development/sprockets/a6108a4fca3b4012f99dcf46e24f5f60 +0 -0
  226. data/test/dummy/tmp/cache/assets/development/sprockets/aad6778bf60f6f1919628606c92cfd6f +0 -0
  227. data/test/dummy/tmp/cache/assets/development/sprockets/ab142f83166b2fc048379c9dfddd355a +0 -0
  228. data/test/dummy/tmp/cache/assets/development/sprockets/ae3344670b608424cdc864eca5496fb9 +0 -0
  229. data/test/dummy/tmp/cache/assets/development/sprockets/b01583a39abd5ce0a3d2b2967c6f75bd +0 -0
  230. data/test/dummy/tmp/cache/assets/development/sprockets/b2780e7c581a2f0cb1d61346c6d1c1cd +0 -0
  231. data/test/dummy/tmp/cache/assets/development/sprockets/b3f0354298e8a43af381a6e42a03f0bc +0 -0
  232. data/test/dummy/tmp/cache/assets/development/sprockets/b52b477f01cb65c5e1c6a91f6f0be20c +0 -0
  233. data/test/dummy/tmp/cache/assets/development/sprockets/b6fbc3e4c5191de2cc58174a3eeb7cfc +0 -0
  234. data/test/dummy/tmp/cache/assets/development/sprockets/bb39143b57041f96c48b71e92f7e09f2 +0 -0
  235. data/test/dummy/tmp/cache/assets/development/sprockets/be0b9e741941205338510e296868aab2 +0 -0
  236. data/test/dummy/tmp/cache/assets/development/sprockets/c9e69990b1552b575b271aaabbfc4eb5 +0 -0
  237. data/test/dummy/tmp/cache/assets/development/sprockets/c9eeea792acbd377e29de43d6b491291 +0 -0
  238. data/test/dummy/tmp/cache/assets/development/sprockets/cb67795d1180b371b5b749662b9adefb +0 -0
  239. data/test/dummy/tmp/cache/assets/development/sprockets/cfdf466647e83eb93e0d6630e4b51a25 +0 -0
  240. data/test/dummy/tmp/cache/assets/development/sprockets/cff1de305ed821d80d98f4cafa27414d +0 -0
  241. data/test/dummy/tmp/cache/assets/development/sprockets/d5891eb52eb6329a928461796e9ddfe5 +0 -0
  242. data/test/dummy/tmp/cache/assets/development/sprockets/d7491740e7757fe2ec57fd6d25461e5c +0 -0
  243. data/test/dummy/tmp/cache/assets/development/sprockets/d80f54242a6e7f4399481b7357d439a4 +0 -0
  244. data/test/dummy/tmp/cache/assets/development/sprockets/df16db3bfcc56fafc73b853b7999be1f +0 -0
  245. data/test/dummy/tmp/cache/assets/development/sprockets/dfa6edddd9357edcafaf06c20d21e561 +0 -0
  246. data/test/dummy/tmp/cache/assets/development/sprockets/e3d875d9f2fb7341ae0e31f64c90e6bf +0 -0
  247. data/test/dummy/tmp/cache/assets/development/sprockets/e7bd439b274a2155050b47e5a64ea72d +0 -0
  248. data/test/dummy/tmp/cache/assets/development/sprockets/ee3d10401f2a2d4a84f4fe56181fe1c1 +0 -0
  249. data/test/dummy/tmp/cache/assets/development/sprockets/f14a2366122e6017b965b32290b8abb0 +0 -0
  250. data/test/dummy/tmp/cache/assets/development/sprockets/f9a412f49281cc7e6512f0787f7ba05f +0 -0
  251. data/test/dummy/tmp/cache/assets/development/sprockets/febbeb2ea0bcd485bf5b9bd6190b9f44 +0 -0
  252. data/test/dummy/tmp/cache/assets/production/sprockets/00afdaa74ea16690227f771ae0879e1c +0 -0
  253. data/test/dummy/tmp/cache/assets/production/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  254. data/test/dummy/tmp/cache/assets/production/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  255. data/test/dummy/tmp/cache/assets/production/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  256. data/test/dummy/tmp/cache/assets/production/sprockets/73d738bf9b779ad016ed62131d85cc16 +0 -0
  257. data/test/dummy/tmp/cache/assets/production/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  258. data/test/dummy/tmp/cache/assets/production/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  259. data/test/dummy/tmp/cache/assets/production/sprockets/dfa6edddd9357edcafaf06c20d21e561 +0 -0
  260. data/test/dummy/tmp/cache/assets/production/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  261. data/test/dummy/tmp/cache/assets/production/sprockets/febbeb2ea0bcd485bf5b9bd6190b9f44 +0 -0
  262. data/test/integration/navigation_test.rb +10 -0
  263. data/test/redis_analytics_test.rb +7 -0
  264. data/test/test_helper.rb +15 -0
  265. data/{lib/redis_analytics/dashboard/public/javascripts/vendor/bootstrap → vendor/assets/javascripts/redis_analytics}/bootstrap.min.js +0 -0
  266. data/vendor/assets/javascripts/redis_analytics/engine.js +15 -0
  267. data/{lib/redis_analytics/dashboard/public/javascripts/vendor → vendor/assets/javascripts/redis_analytics}/jquery-jvectormap-1.2.2.min.js +0 -0
  268. data/{lib/redis_analytics/dashboard/public/javascripts/vendor → vendor/assets/javascripts/redis_analytics}/jquery-jvectormap-world-mill-en.js +0 -0
  269. data/{lib/redis_analytics/dashboard/public/javascripts/vendor → vendor/assets/javascripts/redis_analytics}/morris.min.js +0 -0
  270. data/{lib/redis_analytics/dashboard/public/javascripts/vendor → vendor/assets/javascripts/redis_analytics}/raphael-min.js +0 -0
  271. data/{lib/redis_analytics/dashboard/public/css → vendor/assets/stylesheets/redis_analytics}/bootstrap-responsive.min.css +0 -0
  272. data/{lib/redis_analytics/dashboard/public/css → vendor/assets/stylesheets/redis_analytics}/bootstrap.min.css +0 -0
  273. data/vendor/assets/stylesheets/redis_analytics/engine.css +12 -0
  274. data/{lib/redis_analytics/dashboard/public/css → vendor/assets/stylesheets/redis_analytics}/jquery-jvectormap-1.2.2.css +0 -0
  275. data/{lib/redis_analytics/dashboard/public/css → vendor/assets/stylesheets/redis_analytics}/morris.css +0 -0
  276. metadata +307 -122
  277. data/bin/redis_analytics_dashboard +0 -17
  278. data/lib/redis_analytics/analytics.rb +0 -45
  279. data/lib/redis_analytics/api.rb +0 -60
  280. data/lib/redis_analytics/dashboard.rb +0 -53
  281. data/lib/redis_analytics/dashboard/public/img/favicon.ico +0 -0
  282. data/lib/redis_analytics/dashboard/public/img/glyphicons-halflings-white.png +0 -0
  283. data/lib/redis_analytics/dashboard/public/img/glyphicons-halflings.png +0 -0
  284. data/lib/redis_analytics/dashboard/public/javascripts/vendor/jquery-1.9.1.min.js +0 -5
  285. data/lib/redis_analytics/dashboard/views/activity.erb +0 -7
  286. data/lib/redis_analytics/dashboard/views/dialogs/unique_visits.erb +0 -41
  287. data/lib/redis_analytics/dashboard/views/dialogs/visits.erb +0 -40
  288. data/lib/redis_analytics/dashboard/views/layout.erb +0 -16
  289. data/lib/redis_analytics/dashboard/views/widgets/visit_duration.erb +0 -3
  290. data/lib/redis_analytics/railtie.rb +0 -13
  291. data/wsd.png +0 -0
@@ -1,26 +1,19 @@
1
- require 'rack'
2
1
  require 'redis'
3
2
  require 'browser'
4
- require 'sinatra'
5
3
  require 'geoip'
6
4
 
7
5
  require 'redis_analytics'
6
+
8
7
  require 'redis_analytics/version'
8
+ require 'redis_analytics/time_ext'
9
9
  require 'redis_analytics/filter'
10
10
  require 'redis_analytics/configuration'
11
- require 'redis_analytics/analytics'
12
11
  require 'redis_analytics/metrics'
13
12
  require 'redis_analytics/visit'
14
- require 'redis_analytics/time_ext'
15
13
  require 'redis_analytics/helpers'
16
- require 'redis_analytics/api'
17
- require 'redis_analytics/dashboard'
18
-
19
14
  require 'redis_analytics/tracker'
20
- require 'redis_analytics/railtie' if defined? Rails::Railtie
15
+ require 'redis_analytics/engine'
21
16
 
22
- module Rack
23
- module RedisAnalytics
24
- extend Configuration
25
- end
17
+ module RedisAnalytics
18
+ extend Configuration
26
19
  end
@@ -1,4 +1,3 @@
1
- module Rack
2
1
  module RedisAnalytics
3
2
  module Configuration
4
3
  # Redis connection instance
@@ -36,7 +35,7 @@ module Rack
36
35
 
37
36
  # Minutes the visit should timeout after (if no hit is received)
38
37
  def visit_timeout
39
- @visit_timeout ||= 1 # minutes
38
+ @visit_timeout ||= 30 # minutes
40
39
  end
41
40
 
42
41
  # Name of the cookie which tracks first visitors (unknown visitors)
@@ -99,4 +98,4 @@ module Rack
99
98
 
100
99
  end
101
100
  end
102
- end
101
+
@@ -0,0 +1,18 @@
1
+ require 'rails'
2
+ require 'jquery-rails'
3
+
4
+ module RedisAnalytics
5
+ module Dashboard
6
+ class Engine < ::Rails::Engine
7
+ isolate_namespace RedisAnalytics
8
+
9
+ initializer "redis_analytics.middleware" do |app|
10
+ app.config.app_middleware.use "RedisAnalytics::Tracker"
11
+ end
12
+
13
+ initializer "redis_analytics.view_helpers" do |app|
14
+ ActionController::Base.send :include, RedisAnalytics::Helpers
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,4 +1,3 @@
1
- module Rack
2
1
  module RedisAnalytics
3
2
  class Filter
4
3
  attr_reader :filter_proc
@@ -30,4 +29,4 @@ module Rack
30
29
  end
31
30
 
32
31
  end
33
- end
32
+
@@ -1,4 +1,3 @@
1
- module Rack
2
1
  module RedisAnalytics
3
2
  module Helpers
4
3
 
@@ -72,4 +71,4 @@ module Rack
72
71
  end
73
72
  end
74
73
  end
75
- end
74
+
@@ -1,4 +1,3 @@
1
- module Rack
2
1
  module RedisAnalytics
3
2
  module Metrics
4
3
 
@@ -93,4 +92,4 @@ module Rack
93
92
 
94
93
  end
95
94
  end
96
- end
95
+
@@ -1,47 +1,5 @@
1
1
  require 'date'
2
2
  module TimeExtensions
3
- %w[ round floor ceil ].each do |_method|
4
- define_method _method do |*args|
5
- seconds = args.first || 60
6
- Time.at((self.to_f / seconds).send(_method) * seconds)
7
- end
8
- end
9
-
10
- def end_of_year
11
- Time.local(self.year, 12, 31, 23, 59, 59)
12
- end
13
-
14
- def beginning_of_year
15
- Time.local(self.year, 1, 1, 0, 0, 0)
16
- end
17
-
18
- def end_of_month
19
- Time.local(self.year, self.mon + 1, 1, 23, 59, 59) - 1.day
20
- end
21
-
22
- def beginning_of_month
23
- Date.civil(self.year, self.mon, -1).to_time
24
- end
25
-
26
- def beginning_of_day
27
- Time.local(self.year, self.mon, self.day, 0, 0, 0)
28
- end
29
-
30
- def end_of_day
31
- Time.local(self.year, self.mon, self.day, 23, 59, 59)
32
- end
33
-
34
- def beginning_of_day
35
- Time.local(self.year, self.mon, self.day, 0, 0, 0)
36
- end
37
-
38
- def end_of_hour
39
- Time.local(self.year, self.mon, self.day, self.hour, 59, 59)
40
- end
41
-
42
- def beginning_of_hour
43
- Time.local(self.year, self.mon, self.day, self.hour, 0, 0)
44
- end
45
3
 
46
4
  def end_of_minute
47
5
  Time.local(self.year, self.mon, self.day, self.hour, self.min, 59)
@@ -53,37 +11,3 @@ module TimeExtensions
53
11
  end
54
12
 
55
13
  Time.send :include, TimeExtensions
56
-
57
- module FixnumExtensions
58
-
59
- def minute
60
- self * 60
61
- end
62
-
63
- def hour
64
- minute * 60
65
- end
66
-
67
- def day
68
- hour * 24
69
- end
70
-
71
- def week
72
- day * 7
73
- end
74
-
75
- def month
76
- day * 30
77
- end
78
-
79
- def year
80
- day * 365
81
- end
82
-
83
- def ago(time = Time.now)
84
- time - self
85
- end
86
- end
87
-
88
- Fixnum.send :include, FixnumExtensions
89
-
@@ -1,34 +1,45 @@
1
- module Rack
2
- module RedisAnalytics
3
- class Tracker
1
+ # -*- coding: utf-8 -*-
2
+ require 'digest/md5'
3
+ module RedisAnalytics
4
+ class Tracker
4
5
 
5
- def initialize(app)
6
- @app = Rack::Builder.new do
7
-
8
- if defined?(Dashboard) and RedisAnalytics.dashboard_endpoint
9
- puts("WARNING: RedisAnalytics.dashboard_endpoint is set as \"/\"") if RedisAnalytics.dashboard_endpoint == '/'
10
- map RedisAnalytics.dashboard_endpoint do
11
- run Dashboard.new
12
- end
13
- end
6
+ def initialize(app)
7
+ @app = app
8
+ end
14
9
 
15
- map '/' do
16
- run Analytics.new(app)
17
- end
10
+ def call(env)
11
+ dup.call!(env)
12
+ end
18
13
 
19
- if defined?(Api) and RedisAnalytics.api_endpoint
20
- map RedisAnalytics.api_endpoint do
21
- run Api.new
22
- end
23
- end
14
+ def call!(env)
15
+ @env = env
16
+ @request = Rack::Request.new(env)
17
+ status, headers, body = @app.call(env)
18
+ @response = Rack::Response.new(body, status, headers)
19
+ record if should_record?
20
+ @response.finish
21
+ end
24
22
 
25
- end
23
+ def should_record?
24
+ dashboard_path = Rails.application.routes.named_routes[:redis_analytics].path rescue nil
25
+ return false if dashboard_path =~ @request.path
26
+ return false unless @response.ok?
27
+ return false unless @response.content_type =~ /^text\/html/
28
+ RedisAnalytics.path_filters.each do |filter|
29
+ return false if filter.matches?(@request.path)
26
30
  end
27
-
28
- def call(env)
29
- @app.call(env)
31
+ RedisAnalytics.filters.each do |filter|
32
+ return false if filter.matches?(@request, @response)
30
33
  end
34
+ return true
35
+ end
31
36
 
37
+ def record
38
+ v = Visit.new(@request, @response)
39
+ @response = v.record
40
+ @response.set_cookie(RedisAnalytics.current_visit_cookie_name, v.updated_current_visit_info)
41
+ @response.set_cookie(RedisAnalytics.first_visit_cookie_name, v.updated_first_visit_info)
32
42
  end
43
+
33
44
  end
34
45
  end
@@ -1,5 +1,4 @@
1
- module Rack
2
1
  module RedisAnalytics
3
- VERSION = '0.6.0'
2
+ VERSION = '0.7.1'
4
3
  end
5
- end
4
+
@@ -1,4 +1,3 @@
1
- module Rack
2
1
  module RedisAnalytics
3
2
  class Visit
4
3
  include Metrics
@@ -54,7 +53,7 @@ module Rack
54
53
  else
55
54
  @first_visit_seq ||= counter("unique_visits")
56
55
  track("first_visits", 1)
57
- track("unique_visits", @first_visit_seq)
56
+ track("unique_visits", 1)
58
57
  end
59
58
  exec_custom_methods('visit') # custom methods that are measured on a per-visit basis
60
59
  end
@@ -89,7 +88,7 @@ module Rack
89
88
  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]
90
89
  # to debug, uncomment this line
91
90
  # puts "UPDATING VCN COOKIE -> #{value}"
92
- expires = @t + (RedisAnalytics.visit_timeout.to_i * 60)
91
+ expires = @t + RedisAnalytics.visit_timeout.to_i.minutes
93
92
  {:value => value.join('.'), :expires => expires}
94
93
  end
95
94
 
@@ -97,7 +96,7 @@ module Rack
97
96
  value = [@first_visit_seq.to_i, (@first_visit_time || @t).to_i, @t.to_i]
98
97
  # to debug, uncomment this line
99
98
  # puts "UPDATING RUCN COOKIE -> #{value}"
100
- expires = @t + (60 * 60 * 24 * 5) # 5 hours
99
+ expires = @t + 1.year
101
100
  {:value => value.join('.'), :expires => expires}
102
101
  end
103
102
 
@@ -119,4 +118,4 @@ module Rack
119
118
 
120
119
  end
121
120
  end
122
- end
121
+
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :redis_analytics do
3
+ # # Task goes here
4
+ # end
@@ -1,11 +1,11 @@
1
-
2
1
  # -*- encoding: utf-8 -*-
3
2
  $:.push File.expand_path("../lib", __FILE__)
4
3
  require 'redis_analytics/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
6
  spec.name = "redis_analytics"
8
- spec.version = Rack::RedisAnalytics::VERSION
7
+ spec.license = 'MIT'
8
+ spec.version = RedisAnalytics::VERSION
9
9
  spec.date = Time.now.strftime('%Y-%m-%d')
10
10
  spec.authors = ["Schubert Cardozo"]
11
11
  spec.email = ["cardozoschubert@gmail.com"]
@@ -17,26 +17,26 @@ Gem::Specification.new do |spec|
17
17
 
18
18
  spec.files = Dir.glob("**/*")
19
19
 
20
- spec.executables = ['redis_analytics_dashboard']
21
- spec.default_executable = 'redis_analytics_dashboard'
20
+ # spec.executables = ['redis_analytics_dashboard']
21
+ # spec.default_executable = 'redis_analytics_dashboard'
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_runtime_dependency('rack')
25
- spec.add_runtime_dependency('redis')
26
- spec.add_runtime_dependency('browser')
27
- spec.add_runtime_dependency('sinatra')
28
- spec.add_runtime_dependency('sinatra-assetpack')
29
- spec.add_runtime_dependency('geoip')
30
- spec.add_runtime_dependency('json')
31
-
32
- spec.add_development_dependency('fakeredis')
33
- spec.add_development_dependency('rake')
34
- spec.add_development_dependency('rspec')
35
- spec.add_development_dependency('guard-rspec')
36
- spec.add_development_dependency('mocha')
37
- spec.add_development_dependency('rack-test')
38
- spec.add_development_dependency('simplecov')
39
- spec.add_development_dependency('coveralls')
24
+ spec.add_runtime_dependency 'rails', '>= 3.2.0', '< 5'
25
+ spec.add_runtime_dependency 'jquery-rails'
26
+ spec.add_runtime_dependency 'sqlite3'
27
+ spec.add_runtime_dependency 'redis'
28
+ spec.add_runtime_dependency 'browser'
29
+ spec.add_runtime_dependency 'geoip'
30
+ spec.add_runtime_dependency 'json'
31
+
32
+ spec.add_development_dependency 'fakeredis'
33
+ spec.add_development_dependency 'rake'
34
+ spec.add_development_dependency 'rspec'
35
+ spec.add_development_dependency 'guard-rspec'
36
+ spec.add_development_dependency 'mocha'
37
+ spec.add_development_dependency 'rack-test'
38
+ spec.add_development_dependency 'simplecov'
39
+ spec.add_development_dependency 'coveralls'
40
40
 
41
41
  spec.required_ruby_version = '>= 1.9.2'
42
42
  end
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ ENGINE_ROOT = File.expand_path('../..', __FILE__)
5
+ ENGINE_PATH = File.expand_path('../../lib/redis_analytics/engine', __FILE__)
6
+
7
+ require 'rails/all'
8
+ require 'rails/engine/commands'
@@ -1,59 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Rack::RedisAnalytics::Analytics do
4
-
5
- subject(:app) {
6
- Rack::Builder.app do
7
- use Rack::RedisAnalytics::Analytics
8
- run Proc.new { |env| [200, {'Content-Type' => 'text/html'}, "Hello!"] }
9
- end
10
- }
11
-
12
- before(:each) do
13
- clear_cookies
14
- end
15
-
16
- # Spec for Cookies
17
- context "when a user makes 2 visits and the current visit cookie and first visit cookie are not expired" do
18
- def cookie
19
- last_response.original_headers['Set-Cookie']
20
- end
21
- it "should count as the same visit in the cookie" do
22
- t1 = Time.now
23
- Time.stubs(:now).returns(t1)
24
- get '/'
25
- cookie.should match("#{Rack::RedisAnalytics.current_visit_cookie_name}=1.1.1.#{t1.to_i}.#{t1.to_i}")
26
- cookie.should match("#{Rack::RedisAnalytics.first_visit_cookie_name}=1.#{t1.to_i}.#{t1.to_i}")
27
- t2 = t1 + 5 # just adding 5 seconds
28
- Time.stubs(:now).returns(t2)
29
- get '/'
30
- cookie.should match("#{Rack::RedisAnalytics.current_visit_cookie_name}=1.1.2.#{t1.to_i}.#{t2.to_i}")
31
- cookie.should match("#{Rack::RedisAnalytics.first_visit_cookie_name}=1.#{t1.to_i}.#{t2.to_i}")
32
- end
33
- end
34
-
35
- context "when a user makes 2 visits, but current visit cookie and first visit cookie are both non-existent" do
36
- def cookie
37
- last_response.original_headers['Set-Cookie']
38
- end
39
- it "should count as a separate and new visit in the cookie" do
40
- t1 = Time.now
41
- Time.stubs(:now).returns(t1)
42
- get '/'
43
- cookie.should match("#{Rack::RedisAnalytics.current_visit_cookie_name}=1.1.1.#{t1.to_i}.#{t1.to_i}")
44
- cookie.should match("#{Rack::RedisAnalytics.first_visit_cookie_name}=1.#{t1.to_i}.#{t1.to_i}")
45
- clear_cookies
46
-
47
- t2 = t1 + 5 # just adding 5 seconds
48
- Time.stubs(:now).returns(t2)
49
- get '/'
50
- cookie.should match("#{Rack::RedisAnalytics.current_visit_cookie_name}=2.2.1.#{t2.to_i}.#{t2.to_i}")
51
- cookie.should match("#{Rack::RedisAnalytics.first_visit_cookie_name}=2.#{t2.to_i}.#{t2.to_i}")
52
- end
53
- end
54
-
55
- context "when a user makes 2 visits, and visit cookie is expired but the returning user cookie exists" do
56
- it "should count as a separate visit but not a new visit"
57
- end
58
-
59
- end
@@ -1,9 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Rack::RedisAnalytics::Configuration do
3
+ describe RedisAnalytics::Configuration do
4
4
 
5
5
  context 'property redis_connection' do
6
- subject(:connection) { Rack::RedisAnalytics.redis_connection }
6
+ subject(:connection) { RedisAnalytics.redis_connection }
7
7
  it 'should not be nil' do
8
8
  connection.should_not be_nil
9
9
  end
@@ -13,7 +13,7 @@ describe Rack::RedisAnalytics::Configuration do
13
13
  end
14
14
 
15
15
  context 'property redis_namespace' do
16
- subject(:namespace) { Rack::RedisAnalytics.redis_namespace }
16
+ subject(:namespace) { RedisAnalytics.redis_namespace }
17
17
  it 'should not be nil' do
18
18
  namespace.should_not be_nil
19
19
  end
@@ -27,7 +27,7 @@ describe Rack::RedisAnalytics::Configuration do
27
27
  end
28
28
 
29
29
  context 'property first_visit_cookie_name' do
30
- subject(:return_cookie) { Rack::RedisAnalytics.first_visit_cookie_name }
30
+ subject(:return_cookie) { RedisAnalytics.first_visit_cookie_name }
31
31
  it 'should not be nil' do
32
32
  return_cookie.should_not be_nil
33
33
  end
@@ -41,7 +41,7 @@ describe Rack::RedisAnalytics::Configuration do
41
41
  end
42
42
 
43
43
  context 'property current_visit_cookie_name' do
44
- subject(:current_visit_cookie_name) { Rack::RedisAnalytics.current_visit_cookie_name }
44
+ subject(:current_visit_cookie_name) { RedisAnalytics.current_visit_cookie_name }
45
45
  it 'should not be nil' do
46
46
  current_visit_cookie_name.should_not be_nil
47
47
  end
@@ -55,21 +55,21 @@ describe Rack::RedisAnalytics::Configuration do
55
55
  end
56
56
 
57
57
  context 'property visit_timeout' do
58
- subject(:visit_timeout) { Rack::RedisAnalytics.visit_timeout }
58
+ subject(:visit_timeout) { RedisAnalytics.visit_timeout }
59
59
  it 'should not be nil' do
60
60
  visit_timeout.should_not be_nil
61
61
  end
62
62
  it 'should have an default value' do
63
- visit_timeout.should be == 1
63
+ visit_timeout.should be == 30
64
64
  end
65
65
  it 'can be set to another value' do
66
- visit_timeout = 5
67
- visit_timeout.should be == 5
66
+ visit_timeout = 10
67
+ visit_timeout.should be == 10
68
68
  end
69
69
  end
70
70
 
71
71
  context 'property visitor_recency_slices' do
72
- subject(:visitor_recency_slices) { Rack::RedisAnalytics.visitor_recency_slices }
72
+ subject(:visitor_recency_slices) { RedisAnalytics.visitor_recency_slices }
73
73
  it 'should not be nil' do
74
74
  visitor_recency_slices.should_not be_nil
75
75
  end
@@ -86,7 +86,7 @@ describe Rack::RedisAnalytics::Configuration do
86
86
  end
87
87
 
88
88
  context 'property default_range' do
89
- subject(:default_range) { Rack::RedisAnalytics.default_range }
89
+ subject(:default_range) { RedisAnalytics.default_range }
90
90
  it 'should not be nil' do
91
91
  default_range.should_not be_nil
92
92
  end
@@ -103,7 +103,7 @@ describe Rack::RedisAnalytics::Configuration do
103
103
  end
104
104
 
105
105
  context 'property redis_key_timestamps' do
106
- subject(:redis_key_timestamps) { Rack::RedisAnalytics.redis_key_timestamps }
106
+ subject(:redis_key_timestamps) { RedisAnalytics.redis_key_timestamps }
107
107
  it 'should not be nil' do
108
108
  redis_key_timestamps.should_not be_nil
109
109
  end
@@ -117,7 +117,7 @@ describe Rack::RedisAnalytics::Configuration do
117
117
  end
118
118
 
119
119
  context 'property time_range_formats' do
120
- subject(:time_range_formats) { Rack::RedisAnalytics.time_range_formats }
120
+ subject(:time_range_formats) { RedisAnalytics.time_range_formats }
121
121
  it 'should not be nil' do
122
122
  time_range_formats.should_not be_nil
123
123
  end
@@ -134,24 +134,24 @@ describe Rack::RedisAnalytics::Configuration do
134
134
  end
135
135
 
136
136
  context 'method add_filter' do
137
- subject(:filters) { Rack::RedisAnalytics.filters }
137
+ subject(:filters) { RedisAnalytics.filters }
138
138
  it 'should add a new filter' do
139
139
  proc = Proc.new {}
140
- Rack::RedisAnalytics.configure do |c|
140
+ RedisAnalytics.configure do |c|
141
141
  c.add_filter(&proc)
142
142
  end
143
- filters[0].should be_an_instance_of Rack::RedisAnalytics::Filter
143
+ filters[0].should be_an_instance_of RedisAnalytics::Filter
144
144
  end
145
145
  end
146
146
 
147
147
  context 'method add_path_filter' do
148
- subject(:path_filters) { Rack::RedisAnalytics.path_filters }
148
+ subject(:path_filters) { RedisAnalytics.path_filters }
149
149
  it 'should add a new path filter' do
150
150
  path = '/hello'
151
- Rack::RedisAnalytics.configure do |c|
151
+ RedisAnalytics.configure do |c|
152
152
  c.add_path_filter(path)
153
153
  end
154
- path_filters[0].should be_an_instance_of Rack::RedisAnalytics::PathFilter
154
+ path_filters[0].should be_an_instance_of RedisAnalytics::PathFilter
155
155
  end
156
156
  end
157
157