lib/pione/model/basic-model.rb in pione-0.1.4 vs lib/pione/model/basic-model.rb in pione-0.2.0
- old
+ new
@@ -23,25 +23,30 @@
end
# MethodNotFound is an exception class for the case of method missing.
class MethodNotFound < StandardError
attr_reader :name
- attr_reader :obj
+ attr_reader :receiver
+ attr_reader :arguments
# Creates an exception.
- # @param [String, Symbol] name
+ # @param name [String]
# method name
- # @param [BasicModel] obj
+ # @param receiver [Callable]
# method reciever
- def initialize(name, obj)
+ # @param arguments [Array<Callable>]
+ # method arguments
+ def initialize(name, receiver, *arguments)
@name = name
- @obj = obj
+ @receiver = receiver
+ @arguments = arguments
end
- # @api private
def message
- "PIONE method \"%s\" is not found in %s" % [@name, @obj.inspect]
+ rec_type = @receiver.pione_model_type
+ arg_types = @arguments.map{|arg| arg.pione_model_type}.join(" -> ")
+ "PIONE method \"%s\" is not found: %s. %s" % [@name, rec_type, arg_types]
end
end
# BasicModel is a class for pione model object.
class BasicModel < Pione::PioneObject
@@ -160,21 +165,23 @@
false
end
# Call pione model object method.
#
- # @param [String] name
- # method name
- # @param [Array] args
+ # @param vtable [VariableTable]
+ # variable table
+ # @param name [String]
+ # method's name
+ # @param args [Array]
# method's arguments
# @return [Object]
- # method's result
- def call_pione_method(name, *args)
+ # the result
+ def call_pione_method(vtable, name, *args)
if pione_method = pione_model_type.find_method(name, self, *args)
- pione_method.call(self, *args)
+ pione_method.call(vtable, self, *args)
else
- raise MethodNotFound.new(name, self)
+ raise MethodNotFound.new(name, self, *args)
end
end
# Returns itself.
# @return [BasicModel]
@@ -182,10 +189,12 @@
self
end
end
class Element < BasicModel
+ include SimpleIdentity
+
class << self
attr_reader :sequence_class
def set_sequence_class(sequence_class)
@sequence_class = sequence_class
@@ -198,15 +207,22 @@
sequence_class.new([self])
end
end
class Value < Element
+ include SimpleIdentity
+
attr_reader :value
- # @param value [Integer]
+ # @param value [Object]
# value in ruby
def initialize(value)
@value = value
end
+
+ def inspect
+ '#<%s "%s">' % [self.class.name, @value]
+ end
+ alias :to_s :inspect
end
end
end