Class: Arrow::Object
Overview
This class is the abstract base class for all Arrow objects. Most of the Arrow classes inherit from this.
To Do
All of this stuff should really be factored out into mixins.
Authors
Michael Granger
Please see the file LICENSE in the top-level directory for licensing details.
Direct Known Subclasses
Applet, AppletRegistry, AppletRegistry::AppletFile, Broker, Config, Config::ConfigStruct, Config::Loader, Cookie, CookieSet, Dispatcher, HTMLToken, HTMLTokenizer, Session, Session::Id, Session::Lock, Session::Store, Template, Template::Container, Template::Iterator, Template::Node, Template::Parser, Template::Parser::State, Template::RenderingScope, TemplateFactory, Transaction
Class Method Summary
-
+ (Object) deprecate_class_method(oldSym, newSym = oldSym)
Like Object.deprecate_method, but for class methods.
-
+ (Object) deprecate_method(oldSym, newSym = oldSym)
Create a method that warns of deprecation for an instance method.
-
+ (Object) inherited(klass)
Store the name of the file from which the inheriting klass is being loaded.
Methods included from Loggable
Class Method Details
+ (Object) deprecate_class_method(oldSym, newSym = oldSym)
Like Object.deprecate_method, but for class methods.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/arrow/object.rb', line 68 def self::deprecate_class_method( oldSym, newSym=oldSym ) warningMessage = '' # If the method is being removed, alias it away somewhere and build # an appropriate warning message. Otherwise, just build a warning # message. if oldSym == newSym newSym = ("__deprecated_" + oldSym.to_s + "__").to_sym warningMessage = "%s::%s is deprecated" % [ self.name, oldSym.to_s ] alias_class_method newSym, oldSym else warningMessage = "%s::%s is deprecated; use %s::%s instead" % [ self.name, oldSym.to_s, self.name, newSym.to_s ] end # Build the method that logs a warning and then calls the true # method. class_eval %Q{ def self::#{oldSym.to_s}( *args, &block ) Arrow::Logger.notice "warning: %s: #{warningMessage}" % [ caller(1) ] send( #{newSym.inspect}, *args, &block ) rescue => err # Mangle exceptions to point someplace useful Kernel.raise err, err.message, err.backtrace[2..-1] end } end |
+ (Object) deprecate_method(oldSym, newSym = oldSym)
Create a method that warns of deprecation for an instance method. If newSym is specified, the method is being renamed, and this method acts like an alias_method that logs a warning; if not, it is being removed, and the target method will be aliased to an internal method and wrapped in a warning method with the original name.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/arrow/object.rb', line 32 def self::deprecate_method( oldSym, newSym=oldSym ) warningMessage = '' # If the method is being removed, alias it away somewhere and build # an appropriate warning message. Otherwise, just build a warning # message. if oldSym == newSym newSym = ("__deprecated_" + oldSym.to_s + "__").to_sym warningMessage = "%s#%s is deprecated" % [ self.name, oldSym.to_s ] alias_method newSym, oldSym else warningMessage = "%s#%s is deprecated; use %s#%s instead" % [ self.name, oldSym.to_s, self.name, newSym.to_s ] end # Build the method that logs a warning and then calls the true # method. class_eval %Q{ def #{oldSym.to_s}( *args, &block ) self.log.notice "warning: %s: #{warningMessage}" % [ caller(1) ] send( #{newSym.inspect}, *args, &block ) rescue => err # Mangle exceptions to point someplace useful Kernel.raise err, err.message, err.backtrace[2..-1] end } rescue Exception => err # Mangle exceptions to point someplace useful frames = err.backtrace frames.shift while frames.first =~ /#{__FILE__}/ Kernel.raise err, err., frames end |
+ (Object) inherited(klass)
Store the name of the file from which the inheriting klass is being loaded.
100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/arrow/object.rb', line 100 def self::inherited( klass ) unless klass.instance_variables.include?( "@sourcefile" ) sourcefile = caller(1).find {|frame| /inherited/ !~ frame }.sub( /^([^:]+):.*/, "\\1" ) klass.instance_variable_set( "@sourcefile", sourcefile ) end unless klass.respond_to?( :sourcefile ) class << klass attr_reader :sourcefile end end end |