この章ではRindaの拡張例を見ていきます。
以下のコマンドでインストールできます。
gem install more_rinda
require 'erb' | |
class ERB | |
class ERBString < String | |
def to_s; self; end | |
def erb_concat(s) | |
if self.class === s | |
concat(s) | |
else |
「{」の見た目から名付けられたMustacheというライブラリーが人気です。
https://github.com/defunkt/mustache
このテンプレートの面白いところは「極力ロジックを書かない」ことに注力したテンプレートだということです。以下がMustacheのホームページから抜粋した例です。
Hello {{name}}
You have just won {{value}} dollars!
{{#in_ca}}
Well, {{taxed_value}} dollars, after taxes.
dRubyはこれまでに多くの大規模システムの基盤として利用されてきました。dRubyはいつものRubyプログラミングに非常に近い感覚で分散オブジェクトを実現します。これにより、複雑な分散システムであってもアイデアをすぐに実現することができます。 dRubyが提供するのは汎用のRMIです。スケッチの段階でdRubyを用い、有用性を確認したのちに用途に特化したミドルウェアに置き換えるといったように成長していったシステムも多いようです。 以下に実世界でのdRubyの使用例を示します。
Hatena は日本を代表するインターネットカンパニーで、ブログ、ソーシャルブックマークサービスなどを提供しています。2006年当時(現在はサービス終了) Hatena Screen Shotという、登録されたURLのスクリーンショットをサムネイルとして表示するサービスがありました。このサービスのアーキテクチャーのユニークな点にWebフロントエンドはLinux上に構築されているが、スクリーンショットの撮影はWindowsのIEコンポーネントを用いて実現されていることにある。これはWindows環境の方がスクリーンショットを撮影できる環境が整っていたためであるが、クロスプラットフォーム間のシステムを協調させるdRubyを使った良い例といえよう。またスクリーンショットマシーンは並列処理が行われていたため、スケーラビリティも確保されていた。
require 'drip' | |
require 'thread' | |
class STM | |
class VersionMismatch < RuntimeError; end | |
class TransactionNotFound < RuntimeError; end | |
class Ref | |
def initialize(stm, name) | |
@stm = stm |
# -*- coding: utf-8 -*- | |
require 'kramdown' | |
require 'webrick' | |
require 'webrick/cgi' | |
require 'drb/drb' | |
require 'erb' | |
require 'monitor' | |
class WikiR | |
class Book |
require 'drb/drb' | |
require 'monitor' | |
require 'digest/md5' | |
require 'webrick' | |
require 'webrick/cgi' | |
module SilkenTofu | |
class Session | |
include MonitorMixin |
require 'drb' | |
class DRbThreadIdConv < DRb::DRbIdConv | |
def initialize | |
@dict = {} | |
end | |
def to_obj(ref) | |
super | |
ensure |