Module: Kernel

Defined in:
opal/stdlib/pp.rb,
opal/stdlib/native.rb,
opal/stdlib/pathname.rb,
opal/stdlib/opal-parser.rb,
opal/stdlib/nodejs/kernel.rb,
opal/stdlib/nodejs/require.rb,
opal/stdlib/bigdecimal/kernel.rb

Constant Summary

NODE_REQUIRE =
`require`

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.pp(*objs) ⇒ Object



6
7
8
9
10
11
# File 'opal/stdlib/pp.rb', line 6

def pp(*objs)
  objs.each {|obj|
    PP.pp(obj)
  }
  objs.size <= 1 ? objs.first : objs
end

Instance Method Details

#__prepare_require__(path) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'opal/stdlib/nodejs/require.rb', line 4

def __prepare_require__(path)
  name = `Opal.normalize(#{path})`
  full_path = name.end_with?('.rb') ? name : name+'.rb'

  if `!Opal.modules[#{name}]`
    ruby = File.read(full_path)
    compiler = Opal::Compiler.new(ruby, requirable: true, file: name)
    js = compiler.compile
    compiler.requires.each do |sub_path|
      __prepare_require__(sub_path)
    end
    `eval(#{js})`
  end

  name
rescue => e
  raise [path, name, full_path].inspect+e.message
end

#_ArrayObject



236
# File 'opal/stdlib/native.rb', line 236

alias_method :_Array, :Array

#Array(object, *args, &block) ⇒ Object

Wraps array-like JavaScript objects in Native::Array



239
240
241
242
243
244
# File 'opal/stdlib/native.rb', line 239

def Array(object, *args, &block)
  if native?(object)
    return Native::Array.new(object, *args, &block).to_a
  end
  return _Array(object)
end

#BigDecimal(initial, digits = 0) ⇒ Object



2
3
4
# File 'opal/stdlib/bigdecimal/kernel.rb', line 2

def BigDecimal(initial, digits = 0)
  BigDecimal.new(initial, digits)
end

#caller(*args) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
# File 'opal/stdlib/nodejs/kernel.rb', line 6

def caller(*args)
  %x{
    var stack;
    try {
      var err = Error("my error");
      throw err;
    } catch(e) {
      stack = e.stack;
    }
    return stack.$split("\n").slice(3);
  }
end

#eval(str) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
# File 'opal/stdlib/opal-parser.rb', line 6

def eval(str)
  str = Opal.coerce_to!(str, String, :to_str)
  default_eval_options = { file: '(eval)', eval: true }
  compiling_options = __OPAL_COMPILER_CONFIG__.merge(default_eval_options)
  code = Opal.compile str, compiling_options
  %x{
    return (function(self) {
      return eval(#{code});
    })(self)
  }
end

#load(path) ⇒ Object



27
28
29
# File 'opal/stdlib/nodejs/require.rb', line 27

def load path
  `Opal.load(#{__prepare_require__(path)})`
end

#Native(obj) ⇒ Native::Object, ...

Wraps a native JavaScript with Native::Object.new

Returns:

  • (Native::Object)

    The wrapped object if it is native

  • (nil)

    for null and undefined

  • (obj)

    The object itself if it's not native



218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
# File 'opal/stdlib/native.rb', line 218

def Native(obj)
  if `#{obj} == null`
    nil
  elsif native?(obj)
    Native::Object.new(obj)
  elsif obj.is_a?(Array)
    obj.map do |o|
      Native(o)
    end
  elsif obj.is_a?(Proc)
    proc do |*args, &block|
      Native(obj.call(*args, &block))
    end
  else
    obj
  end
end

#native?(value) ⇒ Boolean

Returns:



209
210
211
# File 'opal/stdlib/native.rb', line 209

def native?(value)
  `value == null || !value.$$class`
end

#node_require(path) ⇒ Object



19
20
21
# File 'opal/stdlib/nodejs/kernel.rb', line 19

def node_require(path)
  `#{NODE_REQUIRE}(#{path.to_str})`
end

#Pathname(path) ⇒ Object



219
220
221
# File 'opal/stdlib/pathname.rb', line 219

def Pathname(path)
  Pathname.new(path)
end

#pretty_inspectObject



2
3
4
# File 'opal/stdlib/pp.rb', line 2

def pretty_inspect
  inspect
end

#require(path) ⇒ Object



23
24
25
# File 'opal/stdlib/nodejs/require.rb', line 23

def require(path)
  `Opal.require(#{__prepare_require__(path)})`
end

#require_remote(url) ⇒ Object



18
19
20
21
22
23
24
25
# File 'opal/stdlib/opal-parser.rb', line 18

def require_remote url
  %x{
    var r = new XMLHttpRequest();
    r.open("GET", url, false);
    r.send('');
  }
  eval `r.responseText`
end