jzimmek-reportme 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/reportme/report_factory.rb +45 -5
- data/test/reportme_test.rb +33 -0
- metadata +1 -1
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
@@ -16,6 +16,8 @@ module Reportme
|
|
16
16
|
|
17
17
|
@reports = []
|
18
18
|
@since = since.to_date
|
19
|
+
@subscribtions = {}
|
20
|
+
@report_exists_cache = []
|
19
21
|
end
|
20
22
|
|
21
23
|
def connect
|
@@ -70,7 +72,15 @@ module Reportme
|
|
70
72
|
end
|
71
73
|
|
72
74
|
def report_exists?(name, von, bis)
|
73
|
-
|
75
|
+
key = "#{name}__#{von}__#{bis}"
|
76
|
+
|
77
|
+
return true if @report_exists_cache.include?(key)
|
78
|
+
|
79
|
+
exists = select_value("select 1 from #{report_information_table_name} where report = '#{name}' and von = '#{von}' and bis = '#{bis}'") != nil
|
80
|
+
|
81
|
+
@report_exists_cache << key if exists
|
82
|
+
|
83
|
+
exists
|
74
84
|
end
|
75
85
|
|
76
86
|
def schema_name
|
@@ -94,6 +104,7 @@ module Reportme
|
|
94
104
|
end
|
95
105
|
|
96
106
|
def reset
|
107
|
+
@report_exists_cache.clear
|
97
108
|
exec("drop table if exists #{report_information_table_name};")
|
98
109
|
|
99
110
|
ReportFactory.periods.each do |period|
|
@@ -103,10 +114,6 @@ module Reportme
|
|
103
114
|
end
|
104
115
|
end
|
105
116
|
|
106
|
-
def week_data_present?(report, von, bis)
|
107
|
-
puts "von: #{von} ... bis: #{bis}"
|
108
|
-
end
|
109
|
-
|
110
117
|
def ensure_report_table_exist(report, period)
|
111
118
|
unless report.table_exist?(period)
|
112
119
|
table_name = report.table_name(period)
|
@@ -161,6 +168,8 @@ module Reportme
|
|
161
168
|
ActiveRecord::Base.transaction do
|
162
169
|
exec("insert into #{report_information_table_name} values ('#{table_name}', '#{von}', '#{bis}', now());")
|
163
170
|
exec("insert into #{table_name} select #{column_names.join(',')} from #{report.table_name(:day)} as d where d.von between '#{von}' and '#{(_von + num_days.days).strftime("%Y-%m-%d 00:00:00")}';")
|
171
|
+
|
172
|
+
notify_subscriber(report.name, period_name, _von)
|
164
173
|
end
|
165
174
|
end
|
166
175
|
end
|
@@ -235,6 +244,8 @@ module Reportme
|
|
235
244
|
end
|
236
245
|
|
237
246
|
exec("insert into #{table_name} #{sql};")
|
247
|
+
|
248
|
+
notify_subscriber(r.name, period_name, _von)
|
238
249
|
end
|
239
250
|
end
|
240
251
|
|
@@ -263,6 +274,35 @@ module Reportme
|
|
263
274
|
puts "------------------------ //"
|
264
275
|
ActiveRecord::Base.connection.select_values(sql)
|
265
276
|
end
|
277
|
+
|
278
|
+
def has_subscribtion?(report_name)
|
279
|
+
!@subscribtions[report_name].blank?
|
280
|
+
end
|
281
|
+
|
282
|
+
def has_report?(report_name)
|
283
|
+
!@reports.find{|r|r.name == report_name}.blank?
|
284
|
+
end
|
285
|
+
|
286
|
+
def subscribe(report_name, &block)
|
287
|
+
report_name = report_name.to_sym
|
288
|
+
|
289
|
+
raise "report: #{report_name} does not exist" unless has_report?(report_name)
|
290
|
+
|
291
|
+
existing = @subscribtions[report_name] || (@subscribtions[report_name] = [])
|
292
|
+
existing << block
|
293
|
+
end
|
294
|
+
|
295
|
+
def notify_subscriber(report_name, period, von)
|
296
|
+
|
297
|
+
(@subscribtions[report_name] || []).each do |subscription|
|
298
|
+
begin
|
299
|
+
subscription.call(period, von)
|
300
|
+
rescue Exception => e
|
301
|
+
puts e
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
end
|
266
306
|
|
267
307
|
def report(name, &block)
|
268
308
|
|
data/test/reportme_test.rb
CHANGED
@@ -353,5 +353,38 @@ class ReportmeTest < Test::Unit::TestCase
|
|
353
353
|
|
354
354
|
end
|
355
355
|
|
356
|
+
should "probe existing reports" do
|
357
|
+
rme = create_visit_report_factory
|
358
|
+
assert rme.has_report?(:visits)
|
359
|
+
assert !rme.has_report?(:some_not_existing_report)
|
360
|
+
end
|
361
|
+
|
362
|
+
should "subscribe to visits report" do
|
363
|
+
rme = create_visit_report_factory
|
364
|
+
rme.subscribe :visits do
|
365
|
+
end
|
366
|
+
assert rme.has_subscribtion?(:visits)
|
367
|
+
end
|
368
|
+
|
369
|
+
should "fail on subscribtion to not existing report" do
|
370
|
+
rme = create_visit_report_factory
|
371
|
+
assert_raise RuntimeError do
|
372
|
+
rme.subscribe :some_not_existing_report do
|
373
|
+
end
|
374
|
+
end
|
375
|
+
end
|
376
|
+
|
377
|
+
should "notify subscriptions" do
|
378
|
+
notifed = false
|
379
|
+
|
380
|
+
rme = create_visit_report_factory
|
381
|
+
rme.subscribe :visits do
|
382
|
+
notifed = true
|
383
|
+
end
|
384
|
+
|
385
|
+
rme.notify_subscriber(:visits, :day, '2009-01-01'.to_datetime)
|
386
|
+
|
387
|
+
assert notifed
|
388
|
+
end
|
356
389
|
|
357
390
|
end
|