charted 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +5 -12
- data/lib/charted.rb +24 -23
- metadata +2 -18
data/README.md
CHANGED
@@ -38,14 +38,10 @@ Then initialize the database:
|
|
38
38
|
|
39
39
|
$ charted --migrate
|
40
40
|
|
41
|
-
The app should be mounted to `/charted` path on your domain
|
42
|
-
include the script right before the closing `</body>` tag:
|
41
|
+
The app should be mounted to `/charted` path on your domain
|
43
42
|
|
44
|
-
|
45
|
-
|
46
|
-
If you concatenate your JavaScript, you can generate the `script.js` file and
|
47
|
-
add it to your project. The downside being when you update the charted gem,
|
48
|
-
you'll also have to remember to update the JavaScript:
|
43
|
+
In your app, generate a `charted.js` file. This can be safely concatenated with
|
44
|
+
you other JavaScript assets.
|
49
45
|
|
50
46
|
$ charted --js > /path/to/my/project/public/charted.js
|
51
47
|
|
@@ -54,7 +50,7 @@ Updating
|
|
54
50
|
|
55
51
|
$ gem install charted
|
56
52
|
|
57
|
-
|
53
|
+
You may need to generate a `charted.js` file again:
|
58
54
|
|
59
55
|
$ charted --js > /path/to/my/project/public/charted.js
|
60
56
|
|
@@ -135,10 +131,7 @@ TODO
|
|
135
131
|
====
|
136
132
|
|
137
133
|
* don't catch-all load error, makes debugging config.ru difficult
|
138
|
-
*
|
139
|
-
* fix search terms
|
140
|
-
* consider removing colored titles
|
141
|
-
* shorten lists (too many single entries) on dashboard, add --full?
|
134
|
+
* add --full or --single
|
142
135
|
* browser version (IE6, IE7, IE8...) ?
|
143
136
|
* handle 255 string length limit
|
144
137
|
|
data/lib/charted.rb
CHANGED
@@ -13,14 +13,13 @@ require 'geoip'
|
|
13
13
|
require 'pony'
|
14
14
|
require 'useragent'
|
15
15
|
require 'search_terms'
|
16
|
-
require 'colorize'
|
17
16
|
require 'dashes'
|
18
17
|
|
19
18
|
DataMapper::Model.raise_on_save_failure = true
|
20
19
|
DataMapper::Property::String.length(255)
|
21
20
|
|
22
21
|
module Charted
|
23
|
-
VERSION = '0.0.
|
22
|
+
VERSION = '0.0.6'
|
24
23
|
GEOIP = GeoIP.new("#{File.dirname(__FILE__)}/../geoip.dat")
|
25
24
|
JS_FILE = "#{File.dirname(__FILE__)}/../public/charted/script.js"
|
26
25
|
|
@@ -338,17 +337,15 @@ module Charted
|
|
338
337
|
max_width = [`tput cols`.to_i / 2, 60].min
|
339
338
|
chart = Dashes::Chart.new.
|
340
339
|
max_width(max_width).
|
341
|
-
title("Total Visits"
|
340
|
+
title("Total Visits")
|
342
341
|
chart2 = Dashes::Chart.new.
|
343
342
|
max_width(max_width).
|
344
|
-
title("Unique Visits"
|
343
|
+
title("Unique Visits")
|
345
344
|
table = Dashes::Table.new.
|
346
345
|
max_width(max_width).
|
347
346
|
spacing(:min, :min, :max).
|
348
347
|
align(:right, :right, :left).
|
349
|
-
row('Total'.
|
350
|
-
'Unique'.colorize(:light_blue),
|
351
|
-
'Visits'.colorize(:light_green)).
|
348
|
+
row('Total', 'Unique', 'Visits').
|
352
349
|
separator
|
353
350
|
(0..11).each do |delta|
|
354
351
|
date = Charted.prev_month(Date.today, delta)
|
@@ -374,9 +371,7 @@ module Charted
|
|
374
371
|
max_width(max_width).
|
375
372
|
spacing(:min, :min, :max).
|
376
373
|
align(:right, :right, :left).
|
377
|
-
row('Total'.
|
378
|
-
'%'.colorize(:light_blue),
|
379
|
-
column.colorize(:light_green)).separator
|
374
|
+
row('Total', '%', column).separator
|
380
375
|
rows = []
|
381
376
|
total = @site.send(type).count(field.not => nil)
|
382
377
|
@site.send(type).aggregate(field, :all.count).each do |label, count|
|
@@ -385,52 +380,49 @@ module Charted
|
|
385
380
|
label = "#{label[0..37]}..." if label.length > 40
|
386
381
|
rows << [format(count), "#{((count / total.to_f) * 100).round}%", label]
|
387
382
|
end
|
388
|
-
rows
|
383
|
+
add_truncated(table, rows)
|
389
384
|
nodes << table
|
390
385
|
end
|
391
386
|
table = Dashes::Table.new.
|
392
387
|
max_width(max_width).
|
393
388
|
spacing(:min, :min, :max).
|
394
389
|
align(:right, :right, :left).
|
395
|
-
row('Total'.
|
396
|
-
|
397
|
-
'Events'.colorize(:light_green)).separator
|
390
|
+
row('Total', 'Unique', 'Events').
|
391
|
+
separator
|
398
392
|
rows = []
|
399
393
|
@site.events.aggregate(:label, :all.count).each do |label, count|
|
400
394
|
unique = @site.visitors.count(:events => {label: label})
|
401
395
|
rows << [format(count), format(unique), label]
|
402
396
|
end
|
403
|
-
rows
|
397
|
+
add_truncated(table, rows)
|
404
398
|
nodes << table
|
405
399
|
|
406
400
|
table = Dashes::Table.new.
|
407
401
|
max_width(max_width).
|
408
402
|
spacing(:min, :min, :max).
|
409
403
|
align(:right, :right, :left).
|
410
|
-
row('Start'.
|
411
|
-
|
412
|
-
'Conversions'.colorize(:light_green)).separator
|
404
|
+
row('Start', 'End', 'Conversions').
|
405
|
+
separator
|
413
406
|
rows = []
|
414
407
|
@site.conversions.aggregate(:label, :all.count).each do |label, count|
|
415
408
|
ended = @site.conversions.count(label: label, :ended_at.not => nil)
|
416
409
|
rows << [format(count), format(ended), label]
|
417
410
|
end
|
418
|
-
rows
|
411
|
+
add_truncated(table, rows)
|
419
412
|
nodes << table
|
420
413
|
|
421
414
|
table = Dashes::Table.new.
|
422
415
|
max_width(max_width).
|
423
416
|
spacing(:min, :min, :max).
|
424
417
|
align(:right, :right, :left).
|
425
|
-
row('Start'.
|
426
|
-
|
427
|
-
'Experiments'.colorize(:light_green)).separator
|
418
|
+
row('Start', 'End', 'Experiments').
|
419
|
+
separator
|
428
420
|
rows = []
|
429
421
|
@site.experiments.aggregate(:label, :bucket, :all.count).each do |label, bucket, count|
|
430
422
|
ended = @site.experiments.count(label: label, bucket: bucket, :ended_at.not => nil)
|
431
423
|
rows << [format(count), format(ended), "#{label}: #{bucket}"]
|
432
424
|
end
|
433
|
-
rows
|
425
|
+
add_truncated(table, rows)
|
434
426
|
nodes << table
|
435
427
|
|
436
428
|
nodes.reject! do |node|
|
@@ -498,6 +490,15 @@ module Charted
|
|
498
490
|
def format(num)
|
499
491
|
num.to_s.reverse.gsub(/...(?=.)/,'\&,').reverse
|
500
492
|
end
|
493
|
+
|
494
|
+
def add_truncated(table, rows)
|
495
|
+
rows = rows.sort_by { |r| r[1].to_i }.reverse
|
496
|
+
if rows.length > 12
|
497
|
+
rows = rows[0..11]
|
498
|
+
rows << ['...', '...', '...']
|
499
|
+
end
|
500
|
+
rows.each { |row| table.row(*row) }
|
501
|
+
end
|
501
502
|
end
|
502
503
|
|
503
504
|
class ExitError < RuntimeError; end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: charted
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: .
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
@@ -107,22 +107,6 @@ dependencies:
|
|
107
107
|
- - ! '>='
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '0'
|
110
|
-
- !ruby/object:Gem::Dependency
|
111
|
-
name: colorize
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
|
-
requirements:
|
115
|
-
- - ! '>='
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :runtime
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
|
-
requirements:
|
123
|
-
- - ! '>='
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: '0'
|
126
110
|
- !ruby/object:Gem::Dependency
|
127
111
|
name: dashes
|
128
112
|
requirement: !ruby/object:Gem::Requirement
|