2009/12/30

def max

github.com/midore/mdiary

個人が使うものなのであまり意味はないような気もするが、指定ディレクトリ内でのファイル上限数をもうけてみた。
bin/mdconfig に1ヶ月内に追加できるファイルの上限数を指定するメソッド default_file_count を追加し

mdconfig

def default_file_count
  90
end


当月ディレクトリ内のファイル数が default_file_count メソッドで指定した数を超えた場合
-a や -at でのファイル生成を抑制する。指定数に達している場合はその旨の文を返す。

万一、bin/mdconfig に default_file_count メソッドが存在しない場合(line 185)
ファイル上限数は 90 になる。(line 186)
1日平均2,3枚のファイルを生成すると仮定して 30 * 3

line 189 はなんかヘンなんだけど とりあえず...。

mdiary-main.rb
class Main

184     def max?
185       max = default_file_count if defined? default_file_count
186       max = 90 unless max
187       s = Dir.entries(@now_dir).select{|x| /\.txt$/.match(x)}.size
188       return false if s < max
189       print "too many files. Edit bin/mdconfig.\n"
190       return true
191     end


これに伴って
class Add < Main

221       return nil if max?

class ChoiceDir < Main

266     def base_view(n)
267       return nil if max?
...

273     def base_search(w, st=nil)
274       return nil if max?
...


としておいた。

あと

./mdiary-run.rb -s ""
./mdiary-run.rb -s ''

とかしたら無視するようにした。
line 132 あたり

2009/12/29

よみもの

ポール・グレアム「バージョン1.0
これ、めちゃくちゃおもしろかった。

「偉大な」執事とは何か?
と、小説の中の主人公が自問自答する場面を思い出した。なんでだろな...。あんまり関係ないと思うんだけど。

2009/12/28

unless a.nil?

このあいだ
github.com/midore/mdiary

mdiary-main.rb

378       return nil unless @st.nil? || @plus.nil?

だったのを

379       return nil if @st && @plus

に変えた。

前者と後者は同じ動きをする。どちらも
@st は nil ではなく、かつ、@plus もnil でなければ、return nil をかえす。

例えば

  1 # coding: utf-8
  2 
  3 a = 'a'
  4 b = 'b'
  5 print "a,b どちらも not nil です。\n" unless a.nil? || b.nil?
  6 print "a,b どちらも not nil でっす。\n" if a && b

実行すると

a,b どちらも not nil です。
a,b どちらも not nil でっす

となる。

前者(||を使用),後者(&&を使用)ともに

a は nilではない。かつ、b も nil ではない。
であれば print する。

と動く。ちょっと不思議だけど。

条件文が読みやすいのは && を使用した後者。
ただ、
if x
と書いて nil じゃなければとするより
unless x.nil?
と、nil なの?そうじゃないなら と書いてあった方が私にとってはわかりやすい時もあったりする。

...とはいっても || なのに「かつ」 を意図してるとなってると後になって自分がぎょっと驚いてしまうだろうから...変えた。