MerbのGeneratorは、merb-genというコマンドに集約されています。 Railsではscript/{generate|destroy}を使いますが、独立したコマンドになっているので、 MERB_ROOT以外の場所でも利用可能です。

さて、Merbでも、RailsのようにGeneratorを独自に作る事が出来るのですが、 そのためにはGEM_ROOTにGeneratorsというファイルを作り、 以下のように自分をGeneratorとして登録するコードを書きます。

   1  scope 'merb-gen' do
   2    dir = File.join(File.dirname(__FILE__), 'lib', 'generators/')
   3    Merb.add_generators dir + 'mailer_generator'
   4  end

MerbのGeneratorは、より汎用的なGeneratorを作る仕組みである、 templater を使って実装されています。 そのため、Merb用のGeneratorを作る場合は、上記ファイルのscopeに merb-genを指定する必要があります。

Railsの場合は、foo_generater のようにGem名のサフィックスでGenerator を提供するかどうか判別していましたが、 こっちのほうがもっと賢いやり方だと思います。

posted by Png genki on Tue 13 Jan 2009 at 23:30

最近、僕が作ってる某学会のシステムのコードをそのままコピペ。

ここでは都合上「アプリケーションの実行パス」となっていますが、気にしないでください。

   1  ' プロシージャ: Function
   2  ' 名前        : GetAppExecPath
   3  ' 機能        : アプリケーションの実行パスを取得する
   4  ' 引数        : なし
   5  ' 戻り値      : String
   6  ' 備考        : なし
   7  Public Function GetAppExecPath() As String
   8      
   9      GetAppExecPath = CurrentProject.Path & "\"
  10  
  11  End Function

たとえば、開いているデータベースファイルが "C:\Documents and Settings\y_tsuda\My Documents\test.mdb" だとすると、"C:\Documents and Settings\y_tsuda\My Documents\" を返してくれます。

開いているデータベースがどこのディレクトリにあるのかを取得するには、

   1  'C:\Documents and Settings\y_tsuda\My Documents
   2  CurrentProject.Path 

を使います。

ただ、このままだと最後に \ がついていないので、

   1  'C:\Documents and Settings\y_tsuda\My Documents\ <- \が入る
   2  CurrentProject.Path & "\" 

としておくのがいろいろと都合がいいと思います。

この CurrentProject オブジェクトには現在開いているデータベースについての情報が入ってそう(名前からして・・・)なので、いろいろと見てみると面白いかもしれません。

posted by Png y_tsuda on Tue 13 Jan 2009 at 18:53

$EDITORで~/.zshrcを開いて

   1  alias mi='PATH=./bin:$PATH merb -i'
   2  alias mg='PATH=./bin:$PATH merb-gen'

の2行を追加すると、 thor merb:gems:install環境でもそうじゃない環境でも、所望のコマンドが実行されて便利です。

posted by Png genki on Tue 13 Jan 2009 at 17:26

Merbをコンソールから操作する時には、merb -iコマンドを実行するのですが、 アプリケーションコードの変更を検出すると、自動的にirbがリロードされてしまい、ヒストリーが消えてしまうので、若干不便さを感じていました。

そんな時は、 irb-history があなたのMerbライフを強力にサポートしてくれます(Thanks maiha!)

まずはおもむろに

   1  % sudo gem install irb-history

つづいて、~/.irbrc に以下の行を追加します。

   1  require 'rubygems'
   2  require 'irb/history'
   3  IRB::History.start_client

これでOK。あとは普通にmerb -iを使っていれば、リロードされても ヒストリーが消えません。

posted by Png genki on Tue 13 Jan 2009 at 16:58

個人的には git が色んな点で svn を上回っていると感じているが、 まだひとつだけ svn にしかない機能が残っている。

   1  % svn info
   2  URL: http://wota.jp/svn/rails/plugins/trunk/dsl_accessor
   3  ...

あれ?この git ってどこのレポジトリのだっけ? てのを速攻で知りたいときに git info がないのを恨めしく思う。 もちろん .git/config を見ればいいのだが、

   1  % cat .git/config
   2  ...
   3  [remote "origin"]
   4          url = git@github.com:maiha/mjs.git
   5          fetch = +refs/heads/*:refs/remotes/origin/*
   6  

svn info に比べると只でさえ type 数が多い上に、 サブディレクトリにいるときの type 数は分析不能になるので、 やっぱり辛い。 中身も長過ぎて url を見つけ出すのも大変だし、 最近では明け方には氷点下近くまで冷え込んでしまって、 コンビニ行くのも一苦労な昨今、 たっきーに

「git config すればええがな」 (声・略礼服の長老)

と言われたので、そうしました。

   1  % git config --list
   2  user.email=maiha@wota.jp
   3  user.name=maiha
   4  ...

--list は長いので、get で url だけ登録。

   1  % vi ~/.gitconfig
   2  [alias]
   3      url = config --get remote.origin.url
   4  
   5  % git url
   6  git@github.com:maiha/mjs.git

くぅ〜ん♪

でも、git info もやっぱり欲しいです

posted by Png maiha on Tue 13 Jan 2009 at 06:25 with 1 comment

init してgithub に first commit した最初のレポジトリだけ、なぜか git pull が動かない。

   1  % git pull
   2  ...
   3     branch.master.remote = <nickname>
   4     branch.master.merge = <remote-ref>
   5     remote.<nickname>.url = <url>
   6     remote.<nickname>.fetch = <refspec>

github の指示通りに実行したのにこの仕打ちはむごいよ。 確かに git pull origin を付ければ動作するのだが、 新たに clone したレポジトリだと git pull だけでも動作するのが、 なんか悔しい。

   1  % git pull origin
   2  Already up-to-date.

それでも type 数の節約を優先させるために仕方なく、 「first commit後は必ず一度 clone しなおす」 という生活にすっかり慣れきって、いよいよ冬が降るという話題も出るほど厳しい冬となってきた昨今、 たっきーに

「alias すればええがな」 (声・略礼服の長老(すべらない話/小藪))

と言われたのでそうしました。

   1  % vi ~/.gitconfig
   2  [alias] 
   3          up = pull origin
   4  % git up
   5  Already up-to-date.

くぅ〜ん♪

posted by Png maiha on Tue 13 Jan 2009 at 03:28

Railsでいう所のrecognize_pathに相当する事をMerbでやる場合、 以下のようにすると良いようです。

   1  Merb::Router.match(Merb::Request.new('REQUEST_PATH' => "/", 'REQUEST_METHOD' => 'GET'))
   2  #=> [29, {:action=>"index", :controller=>"top"}]

必要に応じて'QUERY_STRING'なども追加します。

posted by Png genki on Tue 13 Jan 2009 at 01:52
Contents
Merb用Generatorの作り方
[Access VBA] 開いているデータベースファイルのパスを取得する
Merbistのためのお勧めalias
irb-historyとmerb -i (通称mi)の相性が素晴らしい
優しいgitの育て方 : info
優しいgitの育て方 : up
MerbでPATHからパラメータを取得する方法
Comments
瀧内元気: MacOS版は以下にあります * [genki/ViMouse](https://githu... '23-1
KingofSmack: Here also good reads for this mobile applicatio... '14-5
Spencer: You don't have to re-compile it, this version w... '14-4
staiano: Any chance we can get a recompile for 10.9? '14-1
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ