読者です 読者をやめる 読者になる 読者になる

pockestrap

Web Programmer's memo

NyaoBundle つくった

Ruby Programming

NyaoBundle とは

NeoBundle を汎用的にしてみたような感じ。 NyaoBundle という変な名前は、ねこが好きだから。にゃお。

使い方

mikutter のプラグインを管理する例です。

### file: ~/.mikutter/plugin/.nyaobundlerc

get 'pocke/mikutter_block',             name: 'block'
get 'pocke/mikutter_blocked_user_mute', name: 'blocked_user_mute'
get 'pocke/mikutter_color_code',        name: 'color_code'
get 'pocke/mikutter_delete_copy',       name: 'delete_copy'
get 'cosmo0920/mikutter_filter',        name: 'filter'
get 'pocke/mikutter_fizzbuzz',          name: 'fizzbuzz'
get 'pocke/mikutter_longtweet_KILL',    name: 'longtweet_KILL'
get 'pocke/mikutter_mention_extract',   name: 'mention_extract'
get 'rhenium/mikutter_image_upload'
get 'rhenium/mikutter_terminal'
get 'moguno/mikutter-tl-icon-size'
get 'toshia/mikutter-nested-quote'
get 'pocke/mikutter_r4s', name: 'r4s'
get 'pocke/mikutter_search_google',     name: 'search_google'
get 'toshia/mikutter-speedometer',      name: 'speedometer'
get 'toshia/mikutter-sub-parts-client', name: 'sub_parts_client'
get 'pocke/mikutter_sys_msg_tl',        name: 'mikutter_sys_msg_tl'
get 'pocke/mikutter_tweet_stack',       name: 'tweet_stack'
get 'pocke/mikutter_ws_disable_footer', name: 'ws_disable_footer'

get 'https://gist.github.com/8195851.git', name: 'colorize_postbox_basecolor'
get 'https://gist.github.com/3183710.git', name: 'gray_protected_users'

# vim: set filetype=ruby:

一番下のモードラインを見るとわかりますが、このファイルはRubyファイルです。

$ cd ~/.mikutter/plugin/
$ <NyaoBundle install path>/bin/nyaobundle

これで、name として指定したレポジトリが clone されてきます。

実装的な

最初に考えていた時は「ぼくがかんがえたさいきょうのぷろぐらむ」だったのですが、今では微妙な感じで見なおしたさあります。プログラミング難しい。

NyaoBundleは、matcher と getter に分かれています。

matcher

matcher は、レポジトリの名前を受け取とり、その名前がルールにマッチすればgetterを指定してgetterが使用するアドレスを返します。

例えば、githubレポジトリにマッチするmatcherは、user/repoのようなものが与えられた時に、https://github.com/user/repo.gitというurlを返し、getterにgitを指定します。

getter

getter の役割は、matcher が返したurlに対して実際にプロジェクトを落としてくることです。

例えば、git getter であれば、与えられたurlに対してgit cloneします。


車輪の再発明した気がするんだけど、こういうプログラムすでにあるのかなぁ…?