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.
- checksums.yaml +7 -0
- data/Gemfile.lock +159 -40
- data/{LICENSE → MIT-LICENSE} +0 -0
- data/README.md +54 -64
- data/TODO.md +1 -0
- data/app/controllers/redis_analytics/api_controller.rb +50 -0
- data/app/controllers/redis_analytics/application_controller.rb +4 -0
- data/app/controllers/redis_analytics/visits_controller.rb +9 -0
- data/app/helpers/redis_analytics/application_helper.rb +4 -0
- data/app/helpers/redis_analytics/visits_helper.rb +74 -0
- data/app/views/layouts/redis_analytics/application.html.erb +17 -0
- data/app/views/redis_analytics/application/_footer.html.erb +3 -0
- data/{lib/redis_analytics/dashboard/views/footer.erb → app/views/redis_analytics/application/_footer.html.erb~} +0 -0
- data/{lib/redis_analytics/dashboard/views/header.erb → app/views/redis_analytics/application/_header.html.erb} +1 -1
- data/{lib/redis_analytics/dashboard/views/widgets/bounce_rate.erb → app/views/redis_analytics/visits/_bounce_rate.html.erb} +1 -1
- data/{lib/redis_analytics/dashboard/views/widgets/browsers_donut.erb → app/views/redis_analytics/visits/_browsers_donut.html.erb} +1 -1
- data/{lib/redis_analytics/dashboard/views/widgets/first_visits.erb → app/views/redis_analytics/visits/_first_visits.html.erb} +1 -1
- data/{lib/redis_analytics/dashboard/views/widgets/page_depth.erb → app/views/redis_analytics/visits/_page_depth.html.erb} +1 -1
- data/{lib/redis_analytics/dashboard/views/widgets/referers_donut.erb → app/views/redis_analytics/visits/_referers_donut.html.erb} +0 -0
- data/{lib/redis_analytics/dashboard/views/widgets/total_page_views.erb → app/views/redis_analytics/visits/_total_page_views.html.erb} +1 -1
- data/{lib/redis_analytics/dashboard/views/widgets/total_visits.erb → app/views/redis_analytics/visits/_total_visits.html.erb} +1 -1
- data/app/views/redis_analytics/visits/_unique_visits_line.html.erb +26 -0
- data/{lib/redis_analytics/dashboard/views/widgets/unique_visits_line.erb → app/views/redis_analytics/visits/_unique_visits_line.html.erb~} +1 -1
- data/app/views/redis_analytics/visits/_visit_duration.html.erb +3 -0
- data/{lib/redis_analytics/dashboard/views/widgets/visit_spark.erb → app/views/redis_analytics/visits/_visit_spark.html.erb} +1 -1
- data/{lib/redis_analytics/dashboard/views/widgets/visitor_recency_slices.erb → app/views/redis_analytics/visits/_visitor_recency_slices.html.erb} +1 -1
- data/{lib/redis_analytics/dashboard/views/widgets/visits_area.erb → app/views/redis_analytics/visits/_visits_area.html.erb} +2 -2
- data/{lib/redis_analytics/dashboard/views/widgets/visits_donut.erb → app/views/redis_analytics/visits/_visits_donut.html.erb} +0 -0
- data/{lib/redis_analytics/dashboard/views/visits_js.erb → app/views/redis_analytics/visits/_visits_js.html.erb} +13 -10
- data/{lib/redis_analytics/dashboard/views/widgets/world_map.erb → app/views/redis_analytics/visits/_world_map.html.erb} +1 -1
- data/app/views/redis_analytics/visits/index.html.erb +69 -0
- data/{lib/redis_analytics/dashboard/views/visits.erb → app/views/redis_analytics/visits/index.html.erb~} +0 -0
- data/bin/GeoIP.dat +0 -0
- data/config.ru +2 -2
- data/config/routes.rb +5 -0
- data/coverage/assets/0.8.0/application.css +799 -0
- data/coverage/assets/0.8.0/application.js +1559 -0
- data/coverage/assets/0.8.0/colorbox/border.png +0 -0
- data/coverage/assets/0.8.0/colorbox/controls.png +0 -0
- data/coverage/assets/0.8.0/colorbox/loading.gif +0 -0
- data/coverage/assets/0.8.0/colorbox/loading_background.png +0 -0
- data/coverage/assets/0.8.0/favicon_green.png +0 -0
- data/coverage/assets/0.8.0/favicon_red.png +0 -0
- data/coverage/assets/0.8.0/favicon_yellow.png +0 -0
- data/coverage/assets/0.8.0/loading.gif +0 -0
- data/coverage/assets/0.8.0/magnify.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/coverage/assets/0.8.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/coverage/index.html +3484 -0
- data/lib/redis_analytics.rb +5 -12
- data/lib/redis_analytics/configuration.rb +2 -3
- data/lib/redis_analytics/engine.rb +18 -0
- data/lib/redis_analytics/filter.rb +1 -2
- data/lib/redis_analytics/helpers.rb +1 -2
- data/lib/redis_analytics/metrics.rb +1 -2
- data/lib/redis_analytics/time_ext.rb +0 -76
- data/lib/redis_analytics/tracker.rb +35 -24
- data/lib/redis_analytics/version.rb +2 -3
- data/lib/redis_analytics/visit.rb +4 -5
- data/lib/tasks/redis_analytics_tasks.rake +4 -0
- data/redis_analytics.gemspec +20 -20
- data/script/rails +8 -0
- data/spec/lib/redis_analytics/analytics_spec.rb +0 -59
- data/spec/lib/redis_analytics/configuration_spec.rb +19 -19
- data/spec/lib/redis_analytics/{dashboard_spec.rb → engine_spec.rb} +2 -8
- data/spec/lib/redis_analytics/filter_spec.rb +4 -4
- data/spec/lib/redis_analytics/tracker_spec.rb +45 -6
- data/spec/spec_helper.rb +2 -2
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +67 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/production.sqlite3 +0 -0
- data/test/dummy/log/development.log +1605 -0
- data/test/dummy/log/production.log +882 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/assets/application-ac39e235d42f60499cd65a4b78076ba3.css +14 -0
- data/test/dummy/public/assets/application-ac39e235d42f60499cd65a4b78076ba3.css.gz +0 -0
- data/test/dummy/public/assets/application-c900658d554ff9f314a2e1b97cd68997.js +10752 -0
- data/test/dummy/public/assets/application-c900658d554ff9f314a2e1b97cd68997.js.gz +0 -0
- data/test/dummy/public/assets/manifest-5bcba723c313582b1d428fc3bf592b29.json +1 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/tmp/cache/assets/C86/E20/sprockets%2F04d6293b6d7c30b20475e886dc634936 +0 -0
- data/test/dummy/tmp/cache/assets/C88/400/sprockets%2F1bb834b9f3b720193591960cf7f31497 +0 -0
- data/test/dummy/tmp/cache/assets/C8D/800/sprockets%2Fb484d3480591b77bf84376f1f41a6457 +0 -0
- data/test/dummy/tmp/cache/assets/C97/230/sprockets%2Ff8c56a6d1d5685424871464fc480f956 +0 -0
- data/test/dummy/tmp/cache/assets/C98/560/sprockets%2Ff14a2366122e6017b965b32290b8abb0 +0 -0
- data/test/dummy/tmp/cache/assets/CAE/7D0/sprockets%2F1f0b25ca08195d3582e4fe04396e9270 +0 -0
- data/test/dummy/tmp/cache/assets/CB9/550/sprockets%2F0505a9fb5602a3fae429f389832747d8 +0 -0
- data/test/dummy/tmp/cache/assets/CBA/030/sprockets%2F510aa1c63fe533f77a197367b79f2919 +0 -0
- data/test/dummy/tmp/cache/assets/CBC/630/sprockets%2F8fca8928788707a4ba625519ab402d58 +0 -0
- data/test/dummy/tmp/cache/assets/CC6/EE0/sprockets%2Fb6d3cc91f7b3559f985a978176b44324 +0 -0
- data/test/dummy/tmp/cache/assets/CC9/9C0/sprockets%2F84294e9b30cf387e6d8a35f82616a796 +0 -0
- data/test/dummy/tmp/cache/assets/CDA/880/sprockets%2F6b1913c56c962748122caf34704afdb5 +0 -0
- data/test/dummy/tmp/cache/assets/CDD/BF0/sprockets%2F1f5080b606781094922ecaccd9d508f2 +0 -0
- data/test/dummy/tmp/cache/assets/CF0/BB0/sprockets%2F48cd49adc4f96c8324c46c45641b6865 +0 -0
- data/test/dummy/tmp/cache/assets/CFE/380/sprockets%2F8e8d04799794da144a9907a9f82e0cf8 +0 -0
- data/test/dummy/tmp/cache/assets/D06/470/sprockets%2F2e9124aa82b45552ba5a8307f4f16a8e +0 -0
- data/test/dummy/tmp/cache/assets/D06/B80/sprockets%2Fb658eb46471a1b356c0e13962f1a52ee +0 -0
- data/test/dummy/tmp/cache/assets/D07/520/sprockets%2F0176f74cb205f694569fa21a53b2fa0e +0 -0
- data/test/dummy/tmp/cache/assets/D0A/3C0/sprockets%2F8fd1601c6d442f22a88d0e43bb87117f +0 -0
- data/test/dummy/tmp/cache/assets/D10/130/sprockets%2F7af0bd97720d268b9835405c8bae2d06 +0 -0
- data/test/dummy/tmp/cache/assets/D15/450/sprockets%2Fae3344670b608424cdc864eca5496fb9 +0 -0
- data/test/dummy/tmp/cache/assets/D16/7F0/sprockets%2F73d738bf9b779ad016ed62131d85cc16 +0 -0
- data/test/dummy/tmp/cache/assets/D16/A30/sprockets%2F23659e6e2161bb90c6f382ecbef73906 +0 -0
- data/test/dummy/tmp/cache/assets/D2B/060/sprockets%2Fd5891eb52eb6329a928461796e9ddfe5 +0 -0
- data/test/dummy/tmp/cache/assets/D32/810/sprockets%2F640ab72cec151bc94248b091f6b763bb +0 -0
- data/test/dummy/tmp/cache/assets/D37/C50/sprockets%2F00afdaa74ea16690227f771ae0879e1c +0 -0
- data/test/dummy/tmp/cache/assets/D39/A80/sprockets%2Ff850350eb319d86a5e0c02c2279cffa5 +0 -0
- data/test/dummy/tmp/cache/assets/D3F/170/sprockets%2F3b7a50f2bb29ad782e0352fc784d582f +0 -0
- data/test/dummy/tmp/cache/assets/D54/280/sprockets%2F8e51b269010978fe78fa369f6dfa1bf6 +0 -0
- data/test/dummy/tmp/cache/assets/D5C/120/sprockets%2F6b74e64b0422b8c574caba3a1746acd2 +0 -0
- data/test/dummy/tmp/cache/assets/D5D/E00/sprockets%2Fee3d10401f2a2d4a84f4fe56181fe1c1 +0 -0
- data/test/dummy/tmp/cache/assets/D68/310/sprockets%2Fa6108a4fca3b4012f99dcf46e24f5f60 +0 -0
- data/test/dummy/tmp/cache/assets/D6C/8C0/sprockets%2F06e1e915faab12cbf879a6b15b9136e7 +0 -0
- data/test/dummy/tmp/cache/assets/D70/310/sprockets%2Fab142f83166b2fc048379c9dfddd355a +0 -0
- data/test/dummy/tmp/cache/assets/D74/9F0/sprockets%2F59ed8bd7c6ca0dbe0f1921ee14667375 +0 -0
- data/test/dummy/tmp/cache/assets/D76/270/sprockets%2F006a046ae88edf3f8c84dc30ef8056d8 +0 -0
- data/test/dummy/tmp/cache/assets/D82/590/sprockets%2Fa6f6f970aa669d95690af983eb2b6a5c +0 -0
- data/test/dummy/tmp/cache/assets/D8D/440/sprockets%2F486b3eff5dce57385a599ef92be18c65 +0 -0
- data/test/dummy/tmp/cache/assets/D93/FF0/sprockets%2Fd06dd1928f37e37a29edb4dbaeb20403 +0 -0
- data/test/dummy/tmp/cache/assets/D99/350/sprockets%2F31bdb7fc1c62c06d71678d04fd0db9b8 +0 -0
- data/test/dummy/tmp/cache/assets/D9C/070/sprockets%2F9be5d5a71da06ce64d0ed17b3937e15d +0 -0
- data/test/dummy/tmp/cache/assets/D9E/5B0/sprockets%2Fd3f2f56488b7ac4890a2ad0bfef7c322 +0 -0
- data/test/dummy/tmp/cache/assets/DA4/020/sprockets%2F0fc75dd594e2c890f93a6dcd7332aaa8 +0 -0
- data/test/dummy/tmp/cache/assets/DA4/6B0/sprockets%2F17a2e22cd7356ee86da5d99f0a08bbf7 +0 -0
- data/test/dummy/tmp/cache/assets/DA5/470/sprockets%2Fa49ebde3ec35e12d52892e188a5cfd90 +0 -0
- data/test/dummy/tmp/cache/assets/DA6/D90/sprockets%2Fe3d875d9f2fb7341ae0e31f64c90e6bf +0 -0
- data/test/dummy/tmp/cache/assets/DA7/CA0/sprockets%2F0a03bffc91afd8872e8986daf8a2309b +0 -0
- data/test/dummy/tmp/cache/assets/DAD/FC0/sprockets%2F9b6809cd65f83a6bfaee80543f9e0ab7 +0 -0
- data/test/dummy/tmp/cache/assets/DC4/410/sprockets%2F7c23fbd015fe022d7eed035b4ff3a59c +0 -0
- data/test/dummy/tmp/cache/assets/DCB/CA0/sprockets%2F940121ecc7ae38abf79cc78efadf2212 +0 -0
- data/test/dummy/tmp/cache/assets/DCC/C10/sprockets%2F7cb37eb6b6ca3028ffd5c5420d8d7fc1 +0 -0
- data/test/dummy/tmp/cache/assets/DCD/4E0/sprockets%2Fcff1de305ed821d80d98f4cafa27414d +0 -0
- data/test/dummy/tmp/cache/assets/E07/1E0/sprockets%2Fd79ac6cbbaf490e5a3f09ab8288d3c9e +0 -0
- data/test/dummy/tmp/cache/assets/E39/680/sprockets%2F1e91e9837edc18aeeaf8df3c82f2af0e +0 -0
- data/test/dummy/tmp/cache/assets/E56/670/sprockets%2Fbd0e4d12cea996e0d2eebaa879a17eca +0 -0
- data/test/dummy/tmp/cache/assets/E57/150/sprockets%2Fdfa6edddd9357edcafaf06c20d21e561 +0 -0
- data/test/dummy/tmp/cache/assets/E5B/2B0/sprockets%2Ffebbeb2ea0bcd485bf5b9bd6190b9f44 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/006eb7cc017cf18c3ea32cab97f0cc3c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/00afdaa74ea16690227f771ae0879e1c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0125613fec11977628d50d4198ef25f3 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/04d6293b6d7c30b20475e886dc634936 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0c6b5095a86cd9aa4d15f4258a08f315 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/17a2e22cd7356ee86da5d99f0a08bbf7 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/192691b9e0bedebfde12633bb3629d0b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1e91e9837edc18aeeaf8df3c82f2af0e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1f0b25ca08195d3582e4fe04396e9270 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/23659e6e2161bb90c6f382ecbef73906 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/23b9bf2d5f9b45144a2803844eaa826e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/243cc575289b3170af701574d19d6353 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/24abc0717cf109a24278323c0d6756a0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2b6cc5f28a12c36cd4095832a5107969 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/326592f095651b767387e7c1d2b01dfe +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3bb822a002a8951f71e53f450090799b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3f91dad02acd15d7437b62ddca53c58b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/486b3eff5dce57385a599ef92be18c65 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/48cd49adc4f96c8324c46c45641b6865 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4b5d99d538ae32ad329cb37e413dbacc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4e89e9cec1b5e275bfeb078a9abfef44 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/510aa1c63fe533f77a197367b79f2919 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/5cf60638cb580f41112a5a83eb3b72ef +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/5dfbbe7f012f6cb7c29b1298cd9ff406 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/640ab72cec151bc94248b091f6b763bb +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6760a9b2947edeec5433ca0ff9d7a295 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6b74e64b0422b8c574caba3a1746acd2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6c2f18f7338d56feecce32780357521c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6f292799ddb92a69f64c5a60c921a2d6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/731ed4a2128ad4c7240bb520611c8404 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/73d738bf9b779ad016ed62131d85cc16 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7477fb841e65b8c9c48c40c13935a851 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/77412054774bd02630c93c1e8ac6b26a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7751914469530dae0646d92467e9d72e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/794a40bf52fa0deda8b4e5efa8ac523a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7af0bd97720d268b9835405c8bae2d06 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/82ecc84179ce77914906a81d29b483cf +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8d62150b658b3a8b6fed7e8951f52392 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8e51b269010978fe78fa369f6dfa1bf6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8e8d04799794da144a9907a9f82e0cf8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8ea331810c31cbe1ba34b91a02f769e7 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8fd1601c6d442f22a88d0e43bb87117f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/953bc37b1ee0915247dba29773960202 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/978f6f32b21b72d3e89b0c0f6f3a4a83 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/994386d11af17e88b6d107b83f41f8b5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9b077a68a557a208cf34297edadebdd2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9b54afa4ef026f4c288feeec49f2f526 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9b6809cd65f83a6bfaee80543f9e0ab7 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9be5d5a71da06ce64d0ed17b3937e15d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a29d0dc527ff5ce1252ccf6370514620 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a49ebde3ec35e12d52892e188a5cfd90 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a6108a4fca3b4012f99dcf46e24f5f60 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/aad6778bf60f6f1919628606c92cfd6f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ab142f83166b2fc048379c9dfddd355a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ae3344670b608424cdc864eca5496fb9 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b01583a39abd5ce0a3d2b2967c6f75bd +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b2780e7c581a2f0cb1d61346c6d1c1cd +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b3f0354298e8a43af381a6e42a03f0bc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b52b477f01cb65c5e1c6a91f6f0be20c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b6fbc3e4c5191de2cc58174a3eeb7cfc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/bb39143b57041f96c48b71e92f7e09f2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/be0b9e741941205338510e296868aab2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c9e69990b1552b575b271aaabbfc4eb5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c9eeea792acbd377e29de43d6b491291 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cb67795d1180b371b5b749662b9adefb +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cfdf466647e83eb93e0d6630e4b51a25 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cff1de305ed821d80d98f4cafa27414d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d5891eb52eb6329a928461796e9ddfe5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d7491740e7757fe2ec57fd6d25461e5c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d80f54242a6e7f4399481b7357d439a4 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/df16db3bfcc56fafc73b853b7999be1f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/dfa6edddd9357edcafaf06c20d21e561 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e3d875d9f2fb7341ae0e31f64c90e6bf +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e7bd439b274a2155050b47e5a64ea72d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ee3d10401f2a2d4a84f4fe56181fe1c1 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f14a2366122e6017b965b32290b8abb0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f9a412f49281cc7e6512f0787f7ba05f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/febbeb2ea0bcd485bf5b9bd6190b9f44 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/00afdaa74ea16690227f771ae0879e1c +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/73d738bf9b779ad016ed62131d85cc16 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/dfa6edddd9357edcafaf06c20d21e561 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/febbeb2ea0bcd485bf5b9bd6190b9f44 +0 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/redis_analytics_test.rb +7 -0
- data/test/test_helper.rb +15 -0
- data/{lib/redis_analytics/dashboard/public/javascripts/vendor/bootstrap → vendor/assets/javascripts/redis_analytics}/bootstrap.min.js +0 -0
- data/vendor/assets/javascripts/redis_analytics/engine.js +15 -0
- data/{lib/redis_analytics/dashboard/public/javascripts/vendor → vendor/assets/javascripts/redis_analytics}/jquery-jvectormap-1.2.2.min.js +0 -0
- data/{lib/redis_analytics/dashboard/public/javascripts/vendor → vendor/assets/javascripts/redis_analytics}/jquery-jvectormap-world-mill-en.js +0 -0
- data/{lib/redis_analytics/dashboard/public/javascripts/vendor → vendor/assets/javascripts/redis_analytics}/morris.min.js +0 -0
- data/{lib/redis_analytics/dashboard/public/javascripts/vendor → vendor/assets/javascripts/redis_analytics}/raphael-min.js +0 -0
- data/{lib/redis_analytics/dashboard/public/css → vendor/assets/stylesheets/redis_analytics}/bootstrap-responsive.min.css +0 -0
- data/{lib/redis_analytics/dashboard/public/css → vendor/assets/stylesheets/redis_analytics}/bootstrap.min.css +0 -0
- data/vendor/assets/stylesheets/redis_analytics/engine.css +12 -0
- data/{lib/redis_analytics/dashboard/public/css → vendor/assets/stylesheets/redis_analytics}/jquery-jvectormap-1.2.2.css +0 -0
- data/{lib/redis_analytics/dashboard/public/css → vendor/assets/stylesheets/redis_analytics}/morris.css +0 -0
- metadata +307 -122
- data/bin/redis_analytics_dashboard +0 -17
- data/lib/redis_analytics/analytics.rb +0 -45
- data/lib/redis_analytics/api.rb +0 -60
- data/lib/redis_analytics/dashboard.rb +0 -53
- data/lib/redis_analytics/dashboard/public/img/favicon.ico +0 -0
- data/lib/redis_analytics/dashboard/public/img/glyphicons-halflings-white.png +0 -0
- data/lib/redis_analytics/dashboard/public/img/glyphicons-halflings.png +0 -0
- data/lib/redis_analytics/dashboard/public/javascripts/vendor/jquery-1.9.1.min.js +0 -5
- data/lib/redis_analytics/dashboard/views/activity.erb +0 -7
- data/lib/redis_analytics/dashboard/views/dialogs/unique_visits.erb +0 -41
- data/lib/redis_analytics/dashboard/views/dialogs/visits.erb +0 -40
- data/lib/redis_analytics/dashboard/views/layout.erb +0 -16
- data/lib/redis_analytics/dashboard/views/widgets/visit_duration.erb +0 -3
- data/lib/redis_analytics/railtie.rb +0 -13
- data/wsd.png +0 -0
data/lib/redis_analytics.rb
CHANGED
@@ -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/
|
15
|
+
require 'redis_analytics/engine'
|
21
16
|
|
22
|
-
module
|
23
|
-
|
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 ||=
|
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
|
-
|
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,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
|
-
|
2
|
-
|
3
|
-
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'digest/md5'
|
3
|
+
module RedisAnalytics
|
4
|
+
class Tracker
|
4
5
|
|
5
|
-
|
6
|
-
|
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
|
-
|
16
|
-
|
17
|
-
|
10
|
+
def call(env)
|
11
|
+
dup.call!(env)
|
12
|
+
end
|
18
13
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
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
|
-
|
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
|
-
|
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,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",
|
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 +
|
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 +
|
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
|
-
|
121
|
+
|
data/redis_analytics.gemspec
CHANGED
@@ -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.
|
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
|
25
|
-
spec.add_runtime_dependency
|
26
|
-
spec.add_runtime_dependency
|
27
|
-
spec.add_runtime_dependency
|
28
|
-
spec.add_runtime_dependency
|
29
|
-
spec.add_runtime_dependency
|
30
|
-
spec.add_runtime_dependency
|
31
|
-
|
32
|
-
spec.add_development_dependency
|
33
|
-
spec.add_development_dependency
|
34
|
-
spec.add_development_dependency
|
35
|
-
spec.add_development_dependency
|
36
|
-
spec.add_development_dependency
|
37
|
-
spec.add_development_dependency
|
38
|
-
spec.add_development_dependency
|
39
|
-
spec.add_development_dependency
|
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
|
data/script/rails
ADDED
@@ -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
|
3
|
+
describe RedisAnalytics::Configuration do
|
4
4
|
|
5
5
|
context 'property redis_connection' do
|
6
|
-
subject(: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) {
|
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) {
|
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) {
|
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) {
|
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 ==
|
63
|
+
visit_timeout.should be == 30
|
64
64
|
end
|
65
65
|
it 'can be set to another value' do
|
66
|
-
visit_timeout =
|
67
|
-
visit_timeout.should be ==
|
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) {
|
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) {
|
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) {
|
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) {
|
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) {
|
137
|
+
subject(:filters) { RedisAnalytics.filters }
|
138
138
|
it 'should add a new filter' do
|
139
139
|
proc = Proc.new {}
|
140
|
-
|
140
|
+
RedisAnalytics.configure do |c|
|
141
141
|
c.add_filter(&proc)
|
142
142
|
end
|
143
|
-
filters[0].should be_an_instance_of
|
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) {
|
148
|
+
subject(:path_filters) { RedisAnalytics.path_filters }
|
149
149
|
it 'should add a new path filter' do
|
150
150
|
path = '/hello'
|
151
|
-
|
151
|
+
RedisAnalytics.configure do |c|
|
152
152
|
c.add_path_filter(path)
|
153
153
|
end
|
154
|
-
path_filters[0].should be_an_instance_of
|
154
|
+
path_filters[0].should be_an_instance_of RedisAnalytics::PathFilter
|
155
155
|
end
|
156
156
|
end
|
157
157
|
|