best_boy 1.0.3 → 1.1.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/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
|