Class: InvocationContext
- Inherits:
-
AbstractInvocationContext
- Object
- AbstractInvocationContext
- InvocationContext
- Includes:
- Enumerable
- Defined in:
- lib/javonet-ruby-sdk/sdk/invocation_context.rb
Overview
InvocationContext is a class that represents a context for invoking commands. It implements several interfaces for different types of interactions. This class is used to construct chains of invocations, representing expressions of interaction that have not yet been executed.
Instance Method Summary collapse
- #[](i) ⇒ Object
- #[]=(i, value) ⇒ Object
- #build_command(command) ⇒ Object
-
#create_instance(*args) ⇒ InvocationContext
Creates a new instance of a class in the target runtime.
-
#create_null ⇒ InvocationContext
Creates a null object of a specific type in the target runtime.
- #current_command ⇒ Object
- #encapsulate_payload_item(payload_item) ⇒ Object
-
#execute ⇒ InvocationContext
Executes the current command.
- #execute_async ⇒ Object
-
#get_enum_name ⇒ InvocationContext
Retrieves the name of an enum from the target runtime.
-
#get_enum_value ⇒ InvocationContext
Retrieves the value of an enum from the target runtime.
-
#get_index(*indexes) ⇒ InvocationContext
Retrieves the value at a specific indexes in an array from the target runtime.
-
#get_instance_field(field_name) ⇒ InvocationContext
Retrieves the value of an instance field from the target runtime.
-
#get_rank ⇒ InvocationContext
Retrieves the rank of an array from the target runtime.
-
#get_ref_value ⇒ InvocationContext
Retrieves the value of a reference from the target runtime.
-
#get_size ⇒ InvocationContext
Retrieves the number of elements from the target runtime.
-
#get_static_field(field_name) ⇒ InvocationContext
Retrieves the value of a static field from the target runtime.
-
#get_value ⇒ Object
Retrieves the value of the current command from the target runtime.
-
#initialize(runtime_name, connection_type, tcp_ip_address, command, is_executed = false) ⇒ InvocationContext
constructor
A new instance of InvocationContext.
-
#invoke_generic_method(method_name, *args) ⇒ InvocationContext
Invokes a generic method on the target runtime.
-
#invoke_generic_static_method(method_name, *args) ⇒ InvocationContext
Invokes a generic static method on the target runtime.
-
#invoke_instance_method(method_name, *args) ⇒ InvocationContext
Invokes an instance method on the target runtime.
-
#invoke_static_method(method_name, *args) ⇒ InvocationContext
Invokes a static method on the target runtime.
-
#iterator ⇒ Object
def finalize(command, is_executed, interpreter, connection_type, tcp_ip_address) proc do if command.command_type == CommandType::REFERENCE && is_executed == true destruct_command = Command.new(@runtime_name, CommandType::DESTRUCT_REFERENCE, command.payload) interpreter.execute(destruct_command, connection_type, tcp_ip_address) end end end.
- #response_command ⇒ Object
-
#retrieve_array ⇒ Object
Retrieves an array from the target runtime.
-
#set_index(indexes, value) ⇒ InvocationContext
Sets the value at a specific index in an array in the target runtime.
-
#set_instance_field(field_name, value) ⇒ InvocationContext
Sets the value of an instance field in the target runtime.
-
#set_static_field(field_name, value) ⇒ InvocationContext
Sets the value of a static field in the target runtime.
Methods inherited from AbstractInvocationContext
Constructor Details
#initialize(runtime_name, connection_type, tcp_ip_address, command, is_executed = false) ⇒ InvocationContext
Returns a new instance of InvocationContext.
13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 13 def initialize(runtime_name, connection_type, tcp_ip_address, command, is_executed = false) @is_executed = is_executed @runtime_name = runtime_name @connection_type = connection_type @tcp_ip_address = tcp_ip_address @current_command = command @response_command = nil @interpreter = Interpreter.new # generates error: ruby/lib/javonet.rb-ruby-sdk/sdk/internal/invocation_context.rb:17: warning: finalizer references object to be finalized # ObjectSpace.define_finalizer(self, self.finalize(@current_command, @is_executed, @interpreter, @connection_type, @tcp_ip_address)) end |
Instance Method Details
#[](i) ⇒ Object
42 43 44 45 46 47 48 49 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 42 def [](i) if not [CommandType::REFERENCE, CommandType::ARRAY_GET_ITEM].include? @current_command.command_type raise "Object is not iterable" else invocation_context_iterator = InvocationContextIterator.new(self) invocation_context_iterator[i] end end |
#[]=(i, value) ⇒ Object
51 52 53 54 55 56 57 58 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 51 def []=(i, value) if not [CommandType::REFERENCE, CommandType::ARRAY_SET_ITEM, CommandType::ARRAY_GET_ITEM].include? @current_command.command_type raise "Object is not iterable" else invocation_context_iterator = InvocationContextIterator.new(self) invocation_context_iterator[i] = value end end |
#build_command(command) ⇒ Object
262 263 264 265 266 267 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 262 def build_command(command) command.payload.each_index { |i| command.payload[i] = encapsulate_payload_item(command.payload[i]) } command.prepend_arg_to_payload(@current_command) end |
#create_instance(*args) ⇒ InvocationContext
Creates a new instance of a class in the target runtime.
115 116 117 118 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 115 def create_instance(*args) local_command = Command.new(@runtime_name, CommandType::CREATE_CLASS_INSTANCE, [*args]) InvocationContext.new(@runtime_name, @connection_type, @tcp_ip_address, build_command(local_command)) end |
#create_null ⇒ InvocationContext
Creates a null object of a specific type in the target runtime.
232 233 234 235 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 232 def create_null local_command = Command.new(@runtime_name, CommandType::CREATE_NULL, []) InvocationContext.new(@runtime_name, @connection_type, @tcp_ip_address, build_command(local_command)) end |
#current_command ⇒ Object
291 292 293 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 291 def current_command @current_command end |
#encapsulate_payload_item(payload_item) ⇒ Object
269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 269 def encapsulate_payload_item(payload_item) if payload_item.is_a? Command payload_item.payload.each_index { |i| payload_item.payload[i] = encapsulate_payload_item(payload_item.payload[i]) } return payload_item elsif payload_item.is_a? InvocationContext return payload_item.current_command elsif payload_item.is_a? Array payload_item.each_index { |i| payload_item[i] = encapsulate_payload_item(payload_item[i]) } return Command.new(@runtime_name, CommandType::ARRAY, [*payload_item]) else return Command.new(@runtime_name, CommandType::VALUE, [*payload_item]) end end |
#execute ⇒ InvocationContext
Executes the current command. Because invocation context is building the intent of executing particular expression on target environment, we call the initial state of invocation context as non-materialized. The non-materialized context wraps either single command or chain of recursively nested commands. Commands are becoming nested through each invocation of methods on Invocation Context. Each invocation triggers the creation of new Invocation Context instance wrapping the current command with new parent command valid for invoked method. Developer can decide on any moment of the materialization for the context taking full control of the chunks of the expression being transferred and processed on target runtime.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 68 def execute @response_command = @interpreter.execute(@current_command, @connection_type, @tcp_ip_address) if @response_command.command_type == CommandType::EXCEPTION raise ExceptionThrower.throw_exception(@response_command) end if @response_command.command_type == CommandType::CREATE_CLASS_INSTANCE @current_command = @response_command @is_executed = true return self end InvocationContext.new(@runtime_name, @connection_type, @tcp_ip_address, @response_command, true) end |
#execute_async ⇒ Object
84 85 86 87 88 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 84 def execute_async Thread.new do self.execute end end |
#get_enum_name ⇒ InvocationContext
Retrieves the name of an enum from the target runtime.
216 217 218 219 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 216 def get_enum_name local_command = Command.new(@runtime_name, CommandType::GET_ENUM_NAME, []) InvocationContext.new(@runtime_name, @connection_type, @tcp_ip_address, build_command(local_command)) end |
#get_enum_value ⇒ InvocationContext
Retrieves the value of an enum from the target runtime.
224 225 226 227 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 224 def get_enum_value local_command = Command.new(@runtime_name, CommandType::GET_ENUM_VALUE, []) InvocationContext.new(@runtime_name, @connection_type, @tcp_ip_address, build_command(local_command)) end |
#get_index(*indexes) ⇒ InvocationContext
Retrieves the value at a specific indexes in an array from the target runtime.
162 163 164 165 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 162 def get_index(*indexes) local_command = Command.new(@runtime_name, CommandType::ARRAY_GET_ITEM, [*indexes]) InvocationContext.new(@runtime_name, @connection_type, @tcp_ip_address, build_command(local_command)) end |
#get_instance_field(field_name) ⇒ InvocationContext
Retrieves the value of an instance field from the target runtime.
143 144 145 146 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 143 def get_instance_field(field_name) local_command = Command.new(@runtime_name, CommandType::GET_INSTANCE_FIELD, [field_name]) InvocationContext.new(@runtime_name, @connection_type, @tcp_ip_address, build_command(local_command)) end |
#get_rank ⇒ InvocationContext
Retrieves the rank of an array from the target runtime.
188 189 190 191 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 188 def get_rank local_command = Command.new(@runtime_name, CommandType::ARRAY_GET_RANK, []) InvocationContext.new(@runtime_name, @connection_type, @tcp_ip_address, build_command(local_command)) end |
#get_ref_value ⇒ InvocationContext
Retrieves the value of a reference from the target runtime.
240 241 242 243 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 240 def get_ref_value local_command = Command.new(@runtime_name, CommandType::GET_REF_VALUE, []) InvocationContext.new(@runtime_name, @connection_type, @tcp_ip_address, build_command(local_command)) end |
#get_size ⇒ InvocationContext
Retrieves the number of elements from the target runtime.
180 181 182 183 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 180 def get_size local_command = Command.new(@runtime_name, CommandType::ARRAY_GET_SIZE, []) InvocationContext.new(@runtime_name, @connection_type, @tcp_ip_address, build_command(local_command)) end |
#get_static_field(field_name) ⇒ InvocationContext
Retrieves the value of a static field from the target runtime.
124 125 126 127 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 124 def get_static_field(field_name) local_command = Command.new(@runtime_name, CommandType::GET_STATIC_FIELD, [field_name]) InvocationContext.new(@runtime_name, @connection_type, @tcp_ip_address, build_command(local_command)) end |
#get_value ⇒ Object
Retrieves the value of the current command from the target runtime.
258 259 260 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 258 def get_value @current_command.payload[0] end |
#invoke_generic_method(method_name, *args) ⇒ InvocationContext
Invokes a generic method on the target runtime.
208 209 210 211 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 208 def invoke_generic_method(method_name, *args) local_command = Command.new(@runtime_name, CommandType::INVOKE_GENERIC_METHOD, [method_name, *args]) InvocationContext.new(@runtime_name, @connection_type, @tcp_ip_address, build_command(local_command)) end |
#invoke_generic_static_method(method_name, *args) ⇒ InvocationContext
Invokes a generic static method on the target runtime.
198 199 200 201 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 198 def invoke_generic_static_method(method_name, *args) local_command = Command.new(@runtime_name, CommandType::INVOKE_GENERIC_STATIC_METHOD, [method_name, *args]) InvocationContext.new(@runtime_name, @connection_type, @tcp_ip_address, build_command(local_command)) end |
#invoke_instance_method(method_name, *args) ⇒ InvocationContext
Invokes an instance method on the target runtime.
106 107 108 109 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 106 def invoke_instance_method(method_name, *args) local_command = Command.new(@runtime_name, CommandType::INVOKE_INSTANCE_METHOD, [method_name, *args]) InvocationContext.new(@runtime_name, @connection_type, @tcp_ip_address, build_command(local_command)) end |
#invoke_static_method(method_name, *args) ⇒ InvocationContext
Invokes a static method on the target runtime.
95 96 97 98 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 95 def invoke_static_method(method_name, *args) local_command = Command.new(@runtime_name, CommandType::INVOKE_STATIC_METHOD, [method_name, *args]) InvocationContext.new(@runtime_name, @connection_type, @tcp_ip_address, build_command(local_command)) end |
#iterator ⇒ Object
def finalize(command, is_executed, interpreter, connection_type, tcp_ip_address)
proc do
if command.command_type == CommandType::REFERENCE && is_executed == true
destruct_command = Command.new(@runtime_name, CommandType::DESTRUCT_REFERENCE, command.payload)
interpreter.execute(destruct_command, connection_type, tcp_ip_address)
end
end
end
34 35 36 37 38 39 40 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 34 def iterator if not [CommandType::REFERENCE, CommandType::ARRAY_GET_ITEM, CommandType::ARRAY_SET_ITEM].include? @current_command.command_type raise "Object is not iterable" else InvocationContextIterator.new(self) end end |
#response_command ⇒ Object
295 296 297 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 295 def response_command @response_command end |
#retrieve_array ⇒ Object
Retrieves an array from the target runtime.
248 249 250 251 252 253 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 248 def retrieve_array local_command = Command.new(@runtime_name, CommandType::RETRIEVE_ARRAY, []) local_inv_ctx = InvocationContext.new(@runtime_name, @connection_type, @tcp_ip_address, build_command(local_command)) local_inv_ctx.execute local_inv_ctx.response_command.payload end |
#set_index(indexes, value) ⇒ InvocationContext
Sets the value at a specific index in an array in the target runtime.
172 173 174 175 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 172 def set_index(indexes, value) local_command = Command.new(@runtime_name, CommandType::ARRAY_SET_ITEM, [indexes, value]) InvocationContext.new(@runtime_name, @connection_type, @tcp_ip_address, build_command(local_command)) end |
#set_instance_field(field_name, value) ⇒ InvocationContext
Sets the value of an instance field in the target runtime.
153 154 155 156 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 153 def set_instance_field(field_name, value) local_command = Command.new(@runtime_name, CommandType::SET_INSTANCE_FIELD, [field_name, value]) InvocationContext.new(@runtime_name, @connection_type, @tcp_ip_address, build_command(local_command)) end |
#set_static_field(field_name, value) ⇒ InvocationContext
Sets the value of a static field in the target runtime.
134 135 136 137 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 134 def set_static_field(field_name, value) local_command = Command.new(@runtime_name, CommandType::SET_STATIC_FIELD, [field_name, value]) InvocationContext.new(@runtime_name, @connection_type, @tcp_ip_address, build_command(local_command)) end |