Skip to content

Commit c682171

Browse files
committedNov 14, 2013
Expose classes, modules and methods to js
1 parent 71bc1d5 commit c682171

File tree

3 files changed

+60
-0
lines changed

3 files changed

+60
-0
lines changed
 

‎spec/stdlib/native/exposure_spec.rb

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
require 'native'
2+
3+
describe 'Native exposure' do
4+
describe Class do
5+
describe '#native_alias' do
6+
it 'exposes a method to javascript' do
7+
c = Class.new do
8+
def ruby_method
9+
:ruby
10+
end
11+
12+
native_alias :rubyMethod, :ruby_method
13+
end
14+
15+
`#{c.new}.rubyMethod()`.should == :ruby
16+
end
17+
end
18+
19+
describe '#native_class' do
20+
it 'exposes a Class on the JS global object' do
21+
c = Class.new do
22+
def self.name
23+
'Pippo'
24+
end
25+
26+
native_class
27+
end
28+
29+
`Pippo`.should == c
30+
end
31+
end
32+
end
33+
end

‎stdlib/native.rb

+14
Original file line numberDiff line numberDiff line change
@@ -479,5 +479,19 @@ def to_n
479479
end
480480
end
481481

482+
class Module
483+
def native_module
484+
`Opal.global[#{self.name}] = #{self}`
485+
end
486+
end
487+
488+
class Class
489+
def native_alias(jsid, mid)
490+
`#{self}._proto[#{jsid}] = #{self}._proto['$' + #{mid}]`
491+
end
492+
493+
alias native_class native_module
494+
end
495+
482496
# native global
483497
$$ = $global = Native(`Opal.global`)

‎stdlib/native_exposure.rb

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Module
2+
def native_module
3+
`Opal.global[#{self.name}] = #{self}`
4+
end
5+
end
6+
7+
class Class
8+
def native_alias(jsid, mid)
9+
`#{self}._proto[#{jsid}] = #{self}._proto['$' + #{mid}]`
10+
end
11+
12+
alias native_class native_module
13+
end

2 commit comments

Comments
 (2)

meh commented on Nov 14, 2013

@meh
Member

You forgot to delete the old file.

elia commented on Nov 18, 2013

@elia
MemberAuthor

ugh, sorry, thanks for the fix :)

Please sign in to comment.