redis_analytics 0.1.0 → 0.6.0

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 (61) hide show
  1. data/CHANGELOG.md +12 -0
  2. data/CONTRIBUTING.md +33 -0
  3. data/Guardfile +10 -0
  4. data/README.md +105 -23
  5. data/Rakefile +3 -11
  6. data/TODO.md +12 -0
  7. data/bin/redis_analytics_dashboard +1 -1
  8. data/config.ru +13 -0
  9. data/lib/redis_analytics.rb +5 -1
  10. data/lib/redis_analytics/analytics.rb +17 -203
  11. data/lib/redis_analytics/api.rb +60 -0
  12. data/lib/redis_analytics/configuration.rb +47 -16
  13. data/lib/redis_analytics/dashboard.rb +28 -89
  14. data/lib/redis_analytics/dashboard/public/{favicon.ico → img/favicon.ico} +0 -0
  15. data/lib/redis_analytics/dashboard/public/javascripts/{bootstrap.min.js → vendor/bootstrap/bootstrap.min.js} +0 -0
  16. data/lib/redis_analytics/dashboard/public/javascripts/{jquery-1.9.1.min.js → vendor/jquery-1.9.1.min.js} +0 -0
  17. data/lib/redis_analytics/dashboard/public/javascripts/{jquery-jvectormap-1.2.2.min.js → vendor/jquery-jvectormap-1.2.2.min.js} +0 -0
  18. data/lib/redis_analytics/dashboard/public/javascripts/{jquery-jvectormap-world-mill-en.js → vendor/jquery-jvectormap-world-mill-en.js} +0 -0
  19. data/lib/redis_analytics/dashboard/public/javascripts/{morris.min.js → vendor/morris.min.js} +0 -0
  20. data/lib/redis_analytics/dashboard/public/javascripts/{raphael-min.js → vendor/raphael-min.js} +0 -0
  21. data/lib/redis_analytics/dashboard/views/activity.erb +7 -0
  22. data/lib/redis_analytics/dashboard/views/dialogs/unique_visits.erb +41 -0
  23. data/lib/redis_analytics/dashboard/views/dialogs/visits.erb +40 -0
  24. data/lib/redis_analytics/dashboard/views/footer.erb +1 -3
  25. data/lib/redis_analytics/dashboard/views/header.erb +17 -42
  26. data/lib/redis_analytics/dashboard/views/layout.erb +5 -22
  27. data/lib/redis_analytics/dashboard/views/visits.erb +38 -143
  28. data/lib/redis_analytics/dashboard/views/visits_js.erb +110 -247
  29. data/lib/redis_analytics/dashboard/views/widgets/bounce_rate.erb +3 -0
  30. data/lib/redis_analytics/dashboard/views/widgets/browsers_donut.erb +8 -0
  31. data/lib/redis_analytics/dashboard/views/widgets/first_visits.erb +3 -0
  32. data/lib/redis_analytics/dashboard/views/widgets/page_depth.erb +3 -0
  33. data/lib/redis_analytics/dashboard/views/widgets/referers_donut.erb +8 -0
  34. data/lib/redis_analytics/dashboard/views/widgets/total_page_views.erb +3 -0
  35. data/lib/redis_analytics/dashboard/views/widgets/total_visits.erb +3 -0
  36. data/lib/redis_analytics/dashboard/views/widgets/unique_visits_line.erb +26 -0
  37. data/lib/redis_analytics/dashboard/views/widgets/visit_duration.erb +3 -0
  38. data/lib/redis_analytics/dashboard/views/widgets/visit_spark.erb +23 -0
  39. data/lib/redis_analytics/dashboard/views/widgets/visitor_recency_slices.erb +39 -0
  40. data/lib/redis_analytics/dashboard/views/widgets/visits_area.erb +30 -0
  41. data/lib/redis_analytics/dashboard/views/widgets/visits_donut.erb +8 -0
  42. data/lib/redis_analytics/dashboard/views/widgets/world_map.erb +50 -0
  43. data/lib/redis_analytics/filter.rb +33 -0
  44. data/lib/redis_analytics/helpers.rb +36 -30
  45. data/lib/redis_analytics/metrics.rb +96 -0
  46. data/lib/redis_analytics/time_ext.rb +72 -2
  47. data/lib/redis_analytics/tracker.rb +13 -5
  48. data/lib/redis_analytics/version.rb +1 -1
  49. data/lib/redis_analytics/visit.rb +122 -0
  50. data/redis_analytics.gemspec +19 -14
  51. data/spec/lib/redis_analytics/analytics_spec.rb +59 -0
  52. data/spec/lib/redis_analytics/configuration_spec.rb +158 -0
  53. data/spec/lib/redis_analytics/dashboard_spec.rb +32 -0
  54. data/spec/lib/redis_analytics/filter_spec.rb +34 -0
  55. data/spec/lib/redis_analytics/tracker_spec.rb +20 -0
  56. data/spec/spec_helper.rb +13 -6
  57. data/spec/support/fakeredis.rb +1 -0
  58. data/wsd.png +0 -0
  59. metadata +268 -126
  60. data/lib/redis_analytics/config.ru +0 -10
  61. data/spec/redis_analytics_spec.rb +0 -57
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Rack::RedisAnalytics::Dashboard do
4
+
5
+ subject(:app) { Rack::RedisAnalytics::Dashboard }
6
+
7
+ context 'the pretty dashboard' do
8
+
9
+ it 'should redirect to visits' do
10
+ get '/'
11
+ last_response.should be_redirect
12
+ # how do we check the redirect location?
13
+ end
14
+
15
+ it 'should be mapped to configured endpoint' do
16
+ get '/'
17
+ last_response.ok?
18
+ end
19
+
20
+ it 'should be content-type html' do
21
+ get '/'
22
+ last_response.headers['Content-Type'] == "text/html"
23
+ end
24
+
25
+ it 'should contain the word Visits' do
26
+ get '/'
27
+ last_response.body.include? "Visits"
28
+ end
29
+
30
+ end
31
+
32
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe Rack::RedisAnalytics::Filter do
4
+
5
+ before do
6
+ @mock_request = Rack::Request.new(:ip => "127.0.0.1", :path => '/ignored')
7
+ @mock_response = Rack::Response.new(:content_type => "text/csv")
8
+ end
9
+
10
+ context "when a Filter matches" do
11
+ it "should return true" do
12
+ proc = Proc.new do |req, res|
13
+ req.ip == @mock_request.ip and res.content_type == @mock_response.content_type
14
+ end
15
+ filter = Rack::RedisAnalytics::Filter.new(proc)
16
+ filter.matches?(@mock_request, @mock_response).should be_true
17
+ end
18
+ end
19
+
20
+ context "when a string PathFilter matches" do
21
+ it "should return true" do
22
+ filter = Rack::RedisAnalytics::PathFilter.new(@mock_request.path)
23
+ filter.matches?(@mock_request.path).should be_true
24
+ end
25
+ end
26
+
27
+ context "when a regexp PathFilter matches" do
28
+ it "should return true" do
29
+ filter = Rack::RedisAnalytics::PathFilter.new(/#{@mock_request.path}/)
30
+ filter.matches?(@mock_request.path).should be_true
31
+ end
32
+ end
33
+
34
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe Rack::RedisAnalytics::Tracker do
4
+
5
+ subject(:app) {
6
+ Rack::Builder.app do
7
+ use Rack::RedisAnalytics::Tracker
8
+ run Proc.new { |env| [200, {'Content-Type' => 'text/html'}, "Hello!"] }
9
+ end
10
+ }
11
+
12
+ context 'tracker' do
13
+ it 'should map everything to analytics' do
14
+ get '/'
15
+ last_response.should be_ok
16
+ last_response.body.should include "Hello!"
17
+ end
18
+
19
+ end
20
+ end
@@ -1,24 +1,31 @@
1
- require 'rubygems'
2
- require 'redis_analytics'
1
+ require 'simplecov'
2
+ require 'coveralls'
3
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
4
+ SimpleCov::Formatter::HTMLFormatter,
5
+ Coveralls::SimpleCov::Formatter
6
+ ]
7
+ SimpleCov.start do
8
+ add_filter '/spec/'
9
+ end
3
10
 
4
- # This file is copied to spec/ when you run 'rails generate rspec:install'
11
+ require 'redis_analytics'
5
12
  require 'rspec/autorun'
6
- require 'test/unit'
7
13
  require 'rack/test'
8
- require 'mocha'
14
+ require 'mocha/api'
9
15
 
10
16
  # Requires supporting ruby files with custom matchers and macros, etc,
11
17
  # in spec/support/ and its subdirectories.
12
18
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
13
19
 
14
20
  RSpec.configure do |config|
21
+ config.include Rack::Test::Methods
15
22
  config.mock_with :mocha
16
23
  config.color_enabled = true
17
24
 
18
25
  config.before(:all) do
19
26
  Rack::RedisAnalytics.configure do |configuration|
20
27
  configuration.redis_connection = Redis.new(:db => 15, :host => '127.0.0.1')
21
- configuration.redis_namespace = '_ra_test_namspace'
28
+ configuration.redis_namespace = '_ra_test_namespace'
22
29
  end
23
30
  end
24
31
 
@@ -0,0 +1 @@
1
+ require 'fakeredis/rspec'
data/wsd.png ADDED
Binary file
metadata CHANGED
@@ -1,216 +1,358 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: redis_analytics
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.0
4
5
  prerelease:
5
- version: 0.1.0
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Schubert Cardozo
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2013-02-15 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2014-04-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: rack
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: 1.4.0
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
24
22
  type: :runtime
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
27
- name: redis
28
23
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: redis
32
+ requirement: !ruby/object:Gem::Requirement
30
33
  none: false
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: 3.0.2
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
35
38
  type: :runtime
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
38
- name: browser
39
39
  prerelease: false
40
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
41
41
  none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- version: 0.1.6
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: browser
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
46
54
  type: :runtime
47
- version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
49
- name: sinatra
50
55
  prerelease: false
51
- requirement: &id004 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
52
57
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: 1.3.3
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: sinatra
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
57
70
  type: :runtime
58
- version_requirements: *id004
59
- - !ruby/object:Gem::Dependency
60
- name: geoip
61
71
  prerelease: false
62
- requirement: &id005 !ruby/object:Gem::Requirement
72
+ version_requirements: !ruby/object:Gem::Requirement
63
73
  none: false
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: 1.2.1
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: sinatra-assetpack
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
68
86
  type: :runtime
69
- version_requirements: *id005
70
- - !ruby/object:Gem::Dependency
71
- name: json
72
87
  prerelease: false
73
- requirement: &id006 !ruby/object:Gem::Requirement
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: geoip
96
+ requirement: !ruby/object:Gem::Requirement
74
97
  none: false
75
- requirements:
76
- - - ">="
77
- - !ruby/object:Gem::Version
78
- version: 1.7.7
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
79
102
  type: :runtime
80
- version_requirements: *id006
81
- - !ruby/object:Gem::Dependency
82
- name: activesupport
83
103
  prerelease: false
84
- requirement: &id007 !ruby/object:Gem::Requirement
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: json
112
+ requirement: !ruby/object:Gem::Requirement
85
113
  none: false
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: 3.2.0
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
90
118
  type: :runtime
91
- version_requirements: *id007
92
- - !ruby/object:Gem::Dependency
93
- name: rake
94
119
  prerelease: false
95
- requirement: &id008 !ruby/object:Gem::Requirement
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: fakeredis
128
+ requirement: !ruby/object:Gem::Requirement
96
129
  none: false
97
- requirements:
98
- - - ">="
99
- - !ruby/object:Gem::Version
100
- version: 10.0.3
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
101
134
  type: :development
102
- version_requirements: *id008
103
- - !ruby/object:Gem::Dependency
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: rake
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ - !ruby/object:Gem::Dependency
104
159
  name: rspec
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
105
167
  prerelease: false
106
- requirement: &id009 !ruby/object:Gem::Requirement
168
+ version_requirements: !ruby/object:Gem::Requirement
107
169
  none: false
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- version: 2.11.0
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ - !ruby/object:Gem::Dependency
175
+ name: guard-rspec
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ! '>='
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
112
182
  type: :development
113
- version_requirements: *id009
114
- - !ruby/object:Gem::Dependency
115
- name: mocha
116
183
  prerelease: false
117
- requirement: &id010 !ruby/object:Gem::Requirement
184
+ version_requirements: !ruby/object:Gem::Requirement
118
185
  none: false
119
- requirements:
120
- - - ">="
121
- - !ruby/object:Gem::Version
122
- version: 0.12.7
186
+ requirements:
187
+ - - ! '>='
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ - !ruby/object:Gem::Dependency
191
+ name: mocha
192
+ requirement: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ! '>='
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
123
198
  type: :development
124
- version_requirements: *id010
125
- - !ruby/object:Gem::Dependency
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ! '>='
204
+ - !ruby/object:Gem::Version
205
+ version: '0'
206
+ - !ruby/object:Gem::Dependency
126
207
  name: rack-test
208
+ requirement: !ruby/object:Gem::Requirement
209
+ none: false
210
+ requirements:
211
+ - - ! '>='
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ type: :development
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - ! '>='
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
222
+ - !ruby/object:Gem::Dependency
223
+ name: simplecov
224
+ requirement: !ruby/object:Gem::Requirement
225
+ none: false
226
+ requirements:
227
+ - - ! '>='
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
127
231
  prerelease: false
128
- requirement: &id011 !ruby/object:Gem::Requirement
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - ! '>='
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
238
+ - !ruby/object:Gem::Dependency
239
+ name: coveralls
240
+ requirement: !ruby/object:Gem::Requirement
129
241
  none: false
130
- requirements:
131
- - - ">="
132
- - !ruby/object:Gem::Version
133
- version: 0.6.2
242
+ requirements:
243
+ - - ! '>='
244
+ - !ruby/object:Gem::Version
245
+ version: '0'
134
246
  type: :development
135
- version_requirements: *id011
136
- description: A gem that provides a Redis based web analytics solution for your rack-compliant apps. It gives you detailed analytics about visitors, unique visitors, browsers, OS, visitor recency, traffic sources and more
137
- email:
247
+ prerelease: false
248
+ version_requirements: !ruby/object:Gem::Requirement
249
+ none: false
250
+ requirements:
251
+ - - ! '>='
252
+ - !ruby/object:Gem::Version
253
+ version: '0'
254
+ description: A gem that provides a Redis based web analytics solution for your rack-compliant
255
+ apps. It gives you detailed analytics about visitors, unique visitors, browsers,
256
+ OS, visitor recency, traffic sources and more
257
+ email:
138
258
  - cardozoschubert@gmail.com
139
- executables:
259
+ executables:
140
260
  - redis_analytics_dashboard
141
261
  extensions: []
142
-
143
262
  extra_rdoc_files: []
144
-
145
- files:
263
+ files:
146
264
  - bin/GeoIP.dat
147
265
  - bin/redis_analytics_dashboard
266
+ - CHANGELOG.md
267
+ - config.ru
268
+ - CONTRIBUTING.md
148
269
  - Gemfile
149
270
  - Gemfile.lock
271
+ - Guardfile
150
272
  - lib/redis_analytics/analytics.rb
151
- - lib/redis_analytics/config.ru
273
+ - lib/redis_analytics/api.rb
152
274
  - lib/redis_analytics/configuration.rb
153
275
  - lib/redis_analytics/dashboard/public/css/bootstrap-responsive.min.css
154
276
  - lib/redis_analytics/dashboard/public/css/bootstrap.min.css
155
277
  - lib/redis_analytics/dashboard/public/css/jquery-jvectormap-1.2.2.css
156
278
  - lib/redis_analytics/dashboard/public/css/morris.css
157
- - lib/redis_analytics/dashboard/public/favicon.ico
279
+ - lib/redis_analytics/dashboard/public/img/favicon.ico
158
280
  - lib/redis_analytics/dashboard/public/img/glyphicons-halflings-white.png
159
281
  - lib/redis_analytics/dashboard/public/img/glyphicons-halflings.png
160
- - lib/redis_analytics/dashboard/public/javascripts/bootstrap.min.js
161
- - lib/redis_analytics/dashboard/public/javascripts/jquery-1.9.1.min.js
162
- - lib/redis_analytics/dashboard/public/javascripts/jquery-jvectormap-1.2.2.min.js
163
- - lib/redis_analytics/dashboard/public/javascripts/jquery-jvectormap-world-mill-en.js
164
- - lib/redis_analytics/dashboard/public/javascripts/morris.min.js
165
- - lib/redis_analytics/dashboard/public/javascripts/raphael-min.js
282
+ - lib/redis_analytics/dashboard/public/javascripts/vendor/bootstrap/bootstrap.min.js
283
+ - lib/redis_analytics/dashboard/public/javascripts/vendor/jquery-1.9.1.min.js
284
+ - lib/redis_analytics/dashboard/public/javascripts/vendor/jquery-jvectormap-1.2.2.min.js
285
+ - lib/redis_analytics/dashboard/public/javascripts/vendor/jquery-jvectormap-world-mill-en.js
286
+ - lib/redis_analytics/dashboard/public/javascripts/vendor/morris.min.js
287
+ - lib/redis_analytics/dashboard/public/javascripts/vendor/raphael-min.js
166
288
  - lib/redis_analytics/dashboard/views/activity.erb
289
+ - lib/redis_analytics/dashboard/views/dialogs/unique_visits.erb
290
+ - lib/redis_analytics/dashboard/views/dialogs/visits.erb
167
291
  - lib/redis_analytics/dashboard/views/footer.erb
168
292
  - lib/redis_analytics/dashboard/views/header.erb
169
293
  - lib/redis_analytics/dashboard/views/layout.erb
170
294
  - lib/redis_analytics/dashboard/views/visits.erb
171
295
  - lib/redis_analytics/dashboard/views/visits_js.erb
296
+ - lib/redis_analytics/dashboard/views/widgets/bounce_rate.erb
297
+ - lib/redis_analytics/dashboard/views/widgets/browsers_donut.erb
298
+ - lib/redis_analytics/dashboard/views/widgets/first_visits.erb
299
+ - lib/redis_analytics/dashboard/views/widgets/page_depth.erb
300
+ - lib/redis_analytics/dashboard/views/widgets/referers_donut.erb
301
+ - lib/redis_analytics/dashboard/views/widgets/total_page_views.erb
302
+ - lib/redis_analytics/dashboard/views/widgets/total_visits.erb
303
+ - lib/redis_analytics/dashboard/views/widgets/unique_visits_line.erb
304
+ - lib/redis_analytics/dashboard/views/widgets/visit_duration.erb
305
+ - lib/redis_analytics/dashboard/views/widgets/visit_spark.erb
306
+ - lib/redis_analytics/dashboard/views/widgets/visitor_recency_slices.erb
307
+ - lib/redis_analytics/dashboard/views/widgets/visits_area.erb
308
+ - lib/redis_analytics/dashboard/views/widgets/visits_donut.erb
309
+ - lib/redis_analytics/dashboard/views/widgets/world_map.erb
172
310
  - lib/redis_analytics/dashboard.rb
311
+ - lib/redis_analytics/filter.rb
173
312
  - lib/redis_analytics/helpers.rb
313
+ - lib/redis_analytics/metrics.rb
174
314
  - lib/redis_analytics/railtie.rb
175
315
  - lib/redis_analytics/time_ext.rb
176
316
  - lib/redis_analytics/tracker.rb
177
317
  - lib/redis_analytics/version.rb
318
+ - lib/redis_analytics/visit.rb
178
319
  - lib/redis_analytics.rb
179
320
  - LICENSE
180
321
  - Rakefile
181
322
  - README.md
182
- - redis_analytics-0.1.0.gem
183
323
  - redis_analytics.gemspec
184
324
  - screenshot.png
185
- - spec/redis_analytics_spec.rb
325
+ - spec/lib/redis_analytics/analytics_spec.rb
326
+ - spec/lib/redis_analytics/configuration_spec.rb
327
+ - spec/lib/redis_analytics/dashboard_spec.rb
328
+ - spec/lib/redis_analytics/filter_spec.rb
329
+ - spec/lib/redis_analytics/tracker_spec.rb
186
330
  - spec/spec_helper.rb
331
+ - spec/support/fakeredis.rb
332
+ - TODO.md
333
+ - wsd.png
187
334
  homepage: https://github.com/saturnine/redis_analytics
188
335
  licenses: []
189
-
190
336
  post_install_message:
191
337
  rdoc_options: []
192
-
193
- require_paths:
338
+ require_paths:
194
339
  - lib
195
- required_ruby_version: !ruby/object:Gem::Requirement
340
+ required_ruby_version: !ruby/object:Gem::Requirement
196
341
  none: false
197
- requirements:
198
- - - ">="
199
- - !ruby/object:Gem::Version
342
+ requirements:
343
+ - - ! '>='
344
+ - !ruby/object:Gem::Version
200
345
  version: 1.9.2
201
- required_rubygems_version: !ruby/object:Gem::Requirement
346
+ required_rubygems_version: !ruby/object:Gem::Requirement
202
347
  none: false
203
- requirements:
204
- - - ">="
205
- - !ruby/object:Gem::Version
206
- version: "0"
348
+ requirements:
349
+ - - ! '>='
350
+ - !ruby/object:Gem::Version
351
+ version: '0'
207
352
  requirements: []
208
-
209
353
  rubyforge_project: redis_analytics
210
- rubygems_version: 1.8.19
354
+ rubygems_version: 1.8.23
211
355
  signing_key:
212
356
  specification_version: 3
213
- summary: A gem that provides a Redis based web analytics solution for your rack-compliant apps
357
+ summary: Fast and efficient web analytics for Rack apps
214
358
  test_files: []
215
-
216
- has_rdoc: