wootheeを見習って他reposからgit submodule
しやすいように祝日データをrubyからyamlにしました。(organization化と言語非依存にrepos化はちょっとしたholiday_jpのようなライブラリではやり過ぎかなと思ってやってません。submodule使えば祝日データの一元管理という要は足りるしね。)
僕がgemを作る時ってすごく画期的なアイデアが見つかったとかあんまりないので、ほとんどが仕事上で必要だけど既存のgemが存在しない=日本語やi18n関係ばっかりになっちゃうんですよね。
昔に使ったので我ながら設計が変ですが、テストが合ったのでテストに変更が無いように実装を変えただけです。あとはテストにshoulda-contextとか今日び使わないのでtest-unit3に変えたぐらい。
最近gem作る時ちょっと便利だなと思うのはgemspecとか自動生成系ファイルをコーディング規約に合わせるために手作業しなくても$ rubocop -a
でほとんどいけちゃうところ。
今回のアップデートで休日ファイルをYAML化されたようですが、私の環境では処理速度が著しく低下しております。
恐らくYAMLをパースする処理が重いのかなぁと思いつつご報告させていただきました。
あちゃあ、遅くなってましたか・・・対応考えます申し訳ないです。
HolidayJp#holiday?()
で、Holidaysクラスのインスタンスを毎回生成しているために、YAMLファイルを毎回ロードし、結果適に時間がかかっているようです。
私の環境ではメソッド呼び出しで毎回3秒程度要します。
一度ロードした祝日データをオンメモリに維持するために Holidaysクラスをシングルトン化するのはどうでしょうか?
手元の環境での検証では以前のような処理速度に戻りました。
■ holiday_jp/holidays.rb
require 'singleton'
module HolidayJp
class Holidays
include Singleton
...
■ holiday_jp.rb
module HolidayJp
def self.between(start, last)
Holidays.instance.holidays.find_all do |date, _holiday|
start <= date && date <= last
end.map(&:last)
end
def self.holiday?(date)
Holidays.instance.holidays[date]
end
end
それいいですね!
もしお暇あればPRいただければマージしますー!