class Upcastable::UpcastedObject
Public Class Methods
define_delegate_method(m)
click to toggle source
# File lib/upcastable/upcasted_object.rb, line 3 def self.define_delegate_method(m) define_method(m) do |*args, &block| @object.send(m, *args, &block) end end
new(object, ancestor, base = object.class)
click to toggle source
# File lib/upcastable/upcasted_object.rb, line 9 def initialize(object, ancestor, base = object.class) unless base <= ancestor raise ArgumentError, "#{ancestor} is not an ancestor of #{base}" end @object = object @ancestor = ancestor end
Public Instance Methods
downcast()
click to toggle source
# File lib/upcastable/upcasted_object.rb, line 53 def downcast @object end
initialize_clone(other)
click to toggle source
# File lib/upcastable/upcasted_object.rb, line 21 def initialize_clone(other) @object = @object.clone end
method_missing(m, *args, &block)
click to toggle source
# File lib/upcastable/upcasted_object.rb, line 57 def method_missing(m, *args, &block) unless @ancestor.method_defined?(m) raise NoMethodError, "`#{m}' is not defined in #{@ancestor}" end @object.send(m, *args, &block) end
respond_to?(m, private = false)
click to toggle source
# File lib/upcastable/upcasted_object.rb, line 32 def respond_to?(m, private = false) if private @ancestor.private_method_defined?(m) || @ancestor.method_defined?(m) else @ancestor.method_defined?(m) end end
send(m, *args, &block)
click to toggle source
# File lib/upcastable/upcasted_object.rb, line 25 def send(m, *args, &block) unless @ancestor.method_defined?(m) && @ancestor.private_method_defined?(m) raise NoMethodError, "`#{m}' is not defined in #{@ancestor}" end @object.send(m, *args, &block) end
upcast_to(ancestor)
click to toggle source
# File lib/upcastable/upcasted_object.rb, line 40 def upcast_to(ancestor) return self if ancestor == @ancestor UpcastedObject.new(@object, ancestor, @ancestor) end
upcasted?()
click to toggle source
# File lib/upcastable/upcasted_object.rb, line 49 def upcasted? true end
upcasting()
click to toggle source
# File lib/upcastable/upcasted_object.rb, line 45 def upcasting @ancestor end