best_boy 1.0.3 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/best_boy/best_boy_events_controller.rb +109 -68
- data/app/views/best_boy/best_boy_events/details.html.erb +25 -11
- data/app/views/best_boy/best_boy_events/monthly_details.html.erb +5 -5
- data/app/views/best_boy/best_boy_events/stats.html.erb +27 -9
- data/best_boy.gemspec +2 -2
- data/db/bestboy.db +0 -0
- data/lib/best_boy/version.rb +1 -1
- metadata +10 -10
@@ -7,25 +7,115 @@ module BestBoy
|
|
7
7
|
|
8
8
|
layout 'best_boy_backend'
|
9
9
|
|
10
|
-
helper_method :available_owner_types, :available_events, :available_event_sources, :available_years,
|
11
|
-
:
|
12
|
-
:
|
13
|
-
|
10
|
+
helper_method :available_owner_types, :available_events, :available_event_sources, :available_years,
|
11
|
+
:current_owner_type, :current_event, :current_event_source, :current_month, :current_year, :collection,
|
12
|
+
:render_chart, :month_name_array, :detail_count
|
13
|
+
|
14
|
+
|
15
|
+
def stats
|
16
|
+
counter_scope = BestBoyEvent.select("COUNT(*) as counter, event").where(:owner_type => current_owner_type).group('event')
|
17
|
+
|
18
|
+
# Custom hash for current event stats - current_year, current_month, current_week, current_day (with given current_owner_type)
|
19
|
+
# We fire 5 database queries, one for each group, to keep it database acnostic.
|
20
|
+
# Before we had 5 * n events queries
|
21
|
+
@event_counts_per_group = {}
|
22
|
+
overall_hash = counter_scope.inject({}){ |hash, element| hash[element.event] = element.counter; hash}
|
23
|
+
current_year_hash = counter_scope.per_year(Time.zone.now).inject({}){ |hash, element| hash[element.event] = element.counter; hash }
|
24
|
+
current_month_hash = counter_scope.per_month(Time.zone.now).inject({}){ |hash, element| hash[element.event] = element.counter; hash }
|
25
|
+
current_week_hash = counter_scope.per_week(Time.zone.now).inject({}){ |hash, element| hash[element.event] = element.counter; hash }
|
26
|
+
current_day_hash = counter_scope.per_day(Time.zone.now).inject({}){ |hash, element| hash[element.event] = element.counter; hash }
|
27
|
+
|
28
|
+
available_events.each do |event|
|
29
|
+
@event_counts_per_group[event] ||= {}
|
30
|
+
@event_counts_per_group[event]['overall'] = overall_hash[event] || 0
|
31
|
+
@event_counts_per_group[event]['year'] = current_year_hash[event] || 0
|
32
|
+
@event_counts_per_group[event]['month'] = current_month_hash[event] || 0
|
33
|
+
@event_counts_per_group[event]['week'] = current_week_hash[event] || 0
|
34
|
+
@event_counts_per_group[event]['day'] = current_day_hash[event] || 0
|
35
|
+
end
|
36
|
+
|
37
|
+
# Custom hash for current event stats per month (with given current_owner_type)
|
38
|
+
# We fire 12 database queries, one for each month, to keep it database acnostic.
|
39
|
+
# Before we had 12 * n events queries
|
40
|
+
@event_counts_per_month = {}
|
41
|
+
%w(1 2 3 4 5 6 7 8 9 10 11 12).each do |month|
|
42
|
+
month_hash = counter_scope.per_month("1-#{month}-#{current_year}".to_time).inject({}){ |hash, element| hash[element.event] = element.counter; hash}
|
43
|
+
|
44
|
+
available_events.each do |event|
|
45
|
+
@event_counts_per_month[event] ||= {}
|
46
|
+
@event_counts_per_month[event][month] = month_hash[event] || 0
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
def details
|
53
|
+
counter_scope = BestBoyEvent.select("COUNT(*) as counter, event_source").where(owner_type: current_owner_type, event: current_event).group('event_source')
|
54
|
+
|
55
|
+
# Custom hash for current event_source stats - current_year, current_month, current_week, current_day (with given current_owner_type)
|
56
|
+
# We fire 5 database queries, one for each group, to keep it database acnostic.
|
57
|
+
# Before we had 5 * n event_sources queries
|
58
|
+
@event_source_counts_per_group = {}
|
59
|
+
overall_hash = counter_scope.inject({}){ |hash, element| hash[element.event_source] = element.counter; hash}
|
60
|
+
current_year_hash = counter_scope.per_year(Time.zone.now).inject({}){ |hash, element| hash[element.event_source] = element.counter; hash}
|
61
|
+
current_month_hash = counter_scope.per_month(Time.zone.now).inject({}){ |hash, element| hash[element.event_source] = element.counter; hash}
|
62
|
+
current_week_hash = counter_scope.per_week(Time.zone.now).inject({}){ |hash, element| hash[element.event_source] = element.counter; hash}
|
63
|
+
current_day_hash = counter_scope.per_day(Time.zone.now).inject({}){ |hash, element| hash[element.event_source] = element.counter; hash}
|
64
|
+
|
65
|
+
available_event_sources.each do |event_source|
|
66
|
+
@event_source_counts_per_group[event_source] ||= {}
|
67
|
+
@event_source_counts_per_group[event_source]['overall'] = overall_hash[event_source] || 0
|
68
|
+
@event_source_counts_per_group[event_source]['year'] = current_year_hash[event_source] || 0
|
69
|
+
@event_source_counts_per_group[event_source]['month'] = current_month_hash[event_source] || 0
|
70
|
+
@event_source_counts_per_group[event_source]['week'] = current_week_hash[event_source] || 0
|
71
|
+
@event_source_counts_per_group[event_source]['day'] = current_day_hash[event_source] || 0
|
72
|
+
end
|
73
|
+
|
74
|
+
# Custom hash for current event_sources stats per month (with given current_owner_type and given event)
|
75
|
+
# We fire 12 database queries, one for each month, to keep it database acnostic.
|
76
|
+
# Before we had 12 * n event_sources queries
|
77
|
+
@event_sources_counts_per_month = {}
|
78
|
+
%w(1 2 3 4 5 6 7 8 9 10 11 12).each do |month|
|
79
|
+
month_hash = counter_scope.per_month("1-#{month}-#{current_year}".to_time).inject({}){ |hash, element| hash[element.event_source] = element.counter; hash}
|
80
|
+
|
81
|
+
available_event_sources.each do |event_source|
|
82
|
+
@event_sources_counts_per_month[event_source] ||= {}
|
83
|
+
@event_sources_counts_per_month[event_source][month] = month_hash[event_source] || 0
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
14
88
|
|
15
89
|
def monthly_details
|
90
|
+
counter_scope = BestBoyEvent.select("COUNT(*) as counter, event_source").where(owner_type: current_owner_type, event: current_event).group('event_source')
|
91
|
+
days = 1..(Time.days_in_month("1-#{current_month}-#{current_year}".to_time.month))
|
92
|
+
# Custom hash for current event_sources stats per month (with given current_owner_type and given event)
|
93
|
+
# We fire a max of 31 database queries, one for each day, to keep it database acnostic.
|
94
|
+
# Before we had 31 * n event_sources queries
|
95
|
+
@event_sources_counts_per_day = {}
|
96
|
+
days.each do |day|
|
97
|
+
day_hash = counter_scope.per_day("#{day}-#{current_month}-#{current_year}".to_time).inject({}){ |hash, element| hash[element.event_source] = element.counter; hash}
|
98
|
+
|
99
|
+
available_event_sources.each do |event_source|
|
100
|
+
@event_sources_counts_per_day[event_source] ||= {}
|
101
|
+
@event_sources_counts_per_day[event_source][day] = day_hash[event_source] || 0
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
16
105
|
data_table = GoogleVisualr::DataTable.new
|
17
106
|
data_table.new_column('string', 'time')
|
18
107
|
available_event_sources.each do |source|
|
19
108
|
data_table.new_column('number', source.to_s)
|
20
109
|
end
|
21
110
|
|
22
|
-
|
23
|
-
time = "#{
|
24
|
-
data_table.add_row( [
|
111
|
+
days.each do |day|
|
112
|
+
time = "#{day}-#{current_month}-#{current_year}".to_time
|
113
|
+
data_table.add_row( [ day.to_s] + available_event_sources.map{ |event_source| @event_sources_counts_per_day[event_source][day].to_i })
|
25
114
|
end
|
26
115
|
@chart = GoogleVisualr::Interactive::AreaChart.new(data_table, { width: 900, height: 240, title: "" })
|
27
116
|
end
|
28
117
|
|
118
|
+
|
29
119
|
private
|
30
120
|
|
31
121
|
def render_chart(chart, dom)
|
@@ -51,9 +141,9 @@ module BestBoy
|
|
51
141
|
end
|
52
142
|
|
53
143
|
def custom_data_count(source, time)
|
54
|
-
scope = BestBoyEvent.where(
|
55
|
-
scope = scope.where(
|
56
|
-
scope = scope.where(
|
144
|
+
scope = BestBoyEvent.where(owner_type: current_owner_type)
|
145
|
+
scope = scope.where(event: current_event) if current_event.present?
|
146
|
+
scope = scope.where(event_source: source) if source.present?
|
57
147
|
scope = scope.send("per_#{ current_time_interval == "year" ? "month" : "day" }", time)
|
58
148
|
scope.count
|
59
149
|
end
|
@@ -91,31 +181,6 @@ module BestBoy
|
|
91
181
|
end
|
92
182
|
end
|
93
183
|
|
94
|
-
def stats_by_event_and_month(event, month)
|
95
|
-
date = "1-#{month}-#{current_year}".to_time
|
96
|
-
BestBoyEvent.where("best_boy_events.owner_type = ? AND best_boy_events.event = ?", current_owner_type, event).per_month(date).count
|
97
|
-
end
|
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
|
-
|
107
|
-
def stats_by_event_source_and_month(source, month)
|
108
|
-
date = "1-#{month}-#{current_year}".to_time
|
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
|
117
|
-
end
|
118
|
-
|
119
184
|
def current_date
|
120
185
|
@current_date ||= Date.strptime(params[:date], "%d-%m-%Y") if params[:date] rescue nil
|
121
186
|
end
|
@@ -145,27 +210,21 @@ module BestBoy
|
|
145
210
|
end
|
146
211
|
|
147
212
|
def available_events
|
148
|
-
@available_events ||= (
|
149
|
-
scope = BestBoyEvent.where("best_boy_events.owner_type = ?", current_owner_type)
|
150
|
-
scope = scope.select("best_boy_events.event").order("best_boy_events.event ASC")
|
151
|
-
scope = scope.group("best_boy_events.event").map(&:event)
|
152
|
-
)
|
213
|
+
@available_events ||= BestBoyEvent.select('DISTINCT event').where(owner_type: current_owner_type).order(:event).map(&:event)
|
153
214
|
end
|
154
215
|
|
155
216
|
def available_event_sources
|
156
217
|
@available_event_sources ||= (
|
157
|
-
|
158
|
-
scope = scope.select("best_boy_events.event_source").order("best_boy_events.event_source ASC")
|
159
|
-
scope = scope.group("best_boy_events.event_source").map(&:event_source)
|
218
|
+
BestBoyEvent.select("DISTINCT event_source").where(owner_type: current_owner_type, event: current_event).order(:event_source).map(&:event_source)
|
160
219
|
)
|
161
220
|
end
|
162
221
|
|
163
222
|
def available_years
|
164
|
-
@available_years = (BestBoyEvent.where(
|
223
|
+
@available_years = (BestBoyEvent.where(owner_type: current_owner_type).order(:created_at).first.created_at.to_date.year..Time.zone.now.year).map{ |year| year.to_s } rescue [Time.zone.now.year]
|
165
224
|
end
|
166
225
|
|
167
226
|
def available_owner_types
|
168
|
-
@available_owner_types ||= BestBoyEvent.select("DISTINCT
|
227
|
+
@available_owner_types ||= BestBoyEvent.select("DISTINCT owner_type").order(:owner_type).map(&:owner_type)
|
169
228
|
end
|
170
229
|
|
171
230
|
def detail_count
|
@@ -179,37 +238,19 @@ module BestBoy
|
|
179
238
|
end
|
180
239
|
|
181
240
|
scope = BestBoyEvent
|
182
|
-
scope = scope.where(
|
183
|
-
scope = scope.where(
|
184
|
-
scope = scope.where(
|
241
|
+
scope = scope.where(owner_type: @owner_type) if @owner_type.present?
|
242
|
+
scope = scope.where(event: @event) if @event.present?
|
243
|
+
scope = scope.where(event_source: @event_source) if @event_source.present?
|
185
244
|
scope = scope.per_day(@date) if @date.present?
|
186
245
|
scope
|
187
246
|
end
|
188
247
|
|
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
|
-
|
198
248
|
def collection
|
199
249
|
@best_boy_events ||= (
|
200
|
-
scope = current_scope({:
|
201
|
-
scope
|
202
|
-
scope.page(params[:page]).per(50)
|
250
|
+
scope = current_scope({owner_type: params[:owner_type], event_source: current_event, date: current_date})
|
251
|
+
scope.order("created_at DESC, event ASC").page(params[:page]).per(50)
|
203
252
|
)
|
204
253
|
end
|
205
254
|
|
206
|
-
def statistics
|
207
|
-
@statistics = prepare_details(available_events, "event", {:owner_type => current_owner_type})
|
208
|
-
end
|
209
|
-
|
210
|
-
def event_source_details
|
211
|
-
@event_source_details = prepare_details(available_event_sources, "event_source", {:owner_type => current_owner_type, :event => current_event})
|
212
|
-
end
|
213
|
-
|
214
255
|
end
|
215
256
|
end
|
@@ -19,17 +19,31 @@
|
|
19
19
|
</tr>
|
20
20
|
</thead>
|
21
21
|
<tbody>
|
22
|
-
<%
|
22
|
+
<% @event_source_counts_per_group.each do |event_source_string, group_hash| %>
|
23
23
|
<tr>
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
<% end %>
|
24
|
+
<td><%= event_source_string %></td>
|
25
|
+
<% group_hash.each do |group, counter| %>
|
26
|
+
<td><%= counter %></td>
|
27
|
+
<td><%= number_to_percentage(counter.to_f / detail_count * 100, :precision => 2) %></td>
|
29
28
|
<% end %>
|
30
29
|
</tr>
|
31
30
|
<% end %>
|
32
31
|
</tbody>
|
32
|
+
<tfoot>
|
33
|
+
<tr>
|
34
|
+
<th>Total</th>
|
35
|
+
<th><%= result = @event_source_counts_per_group.values.inject(0){|sum, hash| sum += hash['overall'].to_i; sum} %></th>
|
36
|
+
<th><%= number_to_percentage(result.to_f / detail_count * 100, :precision => 2) %></th>
|
37
|
+
<th><%= result = @event_source_counts_per_group.values.inject(0){|sum, hash| sum += hash['year'].to_i; sum} %></th>
|
38
|
+
<th><%= number_to_percentage(result.to_f / detail_count * 100, :precision => 2) %></th>
|
39
|
+
<th><%= result = @event_source_counts_per_group.values.inject(0){|sum, hash| sum += hash['month'].to_i; sum} %></th>
|
40
|
+
<th><%= number_to_percentage(result.to_f / detail_count * 100, :precision => 2) %></th>
|
41
|
+
<th><%= result = @event_source_counts_per_group.values.inject(0){|sum, hash| sum += hash['week'].to_i; sum} %></th>
|
42
|
+
<th><%= number_to_percentage(result.to_f / detail_count * 100, :precision => 2) %></th>
|
43
|
+
<th><%= result = @event_source_counts_per_group.values.inject(0){|sum, hash| sum += hash['day'].to_i; sum} %></th>
|
44
|
+
<th><%= number_to_percentage(result.to_f / detail_count * 100, :precision => 2) %></th>
|
45
|
+
</tr>
|
46
|
+
</tfoot>
|
33
47
|
</table>
|
34
48
|
</div>
|
35
49
|
</div>
|
@@ -47,18 +61,18 @@
|
|
47
61
|
<table class="table table-striped table-bordered">
|
48
62
|
<thead>
|
49
63
|
<tr>
|
50
|
-
<th>Event</th>
|
64
|
+
<th>Event Source</th>
|
51
65
|
<% month_name_array.each do |month| %>
|
52
66
|
<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>
|
53
67
|
<% end %>
|
54
68
|
</tr>
|
55
69
|
</thead>
|
56
70
|
<tbody>
|
57
|
-
<%
|
71
|
+
<% @event_sources_counts_per_month.each do |event_source_string, month_hash| %>
|
58
72
|
<tr>
|
59
|
-
<td><%=
|
60
|
-
<%
|
61
|
-
<td><%=
|
73
|
+
<td><%= event_source_string %></td>
|
74
|
+
<% month_hash.each do |month, counter| %>
|
75
|
+
<td><%= counter %></td>
|
62
76
|
<% end %>
|
63
77
|
</tr>
|
64
78
|
<% end %>
|
@@ -23,18 +23,18 @@
|
|
23
23
|
<table class="table table-striped table-bordered small-font">
|
24
24
|
<thead>
|
25
25
|
<tr>
|
26
|
-
<th>Event</th>
|
26
|
+
<th>Event Source</th>
|
27
27
|
<% (1..(Time.days_in_month("1-#{current_month}-#{current_year}".to_time.month))).each do |day| %>
|
28
28
|
<td><%= day %></td>
|
29
29
|
<% end %>
|
30
30
|
</tr>
|
31
31
|
</thead>
|
32
32
|
<tbody>
|
33
|
-
<%
|
33
|
+
<% @event_sources_counts_per_day.each do |event_source_string, day_hash| %>
|
34
34
|
<tr>
|
35
|
-
<td><%=
|
36
|
-
<%
|
37
|
-
<td><%=
|
35
|
+
<td><%= event_source_string %></td>
|
36
|
+
<% day_hash.each do |day, counter| %>
|
37
|
+
<td><%= counter %></td>
|
38
38
|
<% end %>
|
39
39
|
</tr>
|
40
40
|
<% end %>
|
@@ -15,22 +15,32 @@
|
|
15
15
|
</tr>
|
16
16
|
</thead>
|
17
17
|
<tbody>
|
18
|
-
<%
|
18
|
+
<% @event_counts_per_group.each do |event_string, group_hash| %>
|
19
19
|
<tr>
|
20
|
-
<td><%= link_to
|
21
|
-
<%
|
22
|
-
<td><%=
|
20
|
+
<td><%= link_to event_string, best_boy_admin_details_path(:event => event_string, :owner_type => current_owner_type) %></td>
|
21
|
+
<% group_hash.each do |group, counter| %>
|
22
|
+
<td><%= counter %></td>
|
23
23
|
<% end %>
|
24
24
|
</tr>
|
25
25
|
<% end %>
|
26
26
|
</tbody>
|
27
|
+
<tfoot>
|
28
|
+
<tr>
|
29
|
+
<th>Total</th>
|
30
|
+
<th><%= @event_counts_per_group.values.inject(0){|sum, hash| sum += hash['overall'].to_i; sum} %></th>
|
31
|
+
<th><%= @event_counts_per_group.values.inject(0){|sum, hash| sum += hash['year'].to_i; sum} %></th>
|
32
|
+
<th><%= @event_counts_per_group.values.inject(0){|sum, hash| sum += hash['month'].to_i; sum} %></th>
|
33
|
+
<th><%= @event_counts_per_group.values.inject(0){|sum, hash| sum += hash['week'].to_i; sum} %></th>
|
34
|
+
<th><%= @event_counts_per_group.values.inject(0){|sum, hash| sum += hash['day'].to_i; sum} %></th>
|
35
|
+
</tr>
|
36
|
+
</tfoot>
|
27
37
|
</table>
|
28
38
|
</div>
|
29
39
|
</div>
|
30
40
|
|
31
41
|
<div class="span12">
|
32
42
|
<div class="well">
|
33
|
-
<h3 class="pull-left">Statistics for <%= current_year %> per month</h3>
|
43
|
+
<h3 class="pull-left">Statistics for <%= current_year %> per month</h3>
|
34
44
|
<div class="pull-right">
|
35
45
|
<%= form_tag best_boy_admin_stats_path, :method => :get do %>
|
36
46
|
<%= hidden_field_tag :owner_type, current_owner_type %>
|
@@ -47,15 +57,23 @@
|
|
47
57
|
</tr>
|
48
58
|
</thead>
|
49
59
|
<tbody>
|
50
|
-
<%
|
60
|
+
<% @event_counts_per_month.each do |event_string, month_hash| %>
|
51
61
|
<tr>
|
52
|
-
<td><%=
|
53
|
-
<%
|
54
|
-
<td><%=
|
62
|
+
<td><%= event_string %></td>
|
63
|
+
<% month_hash.each do |month, counter| %>
|
64
|
+
<td><%= counter %></td>
|
55
65
|
<% end %>
|
56
66
|
</tr>
|
57
67
|
<% end %>
|
58
68
|
</tbody>
|
69
|
+
<tfoot>
|
70
|
+
<tr>
|
71
|
+
<th>Total</th>
|
72
|
+
<% (1..12).to_a.map(&:to_s).each do |month_no| %>
|
73
|
+
<th><%= @event_counts_per_month.values.inject(0){|sum, hash| sum += hash[month_no].to_i; sum} %></th>
|
74
|
+
<% end %>
|
75
|
+
</tr>
|
76
|
+
</tfoot>
|
59
77
|
</table>
|
60
78
|
</div>
|
61
79
|
</div>
|
data/best_boy.gemspec
CHANGED
@@ -19,8 +19,8 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.add_dependency('kaminari')
|
20
20
|
s.add_dependency('google_visualr')
|
21
21
|
|
22
|
-
s.add_development_dependency('activerecord')
|
23
|
-
s.add_development_dependency('activesupport')
|
22
|
+
s.add_development_dependency('activerecord', '~> 3.2.13')
|
23
|
+
s.add_development_dependency('activesupport', '~> 3.2.13')
|
24
24
|
s.add_development_dependency('sqlite3', '~> 1.3.6')
|
25
25
|
s.add_development_dependency('rake', '~> 10.0.3')
|
26
26
|
s.add_development_dependency('rspec', '~> 2.13.0')
|
data/db/bestboy.db
CHANGED
Binary file
|
data/lib/best_boy/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: best_boy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-06-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: kaminari
|
@@ -48,33 +48,33 @@ dependencies:
|
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
51
|
-
- -
|
51
|
+
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
53
|
+
version: 3.2.13
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
none: false
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 3.2.13
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: activesupport
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
67
|
-
- -
|
67
|
+
- - ~>
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
69
|
+
version: 3.2.13
|
70
70
|
type: :development
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
|
-
- -
|
75
|
+
- - ~>
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
77
|
+
version: 3.2.13
|
78
78
|
- !ruby/object:Gem::Dependency
|
79
79
|
name: sqlite3
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|