how_are_we_doing 0.0.4 → 0.0.5

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 (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: ""