best_boy 2.2.3 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +74 -110
  3. data/app/assets/javascripts/best_boy/best_boy.js +0 -1
  4. data/app/assets/stylesheets/best_boy/base.sass +21 -0
  5. data/app/assets/stylesheets/best_boy/best_boy.css +1 -3
  6. data/app/controllers/best_boy/{best_boy_events_controller.rb → events_controller.rb} +4 -4
  7. data/{lib/best_boy/models/active_record → app/models}/best_boy/day_report.rb +0 -0
  8. data/app/models/best_boy/event.rb +29 -0
  9. data/{lib/best_boy/models/active_record → app/models}/best_boy/month_report.rb +0 -0
  10. data/app/views/best_boy/events/_navigation.html.erb +11 -0
  11. data/app/views/best_boy/events/charts.html.erb +33 -0
  12. data/app/views/best_boy/events/details.html.erb +98 -0
  13. data/app/views/best_boy/events/details.xml.haml +22 -0
  14. data/app/views/best_boy/events/index.html.erb +8 -0
  15. data/app/views/best_boy/events/lists.html.erb +62 -0
  16. data/app/views/best_boy/events/lists.xml.haml +8 -0
  17. data/app/views/best_boy/events/monthly_details.html.erb +67 -0
  18. data/app/views/best_boy/events/monthly_details.xml.haml +15 -0
  19. data/app/views/best_boy/events/stats.html.erb +89 -0
  20. data/app/views/best_boy/events/stats.xml.haml +18 -0
  21. data/app/views/layouts/best_boy/best_boy.html.erb +43 -0
  22. data/config/routes.rb +13 -7
  23. data/db/migrate/20150610155237_create_best_boy_events.rb +17 -0
  24. data/db/migrate/20150610155251_create_best_boy_reports.rb +28 -0
  25. data/lib/best_boy.rb +8 -5
  26. data/lib/best_boy/{controllers/best_boy_controller.rb → controller.rb} +6 -3
  27. data/lib/best_boy/engine.rb +7 -27
  28. data/lib/best_boy/{models/active_record/best_boy/eventable.rb → eventable.rb} +7 -6
  29. data/lib/best_boy/{models/active_record/best_boy/obeys_test_mode.rb → obeys_test_mode.rb} +0 -0
  30. data/lib/best_boy/{models/active_record/best_boy/reporting.rb → reporting.rb} +0 -0
  31. data/lib/best_boy/version.rb +1 -1
  32. data/lib/generators/best_boy/install_generator.rb +11 -0
  33. data/lib/generators/{templates → best_boy/templates/config/initializers}/best_boy.rb +0 -6
  34. data/lib/tasks/recover_report_history.rake +7 -7
  35. metadata +64 -71
  36. data/app/assets/images/best_boy/glyphicons-halflings-white.png +0 -0
  37. data/app/assets/images/best_boy/glyphicons-halflings.png +0 -0
  38. data/app/assets/javascripts/best_boy/bootstrap_datepicker.js +0 -401
  39. data/app/assets/stylesheets/best_boy/bootstrap.scss +0 -4983
  40. data/app/assets/stylesheets/best_boy/bootstrap_datepicker.css +0 -156
  41. data/app/views/best_boy/best_boy_events/_navigation.html.erb +0 -9
  42. data/app/views/best_boy/best_boy_events/charts.html.erb +0 -25
  43. data/app/views/best_boy/best_boy_events/details.html.erb +0 -88
  44. data/app/views/best_boy/best_boy_events/index.html.erb +0 -6
  45. data/app/views/best_boy/best_boy_events/lists.html.erb +0 -45
  46. data/app/views/best_boy/best_boy_events/monthly_details.html.erb +0 -51
  47. data/app/views/best_boy/best_boy_events/stats.html.erb +0 -80
  48. data/app/views/layouts/best_boy_backend.html.erb +0 -70
  49. data/lib/best_boy/models/active_record/best_boy_event.rb +0 -21
  50. data/lib/generators/active_record/best_boy_generator.rb +0 -29
  51. data/lib/generators/active_record/templates/add_event_source_to_best_boy_events_table.rb +0 -11
  52. data/lib/generators/active_record/templates/create_best_boy_events_table.rb +0 -17
  53. data/lib/generators/active_record/templates/create_best_boy_reports.rb +0 -30
  54. data/lib/generators/best_boy_generator.rb +0 -23
  55. data/lib/generators/templates/bootstrap/bootstrap.css +0 -4983
  56. data/lib/generators/templates/bootstrap/bootstrap_datepicker.css +0 -156
  57. data/lib/generators/templates/bootstrap/bootstrap_datepicker.js +0 -401
  58. data/lib/generators/templates/bootstrap/glyphicons-halflings-white.png +0 -0
  59. data/lib/generators/templates/bootstrap/glyphicons-halflings.png +0 -0
@@ -1,156 +0,0 @@
1
- /*!
2
- * Datepicker for Bootstrap
3
- *
4
- * Copyright 2012 Stefan Petre
5
- * Licensed under the Apache License v2.0
6
- * http://www.apache.org/licenses/LICENSE-2.0
7
- *
8
- */
9
- .datepicker {
10
- top: 0;
11
- left: 0;
12
- padding: 4px;
13
- margin-top: 1px;
14
- -webkit-border-radius: 4px;
15
- -moz-border-radius: 4px;
16
- border-radius: 4px;
17
- /*.dow {
18
- border-top: 1px solid #ddd !important;
19
- }*/
20
- }
21
- .datepicker:before {
22
- content: '';
23
- display: inline-block;
24
- border-left: 7px solid transparent;
25
- border-right: 7px solid transparent;
26
- border-bottom: 7px solid #ccc;
27
- border-bottom-color: rgba(0, 0, 0, 0.2);
28
- position: absolute;
29
- top: -7px;
30
- left: 6px;
31
- }
32
- .datepicker:after {
33
- content: '';
34
- display: inline-block;
35
- border-left: 6px solid transparent;
36
- border-right: 6px solid transparent;
37
- border-bottom: 6px solid #ffffff;
38
- position: absolute;
39
- top: -6px;
40
- left: 7px;
41
- }
42
- .datepicker > div {
43
- display: none;
44
- }
45
- .datepicker table {
46
- width: 100%;
47
- margin: 0;
48
- }
49
- .datepicker td, .datepicker th {
50
- text-align: center;
51
- width: 20px;
52
- height: 20px;
53
- -webkit-border-radius: 4px;
54
- -moz-border-radius: 4px;
55
- border-radius: 4px;
56
- }
57
- .datepicker td.day:hover {
58
- background: #eeeeee;
59
- cursor: pointer;
60
- }
61
- .datepicker td.old, .datepicker td.new {
62
- color: #999999;
63
- }
64
- .datepicker td.active, .datepicker td.active:hover {
65
- background-color: #006dcc;
66
- background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
67
- background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
68
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
69
- background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
70
- background-image: -o-linear-gradient(top, #0088cc, #0044cc);
71
- background-image: linear-gradient(top, #0088cc, #0044cc);
72
- background-repeat: repeat-x;
73
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
74
- border-color: #0044cc #0044cc #002a80;
75
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
76
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
77
- color: #fff;
78
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
79
- }
80
- .datepicker td.active:hover,
81
- .datepicker td.active:hover:hover,
82
- .datepicker td.active:active,
83
- .datepicker td.active:hover:active,
84
- .datepicker td.active.active,
85
- .datepicker td.active:hover.active,
86
- .datepicker td.active.disabled,
87
- .datepicker td.active:hover.disabled,
88
- .datepicker td.active[disabled],
89
- .datepicker td.active:hover[disabled] {
90
- background-color: #0044cc;
91
- }
92
- .datepicker td.active:active,
93
- .datepicker td.active:hover:active,
94
- .datepicker td.active.active,
95
- .datepicker td.active:hover.active {
96
- background-color: #003399 \9;
97
- }
98
- .datepicker td span {
99
- display: block;
100
- width: 47px;
101
- height: 54px;
102
- line-height: 54px;
103
- float: left;
104
- margin: 2px;
105
- cursor: pointer;
106
- -webkit-border-radius: 4px;
107
- -moz-border-radius: 4px;
108
- border-radius: 4px;
109
- }
110
- .datepicker td span:hover {
111
- background: #eeeeee;
112
- }
113
- .datepicker td span.active {
114
- background-color: #006dcc;
115
- background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
116
- background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
117
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
118
- background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
119
- background-image: -o-linear-gradient(top, #0088cc, #0044cc);
120
- background-image: linear-gradient(top, #0088cc, #0044cc);
121
- background-repeat: repeat-x;
122
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
123
- border-color: #0044cc #0044cc #002a80;
124
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
125
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
126
- color: #fff;
127
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
128
- }
129
- .datepicker td span.active:hover,
130
- .datepicker td span.active:active,
131
- .datepicker td span.active.active,
132
- .datepicker td span.active.disabled,
133
- .datepicker td span.active[disabled] {
134
- background-color: #0044cc;
135
- }
136
- .datepicker td span.active:active, .datepicker td span.active.active {
137
- background-color: #003399 \9;
138
- }
139
- .datepicker td span.old {
140
- color: #999999;
141
- }
142
- .datepicker th.switch {
143
- width: 145px;
144
- }
145
- .datepicker thead tr:first-child th {
146
- cursor: pointer;
147
- }
148
- .datepicker thead tr:first-child th:hover {
149
- background: #eeeeee;
150
- }
151
- .input-append.date .add-on i, .input-prepend.date .add-on i {
152
- display: block;
153
- cursor: pointer;
154
- width: 16px;
155
- height: 16px;
156
- }
@@ -1,9 +0,0 @@
1
- <div class="span12">
2
- <ul class="nav nav-tabs">
3
- <% available_owner_types.each do |owner_type| %>
4
- <li class="<%= (current_owner_type == owner_type) ? 'active' : nil %>">
5
- <%= link_to owner_type, send("best_boy_admin_#{referrer}_path", :owner_type => owner_type) %>
6
- </li>
7
- <% end %>
8
- </ul>
9
- </div>
@@ -1,25 +0,0 @@
1
- <% content_for :javascripts do %>
2
- <%= javascript_include_tag "https://www.google.com/jsapi" %>
3
- <% end %>
4
-
5
- <%= form_tag best_boy_admin_charts_path, :method => :get, :id => "chart-form" do %>
6
- <div class="span3">
7
- <%= select_tag :owner_type, options_for_select([["Owner", nil]] + available_owner_types, :selected => params[:owner_type]), :onchange => "submit();" %>
8
- </div>
9
- <div class="span3">
10
- <%= select_tag :event, options_for_select([["Event", nil]] + available_events, :selected => params[:event]), :onchange => "submit();" %>
11
- </div>
12
- <div class="span3">
13
- <%= select_tag :event_source, options_for_select([["Event Source", nil]] + available_event_sources, :selected => params[:event_source]), :onchange => "submit();" %>
14
- </div>
15
- <div class="span3">
16
- <%= select_tag :time_interval, options_for_select([["Time Interval", nil], ["yearly", "year"], ["monthly", "month"], ["weekly", "week"]], :selected => params[:time_interval]), :onchange => "submit();" %>
17
- </div>
18
- <% end %>
19
-
20
- <div class="span12">
21
- <div class="well">
22
- <div id='chart'></div>
23
- <%= render_chart(@chart, 'chart') %>
24
- </div>
25
- </div>
@@ -1,88 +0,0 @@
1
- <div class="span12">
2
- <div class="well">
3
- <%= link_to "<< back to stats", best_boy_admin_stats_path(:owner_type => current_owner_type) %>
4
- </div>
5
- </div>
6
-
7
- <div class="span12">
8
- <div class="well">
9
- <h3>Detailed Statistics</h3>
10
- <table class="table table-striped table-bordered">
11
- <thead>
12
- <tr>
13
- <th>Source</th>
14
- <th colspan="2">overall</th>
15
- <th colspan="2">year</th>
16
- <th colspan="2">month</th>
17
- <th colspan="2">week</th>
18
- <th colspan="2">day</th>
19
- </tr>
20
- </thead>
21
- <% if available_event_sources.first.present? %>
22
- <tbody>
23
- <% @sourced_occurrences.keys.each do |source| %>
24
- <tr>
25
- <td><%= source %><dd/td>
26
- <% @sourced_occurrences[source].keys.reverse.each do |time_period| %>
27
- <td><%= @sourced_occurrences[source][time_period] %></td>
28
- <td><%= relative_occurrences(@sourced_occurrences[source], time_period) %></td>
29
- <% end %>
30
- </tr>
31
- <% end %>
32
- </tbody>
33
- <% end %>
34
- <tfoot>
35
- <tr>
36
- <th>All</th>
37
- <% @occurrences[params[:event]].keys.reverse.each do |time_period| %>
38
- <th><%= @occurrences[params[:event]][time_period] %></th>
39
- <th><%= relative_occurrences(@occurrences[params[:event]], time_period)%></th>
40
- <% end %>
41
- </tr>
42
- </tfoot>
43
- </table>
44
- </div>
45
- </div>
46
-
47
- <div class="span12">
48
- <div class="well">
49
- <h3 class="pull-left">Detailed Statistics for <%= current_year %> per month</h3>
50
- <div class="pull-right">
51
- <%= form_tag best_boy_admin_details_path, :method => :get do %>
52
- <%= hidden_field_tag :owner_type, current_owner_type %>
53
- <%= hidden_field_tag :event, current_event %>
54
- <%= select_tag :year, options_for_select(available_years, :selected => current_year), :onchange => "submit();" %>
55
- <% end %>
56
- </div>
57
- <table class="table table-striped table-bordered">
58
- <thead>
59
- <tr>
60
- <th>Event Source</th>
61
- <% month_name_array.each do |month| %>
62
- <th><%= link_to month, best_boy_admin_monthly_details_path(:owner_type => current_owner_type, :event => current_event, :month => month, :year => current_year, :time_interval => "month") %></th>
63
- <% end %>
64
- </tr>
65
- </thead>
66
- <tbody>
67
- <% if available_event_sources? %>
68
- <% @event_selected_year_occurrences.keys.reject { |k| k == "All" }.each do |source| %>
69
- <tr>
70
- <td><%= source %></td>
71
- <% @event_selected_year_occurrences[source].keys.reject.each do |month| %>
72
- <td><%= @event_selected_year_occurrences[source][month] %></td>
73
- <% end %>
74
- </tr>
75
- <% end %>
76
- <% end %>
77
- </tbody>
78
- <tfoot>
79
- <tr>
80
- <td><strong>All</strong></td>
81
- <% @event_selected_year_occurrences["All"].keys.each do |month| %>
82
- <td><%= @event_selected_year_occurrences["All"][month] %></td>
83
- <% end %>
84
- </tr>
85
- </tfoot>
86
- </table>
87
- </div>
88
- </div>
@@ -1,6 +0,0 @@
1
- <div class="span12">
2
- <div class="hero-unit">
3
- <h2>BestBoy Administration Center</h1>
4
- <p>BestBoy provides several statistics and logs for you. You can access yearly, monthly, weekly and day statistics for your logged events per owner class. In the list and logs section you can see realtime events and search for date and events for each owner class.</p>
5
- </div>
6
- </div>
@@ -1,45 +0,0 @@
1
- <% content_for :javascripts do %>
2
- <%= javascript_include_tag "https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" %>
3
- <script type="text/javascript">
4
- $(function(){$('#dp1').datepicker().on('changeDate', function(){$('#list-form').submit();})});
5
- </script>
6
- <% end %>
7
-
8
- <%= render "navigation", :referrer => "lists" %>
9
-
10
- <div class="span12">
11
- <div class="well">
12
- <h3 class="pull-left">Log</h3>
13
- <div class="pull-right">
14
- <%= form_tag best_boy_admin_lists_path, :method => :get, :id => "list-form" do %>
15
- <div class="input-append date pull-left span3" id="dp1" data-date="<%= params[:date].present? ? params[:date] : l(Time.zone.now, :format => "%d-%m-%Y") %>" data-date-format="dd-mm-yyyy">
16
- <input name="date" class="span2" size="16" type="text" value="<%= params[:date] %>" readonly="readonly">
17
- <span class="add-on"><i class="icon-th"></i></span>
18
- </div>
19
- <%= hidden_field_tag :owner_type, current_owner_type %>
20
- <%= select_tag :event, options_for_select([["all Events", nil]] + available_events, :selected => current_event), :onchange => "submit();", :class => "span4" %>
21
- <% end %>
22
- </div>
23
- <table class="table table-striped table-bordered">
24
- <thead>
25
- <tr>
26
- <th>Owner Type</th>
27
- <th>Event</th>
28
- <th>Event source</th>
29
- <th>created_at</th>
30
- </tr>
31
- </thead>
32
- <tbody>
33
- <% collection.each do |best_boy_event| %>
34
- <tr>
35
- <td><%= best_boy_event.owner_type %></td>
36
- <td><%= best_boy_event.event %></td>
37
- <td><%= best_boy_event.event_source %></td>
38
- <td><%= best_boy_event.created_at %></td>
39
- </tr>
40
- <% end %>
41
- </tbody>
42
- </table>
43
- <%= paginate collection %>
44
- </div>
45
- </div>
@@ -1,51 +0,0 @@
1
- <% content_for :javascripts do %>
2
- <%= javascript_include_tag "https://www.google.com/jsapi" %>
3
- <% end %>
4
-
5
- <div class="span12">
6
- <div class="well">
7
- <%= link_to "<< back to stats", best_boy_admin_stats_path(:owner_type => current_owner_type) %>
8
- </div>
9
- </div>
10
-
11
- <div class="span12">
12
- <div class="well">
13
- <h3 class="pull-left">Detailed Statistics for <%= current_month %> <%= current_year %></h3>
14
- <div class="pull-right">
15
- <%= form_tag best_boy_admin_monthly_details_path, :method => :get do %>
16
- <%= hidden_field_tag :owner_type, current_owner_type %>
17
- <%= hidden_field_tag :event, current_event %>
18
- <%= hidden_field_tag :time_interval, "month" %>
19
- <%= select_tag :month, options_for_select(%w(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec), :selected => current_month), :onchange => "submit();" %>
20
- <%= select_tag :year, options_for_select(available_years, :selected => current_year), :onchange => "submit();" %>
21
- <% end %>
22
- </div>
23
- <table class="table table-striped table-bordered small-font">
24
- <thead>
25
- <tr>
26
- <th>Event Source</th>
27
- <% days_of(current_month).each do |day| %>
28
- <td><%= day.strftime("%d") %></td>
29
- <% end %>
30
- </tr>
31
- </thead>
32
- <tbody>
33
- <% @selected_month_occurrences.keys.each do |source| %>
34
- <tr>
35
- <td><%= source %></td>
36
- <% @selected_month_occurrences[source].keys.each do |day| %>
37
- <td><%= @selected_month_occurrences[source][day] %></td>
38
- <% end%>
39
- </tr>
40
- <% end%>
41
- </tbody>
42
- </table>
43
- </div>
44
- </div>
45
-
46
- <div class="span12">
47
- <div class="well">
48
- <div id='chart'></div>
49
- <%= render_chart(@chart, 'chart') %>
50
- </div>
51
- </div>
@@ -1,80 +0,0 @@
1
- <%= render "navigation", :referrer => "stats" %>
2
-
3
- <div class="span12">
4
- <div class="well">
5
- <h3>Statistics</h3>
6
- <table class="table table-striped table-bordered">
7
- <thead>
8
- <tr>
9
- <th>Event</th>
10
- <th>overall</th>
11
- <th>year</th>
12
- <th>month</th>
13
- <th>week</th>
14
- <th>day</th>
15
- </tr>
16
- </thead>
17
- <tbody>
18
- <% @occurrences.keys.each do |key| %>
19
- <tr>
20
- <td><%= link_to key, best_boy_admin_details_path(:event => key, :owner_type => current_owner_type) %></td>
21
- <td><%= @occurrences[key][:overall] %></td>
22
- <td><%= @occurrences[key][:yearly] %></td>
23
- <td><%= @occurrences[key][:monthly] %></td>
24
- <td><%= @occurrences[key][:weekly] %> </td>
25
- <td><%= @occurrences[key][:daily] %></td>
26
- </tr>
27
- <% end %>
28
- </tbody>
29
- <tfoot>
30
- <tr>
31
- <th>Total</th>
32
- <th><%= @this_year_totals[:overall] %></th>
33
- <th><%= @this_year_totals[:yearly] %></th>
34
- <th><%= @this_year_totals[:monthly] %></th>
35
- <th><%= @this_year_totals[:weekly] %></th>
36
- <th><%= @this_year_totals[:daily] %></th>
37
- </tr>
38
- </tfoot>
39
- </table>
40
- </div>
41
- </div>
42
- <div class="span12">
43
- <div class="well">
44
- <h3 class="pull-left">Statistics for <%= current_year %> per month</h3>
45
- <div class="pull-right">
46
- <%= form_tag best_boy_admin_stats_path, :method => :get do %>
47
- <%= hidden_field_tag :owner_type, current_owner_type %>
48
- <%= select_tag :year, options_for_select(available_years, :selected => current_year), :onchange => "submit();" %>
49
- <% end %>
50
- </div>
51
- <table class="table table-striped table-bordered">
52
- <thead>
53
- <tr>
54
- <th>Event</th>
55
- <% month_name_array.each do |month| %>
56
- <th><%= month %></th>
57
- <% end %>
58
- </tr>
59
- </thead>
60
- <tbody>
61
- <% @selected_year_occurrences.keys.each do |event| %>
62
- <tr>
63
- <td><%= event %></td>
64
- <% @selected_year_occurrences[event].keys.each do |month| %>
65
- <td><%= @selected_year_occurrences[event][month] %></td>
66
- <% end %>
67
- </tr>
68
- <% end %>
69
- </tbody>
70
- <tfoot>
71
- <tr>
72
- <th><strong>Total</strong></th>
73
- <% @selected_year_totals.keys.each do |month| %>
74
- <th><%= @selected_year_totals[month] %></th>
75
- <% end %>
76
- </tr>
77
- </tfoot>
78
- </table>
79
- </div>
80
- </div>