Ruboty で Plugin のテンプレートを生成する場合、
ruboty-gen - GitHub
があります。
しかし、この gem はメンテナンスが停止したようで実行時に発生するバグを修正する
プルリクエストがOpenのまま半年ほど経過しています。(2015/12/22 現在)
※作者批判ではないです。人それぞれ事情があると思いますので
そこで、車輪の再開発をすることにしました。
せっかく再開発するのでちょっと機能を追加します。
ruboty-generator の機能
- Ruboty の Plugin テンプレートを生成する
- 複数Action対応
- Actionなしに対応(Handlerのみ)
- pattern(name, pattern, description), env も自動生成可能にする
- 設定をDSLで行う
は ruboty-gen にはない新機能
は ruboty-gen から変更した機能
Rubotygenerator 設定項目
Rubotygeneratorは生成するテンプレートの内容を設定するDSLの設定ファイルです。
key | value | example |
---|---|---|
user_name | github user name | tbpgr |
gem_class_name | gem class name | Hoge |
gem_name | gem name | hoge |
description | description | An Ruboty Handler + Actions to output hige. |
env/name | ENV variable name | DEFAULT_HOGE_TEXT |
env/description | ENV description | default hoge text |
commands/command name | Ruboty::Handler.on name | hoge |
commands/command pattern | Ruboty::Handler.on pattern | /hoge\z/ |
commands/command description | Ruboty::Handler.on description | output hige |
Rubotygenerator フォーマット
env, command は複数設定可能です。
# encoding: utf-8 user_name "tbpgr" gem_class_name "Hoge" gem_name "hoge" description "An Ruboty Handler + Actions to hoge-hige" env do |e| e.name "DEFAULT_HOGE_TEXT" e.description "DEFAULT_HOGE_TEXT desc" end command do |c| c.name "hoge" c.pattern "hoge\z" c.description "output hige" end command do |c| c.name "hige" c.pattern "hige\z" c.description "output hige" end
Usage
help
$ ruboty-generator --help Commands: ruboty-generator generate # Generate Ruboty Plugin template ruboty-generator help [COMMAND] # Describe available commands or one specific command ruboty-generator init # generate Rubotygenerator template ruboty-generator version # version Options: -h, [--help] # help message. [--version] # version
init
generate Rubotygenerator template file.
$ ruboty-generator init $ ls -1 | grep Rubotygenerator Rubotygenerator
generate
- edit Rubotygenerator
# encoding: utf-8 user_name "tbpgr" gem_class_name "Hoge" gem_name "hoge" description "An Ruboty Handler + Actions to hoge-hige" env do |e| e.name "DEFAULT_HOGE_TEXT1" e.description "DEFAULT_HOGE_TEXT1 desc" end env do |e| e.name "DEFAULT_HOGE_TEXT2" e.description "DEFAULT_HOGE_TEXT2 desc" end command do |c| c.name "hoge" c.pattern "hoge\\z" c.description "output hige" end command do |c| c.name "hige" c.pattern "hige\\z" c.description "output hige" end
generate plugin with action
$ ruboty-generator generate -a
- output
. └── ruboty-hoge ├── Gemfile ├── LICENSE.txt ├── README.md ├── Rakefile ├── bin │ ├── console │ └── setup ├── lib │ └── ruboty │ ├── handlers │ │ └── hoge.rb │ ├── hoge │ │ ├── actions │ │ │ ├── hige.rb │ │ │ └── hoge.rb │ │ └── version.rb │ └── hoge.rb └── ruboty-hoge.gemspec
- check generated handler
require "ruboty/hoge/actions/hoge" require "ruboty/hoge/actions/hige" module Ruboty module Handlers # An Ruboty Handler + Actions to hoge-hige class Hoge < Base on /hoge\z/, name: 'hoge', description: 'output hige' on /hige\z/, name: 'hige', description: 'output hige' env :DEFAULT_HOGE_TEXT1, "DEFAULT_HOGE_TEXT1 desc" env :DEFAULT_HOGE_TEXT2, "DEFAULT_HOGE_TEXT2 desc" def hoge(message) Ruboty::Hoge::Actions::Hoge.new(message).call end def hige(message) Ruboty::Hoge::Actions::Hige.new(message).call end end end end
- check generated action
hoge.rb
module Ruboty module Hoge module Actions class Hoge < Ruboty::Actions::Base def call message.reply(hoge) rescue => e message.reply(e.message) end private def hoge # TODO: main logic end end end end end
hige.rb
module Ruboty module Hoge module Actions class Hige < Ruboty::Actions::Base def call message.reply(hige) rescue => e message.reply(e.message) end private def hige # TODO: main logic end end end end end
generate plugin without action
$ ruboty-generator generate
- output
. └── ruboty-hoge ├── Gemfile ├── README.md ├── Rakefile ├── bin │ ├── console │ └── setup ├── lib │ └── ruboty │ ├── handlers │ │ └── hoge.rb │ ├── hoge │ │ └── version.rb │ └── hoge.rb └── ruboty-hoge.gemspec
- check generated handler
module Ruboty module Handlers # An Ruboty Handler + Actions to hoge-hige class Hoge < Base on /hoge\z/, name: 'hoge', description: 'output hige' on /hige\z/, name: 'hige', description: 'output hige' env :DEFAULT_HOGE_TEXT1, "DEFAULT_HOGE_TEXT1 desc" env :DEFAULT_HOGE_TEXT2, "DEFAULT_HOGE_TEXT2 desc" def hoge(message) # TODO: implement your action end def hige(message) # TODO: implement your action end end end end
補足
ruboty-generator で利用するDSLの設定ファイルである Rubotygenerator のフォーマットは ruboty-megen や ruboty-articlegen で利用する設定ファイルとほぼ同じです。 そのため、コピーして少し変更すれば
- README.md
- ruboty-plugin を紹介する Markdown 形式の記事
の2つも自動生成できます。 ruboty-megen および ruboty-articlegen の利用方法については下記をご確認ください