lib/facet/nack.rb in facets-0.7.2 vs lib/facet/nack.rb in facets-0.9.0
- old
+ new
@@ -1,128 +2 @@
-#:title: NackClass
-#--
-# NackClass
-# v 1.0
-#
-# Copyright (c) 2005 Thomas Sawyer
-#
-# Ruby License
-#
-# This module is free software. You may use, modify, and/or redistribute this
-# software under the same terms as Ruby.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.
-#
-#
-# $Id: nack.rb,v 1.0 2005/04/28 03:10:10 transami Exp $
-#
-# ==========================================================================
-# Revision History ::
-# YYYY.MM.DD Ver. Dev. Description
-# --------------------------------------------------------------------------
-# 2005.04.28 1.0 Trans * Minor modifications to documentation.
-# ==========================================================================
-# To Do ::
-# * I beleive this class has even more potential yet.
-# It would be interesting to see if a catch/try correction
-# facility could be built into it too.
-# ==========================================================================
-#++
-
-# = Description
-#
-# The NackClass is is like the NilClass except one step down.
-# Nack is never used to to mean nothingness or emptiness.
-# The Nack class is only used to report something is "a miss" w/o
-# the system raising an Exception. It's a mechanism for
-# lazy error evaluation.
-#
-# == Usage
-#
-# def scalar( x )
-# if x.kind_of?(Enumerable)
-# return nack(ArgumentError, "Value must not be enumerable")
-# end
-# x
-# end
-#
-# a = scaler( 1 ) #=> 1
-# b = scaler( [1,2] ) #=> nack
-# b.first #=> ArgumentError (previous)
-#
-# a = nail scaler( 1 ) #=> 1
-# b = nail scaler( [1,2] ) #=> ArgumentError
-#
-# == Author(s)
-#
-# * Thomas Sawyer
-#
-
-class InvalidNackError < ArgumentError
-end
-
-class NackClass
-
- attr_reader :error, :data
-
- def initialize(error=nil, *data, &ctrl)
- if Class === error and error <= Exception
- @error = error.new(*data)
- elsif error.kind_of?( Exception )
- @error = error
- elsif error.kind_of?( String )
- @error = StandardError.new(error)
- elsif error == nil
- @error = StandardError.new
- else
- raise InvalidNackError
- end
- @data = data
- @ctrl = ctrl
- end
-
- def call(*args)
- @ctrl.call(*args)
- end
-
- def call_with_data
- @ctrl.call(*@data)
- end
-
- def raise_error
- raise @error
- end
-
- def to_s; "n/a"; end
-
- def ==(x)
- x.is_a?(NackClass)
- end
-
- def method_missing(meth, *args)
- raise_error
- end
-
-end
-
-module Kernel
- def nack(err=nil, *data, &ctrl)
- NackClass.new(err, *data, &ctrl)
- end
-end
-
-# private Object method
-def nail( arg )
- if NackClass === arg
- arg.raise_error
- else
- return arg
- end
-end
-
-#class NilClass
-# def method_missing(meth, *args)
-# nack()
-# end
-#end
+require 'mega/nack.rb'
\ No newline at end of file