logging 0.7.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +9 -1
- data/Manifest.txt +3 -4
- data/Rakefile +8 -7
- data/lib/logging.rb +2 -2
- data/lib/logging/appender.rb +1 -1
- data/lib/logging/appenders/console.rb +1 -1
- data/lib/logging/appenders/email.rb +3 -2
- data/lib/logging/appenders/file.rb +1 -1
- data/lib/logging/appenders/growl.rb +1 -1
- data/lib/logging/appenders/io.rb +1 -1
- data/lib/logging/appenders/rolling_file.rb +3 -3
- data/lib/logging/appenders/syslog.rb +1 -1
- data/lib/logging/config/yaml_configurator.rb +1 -1
- data/lib/logging/layout.rb +1 -1
- data/lib/logging/layouts/basic.rb +1 -1
- data/lib/logging/layouts/pattern.rb +1 -1
- data/lib/logging/log_event.rb +1 -1
- data/lib/logging/logger.rb +59 -17
- data/lib/logging/repository.rb +15 -1
- data/lib/logging/root_logger.rb +6 -4
- data/lib/logging/utils.rb +1 -1
- data/tasks/ann.rake +20 -15
- data/tasks/bones.rake +7 -26
- data/tasks/gem.rake +49 -36
- data/tasks/git.rake +41 -0
- data/tasks/notes.rake +28 -0
- data/tasks/post_load.rake +19 -10
- data/tasks/{doc.rake → rdoc.rake} +10 -7
- data/tasks/rubyforge.rake +12 -11
- data/tasks/setup.rb +122 -81
- data/tasks/test.rake +6 -6
- data/test/appenders/test_console.rb +1 -1
- data/test/appenders/test_email.rb +4 -2
- data/test/appenders/test_file.rb +1 -1
- data/test/appenders/test_growl.rb +1 -1
- data/test/appenders/test_io.rb +1 -1
- data/test/appenders/test_rolling_file.rb +1 -1
- data/test/appenders/test_syslog.rb +1 -1
- data/test/benchmark.rb +1 -1
- data/test/config/test_yaml_configurator.rb +1 -1
- data/test/layouts/test_basic.rb +1 -1
- data/test/layouts/test_pattern.rb +1 -1
- data/test/setup.rb +3 -8
- data/test/test_appender.rb +1 -1
- data/test/test_layout.rb +1 -1
- data/test/test_log_event.rb +1 -1
- data/test/test_logger.rb +88 -11
- data/test/test_logging.rb +1 -1
- data/test/test_repository.rb +5 -1
- data/test/test_root_logger.rb +1 -1
- data/test/test_utils.rb +1 -1
- metadata +15 -7
- data/lib/logging/stelan/lockfile.rb +0 -530
- data/tasks/annotations.rake +0 -22
- data/tasks/svn.rake +0 -44
    
        data/History.txt
    CHANGED
    
    | @@ -1,4 +1,12 @@ | |
| 1 | 
            -
            == 0. | 
| 1 | 
            +
            == 0.8.0 / 2008-07-02
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            1 minor enhancement
         | 
| 4 | 
            +
              - Setting the log level of a parent will cause this level to
         | 
| 5 | 
            +
                be propagated to the children
         | 
| 6 | 
            +
            1 bug fix
         | 
| 7 | 
            +
              - Fixed error with the e-mail appender and missing hostname
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            == 0.7.1 / 2008-02-25
         | 
| 2 10 |  | 
| 3 11 | 
             
            1 minor enhancement
         | 
| 4 12 | 
             
              - Removed dependency on the Lockfile gem (brought the ruby
         | 
    
        data/Manifest.txt
    CHANGED
    
    | @@ -20,18 +20,17 @@ lib/logging/log_event.rb | |
| 20 20 | 
             
            lib/logging/logger.rb
         | 
| 21 21 | 
             
            lib/logging/repository.rb
         | 
| 22 22 | 
             
            lib/logging/root_logger.rb
         | 
| 23 | 
            -
            lib/logging/stelan/lockfile.rb
         | 
| 24 23 | 
             
            lib/logging/utils.rb
         | 
| 25 24 | 
             
            tasks/ann.rake
         | 
| 26 | 
            -
            tasks/annotations.rake
         | 
| 27 25 | 
             
            tasks/bones.rake
         | 
| 28 | 
            -
            tasks/doc.rake
         | 
| 29 26 | 
             
            tasks/gem.rake
         | 
| 27 | 
            +
            tasks/git.rake
         | 
| 30 28 | 
             
            tasks/manifest.rake
         | 
| 29 | 
            +
            tasks/notes.rake
         | 
| 31 30 | 
             
            tasks/post_load.rake
         | 
| 31 | 
            +
            tasks/rdoc.rake
         | 
| 32 32 | 
             
            tasks/rubyforge.rake
         | 
| 33 33 | 
             
            tasks/setup.rb
         | 
| 34 | 
            -
            tasks/svn.rake
         | 
| 35 34 | 
             
            tasks/test.rake
         | 
| 36 35 | 
             
            test/appenders/test_console.rb
         | 
| 37 36 | 
             
            test/appenders/test_email.rb
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -12,16 +12,17 @@ PROJ.summary = 'A flexible and extendable logging library for Ruby' | |
| 12 12 | 
             
            PROJ.authors = 'Tim Pease'
         | 
| 13 13 | 
             
            PROJ.email = 'tim.pease@gmail.com'
         | 
| 14 14 | 
             
            PROJ.url = 'http://logging.rubyforge.org/'
         | 
| 15 | 
            -
            PROJ. | 
| 16 | 
            -
            PROJ. | 
| 17 | 
            -
            #PROJ. | 
| 18 | 
            -
            PROJ. | 
| 15 | 
            +
            PROJ.rubyforge.name = 'logging'
         | 
| 16 | 
            +
            PROJ.rdoc.dir = 'doc/rdoc'
         | 
| 17 | 
            +
            #PROJ.rdoc.remote_dir = 'rdoc'
         | 
| 18 | 
            +
            PROJ.rdoc.remote_dir = ''
         | 
| 19 19 | 
             
            PROJ.version = Logging::VERSION
         | 
| 20 20 |  | 
| 21 | 
            -
            PROJ.exclude  | 
| 22 | 
            -
            PROJ. | 
| 23 | 
            -
            PROJ.svn =  | 
| 21 | 
            +
            PROJ.exclude << %w[^tags$ ^tasks/archive ^coverage]
         | 
| 22 | 
            +
            PROJ.rdoc.exclude << '^data'
         | 
| 23 | 
            +
            PROJ.svn.path = ''
         | 
| 24 24 |  | 
| 25 25 | 
             
            depend_on 'flexmock'
         | 
| 26 | 
            +
            depend_on 'lockfile'
         | 
| 26 27 |  | 
| 27 28 | 
             
            # EOF
         | 
    
        data/lib/logging.rb
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            # $Id | 
| 1 | 
            +
            # $Id$
         | 
| 2 2 |  | 
| 3 3 | 
             
            # Equivalent to a header guard in C/C++
         | 
| 4 4 | 
             
            # Used to prevent the class/module from being loaded more than once
         | 
| @@ -12,7 +12,7 @@ unless defined? Logging | |
| 12 12 | 
             
            module Logging
         | 
| 13 13 |  | 
| 14 14 | 
             
              # :stopdoc:
         | 
| 15 | 
            -
              VERSION = '0. | 
| 15 | 
            +
              VERSION = '0.8.0'
         | 
| 16 16 | 
             
              LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
         | 
| 17 17 | 
             
              PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
         | 
| 18 18 | 
             
              WIN32 = %r/djgpp|(cyg|ms|bcc)win|mingw/ =~ RUBY_PLATFORM
         | 
    
        data/lib/logging/appender.rb
    CHANGED
    
    
| @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            # $Id | 
| 1 | 
            +
            # $Id$
         | 
| 2 2 |  | 
| 3 3 | 
             
            require 'net/smtp'
         | 
| 4 4 | 
             
            require 'time' # get rfc822 time format
         | 
| @@ -38,7 +38,7 @@ class Email < ::Logging::Appender | |
| 38 38 |  | 
| 39 39 | 
             
                @server   = opts.getopt :server, 'localhost'
         | 
| 40 40 | 
             
                @port     = opts.getopt :port, 25, :as => Integer
         | 
| 41 | 
            -
                @domain   = opts.getopt | 
| 41 | 
            +
                @domain   = opts.getopt(:domain, ENV['HOSTNAME']) || 'localhost.localdomain'
         | 
| 42 42 | 
             
                @acct     = opts.getopt :acct
         | 
| 43 43 | 
             
                @passwd   = opts.getopt :passwd
         | 
| 44 44 | 
             
                @authtype = opts.getopt :authtype, :cram_md5, :as => Symbol
         | 
| @@ -118,6 +118,7 @@ class Email < ::Logging::Appender | |
| 118 118 | 
             
                  Net::SMTP.start(*@params) {|smtp| smtp.sendmail(rfc822msg, @from, @to)}
         | 
| 119 119 | 
             
                rescue Exception => e
         | 
| 120 120 | 
             
                  self.level = :off
         | 
| 121 | 
            +
                  STDERR.puts e.message
         | 
| 121 122 | 
             
                  # TODO - log that e-mail notification has been turned off
         | 
| 122 123 | 
             
                ensure
         | 
| 123 124 | 
             
                  @buff.clear
         | 
    
        data/lib/logging/appenders/io.rb
    CHANGED
    
    
| @@ -1,6 +1,6 @@ | |
| 1 | 
            -
            # $Id | 
| 1 | 
            +
            # $Id$
         | 
| 2 2 |  | 
| 3 | 
            -
            require  | 
| 3 | 
            +
            require 'lockfile'
         | 
| 4 4 |  | 
| 5 5 | 
             
            module Logging::Appenders
         | 
| 6 6 |  | 
| @@ -75,7 +75,7 @@ module Logging::Appenders | |
| 75 75 | 
             
                  @size = opts.getopt(:size, :as => Integer)
         | 
| 76 76 |  | 
| 77 77 | 
             
                  @lockfile = if opts.getopt(:safe, false) and !::Logging::WIN32
         | 
| 78 | 
            -
                    :: | 
| 78 | 
            +
                    ::Lockfile.new(
         | 
| 79 79 | 
             
                        @fn + '.lck',
         | 
| 80 80 | 
             
                        :retries => 1,
         | 
| 81 81 | 
             
                        :timeout => 2
         | 
    
        data/lib/logging/layout.rb
    CHANGED
    
    
    
        data/lib/logging/log_event.rb
    CHANGED
    
    
    
        data/lib/logging/logger.rb
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            # $Id | 
| 1 | 
            +
            # $Id$
         | 
| 2 2 |  | 
| 3 3 | 
             
            require 'thread'
         | 
| 4 4 |  | 
| @@ -112,7 +112,7 @@ module Logging | |
| 112 112 |  | 
| 113 113 | 
             
                end  # class << self
         | 
| 114 114 |  | 
| 115 | 
            -
                attr_reader : | 
| 115 | 
            +
                attr_reader :name, :parent, :additive, :trace
         | 
| 116 116 |  | 
| 117 117 | 
             
                # call-seq:
         | 
| 118 118 | 
             
                #    Logger.new( name )
         | 
| @@ -148,7 +148,8 @@ module Logging | |
| 148 148 | 
             
                  @appenders = []
         | 
| 149 149 | 
             
                  @additive = true
         | 
| 150 150 | 
             
                  @trace = false
         | 
| 151 | 
            -
                   | 
| 151 | 
            +
                  @level = nil
         | 
| 152 | 
            +
                  ::Logging::Logger.define_log_methods(self)
         | 
| 152 153 |  | 
| 153 154 | 
             
                  repo.children(name).each {|c| c.parent = self}
         | 
| 154 155 | 
             
                end
         | 
| @@ -242,6 +243,16 @@ module Logging | |
| 242 243 | 
             
                           else raise ArgumentError, 'expecting a boolean' end
         | 
| 243 244 | 
             
                end
         | 
| 244 245 |  | 
| 246 | 
            +
                # call-seq:
         | 
| 247 | 
            +
                #    level    => integer
         | 
| 248 | 
            +
                #
         | 
| 249 | 
            +
                # Returns an integer which is the defined log level for this logger.
         | 
| 250 | 
            +
                #
         | 
| 251 | 
            +
                def level
         | 
| 252 | 
            +
                  return @level unless @level.nil?
         | 
| 253 | 
            +
                  @parent.level
         | 
| 254 | 
            +
                end
         | 
| 255 | 
            +
             | 
| 245 256 | 
             
                # call-seq:
         | 
| 246 257 | 
             
                #    level = :all
         | 
| 247 258 | 
             
                #
         | 
| @@ -271,21 +282,24 @@ module Logging | |
| 271 282 | 
             
                #    log.level = 1_000_000_000_000
         | 
| 272 283 | 
             
                #
         | 
| 273 284 | 
             
                def level=( level )
         | 
| 274 | 
            -
                   | 
| 275 | 
            -
             | 
| 276 | 
            -
             | 
| 277 | 
            -
             | 
| 278 | 
            -
             | 
| 279 | 
            -
             | 
| 280 | 
            -
             | 
| 281 | 
            -
             | 
| 282 | 
            -
             | 
| 283 | 
            -
             | 
| 284 | 
            -
             | 
| 285 | 
            +
                  @level =
         | 
| 286 | 
            +
                    if level.nil? then level
         | 
| 287 | 
            +
                    else
         | 
| 288 | 
            +
                      lvl = case level
         | 
| 289 | 
            +
                            when String, Symbol; ::Logging::level_num(level)
         | 
| 290 | 
            +
                            when Fixnum; level
         | 
| 291 | 
            +
                            else
         | 
| 292 | 
            +
                              raise ArgumentError,
         | 
| 293 | 
            +
                                    "level must be a String, Symbol, or Integer"
         | 
| 294 | 
            +
                            end
         | 
| 295 | 
            +
                      if lvl.nil? or lvl < 0 or lvl > ::Logging::LEVELS.length
         | 
| 296 | 
            +
                        raise ArgumentError, "unknown level was given '#{level}'"
         | 
| 297 | 
            +
                      end
         | 
| 298 | 
            +
                      lvl
         | 
| 299 | 
            +
                    end
         | 
| 285 300 |  | 
| 286 | 
            -
                   | 
| 287 | 
            -
                   | 
| 288 | 
            -
                  @level
         | 
| 301 | 
            +
                  define_log_methods(true)
         | 
| 302 | 
            +
                  self.level
         | 
| 289 303 | 
             
                end
         | 
| 290 304 |  | 
| 291 305 | 
             
                # call-seq:
         | 
| @@ -343,6 +357,15 @@ module Logging | |
| 343 357 | 
             
                #
         | 
| 344 358 | 
             
                def clear_appenders( ) @appenders.clear end
         | 
| 345 359 |  | 
| 360 | 
            +
                # call-seq:
         | 
| 361 | 
            +
                #     inspect    => string
         | 
| 362 | 
            +
                #
         | 
| 363 | 
            +
                # Returns a string representation of the logger.
         | 
| 364 | 
            +
                #
         | 
| 365 | 
            +
                def inspect
         | 
| 366 | 
            +
                  "<%s:0x%x name=\"%s\">" % [self.class.name, self.object_id, self.name]
         | 
| 367 | 
            +
                end
         | 
| 368 | 
            +
             | 
| 346 369 |  | 
| 347 370 | 
             
                protected
         | 
| 348 371 |  | 
| @@ -367,6 +390,25 @@ module Logging | |
| 367 390 | 
             
                  @parent.log_event(event) if @additive
         | 
| 368 391 | 
             
                end
         | 
| 369 392 |  | 
| 393 | 
            +
                # call-seq:
         | 
| 394 | 
            +
                #    define_log_methods( force = false )
         | 
| 395 | 
            +
                #
         | 
| 396 | 
            +
                # Define the logging methods for this logger based on the configured log
         | 
| 397 | 
            +
                # level. If the level is nil, then we will ask our parent for it's level
         | 
| 398 | 
            +
                # and define log levels accordingly. The force flag will skip this
         | 
| 399 | 
            +
                # check.
         | 
| 400 | 
            +
                #
         | 
| 401 | 
            +
                # Recursively call this method on all our children loggers.
         | 
| 402 | 
            +
                #
         | 
| 403 | 
            +
                def define_log_methods( force = false )
         | 
| 404 | 
            +
                  return if @level and !force
         | 
| 405 | 
            +
             | 
| 406 | 
            +
                  ::Logging::Logger.define_log_methods(self)
         | 
| 407 | 
            +
                  ::Logging::Repository.instance.children(name).each do |c|
         | 
| 408 | 
            +
                    c.define_log_methods
         | 
| 409 | 
            +
                  end
         | 
| 410 | 
            +
                end
         | 
| 411 | 
            +
             | 
| 370 412 | 
             
                # :stopdoc:
         | 
| 371 413 |  | 
| 372 414 | 
             
                # call-seq:
         | 
    
        data/lib/logging/repository.rb
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            # $Id | 
| 1 | 
            +
            # $Id$
         | 
| 2 2 |  | 
| 3 3 | 
             
            require 'singleton'
         | 
| 4 4 |  | 
| @@ -93,6 +93,8 @@ module Logging | |
| 93 93 | 
             
                # existence of the logger referenced by _key_.
         | 
| 94 94 | 
             
                #
         | 
| 95 95 | 
             
                def parent( key )
         | 
| 96 | 
            +
                  return if 'root' == key.to_s
         | 
| 97 | 
            +
             | 
| 96 98 | 
             
                  key = to_key(key)
         | 
| 97 99 | 
             
                  a = key.split PATH_DELIMITER
         | 
| 98 100 |  | 
| @@ -113,6 +115,18 @@ module Logging | |
| 113 115 | 
             
                # existence of the logger referenced by _key_.
         | 
| 114 116 | 
             
                #
         | 
| 115 117 | 
             
                def children( key )
         | 
| 118 | 
            +
                  # need to handle the root logger as a special case
         | 
| 119 | 
            +
                  if 'root' == key.to_s
         | 
| 120 | 
            +
                    ary = []
         | 
| 121 | 
            +
                    @h.each_pair do |key,logger|
         | 
| 122 | 
            +
                      key = key.to_s
         | 
| 123 | 
            +
                      next if key == 'root'
         | 
| 124 | 
            +
                      next if key.index(PATH_DELIMITER)
         | 
| 125 | 
            +
                      ary << logger
         | 
| 126 | 
            +
                    end
         | 
| 127 | 
            +
                    return ary.sort
         | 
| 128 | 
            +
                  end
         | 
| 129 | 
            +
             | 
| 116 130 | 
             
                  key = to_key(key)
         | 
| 117 131 | 
             
                  depth = key.split(PATH_DELIMITER).length
         | 
| 118 132 | 
             
                  rgxp = Regexp.new "^#{key}#{PATH_DELIMITER}"
         | 
    
        data/lib/logging/root_logger.rb
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            # $Id | 
| 1 | 
            +
            # $Id$
         | 
| 2 2 |  | 
| 3 3 | 
             
            module Logging
         | 
| 4 4 |  | 
| @@ -13,6 +13,8 @@ module Logging | |
| 13 13 | 
             
                  undef_method m.intern
         | 
| 14 14 | 
             
                end
         | 
| 15 15 |  | 
| 16 | 
            +
                attr_reader :level
         | 
| 17 | 
            +
             | 
| 16 18 | 
             
                # call-seq:
         | 
| 17 19 | 
             
                #    RootLogger.new
         | 
| 18 20 | 
             
                #
         | 
| @@ -26,7 +28,8 @@ module Logging | |
| 26 28 | 
             
                  @appenders = []
         | 
| 27 29 | 
             
                  @additive = false
         | 
| 28 30 | 
             
                  @trace = false
         | 
| 29 | 
            -
                   | 
| 31 | 
            +
                  @level = 0
         | 
| 32 | 
            +
                  ::Logging::Logger.define_log_methods(self)
         | 
| 30 33 | 
             
                end
         | 
| 31 34 |  | 
| 32 35 | 
             
                # call-seq:
         | 
| @@ -50,8 +53,7 @@ module Logging | |
| 50 53 | 
             
                # root logger is not allowed. The level is silently set to :all.
         | 
| 51 54 | 
             
                #
         | 
| 52 55 | 
             
                def level=( level )
         | 
| 53 | 
            -
                  level  | 
| 54 | 
            -
                  super
         | 
| 56 | 
            +
                  super(level || 0)
         | 
| 55 57 | 
             
                end
         | 
| 56 58 |  | 
| 57 59 | 
             
              end  # class RootLogger
         | 
    
        data/lib/logging/utils.rb
    CHANGED
    
    
    
        data/tasks/ann.rake
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            # $Id | 
| 1 | 
            +
            # $Id$
         | 
| 2 2 |  | 
| 3 3 | 
             
            begin
         | 
| 4 4 | 
             
              require 'bones/smtp_tls'
         | 
| @@ -9,12 +9,16 @@ require 'time' | |
| 9 9 |  | 
| 10 10 | 
             
            namespace :ann do
         | 
| 11 11 |  | 
| 12 | 
            -
               | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 12 | 
            +
              # A prerequisites task that all other tasks depend upon
         | 
| 13 | 
            +
              task :prereqs
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              file PROJ.ann.file do
         | 
| 16 | 
            +
                ann = PROJ.ann
         | 
| 17 | 
            +
                puts "Generating #{ann.file}"
         | 
| 18 | 
            +
                File.open(ann.file,'w') do |fd|
         | 
| 15 19 | 
             
                  fd.puts("#{PROJ.name} version #{PROJ.version}")
         | 
| 16 20 | 
             
                  fd.puts("    by #{Array(PROJ.authors).first}") if PROJ.authors
         | 
| 17 | 
            -
                  fd.puts("    #{PROJ.url}") if PROJ.url
         | 
| 21 | 
            +
                  fd.puts("    #{PROJ.url}") if PROJ.url.valid?
         | 
| 18 22 | 
             
                  fd.puts("    (the \"#{PROJ.release_name}\" release)") if PROJ.release_name
         | 
| 19 23 | 
             
                  fd.puts
         | 
| 20 24 | 
             
                  fd.puts("== DESCRIPTION")
         | 
| @@ -23,23 +27,24 @@ namespace :ann do | |
| 23 27 | 
             
                  fd.puts
         | 
| 24 28 | 
             
                  fd.puts(PROJ.changes.sub(%r/^.*$/, '== CHANGES'))
         | 
| 25 29 | 
             
                  fd.puts
         | 
| 26 | 
            -
                   | 
| 30 | 
            +
                  ann.paragraphs.each do |p|
         | 
| 27 31 | 
             
                    fd.puts "== #{p.upcase}"
         | 
| 28 32 | 
             
                    fd.puts
         | 
| 29 33 | 
             
                    fd.puts paragraphs_of(PROJ.readme_file, p).join("\n\n")
         | 
| 30 34 | 
             
                    fd.puts
         | 
| 31 35 | 
             
                  end
         | 
| 32 | 
            -
                  fd.puts  | 
| 36 | 
            +
                  fd.puts ann.text if ann.text
         | 
| 33 37 | 
             
                end
         | 
| 34 38 | 
             
              end
         | 
| 35 39 |  | 
| 36 40 | 
             
              desc "Create an announcement file"
         | 
| 37 | 
            -
              task :announcement => PROJ. | 
| 41 | 
            +
              task :announcement => ['ann:prereqs', PROJ.ann.file]
         | 
| 38 42 |  | 
| 39 43 | 
             
              desc "Send an email announcement"
         | 
| 40 | 
            -
              task :email => PROJ. | 
| 41 | 
            -
                 | 
| 42 | 
            -
                 | 
| 44 | 
            +
              task :email => ['ann:prereqs', PROJ.ann.file] do
         | 
| 45 | 
            +
                ann = PROJ.ann
         | 
| 46 | 
            +
                from = ann.email[:from] || PROJ.email
         | 
| 47 | 
            +
                to   = Array(ann.email[:to])
         | 
| 43 48 |  | 
| 44 49 | 
             
                ### build a mail header for RFC 822
         | 
| 45 50 | 
             
                rfc822msg =  "From: #{from}\n"
         | 
| @@ -49,11 +54,11 @@ namespace :ann do | |
| 49 54 | 
             
                rfc822msg << "\n"
         | 
| 50 55 | 
             
                rfc822msg << "Date: #{Time.new.rfc822}\n"
         | 
| 51 56 | 
             
                rfc822msg << "Message-Id: "
         | 
| 52 | 
            -
                rfc822msg << "<#{"%.8f" % Time.now.to_f}@#{ | 
| 53 | 
            -
                rfc822msg << File.read( | 
| 57 | 
            +
                rfc822msg << "<#{"%.8f" % Time.now.to_f}@#{ann.email[:domain]}>\n\n"
         | 
| 58 | 
            +
                rfc822msg << File.read(ann.file)
         | 
| 54 59 |  | 
| 55 60 | 
             
                params = [:server, :port, :domain, :acct, :passwd, :authtype].map do |key|
         | 
| 56 | 
            -
                   | 
| 61 | 
            +
                  ann.email[key]
         | 
| 57 62 | 
             
                end
         | 
| 58 63 |  | 
| 59 64 | 
             
                params[3] = PROJ.email if params[3].nil?
         | 
| @@ -71,6 +76,6 @@ end  # namespace :ann | |
| 71 76 | 
             
            desc 'Alias to ann:announcement'
         | 
| 72 77 | 
             
            task :ann => 'ann:announcement'
         | 
| 73 78 |  | 
| 74 | 
            -
            CLOBBER << PROJ. | 
| 79 | 
            +
            CLOBBER << PROJ.ann.file
         | 
| 75 80 |  | 
| 76 81 | 
             
            # EOF
         |