how_are_we_doing 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. data/app/controllers/reports_controller.rb +1 -52
  2. data/app/helpers/reports_helper.rb +30 -4
  3. data/app/models/print.rb +1 -29
  4. data/app/models/share.rb +3 -29
  5. data/app/models/total.rb +2 -21
  6. data/app/models/view.rb +1 -29
  7. data/app/views/reports/_bar_graph.html.erb +48 -0
  8. data/app/views/reports/_line_graph.html.erb +40 -0
  9. data/app/views/reports/_recent_bar_graph.html.erb +41 -0
  10. data/app/views/reports/index.html.erb +12 -22
  11. data/config/locales/en.yml +16 -0
  12. data/lib/generators/how_are_we_doing/install/install_generator.rb +1 -0
  13. data/lib/generators/how_are_we_doing/install/templates/public/images/hawd/blank.png +0 -0
  14. data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/API.txt +85 -68
  15. data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/FAQ.txt +0 -0
  16. data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/NEWS.txt +12 -32
  17. data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/PLUGINS.txt +0 -0
  18. data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/README.txt +3 -3
  19. data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/excanvas.js +160 -663
  20. data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/excanvas.min.js +1 -1
  21. data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.crosshair.js +12 -51
  22. data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.image.js +0 -0
  23. data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.js +509 -155
  24. data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.navigate.js +0 -1
  25. data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.stack.js +0 -0
  26. data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.flot.threshold.js +0 -0
  27. data/lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/jquery.js +0 -0
  28. data/lib/generators/how_are_we_doing/install/templates/public/javascripts/how_are_we_doing.js +50 -8
  29. data/lib/how_are_we_doing/acts_as_analytical.rb +98 -0
  30. data/lib/{acts_as_printable.rb → how_are_we_doing/acts_as_printable.rb} +0 -0
  31. data/lib/{acts_as_shareable.rb → how_are_we_doing/acts_as_shareable.rb} +0 -0
  32. data/lib/{acts_as_totalable.rb → how_are_we_doing/acts_as_totalable.rb} +0 -0
  33. data/lib/{acts_as_viewable.rb → how_are_we_doing/acts_as_viewable.rb} +0 -0
  34. data/lib/how_are_we_doing/controllers/reports_helpers.rb +92 -0
  35. data/lib/how_are_we_doing/version.rb +1 -1
  36. data/lib/how_are_we_doing.rb +16 -8
  37. metadata +13 -6
@@ -114,7 +114,6 @@ Licensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-L
114
114
 
115
115
  eventHolder.mousewheel(function (e, delta) {
116
116
  clickHandler(e, delta < 0);
117
- return false;
118
117
  });
119
118
  }
120
119
  if (o.pan.interactive) {
@@ -49,15 +49,9 @@ function line_graph_it(data,graph_container_id) {
49
49
  );
50
50
 
51
51
  $("#"+graph_container_id).live("plothover", graph_hover_cb);
52
-
53
- // $.plot($("#graph"), formatted_data, {
54
- // bars: { show: true, barWidth: 0.6, series_spread: true, align: "center" },
55
- // xaxis: { ticks: [[0, "Make this first <a id='...title='62'>(remove)</a>"]], autoscaleMargin: .10 },
56
- // yaxis: { tickDecimals: 0, min: 0 },
57
- // grid: { hoverable: true, clickable: true }
58
- // });
59
52
  }
60
53
 
54
+ var previousPoint = null;
61
55
  function graph_hover_cb(event, pos, item) {
62
56
  if (item) {
63
57
  if (previousPoint != item.datapoint) {
@@ -86,4 +80,52 @@ function showTooltip(x, y, contents) {
86
80
  'z-index': 1000,
87
81
  opacity: 1
88
82
  }).appendTo("body").fadeIn(200);
89
- };
83
+ };
84
+
85
+ function bar_graph_it(data,graph_container_id) {
86
+ var formatted_data = [
87
+ data.metrics.totals,
88
+ data.metrics.prints,
89
+ data.metrics.views,
90
+ data.metrics.shares
91
+ ];
92
+
93
+ var ticks =
94
+ data.metrics.totals.ticks ||
95
+ data.metrics.prints.ticks ||
96
+ data.metrics.views.ticks ||
97
+ data.metrics.shares.ticks;
98
+
99
+ delete data.metrics.shares.ticks;
100
+ delete data.metrics.prints.ticks;
101
+ delete data.metrics.views.ticks;
102
+ delete data.metrics.totals.ticks;
103
+
104
+ var default_format_options = {
105
+ bars: {
106
+ show: true,
107
+ barWidth: 0.6,
108
+ series_spread: true,
109
+ align: "center"
110
+ },
111
+ xaxis: {
112
+ autoscaleMargin: .10,
113
+ ticks: ticks
114
+ },
115
+ yaxis: {
116
+ tickDecimals: 0,
117
+ min: 0
118
+ },
119
+ grid: {
120
+ clickable: true,
121
+ hoverable: true
122
+ }
123
+ };
124
+
125
+ $.plot($('#'+graph_container_id),
126
+ formatted_data,
127
+ $.extend(true, default_format_options, data.format_options)
128
+ );
129
+
130
+ $("#"+graph_container_id).live("plothover", graph_hover_cb);
131
+ }
@@ -0,0 +1,98 @@
1
+ module HowAreWeDoing
2
+ module ActsAsAnalytical #:nodoc:
3
+
4
+ def self.included(base)
5
+ base.extend ClassMethods
6
+ end
7
+
8
+ module ClassMethods
9
+ def acts_as_analytical
10
+ belongs_to "#{self.name.underscore}able".to_sym, :polymorphic => true
11
+ belongs_to :user
12
+
13
+ validates "#{self.name.underscore}able_type".to_sym, :presence => true, :on => :create
14
+ validates "#{self.name.underscore}able_id".to_sym, :presence => true, :on => :create
15
+
16
+ after_create :create_total
17
+
18
+ include HowAreWeDoing::ActsAsAnalytical::InstanceMethods
19
+ extend HowAreWeDoing::ActsAsAnalytical::SingletonMethods
20
+ end
21
+ end
22
+
23
+ module SingletonMethods
24
+ def json_data_for_line_graph(params)
25
+ start_date = params[:start_date]
26
+ end_date = params[:end_date]
27
+ parent_type = params[:parent_type]
28
+ parent_id = params[:parent_id]
29
+ assoc = parent_type.classify.constantize.find(parent_id) if parent_id and parent_type
30
+ arr = []
31
+ start_date.to_date.upto(end_date.to_date) do |day|
32
+ objects = (assoc ? assoc.send("#{self.name.underscore.pluralize}") : self).where("#{self.name.underscore.pluralize}".to_sym => {:created_at => day.beginning_of_day..day.end_of_day})
33
+ arr << ["#{day.beginning_of_day.to_time.to_i}000",objects.count]
34
+ end
35
+ arr
36
+ end
37
+
38
+ def json_data_for_bar_graph(params)
39
+ start_date = params[:start_date]
40
+ end_date = params[:end_date]
41
+ analytical_class = params[:analytical_type].classify.constantize
42
+ analytical_ids = params[:analytical_ids] ? params[:analytical_ids].split(",") : nil
43
+
44
+ objects = analytical_ids ? analytical_class.where(:id => analytical_ids) : analytical_class.limit(params[:analytical_limit]||6).where(:created_at => start_date.beginning_of_day.to_date..(end_date+1.day).beginning_of_day.to_date)
45
+
46
+ returning arr = [] do
47
+ objects.each_with_index do |object,i|
48
+ arr << [i,object.send("#{self.name.underscore.pluralize}".to_sym).where("#{self.name.underscore.pluralize}".to_sym => {:created_at => start_date.beginning_of_day.to_date..(end_date+1.day).beginning_of_day.to_date}).count]
49
+ end
50
+ end
51
+ end
52
+
53
+ def json_labels_for_bar_graph(params)
54
+ start_date = params[:start_date]
55
+ end_date = params[:end_date]
56
+ analytical_class = params[:analytical_type].classify.constantize
57
+ analytical_ids = params[:analytical_ids] ? params[:analytical_ids].split(",") : nil
58
+
59
+ objects = analytical_ids ? analytical_class.where(:id => analytical_ids) : analytical_class.limit(params[:analytical_limit]||6).where(:created_at => start_date.beginning_of_day.to_date..(end_date+1.day).beginning_of_day.to_date)
60
+
61
+ returning arr = [] do
62
+ objects.each_with_index do |object,i|
63
+ arr << [i,object.send("to_#{self.name.underscore}_chart_label")]
64
+ end
65
+ end
66
+ end
67
+
68
+ def json_labels_for_line_graph(params)
69
+ start_date = params[:start_date]
70
+ end_date = params[:end_date]
71
+ parent_type = params[:parent_type]
72
+ parent_id = params[:parent_id]
73
+ assoc = parent_type.classify.constantize.find(parent_id) if parent_id and parent_type
74
+
75
+ objects = (assoc ? assoc.send("#{self.name.underscore.pluralize}") : self).where("#{self.name.underscore.pluralize}".to_sym => {:created_at => start_date.beginning_of_day..end_date.end_of_day})
76
+ count = objects.count
77
+ objects = objects.where("#{self.name.underscore}able_id".to_sym.not_eq => nil)
78
+ label = objects.first.nil? ? "" : objects.first.send("#{self.name.underscore}able").send("to_#{self.name.underscore}_chart_label")
79
+
80
+ [count,label]
81
+ end
82
+ end
83
+
84
+ module InstanceMethods
85
+ def create_total
86
+ send("#{self.class.name.underscore}able").totals.create
87
+ end
88
+
89
+ def to_print_chart_label(graph_type=nil)
90
+ if respond_to?(:print_chart_label)
91
+ print_chart_label(graph_type)
92
+ else
93
+ to_s
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,92 @@
1
+ module HowAreWeDoing
2
+ module Controllers
3
+ module ReportsHelpers
4
+ def self.included(base)
5
+ base.respond_to :html, :json, :xml, :js
6
+ base.before_filter :set_dates, :only => :index
7
+ base.before_filter :set_graph_type, :only => :index
8
+ base.before_filter :set_analyticals, :only => :index
9
+ end
10
+ # extend ActiveSupport::Concern
11
+ #
12
+ # included do
13
+ # respond_to :html, :json, :xml, :js
14
+ # before_filter :set_dates, :only => :index
15
+ # before_filter :set_graph_type, :only => :index
16
+ # before_filter :set_analyticals, :only => :index
17
+ # end
18
+
19
+ def index
20
+ respond_to do |format|
21
+ format.html
22
+ format.json do
23
+ render :json => {
24
+ :metrics => {
25
+ :totals => params[:exclude_totals] ? {} : {
26
+ :data => Total.send("json_data_for_#{params[:graph_type]}",params),
27
+ :label => "Totals",
28
+ :color => 0,
29
+ :ticks => Total.send("json_labels_for_#{params[:graph_type]}",params)
30
+ },
31
+ :prints => params[:exclude_prints] ? {} : {
32
+ :data => Print.send("json_data_for_#{params[:graph_type]}",params),
33
+ :label => "Prints",
34
+ :color => 1,
35
+ :ticks => Print.send("json_labels_for_#{params[:graph_type]}",params)
36
+ },
37
+ :views => params[:exclude_views] ? {} : {
38
+ :data => View.send("json_data_for_#{params[:graph_type]}",params),
39
+ :label => "Views",
40
+ :color => 2,
41
+ :ticks => View.send("json_labels_for_#{params[:graph_type]}",params)
42
+ },
43
+ :shares => params[:exclude_shares] ? {} : {
44
+ :data => Share.send("json_data_for_#{params[:graph_type]}",params),
45
+ :label => "Shares",
46
+ :color => 3,
47
+ :ticks => Share.send("json_labels_for_#{params[:graph_type]}",params)
48
+ }
49
+ },
50
+ :format_options => format_options
51
+ }
52
+ end
53
+ end
54
+ end
55
+
56
+ protected
57
+ def set_analyticals
58
+ @analyticals = params[:analytical_type] ? params[:analytical_type].classify.constantize.order('id DESC') : []
59
+ @analytical_ids = params[:analytical_ids] ? params[:analytical_ids] : @analyticals.first.nil? ? [] : [@analyticals.first.id]
60
+
61
+ if @analytical_ids.empty? && params[:default_analytical_type]
62
+ @analyticals = params[:default_analytical_type].classify.constantize.order('id DESC')
63
+ @analytical_ids = @analyticals.limit(1).map(&:id)
64
+ end
65
+ end
66
+
67
+ def format_options
68
+ params[:graph_type] == 'line_graph' ? { :xaxis => { :max => "#{params[:end_date].to_time.to_i}000", :min => "#{params[:start_date].to_time.to_i}000"} } : {}
69
+ end
70
+
71
+ def set_graph_type
72
+ params[:graph_type] = params[:analytical_type].blank? ? 'line_graph' : 'bar_graph'
73
+ end
74
+
75
+ def set_dates
76
+ params[:start_date] ||= (Time.now - 2.weeks)
77
+ params[:end_date] ||= Time.now
78
+ if params[:start_date].to_s.match(/\//)
79
+ params[:start_date] = Date.strptime(params[:start_date], '%m/%d/%Y')
80
+ params[:end_date] = Date.strptime(params[:end_date], '%m/%d/%Y')
81
+ else
82
+ params[:start_date] = Date.parse(params[:start_date].to_s)
83
+ params[:end_date] = Date.parse(params[:end_date].to_s)
84
+ end
85
+
86
+ params[:start_date] = params[:start_date].to_time.utc.beginning_of_day
87
+ params[:end_date] = params[:end_date].to_time.utc.beginning_of_day
88
+
89
+ end
90
+ end
91
+ end
92
+ end
@@ -1,3 +1,3 @@
1
1
  module HowAreWeDoing
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -1,20 +1,28 @@
1
- require 'acts_as_printable'
2
- require 'acts_as_viewable'
3
- require 'acts_as_shareable'
4
- require 'acts_as_totalable'
5
1
  require File.join(File.dirname(__FILE__), '..', 'app', 'helpers', 'prints_helper')
6
2
  require File.join(File.dirname(__FILE__), '..', 'app', 'helpers', 'views_helper')
7
3
  require File.join(File.dirname(__FILE__), '..', 'app', 'helpers', 'shares_helper')
8
4
 
9
- ActiveRecord::Base.send(:include, HowAreWeDoing::ActsAsTotalable)
10
- ActiveRecord::Base.send(:include, HowAreWeDoing::ActsAsPrintable)
11
- ActiveRecord::Base.send(:include, HowAreWeDoing::ActsAsViewable)
12
- ActiveRecord::Base.send(:include, HowAreWeDoing::ActsAsShareable)
13
5
  ActionController::Base.helper(PrintsHelper)
14
6
  ActionController::Base.helper(SharesHelper)
15
7
  ActionController::Base.helper(ViewsHelper)
16
8
 
17
9
  module HowAreWeDoing
10
+ autoload :ActsAsAnalytical, 'how_are_we_doing/acts_as_analytical'
11
+ autoload :ActsAsTotalable, 'how_are_we_doing/acts_as_totalable'
12
+ autoload :ActsAsViewable, 'how_are_we_doing/acts_as_viewable'
13
+ autoload :ActsAsShareable, 'how_are_we_doing/acts_as_shareable'
14
+ autoload :ActsAsPrintable, 'how_are_we_doing/acts_as_printable'
15
+
16
+ module Controllers
17
+ autoload :ReportsHelpers, 'how_are_we_doing/controllers/reports_helpers'
18
+ end
19
+
18
20
  class Engine < ::Rails::Engine
19
21
  end
20
22
  end
23
+
24
+ ActiveRecord::Base.send(:include, HowAreWeDoing::ActsAsAnalytical)
25
+ ActiveRecord::Base.send(:include, HowAreWeDoing::ActsAsTotalable)
26
+ ActiveRecord::Base.send(:include, HowAreWeDoing::ActsAsPrintable)
27
+ ActiveRecord::Base.send(:include, HowAreWeDoing::ActsAsViewable)
28
+ ActiveRecord::Base.send(:include, HowAreWeDoing::ActsAsShareable)
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: how_are_we_doing
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.4
5
+ version: 0.0.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Gunner Technology, Cody Swann
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-03 00:00:00 -08:00
13
+ date: 2011-03-04 00:00:00 -08:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -60,18 +60,19 @@ files:
60
60
  - app/models/share.rb
61
61
  - app/models/total.rb
62
62
  - app/models/view.rb
63
+ - app/views/reports/_bar_graph.html.erb
64
+ - app/views/reports/_line_graph.html.erb
65
+ - app/views/reports/_recent_bar_graph.html.erb
63
66
  - app/views/reports/index.html.erb
67
+ - config/locales/en.yml
64
68
  - how_are_we_doing.gemspec
65
- - lib/acts_as_printable.rb
66
- - lib/acts_as_shareable.rb
67
- - lib/acts_as_totalable.rb
68
- - lib/acts_as_viewable.rb
69
69
  - lib/generators/how_are_we_doing/USAGE
70
70
  - lib/generators/how_are_we_doing/install/install_generator.rb
71
71
  - lib/generators/how_are_we_doing/install/templates/db/migrate/create_prints.rb
72
72
  - lib/generators/how_are_we_doing/install/templates/db/migrate/create_shares.rb
73
73
  - lib/generators/how_are_we_doing/install/templates/db/migrate/create_totals.rb
74
74
  - lib/generators/how_are_we_doing/install/templates/db/migrate/create_views.rb
75
+ - lib/generators/how_are_we_doing/install/templates/public/images/hawd/blank.png
75
76
  - lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/API.txt
76
77
  - lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/FAQ.txt
77
78
  - lib/generators/how_are_we_doing/install/templates/public/javascripts/flot/LICENSE.txt
@@ -149,6 +150,12 @@ files:
149
150
  - lib/generators/how_are_we_doing/install/templates/public/stylesheets/ui-lightness/images/ui-icons_ffffff_256x240.png
150
151
  - lib/generators/how_are_we_doing/install/templates/public/stylesheets/ui-lightness/jquery-ui-1.8.10.custom.css
151
152
  - lib/how_are_we_doing.rb
153
+ - lib/how_are_we_doing/acts_as_analytical.rb
154
+ - lib/how_are_we_doing/acts_as_printable.rb
155
+ - lib/how_are_we_doing/acts_as_shareable.rb
156
+ - lib/how_are_we_doing/acts_as_totalable.rb
157
+ - lib/how_are_we_doing/acts_as_viewable.rb
158
+ - lib/how_are_we_doing/controllers/reports_helpers.rb
152
159
  - lib/how_are_we_doing/version.rb
153
160
  has_rdoc: true
154
161
  homepage: ""