Например
require 'rubygems'
require 'johnson'
context = Johnson::Context.new
context['alert'] = lambda { |x| puts x }
context.evaluate('alert("Hello ruby!");')
В примере в контексте javascript процесса создается функция alert и вызывается при обработке js скрипта.Так-же возможен и обратный вызов
require 'rubygems'
require 'johnson'
def alert(arg)
puts arg
end
context = Johnson::Context.new
context.evaluate('Ruby.alert("Hello ruby!")')
Так-же возможно таскать объекты из контеста в контекст
A = Struct.new(:foo)
context= Johnson::Context.new
context['alert'] = lambda { |x| puts x }
context['a'] = A.new("bar")
context.evaluate('alert(a.foo);') # => 'bar'
Если надо использовать символ например для того что-бы записать User.find(:all) то используется Johnson.symbolize
context= Johnson::Context.new
context['alert'] = lambda { |x| puts x }
context.evaluate(<<-END
for(var user in Ruby.User.find(Johnson.symbolize('all'))) {
alert(user.first_name());
}
END
)
Узнано благодаря RubyFlow из блога Aaron Patterson`a