ruport 0.4.99 → 0.5.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/lib/ruport/report.rb CHANGED
@@ -132,9 +132,9 @@ module Ruport
132
132
  options[:origin] ||= :string
133
133
  options[:source] ||= @source
134
134
 
135
- q = Query.new(sql, options)
135
+ q = options[:query_obj] || Query.new(sql, options)
136
136
  if options[:yield_type].eql?(:by_row)
137
- q.each { |r| action.call(r) }
137
+ q.each { |r| yield(r) }
138
138
  elsif options[:as]
139
139
  Format.table :data => q.result, :plugin => options[:as]
140
140
  else
@@ -0,0 +1,39 @@
1
+ require "test/unit"
2
+ require "ruport"
3
+ begin; require "rubygems"; rescue LoadError; nil; end
4
+ class TestCollection < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @ghosts = Ruport::Data::Collection.new %w[inky blinky clyde]
8
+ @ghost_list = [["inky", "blue"],["blinky","red"],["clyde","orange"]]
9
+ @ghost_records = @ghost_list.map {|x| Ruport::Data::Record.new x }
10
+ @ghost_collection = Ruport::Data::Collection.new @ghost_records
11
+ @ghost_table = Ruport::Data::Table.new :data => @ghost_list
12
+ @ghost_set = Ruport::Data::Set.new :data => @ghost_list
13
+ end
14
+
15
+ def test_size
16
+ assert_equal 3, @ghosts.length
17
+ assert_equal @ghosts.length, @ghosts.data.length
18
+ assert_equal @ghosts.length, @ghosts.size
19
+ assert_equal @ghosts.length, @ghosts.data.size
20
+ end
21
+
22
+ def test_to_table
23
+ assert_equal @ghost_table, @ghost_collection.to_table
24
+ end
25
+
26
+ def test_to_set
27
+ assert_equal @ghost_set, @ghost_collection.to_set
28
+ end
29
+
30
+ def test_to_csv
31
+ assert_equal "inky,blue\nblinky,red\nclyde,orange\n",
32
+ @ghost_collection.to_csv
33
+ end
34
+
35
+ def test_as_csv
36
+ assert_equal @ghost_collection.to_csv, @ghost_collection.as(:csv)
37
+ end
38
+
39
+ end
data/test/test_graph.rb CHANGED
@@ -1,101 +1,93 @@
1
1
  require "ruport"
2
- require 'rubygems' rescue LoadError nil
3
- require "test/unit"
4
-
5
- class TestGraph < Test::Unit::TestCase
6
-
7
- def setup
8
- @data = [[1,2,3,2],[3,4,5,6]].to_table(%w[a b c d])
9
- @data_mismatched_headings = [[3,2],[3,4]].to_table(%w[a b c])
10
- @data_float = [[1.3,2],[3.28322,4]].to_table(%w[a b])
11
- @data_not_numbers = [["d",:sdfs,"not a number","1"],[3,4,5,6]].to_table(%w[a b c d])
12
- end
13
-
14
- # basic test to ensure bar charts render
15
- def test_bar
16
- graph = Ruport::Format.graph_object :plugin => :svg, :data => @data
17
- graph.options = {:graph_style => :bar}
18
- output = graph.render
19
2
 
20
- assert_not_equal nil, output
21
- end
3
+ begin; require 'rubygems'; rescue LoadError; nil; end
4
+ require "test/unit"
22
5
 
23
- # basic test to ensure horizontal pie charts render
24
- def test_bar_horizontal
25
- graph = Ruport::Format.graph_object :plugin => :svg, :data => @data
26
- graph.options = {:graph_style => :bar_horizontal}
27
- output = graph.render
6
+ begin
7
+ require 'scruffy'
28
8
 
29
- assert_not_equal nil, output
30
- end
31
-
32
- # basic test to ensure line charts render
33
- def test_line
34
- graph = Ruport::Format.graph_object :plugin => :svg, :data => @data
35
- graph.options = {:graph_style => :line}
36
- output = graph.render
37
-
38
- assert_not_equal nil, output
39
- end
40
-
41
- # basic test to ensure pie charts render
42
- def test_pie
43
- graph = Ruport::Format.graph_object :plugin => :svg, :data => @data
44
- graph.options = {:graph_style => :pie}
45
- output = graph.render
9
+ class TestGraph < Test::Unit::TestCase
10
+ def setup
11
+ @data = [[1,2,3,2],[3,4,5,6]].to_table(%w[a b c d])
12
+ @data_mismatched_headings = [[3,2],[3,4]].to_table(%w[a b c])
13
+ @data_float = [[1.3,2],[3.28322,4]].to_table(%w[a b])
14
+ @data_not_numbers = [["d",:sdfs,"not a number","1"],[3,4,5,6]].to_table(%w[a b c d])
15
+ end
46
16
 
47
- assert_not_equal nil, output
48
- end
49
-
50
- # ensure an exception is raised if the user doesn't name every column
51
- def test_mismatched_headings
52
- graph = Ruport::Format.graph_object :plugin => :svg, :data => @data_mismatched_headings
53
- graph.options = {:graph_style => :line}
54
-
55
- assert_raises(ArgumentError) {
17
+ # basic test to ensure bar charts render
18
+ def test_bar
19
+ graph = Ruport::Format.graph_object :plugin => :svg, :data => @data
20
+ graph.title = "A Simple Bar Graph"
21
+ graph.width = 600
22
+ graph.height = 500
23
+ graph.style = :bar
56
24
  output = graph.render
57
- }
58
- end
59
-
60
- # test to ensure floats can be graphed
61
- def test_floats
62
- graph = Ruport::Format.graph_object :plugin => :svg, :data => @data_float
63
- graph.options = {:graph_style => :line}
64
- output = graph.render
65
25
 
66
- assert_not_equal nil, output
67
- end
68
-
69
- # ensure an exception is raised if non numeric data is graphed
70
- def test_not_numbers
71
- graph = Ruport::Format.graph_object :plugin => :svg, :data => @data_not_numbers
72
- graph.options = {:graph_style => :line}
73
-
74
- assert_raises(ArgumentError) {
26
+ assert_not_equal nil, output
27
+ end
28
+
29
+ # basic test to ensure line charts render
30
+ def test_line
31
+ graph = Ruport::Format.graph_object :plugin => :svg, :data => @data
32
+ graph.title = "A Simple Line Graph"
33
+ graph.width = 600
34
+ graph.height = 500
35
+ graph.style = :line
36
+
75
37
  output = graph.render
76
- }
77
- end
38
+ assert_not_equal nil, output
39
+ end
40
+
41
+ # ensure an exception is raised if the user doesn't name every column
42
+ def test_mismatched_headings
43
+ graph = Ruport::Format.graph_object :plugin => :svg, :data => @data_mismatched_headings
44
+ graph.title = "Mismatched Headings"
45
+ graph.width = 600
46
+ graph.height = 500
47
+ graph.style = :line
78
48
 
79
- # ensure an exception is raised if user tries to render a graph without setting any options
80
- def test_no_options
81
- graph = Ruport::Format.graph_object :plugin => :svg, :data => @data
49
+ assert_raises(InvalidGraphDataError) {
50
+ output = graph.render
51
+ }
52
+ end
82
53
 
83
- assert_raises(RuntimeError) {
54
+ # test to ensure floats can be graphed
55
+ def test_floats
56
+ graph = Ruport::Format.graph_object :plugin => :svg, :data => @data_float
57
+ graph.title = "Graphing Floats"
58
+ graph.width = 600
59
+ graph.height = 500
60
+ graph.style = :line
84
61
  output = graph.render
85
- }
86
62
 
87
- end
88
-
89
- # test to make sure user requested options are applied to the resulting graph
90
- def test_options_applied_to_rendered_graph
91
- graph = Ruport::Format.graph_object :plugin => :svg, :data => @data
92
- graph.options = {:graph_style => :line, :graph_title => 'Test', :show_graph_title => true, :no_css => true}
93
- output = graph.render
63
+ assert_not_equal nil, output
64
+ end
94
65
 
95
- # ensure the requested graph title is included in the SVG output. If that's there, we can
96
- # assume the rest are as well
97
- assert_not_equal nil, output[/class='mainTitle'/]
66
+ # ensure an exception is raised if non numeric data is graphed
67
+ def test_not_numbers
68
+ graph = Ruport::Format.graph_object :plugin => :svg, :data => @data_not_numbers
69
+ graph.title = "Graphing Things That Aren't Numbers"
70
+ graph.width = 600
71
+ graph.height = 500
72
+ graph.style = :line
73
+
74
+ assert_raises(InvalidGraphDataError) {
75
+ output = graph.render
76
+ }
77
+ end
98
78
 
79
+ # ensure an exception is raised if non numeric data is graphed
80
+ def test_missing_required_option
81
+ graph = Ruport::Format.graph_object :plugin => :svg, :data => @data
82
+ graph.title = "Rendering a graph with a missing option"
83
+ graph.height = 500
84
+ graph.style = :line
85
+
86
+ assert_raises(InvalidGraphOptionError) {
87
+ output = graph.render
88
+ }
89
+ end
99
90
  end
100
-
91
+ rescue LoadError
92
+ puts "Skipping Graph Tests (needs scruffy)"
101
93
  end
data/test/test_plugin.rb CHANGED
@@ -18,11 +18,36 @@ class TSVPlugin < Format::Plugin
18
18
  FasterCSV.generate(:col_sep => "\t") { |csv| data.each { |r| csv << r } }
19
19
  end
20
20
 
21
+ helper(:foo, :engine => :table_engine) { }
22
+ helper(:bar, :engines => [:table_engine,:invoice_engine]) { }
23
+ helper(:baz) {}
24
+
21
25
  plugin_name :tsv
22
- register_on Format::Engine::Table
26
+ register_on :table_engine
27
+
28
+ # wont work, just for helper tests
29
+ register_on :invoice_engine
30
+ register_on :document_engine
23
31
 
24
32
  end
25
33
 
34
+ class TestPlugin < Test::Unit::TestCase
35
+ def test_helper
36
+ t = Ruport::Format.table_object :data => [[1,2]], :plugin => :tsv
37
+ i = Ruport::Format.invoice_object :data => [[1,2]].to_table(%w[a b]), :plugin => :tsv
38
+ d = Ruport::Format.document_object :data => "foo", :plugin => :tsv
39
+ assert_nothing_raised { t.foo }
40
+ assert_nothing_raised { t.bar }
41
+ assert_nothing_raised { t.baz }
42
+ assert_nothing_raised { i.bar }
43
+ assert_nothing_raised { i.baz }
44
+ assert_nothing_raised { d.baz }
45
+ assert_raise(NoMethodError) { i.foo }
46
+ assert_raise(NoMethodError) { d.foo }
47
+ assert_raise(NoMethodError) { d.bar }
48
+ end
49
+ end
50
+
26
51
  class CSVPluginTest < Test::Unit::TestCase
27
52
 
28
53
  def test_basic
@@ -0,0 +1,50 @@
1
+ ***************
2
+ *** 18,53 ****
3
+ FasterCSV.generate(:col_sep => "\t") { |csv| data.each { |r| csv << r } }
4
+ end
5
+
6
+ - helper(:foo, :engine => :table_engine) { }
7
+ - helper(:bar, :engines => [:table_engine,:invoice_engine]) { }
8
+ - helper(:baz) {}
9
+ -
10
+ plugin_name :tsv
11
+ - register_on :table_engine
12
+ -
13
+ - # wont work, just for helper tests
14
+ - register_on :invoice_engine
15
+ - register_on :document_engine
16
+
17
+ end
18
+
19
+ - class TestPlugin < Test::Unit::TestCase
20
+ - def test_helper
21
+ - t = Ruport::Format.table_object :data => [[1,2]], :plugin => :tsv
22
+ - i = Ruport::Format.invoice_object :data => [[1,2]].to_table(%w[a b]), :plugin => :tsv
23
+ - d = Ruport::Format.document_object :data => "foo", :plugin => :tsv
24
+ - assert_nothing_raised { t.foo }
25
+ - assert_nothing_raised { t.bar }
26
+ - assert_nothing_raised { t.baz }
27
+ - assert_nothing_raised { i.bar }
28
+ - assert_nothing_raised { i.baz }
29
+ - assert_nothing_raised { d.baz }
30
+ - assert_raise(NoMethodError) { i.foo }
31
+ - assert_raise(NoMethodError) { d.foo }
32
+ - assert_raise(NoMethodError) { d.bar }
33
+ - end
34
+ - end
35
+ -
36
+ class CSVPluginTest < Test::Unit::TestCase
37
+
38
+ def test_basic
39
+ --- 18,28 ----
40
+ FasterCSV.generate(:col_sep => "\t") { |csv| data.each { |r| csv << r } }
41
+ end
42
+
43
+ plugin_name :tsv
44
+ + register_on Format::Engine::Table
45
+
46
+ end
47
+
48
+ class CSVPluginTest < Test::Unit::TestCase
49
+
50
+ def test_basic
data/test/test_report.rb CHANGED
@@ -10,7 +10,10 @@ class TestReport < Test::Unit::TestCase
10
10
  include Ruport
11
11
 
12
12
  def setup
13
- @report = Report.new
13
+ @report = Report.new
14
+ Ruport::Config.source :default, :dsn => "ruport:test", :user => "foo", :password => "bar"
15
+ @query1 = Ruport::Query.new "select * from foo", :cache_enabled => true
16
+ @query1.cached_data = [[1,2,3],[4,5,6],[7,8,9]].to_table(%w[a b c])
14
17
  end
15
18
 
16
19
  def test_render
@@ -29,6 +32,18 @@ class TestReport < Test::Unit::TestCase
29
32
  end
30
33
  end
31
34
 
35
+ def test_query
36
+ assert_kind_of Ruport::Data::Table,
37
+ @report.query("blah",:query_obj => @query1)
38
+ expected = [[1,2,3],[4,5,6],[7,8,9]]
39
+ @report.query("blah",:query_obj => @query1, :yield_type => :by_row) { |r|
40
+ assert_equal expected.shift, r.data
41
+ assert_equal %w[a b c], r.attributes
42
+ }
43
+ assert_equal "a,b,c\n1,2,3\n4,5,6\n7,8,9\n",
44
+ @report.query("blah",:query_obj => @query1, :as => :csv)
45
+ end
46
+
32
47
  class MyReport < Report; end
33
48
 
34
49
  def test_klass_methods
data/test/test_table.rb CHANGED
@@ -82,6 +82,12 @@ class TestTable < Test::Unit::TestCase
82
82
  a.remove_column(:name => "c")
83
83
  assert_equal [[1,2],[3,4],[5,6]].to_table(%w[a b]), a
84
84
  assert_raises(ArgumentError){a.remove_column(:name => "frank")}
85
+ a.remove_column(0)
86
+ assert_equal [[2],[4],[6]].to_table(%w[b]), a
87
+ assert_equal %w[b], a.column_names
88
+ a = [[1,2],[3,4],[5,6]].to_table
89
+ a.remove_column(0)
90
+ assert_equal [[2],[4],[6]].to_table, a
85
91
  end
86
92
 
87
93
  def test_split
data/test/unit.log CHANGED
@@ -4590,3 +4590,131 @@ F, [2006-08-14T16:04:19.912077 #6622] FATAL -- : no block given!
4590
4590
  F, [2006-08-14T16:40:05.639808 #6709] FATAL -- : Missing host for mailer bar
4591
4591
  F, [2006-08-14T16:40:05.641153 #6709] FATAL -- : Missing DSN for source foo!
4592
4592
  F, [2006-08-14T16:40:07.387636 #6709] FATAL -- : no block given!
4593
+ F, [2006-08-16T13:42:37.604283 #2516] FATAL -- : Missing host for mailer bar
4594
+ F, [2006-08-16T13:42:37.605655 #2516] FATAL -- : Missing DSN for source foo!
4595
+ F, [2006-08-16T13:42:39.231930 #2516] FATAL -- : no block given!
4596
+ F, [2006-08-16T20:59:38.824007 #2518] FATAL -- : Missing host for mailer bar
4597
+ F, [2006-08-16T20:59:38.825663 #2518] FATAL -- : Missing DSN for source foo!
4598
+ F, [2006-08-16T20:59:40.582700 #2518] FATAL -- : no block given!
4599
+ F, [2006-08-16T21:15:51.114691 #2611] FATAL -- : Missing host for mailer bar
4600
+ F, [2006-08-16T21:15:51.116890 #2611] FATAL -- : Missing DSN for source foo!
4601
+ F, [2006-08-16T21:15:52.629868 #2611] FATAL -- : no block given!
4602
+ F, [2006-08-16T21:16:58.628761 #2630] FATAL -- : Missing host for mailer bar
4603
+ F, [2006-08-16T21:16:58.630038 #2630] FATAL -- : Missing DSN for source foo!
4604
+ F, [2006-08-16T21:17:00.217595 #2630] FATAL -- : no block given!
4605
+ F, [2006-08-16T21:17:08.875050 #2646] FATAL -- : Missing host for mailer bar
4606
+ F, [2006-08-16T21:17:08.876283 #2646] FATAL -- : Missing DSN for source foo!
4607
+ F, [2006-08-16T21:17:09.084698 #2646] FATAL -- : no block given!
4608
+ F, [2006-08-16T21:36:44.420358 #2748] FATAL -- : Missing host for mailer bar
4609
+ F, [2006-08-16T21:36:44.421623 #2748] FATAL -- : Missing DSN for source foo!
4610
+ F, [2006-08-16T21:36:45.996651 #2748] FATAL -- : no block given!
4611
+ F, [2006-08-16T21:38:25.655935 #2762] FATAL -- : Missing host for mailer bar
4612
+ F, [2006-08-16T21:38:25.657324 #2762] FATAL -- : Missing DSN for source foo!
4613
+ F, [2006-08-16T21:38:27.236444 #2762] FATAL -- : no block given!
4614
+ F, [2006-08-16T21:44:21.801048 #2795] FATAL -- : Missing host for mailer bar
4615
+ F, [2006-08-16T21:44:21.802306 #2795] FATAL -- : Missing DSN for source foo!
4616
+ F, [2006-08-16T21:44:23.388830 #2795] FATAL -- : no block given!
4617
+ F, [2006-08-16T21:58:16.877040 #2928] FATAL -- : Missing host for mailer bar
4618
+ F, [2006-08-16T21:58:16.878296 #2928] FATAL -- : Missing DSN for source foo!
4619
+ F, [2006-08-16T21:58:18.107557 #2928] FATAL -- : no block given!
4620
+ F, [2006-08-16T21:59:32.330076 #2954] FATAL -- : Missing host for mailer bar
4621
+ F, [2006-08-16T21:59:32.331334 #2954] FATAL -- : Missing DSN for source foo!
4622
+ F, [2006-08-16T21:59:33.926597 #2954] FATAL -- : no block given!
4623
+ F, [2006-08-17T12:25:42.054900 #2645] FATAL -- : Missing host for mailer bar
4624
+ F, [2006-08-17T12:25:42.056769 #2645] FATAL -- : Missing DSN for source foo!
4625
+ F, [2006-08-17T12:25:43.693749 #2645] FATAL -- : no block given!
4626
+ F, [2006-08-17T17:02:38.284073 #2258] FATAL -- : Missing host for mailer bar
4627
+ F, [2006-08-17T17:02:38.304685 #2258] FATAL -- : Missing DSN for source foo!
4628
+ F, [2006-08-17T17:02:39.981301 #2258] FATAL -- : no block given!
4629
+ F, [2006-08-17T17:12:36.915168 #2326] FATAL -- : Missing host for mailer bar
4630
+ F, [2006-08-17T17:12:36.916537 #2326] FATAL -- : Missing DSN for source foo!
4631
+ F, [2006-08-17T17:12:38.900304 #2326] FATAL -- : no block given!
4632
+ F, [2006-08-17T17:17:42.074031 #2357] FATAL -- : Missing host for mailer bar
4633
+ F, [2006-08-17T17:17:42.075203 #2357] FATAL -- : Missing DSN for source foo!
4634
+ F, [2006-08-17T17:17:43.643745 #2357] FATAL -- : no block given!
4635
+ F, [2006-08-18T01:22:53.413985 #2611] FATAL -- : Missing host for mailer bar
4636
+ F, [2006-08-18T01:22:53.415275 #2611] FATAL -- : Missing DSN for source foo!
4637
+ F, [2006-08-18T01:22:54.995080 #2611] FATAL -- : no block given!
4638
+ F, [2006-08-18T05:56:22.987729 #2213] FATAL -- : Missing host for mailer bar
4639
+ F, [2006-08-18T05:56:23.012780 #2213] FATAL -- : Missing DSN for source foo!
4640
+ F, [2006-08-18T05:56:24.656933 #2213] FATAL -- : no block given!
4641
+ F, [2006-08-18T06:00:39.813539 #2234] FATAL -- : Missing host for mailer bar
4642
+ F, [2006-08-18T06:00:39.815502 #2234] FATAL -- : Missing DSN for source foo!
4643
+ F, [2006-08-18T06:00:41.859650 #2234] FATAL -- : no block given!
4644
+ F, [2006-08-18T06:07:20.449279 #2261] FATAL -- : Missing host for mailer bar
4645
+ F, [2006-08-18T06:07:20.450406 #2261] FATAL -- : Missing DSN for source foo!
4646
+ F, [2006-08-18T06:07:21.968797 #2261] FATAL -- : no block given!
4647
+ F, [2006-08-18T06:12:09.764037 #2301] FATAL -- : Missing host for mailer bar
4648
+ F, [2006-08-18T06:12:09.765133 #2301] FATAL -- : Missing DSN for source foo!
4649
+ F, [2006-08-18T06:12:11.288517 #2301] FATAL -- : no block given!
4650
+ F, [2006-08-18T06:12:57.783139 #2316] FATAL -- : Missing host for mailer bar
4651
+ F, [2006-08-18T06:12:57.784280 #2316] FATAL -- : Missing DSN for source foo!
4652
+ F, [2006-08-18T06:12:59.308314 #2316] FATAL -- : no block given!
4653
+ F, [2006-08-18T06:17:16.468171 #2338] FATAL -- : Missing host for mailer bar
4654
+ F, [2006-08-18T06:17:16.469296 #2338] FATAL -- : Missing DSN for source foo!
4655
+ F, [2006-08-18T06:17:17.994727 #2338] FATAL -- : no block given!
4656
+ F, [2006-08-18T06:18:04.339225 #2353] FATAL -- : Missing host for mailer bar
4657
+ F, [2006-08-18T06:18:04.340356 #2353] FATAL -- : Missing DSN for source foo!
4658
+ F, [2006-08-18T06:18:05.860411 #2353] FATAL -- : no block given!
4659
+ F, [2006-08-18T06:19:45.026475 #2372] FATAL -- : Missing host for mailer bar
4660
+ F, [2006-08-18T06:19:45.027625 #2372] FATAL -- : Missing DSN for source foo!
4661
+ F, [2006-08-18T06:19:46.550023 #2372] FATAL -- : no block given!
4662
+ F, [2006-08-18T06:19:54.311386 #2381] FATAL -- : Missing host for mailer bar
4663
+ F, [2006-08-18T06:19:54.313406 #2381] FATAL -- : Missing DSN for source foo!
4664
+ F, [2006-08-18T06:19:56.362704 #2381] FATAL -- : no block given!
4665
+ F, [2006-08-18T06:20:22.060490 #2392] FATAL -- : Missing host for mailer bar
4666
+ F, [2006-08-18T06:20:22.062500 #2392] FATAL -- : Missing DSN for source foo!
4667
+ F, [2006-08-18T06:20:24.118025 #2392] FATAL -- : no block given!
4668
+ F, [2006-08-18T06:21:03.994869 #2406] FATAL -- : Missing host for mailer bar
4669
+ F, [2006-08-18T06:21:03.996911 #2406] FATAL -- : Missing DSN for source foo!
4670
+ F, [2006-08-18T06:21:06.054131 #2406] FATAL -- : no block given!
4671
+ F, [2006-08-18T06:21:57.005444 #2414] FATAL -- : Missing host for mailer bar
4672
+ F, [2006-08-18T06:21:57.007387 #2414] FATAL -- : Missing DSN for source foo!
4673
+ F, [2006-08-18T06:21:59.062682 #2414] FATAL -- : no block given!
4674
+ F, [2006-08-18T11:31:44.238499 #2430] FATAL -- : Missing host for mailer bar
4675
+ F, [2006-08-18T11:31:44.239634 #2430] FATAL -- : Missing DSN for source foo!
4676
+ F, [2006-08-18T11:31:45.772039 #2430] FATAL -- : no block given!
4677
+ F, [2006-08-18T19:06:47.503517 #2277] FATAL -- : Missing host for mailer bar
4678
+ F, [2006-08-18T19:06:47.528902 #2277] FATAL -- : Missing DSN for source foo!
4679
+ F, [2006-08-18T19:06:49.235172 #2277] FATAL -- : no block given!
4680
+ F, [2006-08-24T12:37:03.992747 #2497] FATAL -- : Missing host for mailer bar
4681
+ F, [2006-08-24T12:37:03.994016 #2497] FATAL -- : Missing DSN for source foo!
4682
+ F, [2006-08-24T12:37:05.497215 #2497] FATAL -- : no block given!
4683
+ F, [2006-08-24T12:38:29.949853 #2507] FATAL -- : Missing host for mailer bar
4684
+ F, [2006-08-24T12:38:29.951115 #2507] FATAL -- : Missing DSN for source foo!
4685
+ F, [2006-08-24T12:38:31.482638 #2507] FATAL -- : no block given!
4686
+ F, [2006-08-24T19:04:52.891769 #3052] FATAL -- : Missing host for mailer bar
4687
+ F, [2006-08-24T19:04:52.893251 #3052] FATAL -- : Missing DSN for source foo!
4688
+ F, [2006-08-24T19:04:54.312873 #3052] FATAL -- : no block given!
4689
+ F, [2006-08-24T19:06:06.868295 #3074] FATAL -- : Missing host for mailer bar
4690
+ F, [2006-08-24T19:06:06.869757 #3074] FATAL -- : Missing DSN for source foo!
4691
+ F, [2006-08-24T19:06:08.295883 #3074] FATAL -- : no block given!
4692
+ F, [2006-08-24T19:10:30.470512 #3130] FATAL -- : Missing host for mailer bar
4693
+ F, [2006-08-24T19:10:30.471798 #3130] FATAL -- : Missing DSN for source foo!
4694
+ F, [2006-08-24T19:10:31.836332 #3130] FATAL -- : no block given!
4695
+ F, [2006-08-27T19:11:41.843861 #2305] FATAL -- : Missing host for mailer bar
4696
+ F, [2006-08-27T19:11:41.866592 #2305] FATAL -- : Missing DSN for source foo!
4697
+ F, [2006-08-27T19:11:43.340221 #2305] FATAL -- : no block given!
4698
+ F, [2006-08-27T19:12:33.645208 #2317] FATAL -- : Missing host for mailer bar
4699
+ F, [2006-08-27T19:12:33.646453 #2317] FATAL -- : Missing DSN for source foo!
4700
+ F, [2006-08-27T19:12:34.788968 #2317] FATAL -- : no block given!
4701
+ F, [2006-08-27T19:37:12.595028 #2435] FATAL -- : Missing host for mailer bar
4702
+ F, [2006-08-27T19:37:12.596322 #2435] FATAL -- : Missing DSN for source foo!
4703
+ F, [2006-08-27T19:37:13.973770 #2435] FATAL -- : no block given!
4704
+ F, [2006-08-27T19:37:39.606101 #2450] FATAL -- : Missing host for mailer bar
4705
+ F, [2006-08-27T19:37:39.607347 #2450] FATAL -- : Missing DSN for source foo!
4706
+ F, [2006-08-27T19:37:40.763966 #2450] FATAL -- : no block given!
4707
+ F, [2006-08-28T14:19:05.023344 #2680] FATAL -- : Missing host for mailer bar
4708
+ F, [2006-08-28T14:19:05.024838 #2680] FATAL -- : Missing DSN for source foo!
4709
+ F, [2006-08-28T14:19:06.305400 #2680] FATAL -- : no block given!
4710
+ F, [2006-08-28T14:19:13.418585 #2689] FATAL -- : Missing host for mailer bar
4711
+ F, [2006-08-28T14:19:13.419786 #2689] FATAL -- : Missing DSN for source foo!
4712
+ F, [2006-08-28T14:56:18.066067 #2787] FATAL -- : Missing host for mailer bar
4713
+ F, [2006-08-28T14:56:18.067765 #2787] FATAL -- : Missing DSN for source foo!
4714
+ F, [2006-08-28T14:56:19.238491 #2787] FATAL -- : no block given!
4715
+ F, [2006-08-28T14:56:49.831383 #2797] FATAL -- : Missing host for mailer bar
4716
+ F, [2006-08-28T14:56:49.833091 #2797] FATAL -- : Missing DSN for source foo!
4717
+ F, [2006-08-28T14:56:51.239122 #2797] FATAL -- : no block given!
4718
+ F, [2006-08-28T15:03:28.339719 #2839] FATAL -- : Missing host for mailer bar
4719
+ F, [2006-08-28T15:03:28.340989 #2839] FATAL -- : Missing DSN for source foo!
4720
+ F, [2006-08-28T15:03:29.731996 #2839] FATAL -- : no block given!