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