redis_analytics 0.6.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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