Laravelのtorann/cellsの使い方メモ

完全に順番が前後しちゃってるけど。

呼び出し方

@cell(name, template, attributes, action)

内部の動作の抜粋

class Cells
{
  ..
  public function get($className,
                      $template = 'display',
                      $attributes = array() ,
                      $action = 'display' )
  {
    ..
    $instance = $this->app->make($className);
    $instance->setDisableCache($this->caching_disabled);

    array_set($cells, $className, $instance);
    ..
    $instance->setAttributes($attributes);
    $instance->initCell( $template , $action );

    return $instance->displayView();
  }
}
  • Cellxxx のインスタンスを作り
  • initCell() を呼ぶ
class CellBaseController
{
  public function initCell( $template = 'display' , $action = 'display' )
  {
    $this->template = $template;

    $this->init();

    $data = (array) $this->$action();
    $this->data = array_merge($this->attributes, $data);
  }

  public function displayView()
  {
    $path = "$this->name.$this->template";
    ..
    return $this->renderView( $path );
  }

  public function renderView( $path )
  {
    return View::make('cells' . DIRECTORY_SEPARATOR . $path,$this->data);
  }
}

initCell() の中では

  • init()
  • action() を呼んで、そこでセットされた結果を View に渡すデータとして保存
  • displayView() を呼ぶ

displayView() の中では

  • template の path をセットして
  • renderView() に渡して renderView() が View::make する

実装時の注意点

  • View で利用できる attributes に特定の値をセットするのは CellBaseController#setAttibute()
  • init() に渡ってくる前に @cell() を呼ぶ際に渡した attributes には getAttribute / getAttributes でアクセスできる
  • 個々の action は最終的に render の際に利用できる attributes に追加すべきデータの array を返す
    • action 固有のものはこの部分だけを見ることでテストできそう
  • 最終的に renderView() から View::make する際に template の存在チェックはしていないので、必ず対応する template を用意する1

コードで示すとこう

class CellFoo extends CellBaseController
{
  function init()
  {
    // 共通の前処理はここ
    // abstractなので実装しないといけない

    // View から利用できる attribute のセットは原則こう
    $this->setAttribute('key', 'value')
  }

  function action()
  {
    // attributes に追加あるいは attributes を上書きしたい値を返す
    return array('action_key' => 'action_value')

    // setAttribute してもよいが、自動で追加されるし、
    // return する方がテストしやすいはず
  }
}

Action に対応する View は絶対に必要。

views/cells/foo/action.blade.php
  1. どうしてもイヤなら CellBaseController を override しておいて挙動を変えちゃった方がよさそう 

WindowsのRubyでGitのcommitを扱おうとしてた

一言で言うと cmd.exe 上で動かすと外部コマンドからの入力を Windows-31J だと思い込んでしまうので .force_encoding('UTF-8') を足せという話だったっぽい。(実際には日本語の部分は捨てていたのでなんでもよかった。)

要はこんなやつです。

`git log -n 1 --oneline master`

こいつの結果を処理しようとしてたんだけど、OSX だとうまく動くのに、Windows だと

invalid byte sequence in Windows-31J

って言われちゃう。

Git の commit log って UTF-8 決め打ちじゃないんだっけ、と思いながら Windows の Ruby は Windows での利用に都合のいいように外の世界は Windows-31J で動いているのだという設定になってるんじゃないかな。

ということで

`git log -n 1 --oneline master`.force_encoding('UTF-8')

しておしまい。最終的には hash が手に入ればよかったので、調べたら

`git log -n 1 --pretty=%h master`

でもよかったかもしんない。git ってたまに help 読むとあーなるほどと思うことしきり。(奥が深い症候群か)

Camino や Safari の日本語そのまま URL をちゃんとエスケープして再利用する

例によって twitter のログから。

09:42:40 wtnabe< Safari も Camino もそうなんだけど、アドレスに日本語を
そのまま表示するのはいいんだけど、コピーしたときにも日本語のままっての
はちょっとやめてくんないかなぁ。
09:51:13 wtnabe< それとも自分の使う他のツール全部に日本語を含むURLをそ
のまま解釈する能力を求めた方がいいのか。いやー逆だよなぁ。
09:51:59 wtnabe< あくまで表示は表示であって、データとしては urlencode
されたものが正しい URL なんだし。
10:08:46 wtnabe< で、webkit.rb が呼び出せればいんじゃね?とも思ったが、
そんなことにかまけている時間はないのであった。
10:17:40 wtnabe< あ、URI.escape() だけでいいのか。でも terminal からコ
ピペすると改行コードが入ってむにゃむにゃ。
10:19:01 wtnabe< 改行コードが入ったり入らなかったりするんだった。クリッ
プボードに入ればいいのかしら。
10:20:02 wtnabe< rubycocoa から clipboard に投げればいいのか。どうやんだ?
10:33:09 wtnabe< てゆーか pbcopy でよかった。OSX++
10:33:49 wtnabe< てことは ruby -e 'require "uri"; puts URI.escape(
"URI" )' | pbcopy でおけ。
10:35:38 wtnabe< とりあえずここまで。alias に入れておきたいが、引数の取
り方が分からないのでそれはまた次回。

ということで

ruby -e 'require "uri"; puts URI.escape( "URI" )' | pbcopy

です。ただし、10.5 標準の screen 上ではこれは使えないらしい。MacPorts や Fink の screen だとイケる。

cf.

MacPortsのscreenではpbcopyが動く件 - moroの日記

と思ったら favicon をドラッグするといけるという情報が。なるほどなぁ。Safari の BK ですか。

rote いいかもしんない。

文句をぶちぶち言いながら gem で何をやっていたのかというと rote です。crontab ネタで調べものをしていたときに偶然見つけた

I sort my thought… - 静的Webサイト生成に便利なrote

に触発されて触ってみました。

Welcome! - Rote

RakeMarkdown, Textile の練習にちょうどいいかなぁと。Markdown はなんだかんだ興味を持ちながらまだまともに使ってなかったんだけど、インストールも利用も簡単な gem ベースのツールはこういうときいいな。

今ちょっと rake と何かしらの template を利用した処理をやろうとしてるので、rote はそういう意味でも参考になる。

※ 放置プレイな HTML ベタ書きサイト1もこれにすれば少しは更新できるようになるかしらんとか思ってもいるところ。blog 系の作りでなければ十分かなと。RSS の生成とかできればなおよいけれども、そこまで言うまい。

  1. 実際には PHP を触り始めたときに練習を兼ねて PHP から plain な HTML を生成してそれを上げているんだけど。 

オキシライド乾電池

2004年4月1日発売。

アルカリより 1.5倍パワフル&長持ちとな。これでコンパクトデジカメも専用充電池ばっかじゃなくて単三が復活してくれることを希望。え? 薄くできない? 薄すぎるカメラはグリップが悪くて使いものにならん!

G4 12" 触ってみた。

触ってみると G4 12" のキーボードは本当に広い。ほぼフルキーボード並み。個人的にはでかすぎ。でも感触はよい。やはり iBook とはかなり違う。考えたら今の ThinkPad を買うときに慌てて iBook を買わずに本当によかったと思う。また、スピードもかなりある。512MB までは体感速度の向上が見込めるらしい OS X だが、256MB しかなくても G4 867MHz は十分に速い。かなり驚き。さすが Velocity Engine. なのか、あるいは新設計マザーの恩恵か。

駆動静か

http://www.e-lets.co.jp/news/r_kudou_shizuka.htm

あんまり工藤静香は好みじゃないんだが。(そういう問題じゃない)

About

例によって個人のなんちゃらです