From b4a360acb8c44ae1005fd45da290bf7d05095d8c Mon Sep 17 00:00:00 2001 From: Karl Varga Date: Sat, 21 Jan 2012 17:48:38 -0800 Subject: [PATCH] Refactored verbose handling. * Defaults to true so that we get output when running in standalone ruby. * Also support VERBOSE environment variable --- lib/sitemap_generator.rb | 17 ++++++++++- lib/sitemap_generator/link_set.rb | 11 +++++++- lib/sitemap_generator/tasks.rb | 4 +-- lib/sitemap_generator/utilities.rb | 8 ++++++ spec/sitemap_generator/link_set_spec.rb | 28 ++++++++++++------- .../sitemap_generator_spec.rb | 13 +++++++++ spec/sitemap_generator/utilities_spec.rb | 18 ++++++++++++ spec/spec_helper.rb | 2 ++ 8 files changed, 87 insertions(+), 14 deletions(-) diff --git a/lib/sitemap_generator.rb b/lib/sitemap_generator.rb index 794aceca..c05aa39f 100644 --- a/lib/sitemap_generator.rb +++ b/lib/sitemap_generator.rb @@ -41,7 +41,22 @@ def reset! class << self attr_accessor :root, :app, :templates - attr_writer :yield_sitemap + attr_writer :yield_sitemap, :verbose + end + + # Global default for the verbose setting. + def self.verbose + if @verbose.nil? + @verbose = if SitemapGenerator::Utilities.truthy?(ENV['VERBOSE']) + true + elsif SitemapGenerator::Utilities.falsy?(ENV['VERBOSE']) + false + else + nil + end + else + @verbose + end end # Returns true if we should yield the sitemap instance to the block, false otherwise. diff --git a/lib/sitemap_generator/link_set.rb b/lib/sitemap_generator/link_set.rb index c0e1e47c..fbe02852 100644 --- a/lib/sitemap_generator/link_set.rb +++ b/lib/sitemap_generator/link_set.rb @@ -103,7 +103,6 @@ def initialize(options={}) :include_root => true, :include_index => true, :filename => :sitemap, - :verbose => false, :search_engines => { :google => "http://www.google.com/webmasters/sitemaps/ping?sitemap=%s", :ask => "http://submissions.ask.com/ping?sitemap=%s", @@ -301,6 +300,16 @@ def include_root? !!@include_root end + # Set verbose on the instance or by setting ENV['VERBOSE'] to true or false. + # By default verbose is true. When running rake tasks, pass the -s + # option to rake to turn verbose off. + def verbose + if @verbose.nil? + @verbose = SitemapGenerator.verbose.nil? ? true : SitemapGenerator.verbose + end + @verbose + end + protected # Set each option on this instance using accessor methods. This will affect diff --git a/lib/sitemap_generator/tasks.rb b/lib/sitemap_generator/tasks.rb index e845b895..4027eef6 100644 --- a/lib/sitemap_generator/tasks.rb +++ b/lib/sitemap_generator/tasks.rb @@ -30,7 +30,7 @@ desc "Install a default config/sitemap.rb file" task :install => ['sitemap:require'] do - SitemapGenerator::Utilities.install_sitemap_rb(verbose.nil? ? true : verbose) + SitemapGenerator::Utilities.install_sitemap_rb(verbose) end desc "Delete all Sitemap files in public/ directory" @@ -48,6 +48,6 @@ desc "Generate sitemaps but don't ping search engines. Alias for refresh:no_ping." task :create => ['sitemap:require_environment'] do - SitemapGenerator::Interpreter.run(:config_file => ENV["CONFIG_FILE"], :verbose => verbose.nil? ? true : verbose) + SitemapGenerator::Interpreter.run(:config_file => ENV["CONFIG_FILE"], :verbose => verbose) end end diff --git a/lib/sitemap_generator/utilities.rb b/lib/sitemap_generator/utilities.rb index 3d8d7728..d180b8be 100644 --- a/lib/sitemap_generator/utilities.rb +++ b/lib/sitemap_generator/utilities.rb @@ -131,5 +131,13 @@ def titleize(string) string.gsub!(/_/, ' ') string.split(/(\W)/).map(&:capitalize).join end + + def truthy?(value) + ['1', 1, 't', 'true', true].include?(value) + end + + def falsy?(value) + ['0', 0, 'f', 'false', false].include?(value) + end end end diff --git a/spec/sitemap_generator/link_set_spec.rb b/spec/sitemap_generator/link_set_spec.rb index 7220f6ce..b03dbe96 100644 --- a/spec/sitemap_generator/link_set_spec.rb +++ b/spec/sitemap_generator/link_set_spec.rb @@ -165,18 +165,24 @@ @ls = SitemapGenerator::LinkSet.new(:default_host => 'http://one.com') end - it "should default to false" do - @ls.verbose.should be_false - end - it "should be set as an initialize option" do + SitemapGenerator::LinkSet.new(:default_host => 'http://one.com', :verbose => false).verbose.should be_false SitemapGenerator::LinkSet.new(:default_host => 'http://one.com', :verbose => true).verbose.should be_true end it "should be set as an accessor" do @ls.verbose = true @ls.verbose.should be_true + @ls.verbose = false + @ls.verbose.should be_false end + + it "should use SitemapGenerator.verbose as a default" do + SitemapGenerator.expects(:verbose).returns(true).at_least_once + SitemapGenerator::LinkSet.new.verbose.should be_true + SitemapGenerator.expects(:verbose).returns(false).at_least_once + SitemapGenerator::LinkSet.new.verbose.should be_false + end end describe "when finalizing" do @@ -583,16 +589,18 @@ end describe "output" do + let(:ls) { SitemapGenerator::LinkSet.new } + it "should not output" do - @ls.verbose = false - @ls.expects(:puts).never - @ls.send(:output, '') + ls.verbose = false + ls.expects(:puts).never + ls.send(:output, '') end it "should print the given string" do - @ls.verbose = true - @ls.expects(:puts).with('') - @ls.send(:output, '') + ls.verbose = true + ls.expects(:puts).with('') + ls.send(:output, '') end end end diff --git a/spec/sitemap_generator/sitemap_generator_spec.rb b/spec/sitemap_generator/sitemap_generator_spec.rb index 3d31fb57..cce7d663 100644 --- a/spec/sitemap_generator/sitemap_generator_spec.rb +++ b/spec/sitemap_generator/sitemap_generator_spec.rb @@ -186,6 +186,19 @@ def with_max_links(num) end end + describe "verbose" do + it "should be set via ENV['VERBOSE']" do + original = SitemapGenerator.verbose + SitemapGenerator.verbose = nil + ENV['VERBOSE'] = 'true' + SitemapGenerator.verbose.should be_true + SitemapGenerator.verbose = nil + ENV['VERBOSE'] = 'false' + SitemapGenerator.verbose.should be_false + SitemapGenerator.verbose = original + end + end + protected # diff --git a/spec/sitemap_generator/utilities_spec.rb b/spec/sitemap_generator/utilities_spec.rb index 7a655f13..85e2e698 100644 --- a/spec/sitemap_generator/utilities_spec.rb +++ b/spec/sitemap_generator/utilities_spec.rb @@ -29,4 +29,22 @@ SitemapGenerator::Utilities.titleize('amy_and_jon').should == 'Amy And Jon' end end + + describe "truthy?" do + it "should be truthy" do + ['1', 1, 't', 'true', true].each do |value| + SitemapGenerator::Utilities.truthy?(value).should be_true + end + SitemapGenerator::Utilities.truthy?(nil).should be_false + end + end + + describe "falsy?" do + it "should be falsy" do + ['0', 0, 'f', 'false', false].each do |value| + SitemapGenerator::Utilities.falsy?(value).should be_true + end + SitemapGenerator::Utilities.falsy?(nil).should be_false + end + end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 6f011fa2..2b057e7e 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -6,6 +6,8 @@ # in ./support/ and its subdirectories. Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f} +SitemapGenerator.verbose = false + RSpec.configure do |config| config.mock_with :mocha config.include(FileMacros)