how_are_we_doing 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/reports_controller.rb +54 -0
- data/app/helpers/prints_helper.rb +25 -0
- data/app/helpers/reports_helper.rb +36 -0
- data/app/helpers/shares_helper.rb +25 -0
- data/app/helpers/views_helper.rb +25 -0
- data/app/models/print.rb +28 -0
- data/app/models/share.rb +29 -0
- data/app/models/total.rb +25 -0
- data/app/models/view.rb +28 -0
- data/app/views/reports/index.html.erb +28 -0
- data/how_are_we_doing.gemspec +3 -0
- data/lib/acts_as_printable.rb +8 -1
- data/lib/acts_as_shareable.rb +9 -2
- data/lib/acts_as_totalable.rb +31 -0
- data/lib/acts_as_viewable.rb +8 -1
- data/lib/generators/how_are_we_doing/install/install_generator.rb +9 -3
- data/lib/generators/how_are_we_doing/install/templates/db/migrate/create_totals.rb +16 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/API.txt +1024 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/FAQ.txt +71 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/LICENSE.txt +22 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/Makefile +15 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/NEWS.txt +340 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/PLUGINS.txt +105 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/README.txt +81 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/ajax.html +143 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/annotating.html +75 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/arrow-down.gif +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/arrow-left.gif +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/arrow-right.gif +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/arrow-up.gif +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/basic.html +38 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/data-eu-gdp-growth-1.json +4 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/data-eu-gdp-growth-2.json +4 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/data-eu-gdp-growth-3.json +4 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/data-eu-gdp-growth-4.json +4 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/data-eu-gdp-growth-5.json +4 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/data-eu-gdp-growth.json +4 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/data-japan-gdp-growth.json +4 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/data-usa-gdp-growth.json +4 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/dual-axis.html +39 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/graph-types.html +75 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/hs-2004-27-a-large_web.jpg +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/image.html +45 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/index.html +43 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/interacting.html +93 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/layout.css +6 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/navigate.html +118 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/selection.html +114 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/setting-options.html +65 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/stacking.html +77 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/thresholding.html +54 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/time.html +71 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/tracking.html +95 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/turning-series.html +98 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/visitors.html +90 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/examples/zooming.html +98 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/excanvas.js +1427 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/excanvas.min.js +1 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.colorhelpers.js +174 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.colorhelpers.min.js +1 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.crosshair.js +156 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.crosshair.min.js +1 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.image.js +237 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.image.min.js +1 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.js +2119 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.min.js +1 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.navigate.js +272 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.navigate.min.js +1 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.selection.js +299 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.selection.min.js +1 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.stack.js +152 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.stack.min.js +1 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.threshold.js +103 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.threshold.min.js +1 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.js +4376 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.min.js +19 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/how_are_we_doing.js +89 -0
- data/lib/generators/how_are_we_doing/install/templates/public/javascripts/jquery-ui-1.8.10.custom.min.js +99 -0
- data/lib/generators/how_are_we_doing/install/templates/public/stylesheets/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/stylesheets/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/stylesheets/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/stylesheets/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/stylesheets/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/stylesheets/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/stylesheets/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/stylesheets/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/stylesheets/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/stylesheets/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/stylesheets/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/stylesheets/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/stylesheets/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/stylesheets/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
- data/lib/generators/how_are_we_doing/install/templates/public/stylesheets/ui-lightness/jquery-ui-1.8.10.custom.css +362 -0
- data/lib/how_are_we_doing/version.rb +1 -1
- data/lib/how_are_we_doing.rb +8 -0
- metadata +112 -14
@@ -0,0 +1,54 @@
|
|
1
|
+
class ReportsController < ApplicationController
|
2
|
+
respond_to :html, :json, :xml, :js
|
3
|
+
before_filter :set_dates, :only => :index
|
4
|
+
|
5
|
+
def index
|
6
|
+
respond_to do |format|
|
7
|
+
format.html
|
8
|
+
format.json do
|
9
|
+
render :json => {
|
10
|
+
:metrics => {
|
11
|
+
:totals => params[:exclude_totals] ? {} : {
|
12
|
+
:data => Total.json_data_for_chart(params[:start_date],params[:end_date]),
|
13
|
+
:label => "Totals",
|
14
|
+
:color => 0,
|
15
|
+
:ticks => Total.json_labels_for_chart(params[:start_date],params[:end_date])
|
16
|
+
},
|
17
|
+
:prints => params[:exclude_prints] ? {} : {
|
18
|
+
:data => Print.json_data_for_chart(params[:start_date],params[:end_date]),
|
19
|
+
:label => "Prints",
|
20
|
+
:color => 1,
|
21
|
+
:ticks => Print.json_labels_for_chart(params[:start_date],params[:end_date])
|
22
|
+
},
|
23
|
+
:views => params[:exclude_views] ? {} : {
|
24
|
+
:data => View.json_data_for_chart(params[:start_date],params[:end_date]),
|
25
|
+
:label => "Views",
|
26
|
+
:color => 2,
|
27
|
+
:ticks => View.json_labels_for_chart(params[:start_date],params[:end_date])
|
28
|
+
},
|
29
|
+
:shares => params[:exclude_shares] ? {} : {
|
30
|
+
:data => Share.json_data_for_chart(params[:start_date],params[:end_date]),
|
31
|
+
:label => "Shares",
|
32
|
+
:color => 3,
|
33
|
+
:ticks => Share.json_labels_for_chart(params[:start_date],params[:end_date])
|
34
|
+
}
|
35
|
+
},
|
36
|
+
:format_options => {
|
37
|
+
:xaxis => {
|
38
|
+
:max => params[:end_date].to_time.to_i,
|
39
|
+
:min => params[:start_date].to_time.to_i
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
protected
|
48
|
+
def set_dates
|
49
|
+
params[:start_date] ||= (Date.today - 1.month)
|
50
|
+
params[:end_date] ||= (Date.today + 1.day)#Time.now.end_of_day.to_date
|
51
|
+
params[:start_date] = Date.parse(params[:start_date].to_s)
|
52
|
+
params[:end_date] = Date.parse(params[:end_date].to_s)
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module PrintsHelper
|
2
|
+
def record_print(printable,options={})
|
3
|
+
options.reverse_merge!({
|
4
|
+
:remote => true
|
5
|
+
})
|
6
|
+
|
7
|
+
if options[:remote]
|
8
|
+
'<script>
|
9
|
+
(function(){
|
10
|
+
var ua = navigator.userAgent.toLowerCase();
|
11
|
+
if (!window.ActiveXObject) {
|
12
|
+
request = new XMLHttpRequest();
|
13
|
+
} else if (ua.indexOf("msie 5") == -1) {
|
14
|
+
request = new ActiveXObject("Msxml2.XMLHTTP");
|
15
|
+
} else {
|
16
|
+
request = new ActiveXObject("Microsoft.XMLHTTP");
|
17
|
+
}
|
18
|
+
var params = {};
|
19
|
+
request.open("POST", "'+printable.class.name.underscore.pluralize+'/'+printable.id.to_s+'/prints.json");
|
20
|
+
request.send(params);
|
21
|
+
}());
|
22
|
+
</script>'.html_safe
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module ReportsHelper
|
2
|
+
def how_are_we_doing_chart(form_id,graph_container_id,graph_type)
|
3
|
+
<<-END.gsub(/^ {6}/, '')
|
4
|
+
<script>
|
5
|
+
$('##{form_id} input:checkbox').live('change',function(){
|
6
|
+
$('#'+$(this).attr('id').replace('include_','exclude_')).val($(this).attr("checked") ? "" : true);
|
7
|
+
});
|
8
|
+
|
9
|
+
$('##{form_id}').live('submit',function(){
|
10
|
+
var data = {};
|
11
|
+
|
12
|
+
$(this).find('input,select').each(function(i,element){
|
13
|
+
if(element.id && element.id.match(/exclude_/) && $(element).val()) {
|
14
|
+
data[element.name] = $(element).val();
|
15
|
+
}
|
16
|
+
})
|
17
|
+
|
18
|
+
$.ajax({
|
19
|
+
url: "#{reports_path(:json)}",
|
20
|
+
method: 'get',
|
21
|
+
data: $.param(data),
|
22
|
+
dataType: 'json',
|
23
|
+
success: function(data) {
|
24
|
+
#{graph_type}_graph_it(data,'#{graph_container_id}');
|
25
|
+
}
|
26
|
+
});
|
27
|
+
return false;
|
28
|
+
});
|
29
|
+
|
30
|
+
$(function(){
|
31
|
+
$('##{form_id}').trigger('submit');
|
32
|
+
});
|
33
|
+
</script>
|
34
|
+
END
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module SharesHelper
|
2
|
+
def record_share(shareable,service_ident,options={})
|
3
|
+
options.reverse_merge!({
|
4
|
+
:remote => true
|
5
|
+
})
|
6
|
+
|
7
|
+
if options[:remote]
|
8
|
+
'<script>
|
9
|
+
(function(){
|
10
|
+
var ua = navigator.userAgent.toLowerCase();
|
11
|
+
if (!window.ActiveXObject) {
|
12
|
+
request = new XMLHttpRequest();
|
13
|
+
} else if (ua.indexOf("msie 5") == -1) {
|
14
|
+
request = new ActiveXObject("Msxml2.XMLHTTP");
|
15
|
+
} else {
|
16
|
+
request = new ActiveXObject("Microsoft.XMLHTTP");
|
17
|
+
}
|
18
|
+
var params = {"share[service_ident]":\''+service_ident+'\'};
|
19
|
+
request.open("POST", "'+shareable.class.name.underscore.pluralize+'/'+shareable.id.to_s+'/shares.json");
|
20
|
+
request.send(params);
|
21
|
+
}());
|
22
|
+
</script>'.html_safe
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module ViewsHelper
|
2
|
+
def record_view(viewable,options={})
|
3
|
+
options.reverse_merge!({
|
4
|
+
:remote => true
|
5
|
+
})
|
6
|
+
|
7
|
+
if options[:remote]
|
8
|
+
'<script>
|
9
|
+
(function(){
|
10
|
+
var ua = navigator.userAgent.toLowerCase();
|
11
|
+
if (!window.ActiveXObject) {
|
12
|
+
request = new XMLHttpRequest();
|
13
|
+
} else if (ua.indexOf("msie 5") == -1) {
|
14
|
+
request = new ActiveXObject("Msxml2.XMLHTTP");
|
15
|
+
} else {
|
16
|
+
request = new ActiveXObject("Microsoft.XMLHTTP");
|
17
|
+
}
|
18
|
+
var params = {};
|
19
|
+
request.open("POST", "'+viewable.class.name.underscore.pluralize+'/'+viewable.id.to_s+'/views.json");
|
20
|
+
request.send(params);
|
21
|
+
}());
|
22
|
+
</script>'.html_safe
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/app/models/print.rb
CHANGED
@@ -1,3 +1,31 @@
|
|
1
1
|
class Print < ActiveRecord::Base
|
2
2
|
belongs_to :printable, :polymorphic => true
|
3
|
+
belongs_to :user
|
4
|
+
|
5
|
+
validates :printable_type, :presence => true, :on => :create
|
6
|
+
validates :printable_id, :presence => true, :on => :create
|
7
|
+
|
8
|
+
after_create :create_total
|
9
|
+
|
10
|
+
def self.json_data_for_chart(start_date,end_date)
|
11
|
+
arr = []
|
12
|
+
start_date.beginning_of_day.to_date.upto(end_date.end_of_day.to_date) do |day|
|
13
|
+
prints = self.where("created_at between ? and ?",day,day+1.day)
|
14
|
+
arr << [day.to_time.to_i,prints.count]
|
15
|
+
end
|
16
|
+
arr
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.json_labels_for_chart(start_date,end_date)
|
20
|
+
prints = self.where("created_at between ? and ?",start_date.beginning_of_day,end_date.end_of_day)
|
21
|
+
count = prints.count
|
22
|
+
prints = prints.where(:printable_id.not_eq => nil)
|
23
|
+
label = prints.first.nil? ? "" : prints.first.printable.to_print_chart_label
|
24
|
+
|
25
|
+
[count,label]
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_total
|
29
|
+
printable.totals.create
|
30
|
+
end
|
3
31
|
end
|
data/app/models/share.rb
CHANGED
@@ -1,8 +1,37 @@
|
|
1
1
|
class Share < ActiveRecord::Base
|
2
2
|
belongs_to :shareable, :polymorphic => true
|
3
|
+
belongs_to :user
|
4
|
+
|
3
5
|
before_create :set_url_hash
|
4
6
|
|
7
|
+
after_create :create_total
|
8
|
+
|
9
|
+
validates :shareable_type, :presence => true, :on => :create
|
10
|
+
validates :shareable_id, :presence => true, :on => :create
|
11
|
+
|
5
12
|
def set_url_hash
|
6
13
|
self.url_hash = Digest::SHA1.hexdigest("#{shareable_type}#{shareable_id}#{user_id}how_are_we_doing#{service_ident}")
|
7
14
|
end
|
15
|
+
|
16
|
+
def self.json_data_for_chart(start_date,end_date)
|
17
|
+
arr = []
|
18
|
+
start_date.beginning_of_day.to_date.upto(end_date.end_of_day.to_date) do |day|
|
19
|
+
shares = self.where("created_at between ? and ?",day,day+1.day)
|
20
|
+
arr << [day.to_time.to_i,shares.count]
|
21
|
+
end
|
22
|
+
arr
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.json_labels_for_chart(start_date,end_date)
|
26
|
+
shares = self.where("created_at between ? and ?",start_date.beginning_of_day,end_date.end_of_day)
|
27
|
+
count = shares.count
|
28
|
+
shares = shares.where(:shareable_id.not_eq => nil)
|
29
|
+
label = shares.first.nil? ? "" : shares.first.shareable.to_share_chart_label
|
30
|
+
|
31
|
+
[count,label]
|
32
|
+
end
|
33
|
+
|
34
|
+
def create_total
|
35
|
+
shareable.totals.create
|
36
|
+
end
|
8
37
|
end
|
data/app/models/total.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
class Total < ActiveRecord::Base
|
2
|
+
belongs_to :totalable, :polymorphic => true
|
3
|
+
belongs_to :user
|
4
|
+
|
5
|
+
validates :totalable_type, :presence => true, :on => :create
|
6
|
+
validates :totalable_id, :presence => true, :on => :create
|
7
|
+
|
8
|
+
def self.json_data_for_chart(start_date,end_date)
|
9
|
+
arr = []
|
10
|
+
start_date.beginning_of_day.to_date.upto(end_date.end_of_day.to_date) do |day|
|
11
|
+
totals = self.where("created_at between ? and ?",day,day+1.day)
|
12
|
+
arr << [day.to_time.to_i,totals.count]
|
13
|
+
end
|
14
|
+
arr
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.json_labels_for_chart(start_date,end_date)
|
18
|
+
totals = self.where("created_at between ? and ?",start_date.beginning_of_day,end_date.end_of_day)
|
19
|
+
count = totals.count
|
20
|
+
totals = totals.where(:totalable_id.not_eq => nil)
|
21
|
+
label = totals.first.nil? ? "" : totals.first.totalable.to_total_chart_label
|
22
|
+
|
23
|
+
[count,label]
|
24
|
+
end
|
25
|
+
end
|
data/app/models/view.rb
CHANGED
@@ -1,3 +1,31 @@
|
|
1
1
|
class View < ActiveRecord::Base
|
2
2
|
belongs_to :viewable, :polymorphic => true
|
3
|
+
belongs_to :user
|
4
|
+
|
5
|
+
validates :viewable_type, :presence => true, :on => :create
|
6
|
+
validates :viewable_id, :presence => true, :on => :create
|
7
|
+
|
8
|
+
after_create :create_total
|
9
|
+
|
10
|
+
def self.json_data_for_chart(start_date,end_date)
|
11
|
+
arr = []
|
12
|
+
start_date.beginning_of_day.to_date.upto(end_date.end_of_day.to_date) do |day|
|
13
|
+
views = self.where("created_at between ? and ?",day,day+1.day)
|
14
|
+
arr << [day.to_time.to_i,views.count]
|
15
|
+
end
|
16
|
+
arr
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.json_labels_for_chart(start_date,end_date)
|
20
|
+
views = self.where("created_at between ? and ?",start_date.beginning_of_day,end_date.end_of_day)
|
21
|
+
count = views.count
|
22
|
+
views = views.where(:viewable_id.not_eq => nil)
|
23
|
+
label = views.first.nil? ? "" : views.first.viewable.to_view_chart_label
|
24
|
+
|
25
|
+
[count,label]
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_total
|
29
|
+
viewable.totals.create
|
30
|
+
end
|
3
31
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<% content_for :javascripts do -%>
|
2
|
+
<%= javascript_include_tag 'flot/jquery.flot.js', 'how_are_we_doing' %>
|
3
|
+
<%= raw how_are_we_doing_chart("test","line-graph","line") %>
|
4
|
+
<% end -%>
|
5
|
+
|
6
|
+
<%= form_tag("/reports", {:method => "get", :id => "test"}) do %>
|
7
|
+
<%= label_tag 'include_totals', 'Totals' %>
|
8
|
+
<%= check_box_tag('include_totals', "1", true) %>
|
9
|
+
|
10
|
+
<%= label_tag 'include_views', 'Views' %>
|
11
|
+
<%= check_box_tag('include_views', "1", true) %>
|
12
|
+
|
13
|
+
<%= label_tag 'include_shares', 'Shares' %>
|
14
|
+
<%= check_box_tag('include_shares', "1", true) %>
|
15
|
+
|
16
|
+
<%= label_tag 'include_prints', 'Prints' %>
|
17
|
+
<%= check_box_tag('include_prints', "1", true) %>
|
18
|
+
|
19
|
+
<%= hidden_field_tag 'exclude_prints' %>
|
20
|
+
<%= hidden_field_tag 'exclude_totals' %>
|
21
|
+
<%= hidden_field_tag 'exclude_views' %>
|
22
|
+
<%= hidden_field_tag 'exclude_shares' %>
|
23
|
+
|
24
|
+
<%= submit_tag("Submit") %>
|
25
|
+
<% end -%>
|
26
|
+
|
27
|
+
|
28
|
+
<div id="line-graph" style="height:900px;"></div>
|
data/how_are_we_doing.gemspec
CHANGED
@@ -18,4 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
s.add_dependency("jquery-rails")
|
23
|
+
s.add_dependency("meta_where")
|
21
24
|
end
|
data/lib/acts_as_printable.rb
CHANGED
@@ -7,7 +7,7 @@ module HowAreWeDoing
|
|
7
7
|
|
8
8
|
module ClassMethods
|
9
9
|
def acts_as_printable
|
10
|
-
has_many :prints, :as => :printable
|
10
|
+
has_many :prints, :as => :printable, :dependent => :nullify
|
11
11
|
|
12
12
|
include HowAreWeDoing::ActsAsPrintable::InstanceMethods
|
13
13
|
extend HowAreWeDoing::ActsAsPrintable::SingletonMethods
|
@@ -18,6 +18,13 @@ module HowAreWeDoing
|
|
18
18
|
end
|
19
19
|
|
20
20
|
module InstanceMethods
|
21
|
+
def to_print_chart_label(graph_type=nil)
|
22
|
+
if respond_to?(:print_chart_label)
|
23
|
+
print_chart_label(graph_type)
|
24
|
+
else
|
25
|
+
to_s
|
26
|
+
end
|
27
|
+
end
|
21
28
|
end
|
22
29
|
end
|
23
30
|
end
|
data/lib/acts_as_shareable.rb
CHANGED
@@ -7,8 +7,8 @@ module HowAreWeDoing
|
|
7
7
|
|
8
8
|
module ClassMethods
|
9
9
|
def acts_as_shareable
|
10
|
-
has_many :shares, :as => :shareable
|
11
|
-
|
10
|
+
has_many :shares, :as => :shareable, :dependent => :nullify
|
11
|
+
|
12
12
|
include HowAreWeDoing::ActsAsShareable::InstanceMethods
|
13
13
|
extend HowAreWeDoing::ActsAsShareable::SingletonMethods
|
14
14
|
end
|
@@ -18,6 +18,13 @@ module HowAreWeDoing
|
|
18
18
|
end
|
19
19
|
|
20
20
|
module InstanceMethods
|
21
|
+
def to_share_chart_label(graph_type=nil)
|
22
|
+
if respond_to?(:share_chart_label)
|
23
|
+
share_chart_label(graph_type)
|
24
|
+
else
|
25
|
+
to_s
|
26
|
+
end
|
27
|
+
end
|
21
28
|
end
|
22
29
|
end
|
23
30
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module HowAreWeDoing
|
2
|
+
module ActsAsTotalable #:nodoc:
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.extend ClassMethods
|
6
|
+
end
|
7
|
+
|
8
|
+
module ClassMethods
|
9
|
+
def acts_as_totalable
|
10
|
+
has_many :totals, :as => :totalable, :dependent => :nullify
|
11
|
+
|
12
|
+
include HowAreWeDoing::ActsAsTotalable::InstanceMethods
|
13
|
+
extend HowAreWeDoing::ActsAsTotalable::SingletonMethods
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
module SingletonMethods
|
18
|
+
end
|
19
|
+
|
20
|
+
module InstanceMethods
|
21
|
+
def to_total_chart_label(graph_type=nil)
|
22
|
+
if respond_to?(:total_chart_label)
|
23
|
+
total_chart_label(graph_type)
|
24
|
+
else
|
25
|
+
to_s
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/acts_as_viewable.rb
CHANGED
@@ -7,7 +7,7 @@ module HowAreWeDoing
|
|
7
7
|
|
8
8
|
module ClassMethods
|
9
9
|
def acts_as_viewable
|
10
|
-
has_many :views, :as => :viewable
|
10
|
+
has_many :views, :as => :viewable, :dependent => :nullify
|
11
11
|
|
12
12
|
include HowAreWeDoing::ActsAsViewable::InstanceMethods
|
13
13
|
extend HowAreWeDoing::ActsAsViewable::SingletonMethods
|
@@ -18,6 +18,13 @@ module HowAreWeDoing
|
|
18
18
|
end
|
19
19
|
|
20
20
|
module InstanceMethods
|
21
|
+
def to_view_chart_label(graph_type=nil)
|
22
|
+
if respond_to?(:view_chart_label)
|
23
|
+
view_chart_label(graph_type)
|
24
|
+
else
|
25
|
+
to_s
|
26
|
+
end
|
27
|
+
end
|
21
28
|
end
|
22
29
|
end
|
23
30
|
end
|