Help us understand the problem. What is going on with this article?

Ruby | 日付フォルダ生成用 CLI ツール defoker gem の定形出力ルール設定にコールバックを追加 (ver 0.0.6) #ruby #defoker

More than 5 years have passed since last update.

Ruby | 日付フォルダ生成用 CLI ツール defoker gem の定形出力ルール設定にコールバックを追加 (ver 0.0.6) #ruby #defoker

概要

日付フォルダ生成用 CLI ツール defoker gem の定形出力ルール設定にコールバックを追加します。

defoker gem って何?,定形出力ルール設定って何?という方は

まずはこちらを御覧ください。

追加仕様の想定されるユースケースの一例

現状、 defoker gem は日付フォーマットのフォルダを作成するだけです。
各フォルダを作成する際に、フォルダ内にテンプレートを作成しておきたい、という要件があったとします。

例えば、下記のような構成で日々フォルダを作成したい場合。(hige, hoge, hage の部分は可変の名前)

$ tree
┣ 20141006_hige
┃ ┣ template.rb
┃ ┗ template.txt
┣ 20141007_hoge
┃ ┣ template.rb
┃ ┗ template.txt
┗ 20141008_hage
  ┣ template.rb
  ┗ template.txt

template.txt, template.rb はこの構成での作業で利用するテンプレートです。

追加仕様

  • Defokerfile に callback を追加する
  • callback は lambda(proc) を記述して、自由に処理を記述できる
  • callback はディレクトリ作成直後に呼び出されます
  • callback はパラメータとして dir 変数を持ちます。 dir は String でディレクトリ名です
  • Defokerfile 内では Ruby のコードを自由に利用できるので、お好みの処理をフックとして作成してください

「定形出力ルール」 + callback を試してみる

仕様は、「追加仕様の想定されるユースケース」をそのまま利用します

Defokerfile

type :today
base '' 
callback ->(dir) {
  puts dir
  File.open("#{dir}/template.txt", 'w:utf-8') { |e|e.puts "template for #{dir}" }
  File.open("#{dir}/template.rb'" 'w:utf-8') { |e|e.puts "puts '#{dir}'" }
}

試行

# execute at 20141006
$ defoker rule -a hige
"20141006_hige"
# execute at 20141007
$ defoker rule -a hoge
"20141007_hoge"
# execute at 20141008
$ defoker rule -a hage
"20141008_hage"
$ tree
┣ 20141006_hige
┃ ┣ template.rb
┃ ┗ template.txt
┣ 20141007_hoge
┃ ┣ template.rb
┃ ┗ template.txt
┗ 20141008_hage
  ┣ template.rb
  ┗ template.txt

参照

tbpgr
Rubyを扱う人事(研修開発、エンジニア採用) Learning Designer。 tbpgr の読み方は(てぃーびー) 個人ブログでも色々と情報を垂れ流してます。 http://tbpgr.hatenablog.com/
http://tbpgr.hatenablog.com/
studist
「伝えることを、もっと簡単に」をミッションにビジュアルSOPマネジメントプラットフォームのBtoB SaaS「Teachme Biz」を開発・運営するスタートアップ
https://medium.com/studist-dev
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away