jzimmek-reportme 0.5.0 → 0.5.1

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.0
1
+ 0.5.1
@@ -1,7 +1,7 @@
1
1
  module Reportme
2
2
  class Report
3
3
 
4
- attr_reader :name
4
+ attr_accessor :name
5
5
 
6
6
  def initialize(report_factory, name, temporary=false)
7
7
 
@@ -10,6 +10,7 @@ module Reportme
10
10
  @report_factory = report_factory
11
11
  @name = name
12
12
  @depends_on = []
13
+ @histories = []
13
14
  @temporary = temporary
14
15
  end
15
16
 
@@ -21,6 +22,14 @@ module Reportme
21
22
  @source = block
22
23
  end
23
24
 
25
+ def histories(histories=[])
26
+ @histories = histories
27
+ end
28
+
29
+ def historice?(history)
30
+ @histories.include?(history)
31
+ end
32
+
24
33
  def depends_on(dependencies=[])
25
34
  dependencies = dependencies.collect{|d| d.to_sym}
26
35
  @depends_on += dependencies
@@ -78,8 +78,8 @@ module Reportme
78
78
  exec("alter table #{table_name} add index(von);")
79
79
 
80
80
  if period_name != :day
81
- exec("alter table #{table_name} add day date after von;")
82
- exec("alter table #{table_name} add index(day);")
81
+ exec("alter table #{table_name} add _day date after von;")
82
+ exec("alter table #{table_name} add index(_day);")
83
83
  end
84
84
  end
85
85
 
@@ -113,52 +113,68 @@ module Reportme
113
113
  end
114
114
  end
115
115
 
116
- def historice(since=Date.today)
116
+ def __opts(opts={})
117
+ opts = {
118
+ :since => Date.today,
119
+ :init => false,
120
+ :notify_subscribers => true
121
+ }.merge(opts)
122
+ end
123
+
124
+ def historice(opts={})
125
+
126
+ opts = __opts(opts)
127
+
128
+ since = opts[:since]
129
+
117
130
  raise "since cannot be in the future" if since.future?
118
131
 
119
- __do_and_clean :calendar_week do
132
+ __do_and_clean(:calendar_week, opts) do |period_name|
120
133
 
121
134
  loop do
122
135
 
123
136
  run_dependency_aware(@@reports) do |report|
137
+
124
138
  next if report.temporary?
125
- __report_period(report, Period.calc(since, [:calendar_week]).first)
139
+ next unless report.historice?(period_name)
140
+
141
+ __report_period(report, Period.calc(since, [period_name]).first)
126
142
  end
127
143
 
128
144
  since += 1.day
129
145
  break if since.future?
130
146
  end
131
147
 
132
- self.class.__notify_subscriber
133
148
  end
134
149
  end
135
150
 
136
- def run(since=Date.today)
151
+ def run(opts={})
152
+
153
+ opts = __opts(opts)
154
+
155
+ opts[:init] = true
156
+
157
+ since = opts[:since]
137
158
 
138
159
  raise "since cannot be in the future" if since.future?
139
160
 
140
- __do_and_clean :day, :init => true do
161
+ __do_and_clean(:day, opts) do |period_name|
141
162
 
142
163
  loop do
143
164
 
144
165
  run_dependency_aware(@@reports) do |report|
145
- __report_period(report, Period.calc(since, [:day]).first)
166
+ __report_period(report, Period.calc(since, [period_name]).first)
146
167
  end
147
168
 
148
169
  since += 1.day
149
170
  break if since.future?
150
171
  end
151
172
 
152
- self.class.__notify_subscriber
153
173
  end
154
174
 
155
175
  end
156
176
 
157
- def __do_and_clean(period_name, opts={}, &block)
158
-
159
- opts = {
160
- :init => false
161
- }.merge(opts)
177
+ def __do_and_clean(period_name, opts, &block)
162
178
 
163
179
  begin
164
180
  @@report_creations.clear
@@ -170,11 +186,18 @@ module Reportme
170
186
  @@init.call if @@init && opts[:init]
171
187
 
172
188
  run_dependency_aware(@@reports) do |report|
189
+
190
+ if period_name != :day
191
+ next unless report.historice?(period_name)
192
+ end
193
+
173
194
  ensure_report_tables_exist(report, period_name)
174
195
  end
175
196
 
176
-
177
- block.call
197
+ block.call(period_name)
198
+
199
+ self.class.__notify_subscriber if opts[:notify_subscribers]
200
+
178
201
  ensure
179
202
  @@reports.each do |report|
180
203
 
@@ -243,6 +266,26 @@ module Reportme
243
266
  end
244
267
 
245
268
  end
269
+
270
+ def self.print_dependency_tree(level=0, reports=@@reports)
271
+
272
+ reports.each do |r|
273
+
274
+ if level > 0
275
+ (level + 1).times do
276
+ print " "
277
+ end
278
+ end
279
+
280
+ print "|-"
281
+
282
+ puts r.name
283
+
284
+ print_dependency_tree(level + 1, r.dependencies.collect{|d| report_by_name(d)})
285
+
286
+ end
287
+
288
+ end
246
289
 
247
290
  def __dependency_hash
248
291
  dependencies = {}
@@ -286,13 +329,13 @@ module Reportme
286
329
  sql = <<-SQL
287
330
  select
288
331
  '#{von}' as von,
289
- #{(column_names + ['date(von) as day']).join("\n,")}
332
+ #{(['date(von) as _day'] + column_names).join("\n,")}
290
333
  from
291
334
  #{table_name_day}
292
335
  where
293
336
  von between '#{von}' and '#{bis}'
294
337
  group by
295
- #{(column_names + ['date(von)']).join("\n,")}
338
+ #{(['date(von)'] + column_names).join("\n,")}
296
339
  SQL
297
340
 
298
341
  end
@@ -159,7 +159,7 @@ class ReportmeTest < Test::Unit::TestCase
159
159
  # should be ignored
160
160
  exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 5 day));");
161
161
 
162
- create_visit_report_factory(:periods => [:day]).run(3.days.ago)
162
+ create_visit_report_factory(:periods => [:day]).run(:since => 3.days.ago)
163
163
  assert_equal 4, one("select count(1) as cnt from visits_day where von between date_sub(curdate(), interval 4 day) and date_sub(curdate(), interval 1 day)")["cnt"].to_i
164
164
  end
165
165
 
@@ -457,6 +457,28 @@ class ReportmeTest < Test::Unit::TestCase
457
457
  assert notifed
458
458
  end
459
459
 
460
+ should "not notify subscribers" do
461
+ notifed = false
462
+
463
+ now = DateTime.now
464
+ _now = now.strftime("%Y-%m-%d 00:00:00")
465
+ _yesterday = (now - 1.day).strftime("%Y-%m-%d 00:00:00")
466
+
467
+ exec("insert into visits values (null, 'sem', '#{now}')");
468
+ rme = create_visit_report_factory(:periods => [:day])
469
+ rme.class.subscribe :visits do |period, von, report_name|
470
+
471
+ assert_equal :day, period
472
+ assert_equal :visits, report_name
473
+ assert_equal _yesterday, von.strftime("%Y-%m-%d 00:00:00")
474
+
475
+ notifed = true
476
+ end
477
+ rme.run(:notify_subscribers => false)
478
+
479
+ assert !notifed
480
+ end
481
+
460
482
  should "call initializer before running reports" do
461
483
  initialized = false
462
484
 
@@ -583,5 +605,5 @@ class ReportmeTest < Test::Unit::TestCase
583
605
 
584
606
  assert "tmp_report1_day", ReportTemporaryTestReport.report_by_name(:report1).table_name(:day)
585
607
  end
586
-
608
+
587
609
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jzimmek-reportme
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Zimmek