colortail 0.1.5 → 0.1.6

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/Changelog.markdown CHANGED
@@ -1,3 +1,7 @@
1
+ ### colortail 0.1.6 2010-04-26
2
+
3
+ * BUGFIX: Lots of bugfixes as a result of finally adding testing
4
+
1
5
  ### colortail 0.1.5 2010-04-21
2
6
 
3
7
  * BUGFIX: Fixed crash on non-existant config file (#2)
data/TODO.markdown CHANGED
@@ -2,9 +2,4 @@
2
2
  * Allow different groupings per file
3
3
  * Allow multiple color groupings per file
4
4
 
5
- * Add Testing
6
-
7
5
  * Add option to tail file (-f) or work like tail with (-XX) which is a line count
8
-
9
- * Errors
10
- * Handle when there is no 'group' in config file
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.5
1
+ 0.1.6
data/colortail.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{colortail}
8
- s.version = "0.1.5"
8
+ s.version = "0.1.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Eric Lubow"]
12
- s.date = %q{2010-04-21}
12
+ s.date = %q{2010-04-26}
13
13
  s.default_executable = %q{colortail}
14
14
  s.description = %q{Tail a file and color lines based on regular expressions within that line. By setting up multiple expression and color groups in the configuration file, you can apply highlighting to a file while its being tailed.}
15
15
  s.email = %q{eric@lubow.org}
@@ -33,6 +33,8 @@ Gem::Specification.new do |s|
33
33
  "lib/colortail.rb",
34
34
  "lib/colortail/application.rb",
35
35
  "lib/colortail/configuration.rb",
36
+ "test/colortail/test_application.rb",
37
+ "test/colortail/test_configuration.rb",
36
38
  "test/helper.rb",
37
39
  "test/test_colortail.rb"
38
40
  ]
@@ -42,7 +44,9 @@ Gem::Specification.new do |s|
42
44
  s.rubygems_version = %q{1.3.5}
43
45
  s.summary = %q{Tail a file and color lines based on regular expressions within that line}
44
46
  s.test_files = [
45
- "test/helper.rb",
47
+ "test/colortail/test_application.rb",
48
+ "test/colortail/test_configuration.rb",
49
+ "test/helper.rb",
46
50
  "test/test_colortail.rb",
47
51
  "examples/colortail.rb"
48
52
  ]
data/lib/colortail.rb CHANGED
@@ -30,7 +30,13 @@ module ColorTail
30
30
  :hidden => 8
31
31
  }
32
32
 
33
- @@color_matchers = []
33
+ attr_accessor :color_matchers
34
+
35
+ def initialize()
36
+ # This is an instance variable in case we tail
37
+ # multiple files with different groupings
38
+ @color_matchers = Array.new
39
+ end
34
40
 
35
41
  def log(filename, message, line_prefix=nil)
36
42
  # Add the filename to the message
@@ -39,7 +45,7 @@ module ColorTail
39
45
  color = :none
40
46
  attribute = nil
41
47
 
42
- @@color_matchers.each do |filter|
48
+ @color_matchers.each do |filter|
43
49
  if message =~ filter[:match]
44
50
  color = filter[:color]
45
51
  attribute = filter[:attribute]
@@ -67,7 +73,7 @@ module ColorTail
67
73
  end
68
74
 
69
75
  def add_color_matcher( options )
70
- @@color_matchers.push( options )
76
+ @color_matchers.push( options )
71
77
  end
72
78
  end
73
79
 
@@ -8,16 +8,19 @@ module ColorTail
8
8
  options = opt[:options]
9
9
 
10
10
  # Deal with any/all options issues
11
- if options[:invalid_argument]
12
- $stderr.puts options[:invalid_argument]
11
+ if opt[:invalid_argument]
12
+ $stderr.puts opt[:invalid_argument]
13
13
  options[:help] = true
14
14
  end
15
15
 
16
+ # Show the help menu if desired
16
17
  if options[:help]
17
18
  $stderr.puts opt.opts
18
19
  return 1
19
20
  end
20
-
21
+
22
+
23
+ # The meat of the program
21
24
  begin
22
25
  # Read the config file if it exists
23
26
  if File.exists?(options[:conf])
@@ -40,6 +43,22 @@ module ColorTail
40
43
  return 1
41
44
  end
42
45
 
46
+ # Before we go any further, check for existance of files
47
+ @files_exist = false
48
+ files.each do |file|
49
+ if File.exists?(file)
50
+ @files_exist = true
51
+ break
52
+ end
53
+ end
54
+
55
+ # If we have no files, tell them and show the help
56
+ unless @files_exist
57
+ $stderr.puts "Please check to make sure the files exist ..."
58
+ $stderr.puts opt.opts
59
+ return 1
60
+ end
61
+
43
62
  logger = ColorTail::Colorize.new()
44
63
 
45
64
  # Add the color match array if we aren't using the default
@@ -74,13 +93,13 @@ module ColorTail
74
93
 
75
94
  # If we get a CTRL-C, catch it (rescue) and send it for cleanup
76
95
  rescue Interrupt
77
- cleanup(threads)
96
+ thread_cleanup(threads)
78
97
  end
79
98
 
80
99
  return 0
81
100
  end
82
101
 
83
- def cleanup(threads)
102
+ def thread_cleanup(threads)
84
103
  threads.each do |thread|
85
104
  thread.kill
86
105
  end
@@ -90,6 +109,9 @@ module ColorTail
90
109
  end
91
110
  end
92
111
 
112
+ class Cleanup
113
+ end
114
+
93
115
 
94
116
  class FileDoesNotExist < StandardError
95
117
  end
@@ -6,7 +6,7 @@ module ColorTail
6
6
  if File.exists?(conf)
7
7
  @config = File.read(conf)
8
8
  else
9
- raise FileDoesNotExist, "Config file #{file} cannot be found."
9
+ raise FileDoesNotExist, "Config file #{@config_file} cannot be found."
10
10
  end
11
11
  end
12
12
 
@@ -15,7 +15,8 @@ module ColorTail
15
15
  if groupings.has_key?( group )
16
16
  return groupings[group]
17
17
  else
18
- raise ComplexRecord, "No such group '#{group}' in config file"
18
+ $stderr.puts "No such group '#{group}', falling back to default."
19
+ return "'default' => []"
19
20
  end
20
21
  else
21
22
  raise ComplexRecord, "Config file syntax error"
@@ -93,6 +94,9 @@ module ColorTail
93
94
  self[:options] = options
94
95
  rescue OptionParser::InvalidOption => e
95
96
  self[:invalid_argument] = e.message
97
+ @opts.parse(args, flags={ :delete_invalid_opts => true })
98
+ self[:files] = args
99
+ self[:options] = options
96
100
  end
97
101
  end
98
102
  end
@@ -0,0 +1,86 @@
1
+ require 'helper'
2
+
3
+ module TestColortail
4
+
5
+ class ApplicationTest < Test::Unit::TestCase
6
+ # No context name necessary since this is to redirect $stdout
7
+ context "" do
8
+ setup do
9
+ ARGV.clear
10
+
11
+ @stdout_orig = $stdout
12
+ $stdout = StringIO.new
13
+ end
14
+
15
+ teardown do
16
+ $stdout = @stdout_orig
17
+ end
18
+
19
+ context "" do
20
+ setup do
21
+ @stderr_orig = $stderr
22
+ $stderr = StringIO.new
23
+ end
24
+
25
+ teardown do
26
+ $stderr = @stderr_orig
27
+ end
28
+
29
+
30
+ context "With no options or files" do
31
+ setup do
32
+ ARGV.clear
33
+ end
34
+
35
+ should "show the help menu" do
36
+ ColorTail::Application.run!(*ARGV)
37
+ assert_match "Usage:", $stderr.string
38
+ end
39
+ end
40
+
41
+ context "With '-h' option and no files" do
42
+ setup do
43
+ ARGV.clear
44
+ ARGV.push("-h")
45
+ end
46
+
47
+ should "show the help menu" do
48
+ ColorTail::Application.run!(*ARGV)
49
+ assert_match "Usage:", $stderr.string
50
+ end
51
+ end
52
+
53
+ context "With non-existant option and no files" do
54
+ setup do
55
+ ARGV.clear
56
+ ARGV.push("-zdfkjlsd")
57
+ end
58
+
59
+ should "show the help menu" do
60
+ ColorTail::Application.run!(*ARGV)
61
+ assert_match "invalid option:", $stderr.string
62
+ end
63
+ end
64
+
65
+ should "kill all threads and exit cleanly with the word 'Terminating...'" do
66
+ threads = Array.new
67
+ threads.push(Thread.new { sleep }, Thread.new { sleep })
68
+ assert_equal 2, threads.size
69
+ assert_equal "sleep", threads[0].status
70
+ assert_equal "sleep", threads[1].status
71
+ begin
72
+ ColorTail::Application.thread_cleanup(threads)
73
+ rescue SystemExit => e
74
+ assert_equal "Terminating...\n", $stderr.string
75
+ assert_equal 0, e.status
76
+ end
77
+ assert_equal false, threads[0].status
78
+ assert_equal false, threads[1].status
79
+ end
80
+ end
81
+
82
+ end
83
+
84
+ end
85
+
86
+ end
@@ -0,0 +1,117 @@
1
+ require 'helper'
2
+
3
+ module TestColortail
4
+
5
+ class OptionsTest < Test::Unit::TestCase
6
+ # No context name necessary since this is to redirect $stdout
7
+ context "" do
8
+ setup do
9
+ ARGV.clear
10
+
11
+ @stdout_orig = $stdout
12
+ $stdout = StringIO.new
13
+ end
14
+
15
+ teardown do
16
+ $stdout = @stdout_orig
17
+ end
18
+
19
+ should "return an options object with no arguments" do
20
+ @opt = ColorTail::Options.new(ARGV)
21
+ assert_equal @opt.class, ColorTail::Options
22
+ end
23
+
24
+ context "With a valid options class instance" do
25
+ setup do
26
+ ARGV.clear
27
+ @opt = ColorTail::Options.new(ARGV)
28
+ end
29
+
30
+ should "have the group value set as default" do
31
+ assert_equal @opt[:options][:group], "default"
32
+ end
33
+
34
+ should "have the help switch set to false" do
35
+ assert_equal @opt[:options][:help], false
36
+ end
37
+
38
+ should "have the show list switch set to false" do
39
+ assert_equal @opt[:options][:list], false
40
+ end
41
+
42
+ should "have an empty files array" do
43
+ assert_equal @opt[:files].size, 0
44
+ end
45
+
46
+ should "have a possible config file to test for" do
47
+ assert_not_nil @opt[:options][:conf]
48
+ end
49
+ end
50
+
51
+ should "raise FileDoesNotExist error on non-existant config file" do
52
+ ARGV.clear
53
+ config_file = String.new
54
+ ARGV.push("-c",config_file)
55
+ assert_raise( ColorTail::FileDoesNotExist ) { @opt = ColorTail::Options.new(ARGV) }
56
+ end
57
+
58
+ end
59
+ end
60
+
61
+
62
+ class ConfigurationTest < Test::Unit::TestCase
63
+ # No context name necessary since this is to redirect $stdout
64
+ context "" do
65
+ setup do
66
+ ARGV.clear
67
+
68
+ @stdout_orig = $stdout
69
+ $stdout = StringIO.new
70
+ end
71
+
72
+ teardown do
73
+ $stdout = @stdout_orig
74
+ end
75
+
76
+
77
+ should "raise a FileDoesNotExist error for non-existant file" do
78
+ config_file = String.new
79
+ assert_raise( ColorTail::FileDoesNotExist ) { @config = ColorTail::Configuration.new(config_file) }
80
+ end
81
+
82
+ context "With a valid configuration instance" do
83
+ setup do
84
+ @stderr_orig = $stderr
85
+ $stderr = StringIO.new
86
+
87
+ @config_file = File.join(File.dirname(__FILE__), '..', '..', 'examples', 'colortail.rb')
88
+
89
+ @config = ColorTail::Configuration.new("#{@config_file}")
90
+ end
91
+
92
+ teardown do
93
+ $stderr = @stderr_orig
94
+ end
95
+
96
+ should "be a valid configuration instance" do
97
+ assert_equal @config.class, ColorTail::Configuration
98
+ end
99
+
100
+ should "fallback to 'default' grouping when a non-existent match_group is specified" do
101
+ @match_group = @config.load_opts('doesNotExist')
102
+ assert_match "No such group '", $stderr.string
103
+ assert_equal @match_group, "'default' => []"
104
+ end
105
+
106
+ should "display match groups" do
107
+ @match_group = @config.load_opts('default')
108
+ @config.display_match_groups()
109
+ assert_match " * ", $stdout.string
110
+ end
111
+ end
112
+
113
+
114
+ end
115
+ end
116
+
117
+ end
data/test/helper.rb CHANGED
@@ -7,4 +7,8 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
7
  require 'colortail'
8
8
 
9
9
  class Test::Unit::TestCase
10
+
11
+ class TestNotImplemented < StandardError
12
+ end
13
+
10
14
  end
@@ -1,7 +1,67 @@
1
1
  require 'helper'
2
2
 
3
- class TestColortail < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
3
+ module TestColortail
4
+
5
+ class ColortailTest < Test::Unit::TestCase
6
+ # No context name necessary since this is to redirect $stdout
7
+ context "" do
8
+ setup do
9
+ ARGV.clear
10
+
11
+ @stdout_orig = $stdout
12
+ $stdout = StringIO.new
13
+ end
14
+
15
+ teardown do
16
+ $stdout = @stdout_orig
17
+ end
18
+
19
+ context "With valid logger class" do
20
+ setup do
21
+ @logger = ColorTail::Colorize.new()
22
+ end
23
+
24
+ should "be a valid logger class" do
25
+ @class = @logger.class
26
+ assert_equal @class, ColorTail::Colorize
27
+ end
28
+
29
+ should "show a line with no prefix" do
30
+ @logger.show('My test line', nil)
31
+ assert_equal $stdout.string, "My test line\n"
32
+ end
33
+
34
+ should "show a line with 'filename:' as a prefix" do
35
+ @logger.show('My test line', 'filename:')
36
+ assert_equal $stdout.string, "filename:My test line\n"
37
+ end
38
+
39
+ should "add nothing to the color matchers class variable with an empty match group" do
40
+ match_group = Array.new
41
+ assert_equal match_group, @logger.color_matchers
42
+ match_group.push( 'default' => [] )
43
+ @logger.add_color_matcher( 'default' => [] )
44
+ assert_equal match_group, @logger.color_matchers
45
+ end
46
+
47
+ context "and an empty match group" do
48
+ setup do
49
+ @logger.add_color_matcher( 'default' => [] )
50
+ end
51
+
52
+ should "say 'My test line' with no prefix" do
53
+ @logger.log('testfile','My test line')
54
+ assert_equal $stdout.string, "\e[0mMy test line\e[0m\n"
55
+ end
56
+
57
+ should "say 'My test line' with 'testfile: ' as the prefix" do
58
+ @logger.log('testfile','My test line','testfile: ')
59
+ assert_equal $stdout.string, "\e[0mtestfile:\e[0m\e[0mMy test line\e[0m\n"
60
+ end
61
+ end
62
+ end
63
+
64
+ end
6
65
  end
7
- end
66
+
67
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: colortail
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Lubow
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-04-21 00:00:00 -04:00
12
+ date: 2010-04-26 00:00:00 -04:00
13
13
  default_executable: colortail
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -56,6 +56,8 @@ files:
56
56
  - lib/colortail.rb
57
57
  - lib/colortail/application.rb
58
58
  - lib/colortail/configuration.rb
59
+ - test/colortail/test_application.rb
60
+ - test/colortail/test_configuration.rb
59
61
  - test/helper.rb
60
62
  - test/test_colortail.rb
61
63
  has_rdoc: true
@@ -87,6 +89,8 @@ signing_key:
87
89
  specification_version: 3
88
90
  summary: Tail a file and color lines based on regular expressions within that line
89
91
  test_files:
92
+ - test/colortail/test_application.rb
93
+ - test/colortail/test_configuration.rb
90
94
  - test/helper.rb
91
95
  - test/test_colortail.rb
92
96
  - examples/colortail.rb