Class: Isomorfeus::Speednode::Runtime::Context
- Inherits:
-
ExecJS::Runtime::Context
- Object
- ExecJS::Runtime::Context
- Isomorfeus::Speednode::Runtime::Context
- Defined in:
- lib/isomorfeus/speednode/runtime.rb
Class Method Summary collapse
Instance Method Summary collapse
- #call(identifier, *args) ⇒ Object
- #eval(source, options = {}) ⇒ Object
- #exec(source, options = {}) ⇒ Object
-
#initialize(runtime, source = "", options = {}) ⇒ Context
constructor
A new instance of Context.
- #permissive? ⇒ Boolean
- #permissive_eval(source, options = {}) ⇒ Object
- #permissive_exec(source, options = {}) ⇒ Object
- #raw_exec(source) ⇒ Object
- #raw_execp(source) ⇒ Object
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 = "", = {}) @runtime = runtime @uuid = SecureRandom.uuid @permissive = !![: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, = {}) 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, = {}) raw_exec("(function(){#{source}})()") end |
#permissive? ⇒ 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, = {}) 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, = {}) 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 |