Яваскрипт в ruby

Posted on May 21, 2008
Благодаря новому расширению Johnson в руби появилась возможность использовать javascript со всеми его возможностями.
Например

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

Comments
  1. bugerMay 21, 2008 @ 05:31 PM
    Плохо настроена rss, по крайней мере в google reader всё приходит с html тегами
  2. Konstantin TumalevichMay 22, 2008 @ 12:18 PM
    Ну rss занимается фидбернер и у меня в гугль ридере все нормально