begin
require 'jeweler'
Jeweler::Tasks.new do |gem|
- gem.name = "cobalt"
- gem.summary = %Q{TODO: one-line summary of your gem}
- gem.description = %Q{TODO: longer description of your gem}
- gem.email = "kazu.dev@gmail.com"
- gem.homepage = "http://github.com/ktlacaelel/cobalt"
- gem.authors = ["kazuyoshi tlacaelel"]
- gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
+ gem.name = 'cobalt'
+ gem.summary = %Q{Console for ruby.}
+ gem.description = %Q{Colored, Nesting, Multiple logging management.}
+ gem.email = 'kazu.dev@gmail.com'
+ gem.homepage = 'http://github.com/ktlacaelel/cobalt'
+ gem.authors = ['Fernando TrasviƱa', 'Pablo Antonio Gonzalez Cervantes', 'kazuyoshi tlacaelel']
+ gem.add_development_dependency 'thoughtbot-shoulda', '>= 0'
+ gem.add_development_dependency 'isna', '>= 0'
end
Jeweler::GemcutterTasks.new
rescue LoadError
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
+ puts 'Jeweler (or a dependency) not available. Install it with: gem install jeweler'
end
require 'rake/testtask'
end
rescue LoadError
task :rcov do
- abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
+ abort 'RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov'
end
end
require 'rake/rdoctask'
Rake::RDocTask.new do |rdoc|
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
+ version = File.exist?('VERSION') ? File.read('VERSION') : ''
rdoc.rdoc_dir = 'rdoc'
rdoc.title = "cobalt #{version}"
+require 'rubygems'
+require 'isna'
+require 'logger'
+
+module Cobalt
+
+ class Console
+
+ attr_accessor :keep_in_buffer, :separator_length
+
+ def initialize( options = {} )
+ @indent = 0
+ @loggers = options[:loggers] || [::Logger.new(STDOUT)]
+ @keep_in_buffer = false
+ @temporal_buffer = []
+ @separator_length = 120
+ @color = :white
+ end
+
+ def add_logger logger
+ @loggers << logger
+ end
+
+ def remove_logger logger
+ @loggers = @loggers - [logger]
+ end
+
+ def release_buffer
+ @keep_in_buffer = false
+ @temporal_buffer.each do |line|
+ @loggers.each { |logger| logger.info(line) }
+ end
+ @temporal_buffer = []
+ nil
+ end
+
+ def log(*objects)
+ objects.each do |object|
+
+ the_string = object.to_s
+ the_string = the_string.to_ansi.send(@color).to_s
+ the_string = the_string.gsub(/^/, ' ' * @indent)
+
+ @loggers.each do |logger|
+ if @keep_in_buffer
+ @temporal_buffer << the_string
+ next
+ end
+ logger.info the_string
+ end
+
+ end
+ self
+ end
+
+ def pp(*objects)
+ dump = ""
+ if objects.size > 1
+ PP.pp(objects, dump)
+ else
+ PP.pp(objects.first, dump)
+ end
+ log(dump)
+ end
+
+ def notice(*objects)
+ color(:cyan) { log(*objects) }
+ end
+
+ def warn(*objects)
+ color(:yellow) { log(*objects) }
+ end
+
+ def error(*objects)
+ color(:red) { log(*objects) }
+ end
+
+ def separator(type = '-')
+ log((type * (@separator_length - @indent)))
+ end
+
+ def space(lines = 1)
+ lines.times { self.log('') }
+ self
+ end
+
+ def indent
+ if block_given?
+ @indent = @indent + 2
+ yield
+ @indent = @indent - 2
+ else
+ @indent = @indent + 2
+ end
+ self
+ end
+
+ def outdent
+ @indent = @indent - 2
+ self
+ end
+
+ def color(symbol)
+ if block_given?
+ old = @color
+ @color = symbol
+ yield
+ @color = old
+ else
+ @color = symbol
+ end
+ self
+ end
+
+ end
+
+end