clarity 0.9.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.
@@ -0,0 +1,54 @@
1
+ /* ----------------------------------------------------------------------------
2
+ * Log Search Server CSS
3
+ * by John Tajima
4
+ * ----------------------------------------------------------------------------
5
+ */
6
+
7
+ /* 960 reset */
8
+ html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}:focus{outline:0}ins{text-decoration:none}del{text-decoration:line-through}table{border-collapse:collapse;border-spacing:0}
9
+ /* 960 text */
10
+ body{font:13px/1.5 'Helvetica Neue',Arial,'Liberation Sans',FreeSans,sans-serif}a:focus{outline:1px dotted invert}hr{border:0 #ccc solid;border-top-width:1px;clear:both;height:0}h1{font-size:25px}h2{font-size:23px}h3{font-size:21px}h4{font-size:19px}h5{font-size:17px}h6{font-size:15px}ol{list-style:decimal}ul{list-style:disc}li{margin-left:30px}p,dl,hr,h1,h2,h3,h4,h5,h6,ol,ul,pre,table,address,fieldset{margin-bottom:20px}
11
+
12
+ /*
13
+ * Toolbar Styling
14
+ *
15
+ */
16
+
17
+
18
+ #toolbar { color: #333; font-size: 12px; min-width: 980px; height: 130px;
19
+ padding: 0 10px; background: #f0f0f0; border-bottom: 2px solid #000;
20
+ position:fixed; top: 0; margin: 0 -10px; width: 100%;
21
+ font-family: 'Helvetica Neue',Arial,'Liberation Sans',FreeSans,sans-serif;
22
+ }
23
+ #toolbar a { color: blue; background: none; }
24
+ #toolbar a:hover { background: none; }
25
+
26
+ #toolbar #header { height: 20px; padding: 3px 5px; margin: 0 -10px 10px; overflow:hidden; background: #333; border-bottom: 2px solid #222; color: #eee; }
27
+ #toolbar #header h1 { font-size: 16px; line-height: 20px; }
28
+ #toolbar #header a { text-decoration: none; color: #eee; }
29
+ #toolbar #header a:hover { text-decoration: none; color: #fff;}
30
+ #toolbar .small { font-size: 11px; color: #333; font-weight: bold;}
31
+ #toolbar input.time { width: 20px;}
32
+
33
+ table.actions { width: auto; border-collapse: collapse; }
34
+ table.actions th { font-size: 11px; color: #333; text-align: left; min-width: 100px; padding: 0 5px; }
35
+ table.actions td { padding: 2px 5px; text-align: left; vertical-align: middle;}
36
+ table.actions span.note { font-weight: normal; color: #999; }
37
+ table.actions span.and { font-size: 11px; color: red; font-weight: bold; }
38
+ table.actions span.label { font-weight: bold; cursor:pointer;}
39
+ table.actions input[type=text] { width: 200px; padding: 2px; border: 1px solid #aaa;}
40
+
41
+
42
+ div#option-ctrl { position: fixed; z-index: 100; bottom: 0; right: 0; min-width: 60px; min-height: 20px; height: 20px; padding: 5px; border: 1px solid #ddd; background: #f0f0f0; font-size: 11px; color: #000;
43
+ font-family: 'Helvetica Neue',Arial,'Liberation Sans',FreeSans,sans-serif; }
44
+ div#option-ctrl ul { list-style:none; margin: 0; padding: 0;}
45
+ div#option-ctrl ul li { list-style:none; margin: 0 5px 0 0; float:left; }
46
+
47
+
48
+
49
+ /* output */
50
+ body { margin: 10px; padding-top: 130px; font-family: 'Monaco', 'Deja Vu Sans Mono', 'Inconsolata' ,'Consolas',monospace; background:#111 none repeat scroll 0 0; color:#fff; font-size:10px;}
51
+ a { color: #0f0; }
52
+ a:hover { background-color: #03c; color: white; text-decoration: none; }
53
+
54
+
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # File: script/console
3
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
+
5
+ libs = " -r irb/completion"
6
+ # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
+ # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/clarity.rb'}"
9
+ puts "Loading clarity gem"
10
+ exec "#{irb} #{libs} --simple-prompt"
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
@@ -0,0 +1,100 @@
1
+ require "test/unit"
2
+ require File.dirname(__FILE__) + "/../../lib/commands/command_builder.rb"
3
+
4
+ class CommandBuilderTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @params = {
8
+ "file" => "testfile.log",
9
+ "tool" => "grep",
10
+ "term1" => "foo",
11
+ "term2" => nil,
12
+ "term3" => nil
13
+ }
14
+ @command = CommandBuilder.new(@params)
15
+ end
16
+
17
+ def test_create_new_builder
18
+ assert @command.is_a?(CommandBuilder)
19
+ assert_equal "testfile.log", @command.filename
20
+ assert_equal 1, @command.terms.size
21
+ end
22
+
23
+ def test_raises_error_if_no_file
24
+ assert_raises CommandBuilder::InvalidParameterError do
25
+ command = CommandBuilder.new(@params.merge("file" => nil))
26
+ end
27
+ end
28
+
29
+ def test_exec_functions_for_log
30
+ command = CommandBuilder.new(@params)
31
+ assert_equal 1, command.exec_functions.size
32
+ assert_match /^grep/, command.exec_functions.first
33
+ end
34
+
35
+ def test_exec_functions_with_multiple_terms_for_log
36
+ command = CommandBuilder.new(@params.merge("term2" => "bar", "term3" => "baz"))
37
+ assert_equal 3, command.exec_functions.size
38
+ assert_match /^grep/, command.exec_functions[0]
39
+ assert_match /^grep/, command.exec_functions[1]
40
+ assert_match /^grep/, command.exec_functions[2]
41
+ end
42
+
43
+ def test_exec_function_with_no_terms_for_log
44
+ command = CommandBuilder.new(@params.merge("term1" => nil))
45
+ assert_equal 1, command.exec_functions.size
46
+ assert_match /^cat/, command.exec_functions[0]
47
+ end
48
+
49
+ def test_exec_funcations_for_gzip
50
+ command = CommandBuilder.new(@params.merge("file" => "testfile.gz"))
51
+ assert_equal 1, command.exec_functions.size
52
+ assert_match /^zgrep/, command.exec_functions.first
53
+ end
54
+
55
+ def test_exec_functions_with_multiple_terms_for_gzip
56
+ command = CommandBuilder.new(@params.merge("file" => "testfile.gz", "term2" => "bar", "term3" => "baz"))
57
+ assert_equal 3, command.exec_functions.size
58
+ assert_match /^zgrep/, command.exec_functions[0]
59
+ assert_match /^grep/, command.exec_functions[1]
60
+ assert_match /^grep/, command.exec_functions[2]
61
+ end
62
+
63
+ def test_exec_function_with_no_terms_for_gzip
64
+ command = CommandBuilder.new(@params.merge("file" => "testfile.gz", "term1" => nil))
65
+ assert_equal 1, command.exec_functions.size
66
+ assert_match "gzcat", command.exec_functions[0]
67
+ end
68
+
69
+ def test_command_for_log
70
+ command = CommandBuilder.new(@params)
71
+ assert_equal "sh -c 'grep -e foo testfile.log'", command.command
72
+ end
73
+
74
+ def test_command_with_no_terms_for_log
75
+ command = CommandBuilder.new(@params.merge("term1" => nil))
76
+ assert_equal "sh -c 'cat testfile.log'", command.command
77
+ end
78
+
79
+ def test_command_with_multiple_terms_for_log
80
+ command = CommandBuilder.new(@params.merge("term2" => "bar", "term3" => "baz"))
81
+ assert_equal "sh -c 'grep -e foo testfile.log | grep -e bar | grep -e baz'", command.command
82
+ end
83
+
84
+ def test_command_for_gzip
85
+ command = CommandBuilder.new(@params.merge("file" => "testfile.gz"))
86
+ assert_equal "sh -c 'zgrep -e foo testfile.gz'", command.command
87
+ end
88
+
89
+ def test_command_with_no_terms_for_gzip
90
+ command = CommandBuilder.new(@params.merge("file" => "testfile.gz","term1" => nil))
91
+ assert_equal "sh -c 'gzcat testfile.gz'", command.command
92
+ end
93
+
94
+ def test_command_with_multiple_terms_for_gzip
95
+ command = CommandBuilder.new(@params.merge("file" => "testfile.gz","term2" => "bar", "term3" => "baz"))
96
+ assert_equal "sh -c 'zgrep -e foo testfile.gz | grep -e bar | grep -e baz'", command.command
97
+ end
98
+
99
+
100
+ end
@@ -0,0 +1,43 @@
1
+ require "test/unit"
2
+ require File.dirname(__FILE__) + "/../../lib/commands/tail_command_builder.rb"
3
+
4
+ class TailCommandBuilderTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @params = {
8
+ "file" => "testfile.log",
9
+ "tool" => "tail",
10
+ "term1" => "foo",
11
+ "term2" => nil,
12
+ "term3" => nil
13
+ }
14
+ @command = TailCommandBuilder.new(@params)
15
+ end
16
+
17
+ def test_create_new_builder
18
+ assert @command.is_a?(TailCommandBuilder)
19
+ assert_equal "testfile.log", @command.filename
20
+ assert_equal 1, @command.terms.size
21
+ end
22
+
23
+ def test_raises_error_if_invalid_file
24
+ assert_raises CommandBuilder::InvalidParameterError do
25
+ command = TailCommandBuilder.new(@params.merge("file" => "testfile.gz"))
26
+ end
27
+ end
28
+
29
+ def test_command_for_log
30
+ command = TailCommandBuilder.new(@params)
31
+ assert_equal "sh -c 'tail -n 250 -f testfile.log | grep -e foo'", command.command
32
+ end
33
+
34
+ def test_command_with_no_terms_for_log
35
+ command = TailCommandBuilder.new(@params.merge("term1" => nil))
36
+ assert_equal "sh -c 'tail -n 250 -f testfile.log'", command.command
37
+ end
38
+
39
+ def test_command_with_multiple_terms_for_log
40
+ command = TailCommandBuilder.new(@params.merge("term2" => "bar", "term3" => "baz"))
41
+ assert_equal "sh -c 'tail -n 250 -f testfile.log | grep -e foo | grep -e bar | grep -e baz'", command.command
42
+ end
43
+ end
@@ -0,0 +1,17 @@
1
+ Jul 7 20:12:11 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Processing Admin::ProductsController#index (for 67.70.29.242 at 2009-07-07 20:12:11) [GET]
2
+ Jul 7 20:12:11 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Parameters: {"action"=>"index", "controller"=>"admin/products"}
3
+ Jul 7 20:12:12 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Shop Load (44.5ms) SELECT shops.* FROM shops JOIN domains ON domains.host = 'jessetesting.staging.shopify.com' AND domains.shop_id = shops.id LIMIT 1
4
+ Jul 7 20:12:12 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Subscription Columns (1.4ms) SHOW FIELDS FROM `subscriptions`
5
+ Jul 7 20:12:12 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Subscription Load (11.3ms) SELECT * FROM `subscriptions` WHERE (`subscriptions`.`id` = 500852)
6
+ Jul 7 20:12:13 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Redirected to http://jessetesting.staging.shopify.com/admin/auth/login
7
+ Jul 7 20:12:13 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Filter chain halted as [:ensure_proper_user] rendered_or_redirected.
8
+ Jul 7 20:12:13 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Completed in 118ms (DB: 57) | 302 Found [http://jessetesting.staging.shopify.com/admin/products]
9
+ Jul 7 20:20:00 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Processing Admin::AuthController#login (for 67.70.29.242 at 2009-07-07 20:12:11) [GET]
10
+ Jul 7 20:20:00 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Parameters: {"action"=>"login", "controller"=>"admin/auth"}
11
+ Jul 7 20:30:11 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Shop Load (0.2ms) SELECT shops.* FROM shops JOIN domains ON domains.host = 'jessetesting.staging.shopify.com' AND domains.shop_id = shops.id LIMIT 1
12
+ Jul 7 20:40:11 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Rendering template within layouts/admin/auth
13
+ Jul 7 20:50:11 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Rendering admin/auth/login
14
+ Jul 7 21:00:11 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Completed in 17ms (View: 10, DB: 0) | 200 OK [http://jessetesting.staging.shopify.com/admin/auth/login]
15
+ Jul 7 22:12:11 10.1.1.1 rails.shopify[27975]: [john.staging.shopify.com] Processing Admin::ProductsController#index (for 67.70.29.242 at 2009-07-07 20:12:11) [GET]
16
+ Jul 7 22:12:11 192.168.5.1 rails.shopify[27975]: [john.staging.shopify.com] Processing Admin::ProductsController#index (for 67.70.29.242 at 2009-07-07 20:12:11) [GET]
17
+ Jul 7 22:12:11 192.168.5.1 rails.shopify[27975]: [john.staging.shopify.com] Processing Admin::ProductsController#index (for 67.70.29.242 at 2009-07-07 20:12:11) [GET]
@@ -0,0 +1,40 @@
1
+ require "test/unit"
2
+ require File.dirname(__FILE__) + "/../../lib/parsers/hostname_parser.rb"
3
+
4
+ class HostnameParserTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @params = { "sh" => "12", "sm" => "00", "ss" => "10", "eh" => "12", "em" => "00", "es" => "59" }
8
+ @lines = %|Jul 24 14:58:21 app3 rails.shopify[9855]: [wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]
9
+ Jul 24 12:00:21 192.168.5.1 rails.shopify[9855]: [wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]
10
+ Jul 24 12:00:31 192.168.5.1 rails.shopify[9855]: [test.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]
11
+ Jul 24 12:00:41 192.168.5.1 rails.shopify[9855]: [test2.myshopify.com] Processing some other line of text
12
+ |.split("\n")
13
+ @parser = HostnameParser.new(nil)
14
+ end
15
+
16
+
17
+ def test_parse_strips_out_ip_and_appname
18
+ line = @lines[1][16..-1] # strip out first 16 lines
19
+ out = @parser.parse(line)
20
+
21
+ assert out.has_key?(:line)
22
+ assert_equal "[wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]", out[:line]
23
+ end
24
+
25
+ def test_parse_strips_out_host_and_appname
26
+ line = @lines.first[16..-1] # strip out first 16 lines
27
+ out = @parser.parse(line)
28
+
29
+ assert out.has_key?(:line)
30
+ assert_equal "[wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]", out[:line]
31
+ end
32
+
33
+ def test_parse_returns_line_if_no_match
34
+ line = "in@valid rails.shopify[9855]: [wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]"
35
+ out = @parser.parse(line)
36
+ assert out.has_key?(:line)
37
+ assert_equal line, out[:line]
38
+ end
39
+
40
+ end
@@ -0,0 +1,54 @@
1
+ require "test/unit"
2
+ require File.dirname(__FILE__) + "/../../lib/parsers/shop_parser.rb"
3
+
4
+ class ShopParserTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @parser = ShopParser.new(nil)
8
+ @lines = %|[wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]
9
+ [wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]
10
+ [test.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]
11
+ [my-shop.myshopify.com] Processing some other line of text
12
+ Jul 7 20:12:11 staging rails.shopify[27975]: [jessetesting.staging.shopify.com] Processing Admin::ProductsController#index (for 67.70.29.242 at 2009-07-07 20:12:11) [GET]
13
+ |.split("\n")
14
+ end
15
+
16
+ def test_parse_shop_name
17
+ line = @lines.first
18
+ out = @parser.parse(line)
19
+
20
+ assert out.has_key?(:shop)
21
+ assert out.has_key?(:line)
22
+ assert_equal "wadedemt.myshopify.com", out[:shop]
23
+ assert_equal "Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]", out[:line]
24
+ end
25
+
26
+ def test_parse_shop_name_with_extra_space
27
+ line = @lines[1]
28
+ out = @parser.parse(line)
29
+
30
+ assert out.has_key?(:shop)
31
+ assert out.has_key?(:line)
32
+ assert_equal "wadedemt.myshopify.com", out[:shop]
33
+ assert_equal "Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]", out[:line]
34
+ end
35
+
36
+ def test_parse_shop_name_with_dashes
37
+ line = @lines[3]
38
+ out = @parser.parse(line)
39
+
40
+ assert out.has_key?(:shop)
41
+ assert out.has_key?(:line)
42
+ assert_equal "my-shop.myshopify.com", out[:shop]
43
+ assert_equal "Processing some other line of text", out[:line]
44
+ end
45
+
46
+ def test_parse_with_no_shop_returns_line
47
+ line = @lines[4]
48
+ out = @parser.parse(line)
49
+ assert !out.has_key?(:shop)
50
+ assert_equal line, out[:line]
51
+ end
52
+
53
+ end
54
+
@@ -0,0 +1,84 @@
1
+ require "test/unit"
2
+ require File.dirname(__FILE__) + "/../../lib/parsers/time_parser.rb"
3
+
4
+ class TimeParserTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @params = { "sh" => "12", "sm" => "00", "ss" => "10", "eh" => "12", "em" => "00", "es" => "59" }
8
+ @lines = %|Jul 24 14:58:21 app3 rails.shopify[9855]: [wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]
9
+ Jul 24 12:00:21 192.168.5.1 rails.shopify[9855]: [wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]
10
+ Jul 24 12:00:31 192.168.5.1 rails.shopify[9855]: [test.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]
11
+ Jul 24 12:00:41 192.168.5.1 rails.shopify[9855]: [test2.myshopify.com] Processing some other line of text
12
+ |.split("\n")
13
+ end
14
+
15
+ def test_parse_timestamp
16
+ @parser = TimeParser.new(nil, {})
17
+ line = @lines.first
18
+ elements = @parser.parse(line)
19
+
20
+ assert elements.has_key?(:timestamp)
21
+ assert_equal "Jul 24 14:58:21", elements[:timestamp]
22
+ assert_equal "app3 rails.shopify[9855]: [wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET]", elements[:line]
23
+ end
24
+
25
+ def test_parse_with_start_time_and_early_timestamp
26
+ @parser = TimeParser.new(nil, {"sh" => "15", "sm" => "00", "ss" => "10"})
27
+ line = @lines.first
28
+ elements = @parser.parse(line)
29
+
30
+ # does not match - reject line all together
31
+ assert elements.empty?
32
+ end
33
+
34
+ def test_parse_with_start_time_and_later_timestamp
35
+ @parser = TimeParser.new(nil, {"sh" => "12", "sm" => "00", "ss" => "10"})
36
+ line = @lines[1]
37
+ elements = @parser.parse(line)
38
+
39
+ assert elements.has_key?(:timestamp)
40
+ assert elements.has_key?(:line)
41
+ end
42
+
43
+ def test_parse_with_end_time_and_early_timestamp
44
+ @parser = TimeParser.new(nil, {"eh" => "12", "em" => "00", "es" => "00"})
45
+ line = @lines.first
46
+ elements = @parser.parse(line)
47
+
48
+ assert elements.empty?
49
+ end
50
+
51
+ def test_parse_with_end_time_and_later_timestamp
52
+ @parser = TimeParser.new(nil, {"eh" => "13", "em" => "00", "es" => "00"})
53
+ line = @lines[1]
54
+ elements = @parser.parse(line)
55
+
56
+ assert elements.has_key?(:timestamp)
57
+ assert elements.has_key?(:line)
58
+ end
59
+
60
+ def test_parse_with_entry_between_start_and_end
61
+ @parser = TimeParser.new(nil, {"sh" => "14", "sm" => "00", "ss" => "00", "eh" => "15", "em" => "00", "es" => "00"})
62
+ line = @lines.first
63
+ elements = @parser.parse(line)
64
+
65
+ assert elements.has_key?(:timestamp)
66
+ assert elements.has_key?(:line)
67
+ end
68
+
69
+ def test_parse_with_entry_outside_start_and_end
70
+ @parser = TimeParser.new(nil, {"sh" => "14", "sm" => "00", "ss" => "00", "eh" => "15", "em" => "00", "es" => "00"})
71
+ line = @lines[1]
72
+ elements = @parser.parse(line)
73
+
74
+ assert elements.empty?
75
+ end
76
+
77
+ def test_parse_returns_entry_if_doesnt_match_parser
78
+ line = "July 24, 1999 12:00:21 192.168.5.1 rails.shopify[9855]: [wadedemt.myshopify.com] Processing ShopController#products (for 192.168.1.230 at 2009-07-24 14:58:21) [GET] "
79
+ @parser = TimeParser.new(nil)
80
+ elements = @parser.parse(line)
81
+ assert_equal line, elements[:line]
82
+ end
83
+
84
+ end
@@ -0,0 +1,3 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/clarity'