perlのシンタックスカラーを有効にしたら、コードが途中で切れてたので、修正
それ、Module::Setupで?
2ヶ月くらい前にCodeReposにあげて、途中放置して、忘れちゃったりで、グダグダだったのをここ数日でまとめました。
なんか色々微妙だったので、だいぶ変えてしまった(というか、バサバサ切った)。
CPANに上げる際には、別の名前を考えないとなー。Helperなんて、名前空間ないですもんね。
Helper::Simple(名前募集中)
http://coderepos.org/share/browser/lang/perl/Helper-Simple/trunk
コンセプト
- ヘルパースクリプトの生成のためのモジュール
- ポータビリティを意識してみた
- なるべく簡単に
特徴
- 手続きをデータ化して後で展開する
- インストールにHelper::Simple(のインストール)は不要
- Webからダウンロードに対応
- ライセンス上、同梱できないものもあるだろうし
- テンプレートは普通のファイルでもOK
- ローカルのファイルをスクリプト内にzipにして格納する
- 普通にモジュールなどを作成して、置き換えたいところだけ、[% ... %]で置き換える
- .tt 拡張子の場合は、[* ... *]
- Plugin作れます?
- まだ作ってないし、テストもしてない
欠点
- 順番を厳密には指定できない
例:とても簡単なCatalystのセットアッパー
CodeReposにあげてるサンプルから。
まず、雛形の準備。
http://coderepos.org/share/browser/lang/perl/Helper-Simple/trunk/sample/catalyst_template.sh
#!/bin/sh catalyst.pl CatalystTemplate; cd CatalystTemplate; ./script/catalysttemplate_create.pl view TT TTSite find -type f | xargs perl -p -i -e 's{CatalystTemplate}{\[% appclass %\]}' find -type f | xargs perl -p -i -e 's{catalysttemplate}{\[% appname %\]}'
create_catalyst_helper.plの作成
http://coderepos.org/share/browser/lang/perl/Helper-Simple/trunk/sample/create_catalyst_helper.pl
#!/usr/bin/perl use strict; die "Need class name & helper name" unless $ARGV[1]; my($appclass, $appname) = ($ARGV[0], lc $ARGV[0]); package MyHelper; # ここがrootディレクトリになる use Helper::Simple; # Template用の変数を埋め込み var { appclass => $appclass, appname => $appname, }; # ローカルのCatalystTemplateディレクトリからコピーする # render_file => 1 で、変数とかを埋め込む copy ['CatalystTemplate', {render_file => 1}]; package MyHelper::CatalystTemplate::root::static::js; # CatalystTemplate/root/static/js ディレクトリ use Helper::Simple::Const; # ダウンロード箇所などの定数定義がしてある # jquery.ui のダウンロードを行う。ask を前につけることで、質問する ask dl JQUERY_UI; # jquery.suggest.js のダウンロードを行う。ask を前につけることで、質問する ask dl JQUERY_SUGGEST; # ルートディレクトリから先頭マッチで、パスを変更する(定義した順番に変更される) path_exchange 'CatalystTemplate/lib/CatalystTemplate', 'CatalystTemplate/lib/' . $appclass; path_exchange 'CatalystTemplate/script/catalysttemplate', 'CatalystTemplate/script/' . $appname; path_exchange 'CatalystTemplate/catalysttemplate', 'CatalystTemplate/' . $appname; path_exchange 'CatalystTemplate/root/static/js/jquery.ui-1.5.2', 'CatalystTemplate/root/static/js/jquery.ui'; path_exchange 'CatalystTemplate', $appclass; # ヘルパースクリプトを生成する setup_script $ARGV[1];
1ファイルに書いていますが、別に分けてもかまいません。
パッケージ名がディレクトリに一致し、そのパッケージ内で行ったことは、そのディレクトリ内で行われます。
Helper::Simple を use した名前空間に属するすべてのモジュールに対して、Helper::Simpleは必要な関数のエクスポートを行います。
ルートパッケージで use Helper::Simpleをすれば、それ以外のモジュールで use する必要はありません。
使う関数は、大して多くありません。
- var
- Templateに埋め込む変数定義
- copy
- local からファイル/ディレクトリコピー
- dl/download
- Webからファイルをダウンロード
- file
- テキストでファイルを作成する
- ask
- file, copy, dl の前につけて、実行するかどうか聞くもの
- path_exchange
- 先頭一致でディレクトリ名を書き換えます
くらいです。copy と、dl/downloadは、オプションを取ることができます。
主要なオプションは
copy/download共通
- extract (copyは圧縮ファイルを指定した場合だけ)
- zip, tar.gz/tgz, tar.bz2/tbz が指定できます。指定すると展開します。1だと勝手に判断します
- でも、gzのみは対応してない(ぉ
copyのみ
- render_file
- 1 を指定すると、中をTemplateモジュールで書き換えます
dl/downloadのみ
どうでしょう?簡単、じゃないかなぁ?
TODO
思ったこと
データ作るプログラムじゃなくて、
大半データそのもの(設定ファイルとか)でいけたんじゃないかなぁ...(ぉ