diff options
author | keiju <keiju@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-04-13 15:30:15 +0000 |
---|---|---|
committer | keiju <keiju@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-04-13 15:30:15 +0000 |
commit | 8e8cd649be669910e360e0be43eb9a9f4d6edd58 (patch) | |
tree | 7df78ae7cb7c7ab2f7cb4c4f95033c13f88f1108 /lib/irb/notifier.rb | |
parent | 914c81e98b4038845fea56f8b88fd9744911ce8b (diff) |
* bin/irb lib/irb.rb lib/irb/...: IRB 0.9.5(new files)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@8324 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/irb/notifier.rb')
-rw-r--r-- | lib/irb/notifier.rb | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/lib/irb/notifier.rb b/lib/irb/notifier.rb new file mode 100644 index 0000000000..22752bf894 --- /dev/null +++ b/lib/irb/notifier.rb @@ -0,0 +1,145 @@ +# +# notifier.rb - optput methods used by irb +# $Release Version: 0.9.5$ +# $Revision$ +# $Date$ +# by Keiju ISHITSUKA([email protected]) +# +# -- +# +# +# + +require "e2mmap" +require "irb/output-method" + +module IRB + module Notifier + extend Exception2MessageMapper + def_exception :ErrUndefinedNotifier, + "undefined notifier level: %d is specified" + def_exception :ErrUnrecognizedLevel, + "unrecognized notifier level: %s is specified" + + def def_notifier(prefix = "", output_method = StdioOutputMethod.new) + CompositeNotifier.new(prefix, output_method) + end + module_function :def_notifier + + class AbstructNotifier + def initialize(prefix, base_notifier) + @prefix = prefix + @base_notifier = base_notifier + end + + attr_reader :prefix + + def notify? + true + end + + def print(*opts) + @base_notifier.print prefix, *opts if notify? + end + + def printn(*opts) + @base_notifier.printn prefix, *opts if notify? + end + + def printf(format, *opts) + @base_notifier.printf(prefix + format, *opts) if notify? + end + + def puts(*objs) + if notify? + @base_notifier.puts *objs.collect{|obj| prefix + obj.to_s} + end + end + + def pp(*objs) + if notify? + @base_notifier.ppx @prefix, *objs + end + end + + def ppx(prefix, *objs) + if notify? + @base_notifier.ppx @prefix+prefix, *objs + end + end + + def exec_if + yield(@base_notifier) if notify? + end + end + + class CompositeNotifier<AbstructNotifier + def initialize(prefix, base_notifier) + super + + @notifiers = [D_NOMSG] + @level_notifier = D_NOMSG + end + + attr_reader :notifiers + + def def_notifier(level, prefix = "") + notifier = LeveledNotifier.new(self, level, prefix) + @notifiers[level] = notifier + notifier + end + + attr_reader :level_notifier + alias level level_notifier + + def level_notifier=(value) + case value + when AbstructNotifier + @level_notifier = value + when Integer + l = @notifiers[value] + Notifier.Raise ErrUndefinedNotifer, value unless l + @level_notifier = l + else + Notifier.Raise ErrUnrecognizedLevel, value unless l + end + end + + alias level= level_notifier= + end + + class LeveledNotifier<AbstructNotifier + include Comparable + + def initialize(base, level, prefix) + super(prefix, base) + + @level = level + end + + attr_reader :level + + def <=>(other) + @level <=> other.level + end + + def notify? + @base_notifier.level >= self + end + end + + class NoMsgNotifier<LeveledNotifier + def initialize + @base_notifier = nil + @level = 0 + @prefix = "" + end + + def notify? + false + end + end + + D_NOMSG = NoMsgNotifier.new + end +end |