LoginSignup
13
9

More than 5 years have passed since last update.

holidays gem に独自の祝日を追加する

Last updated at Posted at 2015-01-07

holidays gem は各国の祝日を調べられる便利な gem です。これに、独自の祝日を追加します。

以下は Rails でやる場合のファイルパスですが、Rails でなくてもできるはずです。

config/holidays.yaml
months:
  1:
    - mday: 2
      name: 元旦翌日
      regions: [jp]
    - mday: 3
      name: 元旦翌々日
      regions: [jp]
  12:
    - mday: 30
      name: 大晦日前日
      regions: [jp]
    - mday: 31
      name: 大晦日
      regions: [jp]
config/initializers/custom_holidays.rb
# HACK: Load Japanese holidays first so that it will be merged with the custom holidays.
require 'generated_definitions/jp.rb'

# Load custom holiday definitions.
Holidays.load_custom(Rails.root.join('config', 'holidays.yml'))

Holidays.load_custom で独自の祝日定義を追加できるのですが、これをいきなり呼んでしまうとデフォルトのとマージされず、独自の祝日定義だけになってしまいます。この例で言うと、年間の祝日がたったの 4 日になってしまうということです。恐ろしいですね。

これは holidays gem が各国の祝日定義を必要になった時に読み込んでいることに起因しています。いきなり独自の祝日定義をしてしまうと、その後 Holidays.on などを呼んだ時に :jp の祝日定義もうあるから読み込まなくていいや、となり、デフォルトの祝日定義が読み込まれません。そこで Holidays.load_custom の前に require 'generated_definitions/jp' としてデフォルトの祝日定義を読み込んでおくのです。

もちろん他の国の祝日を追加したい時は、対応する region code を require します。

13
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
9