best_boy 0.2.2 → 0.3.0
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.
- data/CHANGELOG.md +8 -0
- data/README.md +13 -2
- data/app/assets/images/glyphicons-halflings-white.png +0 -0
- data/app/assets/images/glyphicons-halflings.png +0 -0
- data/app/assets/javascripts/bootstrap_datepicker.js +401 -0
- data/app/assets/stylesheets/bootstrap.scss +4983 -0
- data/app/assets/stylesheets/bootstrap_datepicker.css +156 -0
- data/app/controllers/best_boy/best_boy_events_controller.rb +78 -29
- data/app/views/best_boy/best_boy_events/details.html.erb +11 -8
- data/app/views/best_boy/best_boy_events/monthly_details.html.erb +51 -0
- data/app/views/layouts/best_boy_backend.html.erb +3 -0
- data/config/routes.rb +2 -1
- data/db/bestboy.db +0 -0
- data/lib/best_boy/version.rb +1 -1
- data/lib/generators/best_boy_generator.rb +11 -6
- metadata +8 -2
@@ -0,0 +1,156 @@
|
|
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
|
+
}
|
@@ -9,7 +9,22 @@ module BestBoy
|
|
9
9
|
|
10
10
|
helper_method :available_owner_types, :available_events, :available_event_sources, :available_years, :current_owner_type,
|
11
11
|
:current_event, :current_event_source, :current_year, :collection, :statistics, :stats_by_event_and_month,
|
12
|
-
:stats_by_event_source_and_month, :render_chart, :event_source_details, :month_name_array
|
12
|
+
:stats_by_event_source_and_month, :render_chart, :event_source_details, :month_name_array, :detail_count,
|
13
|
+
:current_month, :stats_by_event_source_and_day
|
14
|
+
|
15
|
+
def monthly_details
|
16
|
+
data_table = GoogleVisualr::DataTable.new
|
17
|
+
data_table.new_column('string', 'time')
|
18
|
+
available_event_sources.each do |source|
|
19
|
+
data_table.new_column('number', source.to_s)
|
20
|
+
end
|
21
|
+
|
22
|
+
(1..(Time.days_in_month("1-#{current_month}-#{current_year}".to_time.month))).each do |periode|
|
23
|
+
time = "#{periode}-#{current_month}-#{current_year}".to_time
|
24
|
+
data_table.add_row( [ periode.to_s] + available_event_sources.map{ |source| custom_data_count(source, time)})
|
25
|
+
end
|
26
|
+
@chart = GoogleVisualr::Interactive::AreaChart.new(data_table, { width: 900, height: 240, title: "" })
|
27
|
+
end
|
13
28
|
|
14
29
|
private
|
15
30
|
|
@@ -17,6 +32,16 @@ module BestBoy
|
|
17
32
|
chart.to_js(dom).html_safe
|
18
33
|
end
|
19
34
|
|
35
|
+
def prepare_chart
|
36
|
+
data_table = GoogleVisualr::DataTable.new
|
37
|
+
data_table.new_column('string', 'time')
|
38
|
+
data_table.new_column('number', current_owner_type.to_s)
|
39
|
+
time_periode_range.each do |periode|
|
40
|
+
data_table.add_row([chart_legend_time_name(periode), custom_data_count(current_event_source, calculated_point_in_time(periode))])
|
41
|
+
end
|
42
|
+
@chart = GoogleVisualr::Interactive::AreaChart.new(data_table, { width: 900, height: 240, title: "" })
|
43
|
+
end
|
44
|
+
|
20
45
|
def week_name_array
|
21
46
|
%w(Mon Tue Wed Thu Fri Sat Sun)
|
22
47
|
end
|
@@ -25,10 +50,10 @@ module BestBoy
|
|
25
50
|
%w(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
|
26
51
|
end
|
27
52
|
|
28
|
-
def custom_data_count(time)
|
53
|
+
def custom_data_count(source, time)
|
29
54
|
scope = BestBoyEvent.where("best_boy_events.owner_type = ?", current_owner_type)
|
30
55
|
scope = scope.where("best_boy_events.event = ?", current_event) if current_event.present?
|
31
|
-
scope = scope.where("best_boy_events.event_source = ?",
|
56
|
+
scope = scope.where("best_boy_events.event_source = ?", source) if source.present?
|
32
57
|
scope = scope.send("per_#{ current_time_interval == "year" ? "month" : "day" }", time)
|
33
58
|
scope.count
|
34
59
|
end
|
@@ -71,9 +96,24 @@ module BestBoy
|
|
71
96
|
BestBoyEvent.where("best_boy_events.owner_type = ? AND best_boy_events.event = ?", current_owner_type, event).per_month(date).count
|
72
97
|
end
|
73
98
|
|
99
|
+
def stats_by_owner_and_event_and_event_source(source)
|
100
|
+
if source.present?
|
101
|
+
scope = BestBoyEvent.where("best_boy_events.owner_type = ? AND best_boy_events.event = ? AND best_boy_events.event_source = ?", current_owner_type, current_event, source)
|
102
|
+
else
|
103
|
+
scope = BestBoyEvent.where("best_boy_events.owner_type = ? AND best_boy_events.event = ? AND best_boy_events.event_source IS NULL", current_owner_type, current_event)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
74
107
|
def stats_by_event_source_and_month(source, month)
|
75
108
|
date = "1-#{month}-#{current_year}".to_time
|
76
|
-
|
109
|
+
scope = stats_by_owner_and_event_and_event_source(source)
|
110
|
+
scope.per_month(date).count
|
111
|
+
end
|
112
|
+
|
113
|
+
def stats_by_event_source_and_day(source, day)
|
114
|
+
date = "#{day}-#{current_month}-#{current_year}".to_time
|
115
|
+
scope = stats_by_owner_and_event_and_event_source(source)
|
116
|
+
scope.per_day(date).count
|
77
117
|
end
|
78
118
|
|
79
119
|
def current_date
|
@@ -100,6 +140,10 @@ module BestBoy
|
|
100
140
|
@current_year ||= available_years.include?(params[:year]) ? params[:year] : Time.zone.now.year
|
101
141
|
end
|
102
142
|
|
143
|
+
def current_month
|
144
|
+
@current_month ||= month_name_array.include?(params[:month]) ? params[:month] : Time.zone.now.month
|
145
|
+
end
|
146
|
+
|
103
147
|
def available_events
|
104
148
|
@available_events ||= (
|
105
149
|
scope = BestBoyEvent.where("best_boy_events.owner_type = ?", current_owner_type)
|
@@ -124,43 +168,48 @@ module BestBoy
|
|
124
168
|
@available_owner_types ||= BestBoyEvent.select("DISTINCT best_boy_events.owner_type").order("best_boy_events.owner_type ASC").map(&:owner_type)
|
125
169
|
end
|
126
170
|
|
171
|
+
def detail_count
|
172
|
+
@detail_count ||= current_scope({:owner_type => params[:owner_type], :event => params[:event]}).count
|
173
|
+
end
|
174
|
+
|
175
|
+
def current_scope(options = {})
|
176
|
+
options.each do |key, value|
|
177
|
+
instance_var = "@#{key}"
|
178
|
+
instance_variable_set(instance_var, value)
|
179
|
+
end
|
180
|
+
|
181
|
+
scope = BestBoyEvent
|
182
|
+
scope = scope.where("best_boy_events.owner_type = ?", @owner_type) if @owner_type.present?
|
183
|
+
scope = scope.where("best_boy_events.event = ?", @event) if @event.present?
|
184
|
+
scope = scope.where("best_boy_events.event_source = ?", @event_source) if @event_source.present?
|
185
|
+
scope = scope.per_day(@date) if @date.present?
|
186
|
+
scope
|
187
|
+
end
|
188
|
+
|
189
|
+
def prepare_details(base_collection, key, options = {})
|
190
|
+
array = Array.new
|
191
|
+
base_collection.each do |item|
|
192
|
+
scope = current_scope(options.to_a + [[key.to_sym, item]])
|
193
|
+
array.push([item, scope.count] + %w(year month week day).map{ |delimiter| scope.send("per_#{delimiter}", Time.zone.now).count })
|
194
|
+
end
|
195
|
+
array
|
196
|
+
end
|
197
|
+
|
127
198
|
def collection
|
128
199
|
@best_boy_events ||= (
|
129
|
-
scope =
|
130
|
-
scope = scope.where("best_boy_events.owner_type = ?", params[:owner_type]) if params[:owner_type].present?
|
131
|
-
scope = scope.where("best_boy_events.event = ?", current_event) if current_event.present?
|
132
|
-
scope = scope.per_day(current_date) if current_date.present?
|
200
|
+
scope = current_scope({:owner_type => params[:owner_type], :event_source => current_event, :date => current_date})
|
133
201
|
scope = scope.order("best_boy_events.created_at DESC, best_boy_events.event ASC")
|
134
202
|
scope.page(params[:page]).per(50)
|
135
203
|
)
|
136
204
|
end
|
137
205
|
|
138
206
|
def statistics
|
139
|
-
@statistics =
|
140
|
-
available_events.each do |event|
|
141
|
-
scope = BestBoyEvent.where("best_boy_events.owner_type = ? AND best_boy_events.event = ?", current_owner_type, event)
|
142
|
-
@statistics.push([event, scope.count] + %w(year month week day).map{ |delimiter| scope.send("per_#{delimiter}", Time.zone.now).count })
|
143
|
-
end
|
144
|
-
@statistics
|
207
|
+
@statistics = prepare_details(available_events, "event", {:owner_type => current_owner_type})
|
145
208
|
end
|
146
209
|
|
147
210
|
def event_source_details
|
148
|
-
@event_source_details =
|
149
|
-
available_event_sources.each do |source|
|
150
|
-
scope = BestBoyEvent.where("best_boy_events.owner_type = ? AND best_boy_events.event = ?", current_owner_type, current_event).where("best_boy_events.event_source = ?", source)
|
151
|
-
@event_source_details.push([source, scope.count] + %w(year month week day).map{ |delimiter| scope.send("per_#{delimiter}", Time.zone.now).count })
|
152
|
-
end
|
153
|
-
@event_source_details
|
211
|
+
@event_source_details = prepare_details(available_event_sources, "event_source", {:owner_type => current_owner_type, :event => current_event})
|
154
212
|
end
|
155
213
|
|
156
|
-
def prepare_chart
|
157
|
-
data_table = GoogleVisualr::DataTable.new
|
158
|
-
data_table.new_column('string', 'time')
|
159
|
-
data_table.new_column('number', current_owner_type.to_s)
|
160
|
-
time_periode_range.each do |periode|
|
161
|
-
data_table.add_row([chart_legend_time_name(periode), custom_data_count(calculated_point_in_time(periode))])
|
162
|
-
end
|
163
|
-
@chart = GoogleVisualr::Interactive::AreaChart.new(data_table, { width: 900, height: 240, title: "" })
|
164
|
-
end
|
165
214
|
end
|
166
215
|
end
|
@@ -11,18 +11,21 @@
|
|
11
11
|
<thead>
|
12
12
|
<tr>
|
13
13
|
<th>Source</th>
|
14
|
-
<th>overall</th>
|
15
|
-
<th>year</th>
|
16
|
-
<th>month</th>
|
17
|
-
<th>week</th>
|
18
|
-
<th>day</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
19
|
</tr>
|
20
20
|
</thead>
|
21
21
|
<tbody>
|
22
22
|
<% event_source_details.each do |best_boy_event_source| %>
|
23
23
|
<tr>
|
24
24
|
<% (0..5).each do |key| %>
|
25
|
-
<td><%= best_boy_event_source[key] %></td>
|
25
|
+
<td><%= best_boy_event_source[key].present? ? best_boy_event_source[key] : "n.a." %></td>
|
26
|
+
<% if key != 0 %>
|
27
|
+
<td><%= number_with_precision((best_boy_event_source[key].to_f / detail_count) * 100, :precision => 2) %> %</td>
|
28
|
+
<% end %>
|
26
29
|
<% end %>
|
27
30
|
</tr>
|
28
31
|
<% end %>
|
@@ -46,14 +49,14 @@
|
|
46
49
|
<tr>
|
47
50
|
<th>Event</th>
|
48
51
|
<% month_name_array.each do |month| %>
|
49
|
-
<th><%= month %></th>
|
52
|
+
<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>
|
50
53
|
<% end %>
|
51
54
|
</tr>
|
52
55
|
</thead>
|
53
56
|
<tbody>
|
54
57
|
<% available_event_sources.each do |source| %>
|
55
58
|
<tr>
|
56
|
-
<td><%= source %></td>
|
59
|
+
<td><%= source.present? ? source : "n.a." %></td>
|
57
60
|
<% %w(1 2 3 4 5 6 7 8 9 10 11 12).each do |month| %>
|
58
61
|
<td><%= stats_by_event_source_and_month source, month %></td>
|
59
62
|
<% end %>
|
@@ -0,0 +1,51 @@
|
|
1
|
+
<% content_for :javascripts do %>
|
2
|
+
<script src='https://www.google.com/jsapi'></script>
|
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</th>
|
27
|
+
<% (1..(Time.days_in_month("1-#{current_month}-#{current_year}".to_time.month))).each do |day| %>
|
28
|
+
<td><%= day %></td>
|
29
|
+
<% end %>
|
30
|
+
</tr>
|
31
|
+
</thead>
|
32
|
+
<tbody>
|
33
|
+
<% available_event_sources.each do |source| %>
|
34
|
+
<tr>
|
35
|
+
<td><%= source.present? ? source : "n.a." %></td>
|
36
|
+
<% (1..(Time.days_in_month("1-#{current_month}-#{current_year}".to_time.month))).each do |day| %>
|
37
|
+
<td><%= stats_by_event_source_and_day 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>
|
data/config/routes.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
Rails.application.routes.draw do
|
1
|
+
Rails.application.routes.draw do
|
2
2
|
get "best_boy_admin" => "best_boy/best_boy_events#index", :as => :best_boy_admin
|
3
3
|
get "best_boy_admin/stats" => "best_boy/best_boy_events#stats", :as => :best_boy_admin_stats
|
4
4
|
get "best_boy_admin/lists" => "best_boy/best_boy_events#lists", :as => :best_boy_admin_lists
|
5
5
|
get "best_boy_admin/charts" => "best_boy/best_boy_events#charts", :as => :best_boy_admin_charts
|
6
6
|
get "best_boy_admin/details" => "best_boy/best_boy_events#details", :as => :best_boy_admin_details
|
7
|
+
get "best_boy_admin/monthly_details" => "best_boy/best_boy_events#monthly_details", :as => :best_boy_admin_monthly_details
|
7
8
|
end
|
data/db/bestboy.db
CHANGED
Binary file
|
data/lib/best_boy/version.rb
CHANGED
@@ -4,14 +4,19 @@ module BestBoy
|
|
4
4
|
hook_for :orm
|
5
5
|
source_root File.expand_path('../templates', __FILE__)
|
6
6
|
|
7
|
+
class_option :asset_pipeline, :type => :string, :aliases => "-a", :desc => "skip template creation due asset pipeline use", :default => "asset"
|
8
|
+
class_option :asset, :type => :boolean, :default => false
|
9
|
+
|
7
10
|
def copy_config_file
|
8
11
|
template 'best_boy.rb', 'config/initializers/best_boy.rb'
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
if not options[:asset_pipeline] == "asset" or not options[:asset]
|
13
|
+
template 'bootstrap/glyphicons-halflings-white.png', 'public/images/bootstrap/glyphicons-halflings-white.png'
|
14
|
+
template 'bootstrap/glyphicons-halflings.png', 'public/images/bootstrap/glyphicons-halflings.png'
|
15
|
+
template 'bootstrap/bootstrap.css', 'public/stylesheets/bootstrap.css'
|
16
|
+
#datepicker by Stefan Petre (http://www.eyecon.ro/bootstrap-datepicker)
|
17
|
+
template 'bootstrap/bootstrap_datepicker.css', 'public/stylesheets/bootstrap_datepicker.css'
|
18
|
+
template 'bootstrap/bootstrap_datepicker.js', 'public/javascripts/bootstrap_datepicker.js'
|
19
|
+
end
|
15
20
|
end
|
16
21
|
end
|
17
22
|
end
|