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.
- #finalize(command, is_executed, interpreter, connection_type, tcp_ip_address) ⇒ 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
- #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
256 257 258 259 260 261 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 256 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.
109 110 111 112 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 109 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.
226 227 228 229 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 226 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
285 286 287 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 285 def current_command @current_command end |
#encapsulate_payload_item(payload_item) ⇒ Object
263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 263 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 |
#finalize(command, is_executed, interpreter, connection_type, tcp_ip_address) ⇒ Object
25 26 27 28 29 30 31 32 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 25 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 |
#get_enum_name ⇒ InvocationContext
Retrieves the name of an enum from the target runtime.
210 211 212 213 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 210 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.
218 219 220 221 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 218 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.
156 157 158 159 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 156 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.
137 138 139 140 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 137 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.
182 183 184 185 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 182 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.
234 235 236 237 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 234 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.
174 175 176 177 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 174 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.
118 119 120 121 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 118 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.
252 253 254 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 252 def get_value @current_command.payload[0] end |
#invoke_generic_method(method_name, *args) ⇒ InvocationContext
Invokes a generic method on the target runtime.
202 203 204 205 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 202 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.
192 193 194 195 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 192 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.
100 101 102 103 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 100 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.
89 90 91 92 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 89 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
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
289 290 291 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 289 def response_command @response_command end |
#retrieve_array ⇒ Object
Retrieves an array from the target runtime.
242 243 244 245 246 247 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 242 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.
166 167 168 169 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 166 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.
147 148 149 150 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 147 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.
128 129 130 131 |
# File 'lib/javonet-ruby-sdk/sdk/invocation_context.rb', line 128 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 |