lib/duck_puncher.rb in duck_puncher-2.3.0 vs lib/duck_puncher.rb in duck_puncher-2.4.0

- old
+ new

@@ -1,24 +1,43 @@ require 'pathname' require 'fileutils' +require 'logger' require 'duck_puncher/version' module DuckPuncher - autoload :Array, 'duck_puncher/array' - autoload :Numeric, 'duck_puncher/numeric' - autoload :Hash, 'duck_puncher/hash' - autoload :String, 'duck_puncher/string' - autoload :Object, 'duck_puncher/object' - autoload :Method, 'duck_puncher/method' + autoload :JSONStorage, 'duck_puncher/json_storage' + autoload :GemInstaller, 'duck_puncher/gem_installer' + autoload :Duck, 'duck_puncher/duck' + autoload :Ducks, 'duck_puncher/ducks' - if defined? ActiveRecord - autoload :ActiveRecordExtensions, 'duck_puncher/active_record_extensions' - end - def self.punch!(*names) - names.each &method(:const_get) + names.each do |name| + if duck = Ducks[name] + if duck.punched? + log.info %Q(Already punched #{name}) + else + log.warn %Q(Punching the #{name} ducky) + unless duck.punch + log.error %Q(Failed to punch #{name}!) + end + end + else + log.info %Q(Couldn't find "#{name}" in my list of Ducks! I know about: #{Ducks.list.map(&:name).map(&:to_s)}) + end + end + nil end def self.punch_all! - constants.each &method(:const_get) + log.warn 'Punching all ducks! Watch out!' + Ducks.list.each &:punch + end + + class << self + attr_accessor :log + end + + self.log = Logger.new(STDOUT).tap do |config| + config.level = Logger::INFO + config.formatter = proc { |*args| "#{args.first}: #{args.last.to_s}\n" } end end