Class: Isomorfeus::Speednode::Runtime::Context

Inherits:
ExecJS::Runtime::Context
  • Object
show all
Defined in:
lib/isomorfeus/speednode/runtime.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(runtime, source = "", options = {}) ⇒ Context

Returns a new instance of Context.



181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# File 'lib/isomorfeus/speednode/runtime.rb', line 181

def initialize(runtime, source = "", options = {})
  @runtime = runtime
  @uuid = SecureRandom.uuid
  @permissive = !!options[:permissive]

  ObjectSpace.define_finalizer(self, self.class.finalize(@runtime, @uuid))

  begin
    source = encode(source)
  rescue
    source = source.force_encoding('UTF-8')
  end

  @permissive ? raw_execp(source) : raw_exec(source)
end

Class Method Details

.finalize(runtime, uuid) ⇒ Object



197
198
199
# File 'lib/isomorfeus/speednode/runtime.rb', line 197

def self.finalize(runtime, uuid)
  proc { runtime.vm.delete_context(uuid) }
end

Instance Method Details

#call(identifier, *args) ⇒ Object



201
202
203
# File 'lib/isomorfeus/speednode/runtime.rb', line 201

def call(identifier, *args)
  eval "#{identifier}.apply(this, #{::Oj.dump(args, mode: :strict)})"
end

#eval(source, options = {}) ⇒ Object



205
206
207
# File 'lib/isomorfeus/speednode/runtime.rb', line 205

def eval(source, options = {})
  raw_exec("(#{source})") if /\S/ =~ source
end

#exec(source, options = {}) ⇒ Object



209
210
211
# File 'lib/isomorfeus/speednode/runtime.rb', line 209

def exec(source, options = {})
  raw_exec("(function(){#{source}})()")
end

#permissive?Boolean

Returns:

  • (Boolean)


213
214
215
# File 'lib/isomorfeus/speednode/runtime.rb', line 213

def permissive?
  @permissive
end

#permissive_eval(source, options = {}) ⇒ Object



217
218
219
# File 'lib/isomorfeus/speednode/runtime.rb', line 217

def permissive_eval(source, options = {})
  raw_execp("(#{source})") if /\S/ =~ source
end

#permissive_exec(source, options = {}) ⇒ Object



221
222
223
# File 'lib/isomorfeus/speednode/runtime.rb', line 221

def permissive_exec(source, options = {})
  raw_execp("(function(){#{source}})()")
end

#raw_exec(source) ⇒ Object



225
226
227
228
229
230
# File 'lib/isomorfeus/speednode/runtime.rb', line 225

def raw_exec(source)
  source = encode(source)

  result = @runtime.vm.exec(@uuid, source)
  extract_result(result)
end

#raw_execp(source) ⇒ Object



232
233
234
235
236
237
# File 'lib/isomorfeus/speednode/runtime.rb', line 232

def raw_execp(source)
  source = encode(source)

  result = @runtime.vm.execp(@uuid, source)
  extract_result(result)
end