diff --git a/.gitignore b/.gitignore index 2288186..68f8d77 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,8 @@ doc # jeweler generated pkg +Guardfile + # Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore: # # * Create a file at ~/.gitignore @@ -27,7 +29,7 @@ pkg # # For MacOS: # -#.DS_Store +.DS_Store # # For TextMate #*.tmproj @@ -39,4 +41,4 @@ pkg #.\#* # # For vim: -#*.swp +*.swp diff --git a/Gemfile b/Gemfile index a153aaa..126eea7 100644 --- a/Gemfile +++ b/Gemfile @@ -7,4 +7,7 @@ group :development, :test do gem 'bundler', '~> 1.0.0' gem 'jeweler', '~> 1.5.2' gem 'rspec', '2.6.0' + gem 'guard', '1.0.1' + gem 'guard-cucumber', '0.7.5' + gem 'guard-rspec', '0.6.0' end diff --git a/Gemfile.lock b/Gemfile.lock index 84c10db..6fc3c4c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,9 +10,18 @@ GEM json (>= 1.4.6) term-ansicolor (>= 1.0.6) diff-lcs (1.1.3) + ffi (1.0.11) gherkin (2.5.1) json (>= 1.4.6) git (1.2.5) + guard (1.0.1) + ffi (>= 0.5.0) + thor (~> 0.14.6) + guard-cucumber (0.7.5) + cucumber (>= 0.10) + guard (>= 0.8.3) + guard-rspec (0.6.0) + guard (>= 0.10.0) jeweler (1.5.2) bundler (~> 1.0.0) git (>= 1.2.5) @@ -28,6 +37,7 @@ GEM diff-lcs (~> 1.1.2) rspec-mocks (2.6.0) term-ansicolor (1.0.6) + thor (0.14.6) PLATFORMS ruby @@ -36,5 +46,8 @@ DEPENDENCIES bundler (~> 1.0.0) colored (>= 1.2) cucumber (>= 0.10.0) + guard (= 1.0.1) + guard-cucumber (= 0.7.5) + guard-rspec (= 0.6.0) jeweler (~> 1.5.2) rspec (= 2.6.0) diff --git a/features/enhanced_logger.feature b/features/enhanced_logger.feature index 1217405..d4c8974 100644 --- a/features/enhanced_logger.feature +++ b/features/enhanced_logger.feature @@ -12,4 +12,4 @@ Scenario: Step information is written to the rails log | STEP INFORMATION IS WRITTEN TO THE RAILS LOG | black_on_green | | Given a cucumber feature is executing against my rails application | black_on_yellow | | When I examine the rails log | black_on_yellow | - | And I do some crazy Inception like test on myself | black_on_yellow | \ No newline at end of file + | And I do some crazy Inception like test on myself | black_on_yellow | diff --git a/features/examples_support.feature b/features/examples_support.feature index 9b03abe..12c0d14 100644 --- a/features/examples_support.feature +++ b/features/examples_support.feature @@ -1,4 +1,4 @@ -Feature: A developer can happily run cucumber scenarios/examples an everything works fine +Feature: A developer can happily run cucumber scenarios/examples and everything works fine As a developer In order to derive joy and happiness when checking my cucumber logs I want to see rainbows and unicorns when my log files run @@ -19,4 +19,4 @@ Feature: A developer can happily run cucumber scenarios/examples an everything w Examples: | country | price | | Australia | 2.99 | - | Japan | 2.69 | \ No newline at end of file + | Japan | 2.69 | diff --git a/features/rspec_examples_support.feature b/features/rspec_examples_support.feature new file mode 100644 index 0000000..6f58be9 --- /dev/null +++ b/features/rspec_examples_support.feature @@ -0,0 +1,18 @@ +Feature: A developer can happily run rspec examples and everything works fine + As a developer + In order to save time looking through log files + I want my rspec test names to be highlighted + + Scenario: rSpec Example Support + Given an rSpec test file is being executed + When I examine the rails log + And I do some crazy Inception like test on myself + And the features references different countries being "" + And the feature includes a reference to the price of eggs being "" + Then I see the following log entries: + | Message | Colour | + | STEP INFORMATION IS WRITTEN TO THE RAILS LOG | black_on_green | + | Given a cucumber feature is executing against my rails application | black_on_yellow | + | When I examine the rails log | black_on_yellow | + | And I do some crazy Inception like test on myself | black_on_yellow | + diff --git a/features/step_definitions/enhanced_logging_steps.rb b/features/step_definitions/enhanced_logging_steps.rb index d084ffa..0e99066 100644 --- a/features/step_definitions/enhanced_logging_steps.rb +++ b/features/step_definitions/enhanced_logging_steps.rb @@ -34,14 +34,20 @@ def self.logger end end +Given /^an rSpec test file is being executed$/ do + pending +end + Given /^a cucumber feature is executing against my rails application$/ do - #Rails.logger.reset + pending end When /^I examine the rails log$/ do + pending end When /^I do some crazy Inception like test on myself$/ do + pending end Then /^I see the following log entries:$/ do |ast| @@ -53,4 +59,4 @@ def self.logger log.first.chomp.strip == message && log[1] == colour end end -end \ No newline at end of file +end diff --git a/features/step_definitions/scenario_outline_steps.rb b/features/step_definitions/scenario_outline_steps.rb index 5cd5ec8..98ece44 100644 --- a/features/step_definitions/scenario_outline_steps.rb +++ b/features/step_definitions/scenario_outline_steps.rb @@ -1,5 +1,7 @@ When /^the features references different countries being "([^"]*)"$/ do |country| + pending end When /^the feature includes a reference to the price of eggs being "([^"]*)"$/ do |price| -end \ No newline at end of file + pending +end diff --git a/frogger.gemspec b/frogger.gemspec index 8172eb9..4b02cc3 100644 --- a/frogger.gemspec +++ b/frogger.gemspec @@ -4,14 +4,14 @@ # -*- encoding: utf-8 -*- Gem::Specification.new do |s| - s.name = %q{frogger} + s.name = "frogger" s.version = "0.3.0" s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.authors = [%q{Richie Khoo}] - s.date = %q{2011-09-29} - s.description = %q{Navigating noise in your log files can be like trying to cross a busy road and avoid the cars. Frogger makes your log files more fun by adding some good ol' 8 bit color and a bit of formatting.} - s.email = %q{evolve2k@gmail.com} + s.authors = ["Richie Khoo"] + s.date = "2012-03-17" + s.description = "Navigating noise in your log files can be like trying to cross a busy road and avoid the cars. Frogger makes your log files more fun by adding some good ol' 8 bit color and a bit of formatting." + s.email = "evolve2k@gmail.com" s.extra_rdoc_files = [ "LICENSE.txt", "README.textile" @@ -27,23 +27,22 @@ Gem::Specification.new do |s| "VERSION", "features/enhanced_logger.feature", "features/examples_support.feature", + "features/rspec_examples_support.feature", "features/step_definitions/enhanced_logging_steps.rb", "features/step_definitions/scenario_outline_steps.rb", "features/support/env.rb", "frogger.gemspec", "lib/frogger.rb", - "lib/frogger/cucumber.rb", - "lib/frogger/frog.rb", - "spec/frogger/frog_spec.rb", "spec/spec_helper.rb" ] - s.homepage = %q{http://github.com/evolve2k/frogger} - s.licenses = [%q{MIT}] - s.require_paths = [%q{lib}] - s.rubygems_version = %q{1.8.7} - s.summary = %q{Frogger makes logs easier to navigate.} + s.homepage = "http://github.com/evolve2k/frogger" + s.licenses = ["MIT"] + s.require_paths = ["lib"] + s.rubygems_version = "1.8.10" + s.summary = "Frogger makes logs easier to navigate." s.test_files = [ - "spec/frogger/frog_spec.rb", + "spec/frogger/cucumber/frog_spec.rb", + "spec/frogger/rspec/frog_spec.rb", "spec/spec_helper.rb" ] @@ -56,12 +55,18 @@ Gem::Specification.new do |s| s.add_development_dependency(%q, ["~> 1.0.0"]) s.add_development_dependency(%q, ["~> 1.5.2"]) s.add_development_dependency(%q, ["= 2.6.0"]) + s.add_development_dependency(%q, ["= 1.0.1"]) + s.add_development_dependency(%q, ["= 0.7.5"]) + s.add_development_dependency(%q, ["= 0.6.0"]) else s.add_dependency(%q, [">= 1.2"]) s.add_dependency(%q, [">= 0.10.0"]) s.add_dependency(%q, ["~> 1.0.0"]) s.add_dependency(%q, ["~> 1.5.2"]) s.add_dependency(%q, ["= 2.6.0"]) + s.add_dependency(%q, ["= 1.0.1"]) + s.add_dependency(%q, ["= 0.7.5"]) + s.add_dependency(%q, ["= 0.6.0"]) end else s.add_dependency(%q, [">= 1.2"]) @@ -69,6 +74,9 @@ Gem::Specification.new do |s| s.add_dependency(%q, ["~> 1.0.0"]) s.add_dependency(%q, ["~> 1.5.2"]) s.add_dependency(%q, ["= 2.6.0"]) + s.add_dependency(%q, ["= 1.0.1"]) + s.add_dependency(%q, ["= 0.7.5"]) + s.add_dependency(%q, ["= 0.6.0"]) end end diff --git a/lib/frogger.rb b/lib/frogger.rb index 8042565..041d442 100644 --- a/lib/frogger.rb +++ b/lib/frogger.rb @@ -3,5 +3,16 @@ module Frogger end -require 'frogger/frog' -require 'frogger/cucumber' if defined?(Cucumber) +if defined?(Cucumber) + module Frogger::Cucumber + end + require 'frogger/cucumber/frog' + require 'frogger/cucumber/init' +end + +if defined?(RSpec) + module Frogger::RSpec + end + require 'frogger/rspec/frog' + require 'frogger/rspec/init' +end diff --git a/lib/frogger/frog.rb b/lib/frogger/cucumber/frog.rb similarity index 97% rename from lib/frogger/frog.rb rename to lib/frogger/cucumber/frog.rb index d0be7f1..611c1e3 100644 --- a/lib/frogger/frog.rb +++ b/lib/frogger/cucumber/frog.rb @@ -1,4 +1,4 @@ -class Frogger::Frog +class Frogger::Cucumber::Frog attr_reader :scenario, :logger attr_accessor :step_index @@ -25,7 +25,7 @@ def log_step self.step_index += 1 end - + def scenario_outline? scenario.class == Cucumber::Ast::OutlineTable::ExampleRow end diff --git a/lib/frogger/cucumber.rb b/lib/frogger/cucumber/init.rb similarity index 76% rename from lib/frogger/cucumber.rb rename to lib/frogger/cucumber/init.rb index 5dce33b..ed67300 100644 --- a/lib/frogger/cucumber.rb +++ b/lib/frogger/cucumber/init.rb @@ -1,5 +1,5 @@ Before do |scenario| - @frog = Frogger::Frog.new scenario + @frog = Frogger::Cucumber::Frog.new scenario @frog.log_scenario @frog.log_step end if respond_to?(:Before) diff --git a/lib/frogger/rspec/frog.rb b/lib/frogger/rspec/frog.rb new file mode 100644 index 0000000..8f270b8 --- /dev/null +++ b/lib/frogger/rspec/frog.rb @@ -0,0 +1,22 @@ +class Frogger::RSpec::Frog + attr_reader :example, :logger + + def initialize(example, logger = default_logger) + @example = example + @logger = logger + end + + def log_example + group_descriptions = example.example_group.ancestors.map(&:description) + spec_name = [*group_descriptions.reverse, example.description].join(" ") + if logger.respond_to?(:debug) + logger.debug "\n #{ spec_name }".black_on_yellow + end + end + + private + + def default_logger + Rails.logger + end +end diff --git a/lib/frogger/rspec/init.rb b/lib/frogger/rspec/init.rb new file mode 100644 index 0000000..eb44a4b --- /dev/null +++ b/lib/frogger/rspec/init.rb @@ -0,0 +1,8 @@ +if RSpec.respond_to?(:configure) + RSpec.configure do |config| + config.before(:each) do + @frog = Frogger::RSpec::Frog.new self.example + @frog.log_example + end + end +end diff --git a/spec/frogger/frog_spec.rb b/spec/frogger/cucumber/frog_spec.rb similarity index 85% rename from spec/frogger/frog_spec.rb rename to spec/frogger/cucumber/frog_spec.rb index 6202150..b67572d 100644 --- a/spec/frogger/frog_spec.rb +++ b/spec/frogger/cucumber/frog_spec.rb @@ -6,8 +6,8 @@ def self.logger end end -describe Frogger::Frog do - let(:frog) { Frogger::Frog.new(scenario, custom_logger) } +describe Frogger::Cucumber::Frog do + let(:frog) { Frogger::Cucumber::Frog.new(scenario, custom_logger) } let(:scenario) { double('Scenario', :raw_steps => [step], :name => 'Foo') } let(:custom_logger) { double('Custom Logger', :debug => true) } let(:step) { double('Step', :keyword => 'When', :name => ' something happens') } @@ -18,12 +18,12 @@ def self.logger describe '#logger' do it "is the logger passed in when initialised" do - frog = Frogger::Frog.new(scenario, custom_logger) + frog = Frogger::Cucumber::Frog.new(scenario, custom_logger) frog.logger.should == custom_logger end it "defaults to the Rails logger" do - frog = Frogger::Frog.new(scenario) + frog = Frogger::Cucumber::Frog.new(scenario) frog.logger.should == Rails.logger end end diff --git a/spec/frogger/rspec/frog_spec.rb b/spec/frogger/rspec/frog_spec.rb new file mode 100644 index 0000000..be6d64a --- /dev/null +++ b/spec/frogger/rspec/frog_spec.rb @@ -0,0 +1,28 @@ +require 'spec_helper' + +module Rails + def self.logger + :rails_logger + end +end + +describe Frogger::RSpec::Frog do + let(:frog) { Frogger::RSpec::Frog.new(example, custom_logger) } + let(:custom_logger) { double('Custom Logger', :debug => true) } + let(:example) do + double('Rspec example', + :description => 'example name', + :example_group => example_group) + end + let(:example_group) { double('Example group', :ancestors => ancestors) } + let(:ancestors) do + [stub(:description => 'ancestor 1'), stub(:description => 'ancestor 2')] + end + + describe '#log_example' do + it 'prints the example name in black and green' do + custom_logger.should_receive(:debug).with("\n ancestor 2 ancestor 1 example name".black_on_yellow) + frog.log_example + end + end +end