Module: Kernel

Defined in:
opal/stdlib/minitest/spec.rb,
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

Overview

:nodoc:

Constant Summary

NODE_REQUIRE =
`require`

Instance Method Summary collapse

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_loadable_path(#{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

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



144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# File 'opal/stdlib/native.rb', line 144

def Array(object, *args, &block)
  %x{
    if (object == null || object === nil) {
      return [];
    }
    else if (#{native?(object)}) {
      return #{Native::Array.new(object, *args, &block).to_a};
    }
    else if (#{object.respond_to? :to_ary}) {
      return #{object.to_ary};
    }
    else if (#{object.respond_to? :to_a}) {
      return #{object.to_a};
    }
    else {
      return [object];
    }
  }
end

#callerObject



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

def caller
  %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
# File 'opal/stdlib/opal-parser.rb', line 6

def eval(str)
  code = Opal.compile str, file: '(eval)'
  `eval(#{code})`
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) ⇒ Object



134
135
136
137
138
139
140
141
142
# File 'opal/stdlib/native.rb', line 134

def Native(obj)
  if `#{obj} == null`
    nil
  elsif native?(obj)
    Native::Object.new(obj)
  else
    obj
  end
end

#native?(value) ⇒ Boolean

Returns:



130
131
132
# File 'opal/stdlib/native.rb', line 130

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



52
53
54
# File 'opal/stdlib/pathname.rb', line 52

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

#pretty_inspectObject



2
# 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



11
12
13
14
15
16
17
18
# File 'opal/stdlib/opal-parser.rb', line 11

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