OpalでJavaScriptの要らない開発

は、無理ですけど。
Best Casino Sites in UK - Play at Best Online Casinos in 2018!
このコードトランスレータによって、それに近いことは可能になります。
導入や実際の使い方はドキュメントや解説記事に任せるとして、1週間ほど使ってみて分かったことをいくつか。

ちょっとした非互換性

$ ruby -v
ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-darwin10.8.0]
$ irb
irb(main):001:0> def foo
irb(main):002:1>   5.times do |i|
irb(main):003:2*     return 'foo' if i > 3
irb(main):004:2>   end
irb(main):005:1>   
irb(main):006:1*   return 'bar'
irb(main):007:1> end
=> nil
irb(main):008:0> puts foo
foo
=> nil
$ cat app/assets/javascripts/foo.js.rb 
def foo
  5.times do |i|
    return 'foo' if i > 3
  end
  
  return 'bar'
end
puts foo

JSコンソールの出力

bar

ブロック中でreturnした場合の結果が違う

ファイル分割

foo.js.rb

def foo
  puts 'foo'
end

bar.js.rb

puts foo

JSコンソール

foo

定義したモジュール、クラス、メソッド等は別のファイルに書いたコードからでも使える。
rubyコード中のrequireは意味がないようだ。

JSからRubyで書いた処理を使う

fooというメソッドをトップレベルで定義した場合、

Opal.top.foo()

でアクセス可能。

module Foo
  def self.bar
  end
end

とした場合は

Opal.Foo.bar()

で触れる。