From ae043bed04a27efb72cc0ba44d3b01fa3091fe12 Mon Sep 17 00:00:00 2001 From: Wes Bailey Date: Wed, 23 Nov 2011 01:19:45 -0800 Subject: [PATCH] Initial --- .rspec | 1 + .rvmrc | 2 + Gemfile | 8 ++++ Gemfile.lock | 43 ++++++++++++++++++ README.md | 0 Rakefile | 2 + command_line_reporter.gemspec | 23 ++++++++++ examples/first.rb | 37 +++++++++++++++ lib/command_line_reporter.rb | 73 ++++++++++++++++++++++++++++++ lib/version.rb | 3 ++ spec/command_line_reporter_spec.rb | 43 ++++++++++++++++++ 11 files changed, 235 insertions(+) create mode 100644 .rspec create mode 100644 .rvmrc create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 README.md create mode 100644 Rakefile create mode 100644 command_line_reporter.gemspec create mode 100644 examples/first.rb create mode 100644 lib/command_line_reporter.rb create mode 100644 lib/version.rb create mode 100644 spec/command_line_reporter_spec.rb diff --git a/.rspec b/.rspec new file mode 100644 index 0000000..3d4e247 --- /dev/null +++ b/.rspec @@ -0,0 +1 @@ +--color --format d diff --git a/.rvmrc b/.rvmrc new file mode 100644 index 0000000..fd7c749 --- /dev/null +++ b/.rvmrc @@ -0,0 +1,2 @@ +rvm --install ruby-1.9.2-p180 +rvm --create --install use ruby-1.9.2-p180@command_line_reporter diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..4d961ec --- /dev/null +++ b/Gemfile @@ -0,0 +1,8 @@ +source 'http://rubygems.org' + +gem 'rspec', '>=2.4' +gem 'ruby-debug19' +gem 'autotest' +gem 'autotest-growl' +gem 'rake' +gem 'kramdown' diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..75201a0 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,43 @@ +GEM + remote: http://rubygems.org/ + specs: + ZenTest (4.6.2) + archive-tar-minitar (0.5.2) + autotest (4.4.6) + ZenTest (>= 4.4.1) + autotest-growl (0.2.16) + columnize (0.3.4) + diff-lcs (1.1.3) + kramdown (0.13.3) + linecache19 (0.5.12) + ruby_core_source (>= 0.1.4) + rake (0.9.2.2) + rspec (2.7.0) + rspec-core (~> 2.7.0) + rspec-expectations (~> 2.7.0) + rspec-mocks (~> 2.7.0) + rspec-core (2.7.1) + rspec-expectations (2.7.0) + diff-lcs (~> 1.1.2) + rspec-mocks (2.7.0) + ruby-debug-base19 (0.11.25) + columnize (>= 0.3.1) + linecache19 (>= 0.5.11) + ruby_core_source (>= 0.1.4) + ruby-debug19 (0.11.6) + columnize (>= 0.3.1) + linecache19 (>= 0.5.11) + ruby-debug-base19 (>= 0.11.19) + ruby_core_source (0.1.5) + archive-tar-minitar (>= 0.5.2) + +PLATFORMS + ruby + +DEPENDENCIES + autotest + autotest-growl + kramdown + rake + rspec (>= 2.4) + ruby-debug19 diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..14cfe0b --- /dev/null +++ b/Rakefile @@ -0,0 +1,2 @@ +require 'bundler' +Bundler::GemHelper.install_tasks diff --git a/command_line_reporter.gemspec b/command_line_reporter.gemspec new file mode 100644 index 0000000..04412fc --- /dev/null +++ b/command_line_reporter.gemspec @@ -0,0 +1,23 @@ +$: << File.join(__FILE__, '..', 'lib') + +require 'date' +require 'command_line_reporter/version' + +Gem::Specification.new do |gem| + gem.name = 'command_line_reporter' + gem.version = command_line_reporter::VERSION + gem.date = Date.today.to_s + + gem.summary = 'A tool for providing interactive command line applications' + gem.description = 'This gem makes it easy to provide a report while your ruby script is executing' + + gem.authors = %w/Wes Bailey/ + gem.email = 'baywes@gmail.com' + gem.homepage = 'http://github.com/wbailey/command_line_reporter' + + gem.files = Dir['lib/**/*', 'README*', 'LICENSE*'] & `git ls-files -z`.split("\0") + gem.test_files = Dir['spec/**/*'] & `git ls-files -z`.split("\0") + + gem.add_development_dependency "bundler", ">= 1.0.0" +end + diff --git a/examples/first.rb b/examples/first.rb new file mode 100644 index 0000000..867428d --- /dev/null +++ b/examples/first.rb @@ -0,0 +1,37 @@ +require 'command_line_reporter' + +class Example + include CommandLineReporter + + def initialize + self.clr_complete_string = 'done' + end + + def run + x,y,z = 0,0,0 + + report(:message => 'calculating first expression') do + x = 2 + 2 + sleep 1 + + 2.times do + report(:message => 'calculating second expression') do + y = 10 - x + sleep 1 + + 10.times do |i| + report(:message => 'pixelizing', :type => 'inline', :complete => "#{i*10}%") do + z = x + y + sleep 1 + end + end + end + end + end + + puts '-' * 20 + %w(x y z).each {|v| puts "#{v}: #{eval v}"} + end +end + +Example.new.run diff --git a/lib/command_line_reporter.rb b/lib/command_line_reporter.rb new file mode 100644 index 0000000..582f5ba --- /dev/null +++ b/lib/command_line_reporter.rb @@ -0,0 +1,73 @@ +module CommandLineReporter + attr_accessor :command_line_reporter_indent, :command_line_reporter_complete_string, :command_line_reporter_indent_size + + def report(options = {}) + raise ArgumentError unless (options.keys - [:message, :type, :complete, :indent_size]).empty? + + self.command_line_reporter_indent = (self.command_line_reporter_indent) ? self.command_line_reporter_indent += 1 : 0 + + padding = ' ' * self.command_line_reporter_indent * (options[:indent_size] || self.command_line_reporter_indent_size) + + start_str = "#{padding}#{options[:message]}" + end_str = options[:complete] || self.command_line_reporter_complete_string + + if options[:type] == 'inline' + print "#{start_str}..." + else + puts start_str + end_str = padding + end_str + end + + yield + + puts end_str + + self.command_line_reporter_indent -= 1 + end + + def command_line_reporter_complete_string + @command_line_reporter_complete_string ||= 'complete' + end + + def command_line_reporter_indent_size + @command_line_reporter_indent_size ||= 2 + end +end + +class Example + attr_accessor :expresssions + + include CommandLineReporter + + def initialize + self.command_line_reporter_complete_string = 'done' + end + + def run + x,y,z = 0,0,0 + + report(:message => 'calculating first expression') do + x = 2 + 2 + sleep 1 + + 2.times do + report(:message => 'calculating second expression') do + y = 10 - x + sleep 1 + + 10.times do |i| + report(:message => 'pixelizing', :type => 'inline', :complete => "#{i*10}%") do + z = x + y + sleep 1 + end + end + end + end + end + + puts '-' * 20 + %w(x y z).each {|v| puts "#{v}: #{eval v}"} + end +end + +Example.new.run diff --git a/lib/version.rb b/lib/version.rb new file mode 100644 index 0000000..22f3ca3 --- /dev/null +++ b/lib/version.rb @@ -0,0 +1,3 @@ +module command_line_reporter + VERSION = '0.1.0' +end diff --git a/spec/command_line_reporter_spec.rb b/spec/command_line_reporter_spec.rb new file mode 100644 index 0000000..02364c4 --- /dev/null +++ b/spec/command_line_reporter_spec.rb @@ -0,0 +1,43 @@ +$: << File.join(File.dirname(__FILE__), '..', 'lib') +require 'command_line_reporter' + +describe CommandLineReporter do + let :use_class do + Class.new do + include CommandLineReporter + end + end + + subject { use_class.new } + + describe "#report" do + context 'argument validation' do + it 'raises exception when there is an invalid argument' do + lambda { + subject.report(:asdf => true) + }.should raise_exception /ArgumentError/ + end + + it 'raises an exception when a block is not given' do + lambda { + subject.report(:message => 'test') + }.should raise_exception /ArgumentError/ + end + + it 'accepts valid arguments' do + subject.should_receive(:puts).with('test') + subject.should_receive(:puts).with('complete') + + lambda { + subject.report(:message => 'test') do + end + }.should_not raise_exception + end + end + end + + describe 'default values' do + its(:clr_complete_string) { should eq 'complete' } + its(:clr_indent_size) { should eq 2 } + end +end