Lokka で Google Analytics のトラッキングコードを簡単に挿入するための Helper Plugin を書いてみた

Lokka は komagata さんが開発されている、Ruby で書かれた CMS です(旧名 Pyhä)。
打倒 WordPress を目指しているそうです。

komagata’s lokka at master – GitHub

今後使用しようと思っていて、 Plugin も書けるということで、ちょっと試してみました。
簡単に Google Analytics のトラッキングコードが挿入できる Plugin です。

$LOKKA_ROOT/plugin フォルダに hello というサンプルがあるので、それを見ながら書いてみます。
komagata さんのエントリによれば、 Sinatra Extensions のサブセットだということ。

Pyhaの大体の仕組み – komagata [p0t]
Sinatra: Writing Extensions

$LOKKA_ROOT/plugin/ に google_analytics/lib/google_analytics.rb というファイルを作りました。
そして以下を記述。

module Lokka
  module Helpers
    def analytics(uid)
      haml(<<-script, {})
%script{ :type => "text/javascript" }
  :cdata
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', '#{uid}']);
    _gaq.push(['_trackPageview']);

    (function() {
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
      script
    end
  end
end

モジュール名をどうしたらいいのかわからなかったので、 $LOKKA_ROOT/lib/lokka/helpers.rb を参考に Lokka::Helpers に入れてしまいました。

Rails の感覚だと後は、サーバを再起動すれば動きそうですが、このままでは動きません。
おかしいなぁと思って、プロジェクトを grep してみると、 init.rb にこんな行が。

$:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'plugin', 'hello', 'lib'))

これは同じように入れないといけないんだろうかと、こう書いてみる。

$:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'plugin', 'google_analytics', 'lib'))

そしてもう一カ所、 $LOKKA_ROOT/lib/lokka.rb を見てみると

require 'lokka/hello'

なんて行があるので、同様に

require 'lokka/google_analytics'

と書いたところ、無事に動きました。