gpt4 book ai didi

ruby-on-rails-3.2 - 如何为感恩节后的一天编写函数?假日 gem ,YAML 文件

转载 作者:行者123 更新时间:2023-12-04 02:56:43 26 4
gpt4 key购买 nike

我正在编写一个通过日期范围跟踪休假的应用程序,并且我的部分计算确保排除周末和节假日。为了跟踪假期,我使用了假期 gem(https://github.com/alexdunae/holidays)的 fork 版本,对其进行编辑以识别我公司认可的假期。我的 fork :( https://github.com/rclark4/holidays )。

到目前为止,一切对我来说都很好,但我在感恩节后的第二天遇到了问题,这是对原始 gem 的补充。这是 YAML 文件的摘录:

  11: 
- name: Thanksgiving
week: 4
regions: [us]
wday: 4
- name: Day after Thanksgiving
week: 4
regions: [us]
wday: 5

虽然这在 2008-2012 年有效,但在 2013 年无效(并且不会每 6-7 年一次),因为今年 11 月从星期五开始,所以现在它说感恩节后的一天是实际上是前一周。我试图查看所有其他假期的语法,看看是否有在 float 假期后一天发生的假期的先例,但我找不到(我发现最接近复活节的耶稣受难日,但复活节有它自己的完全不同的方法)。关于如何为此编写函数的任何想法?

如果您需要更多信息,请告诉我!

最佳答案

Shawn 的回答大部分是正确的,但实际上您应该将特定于区域的方法放在原始文件中。这个想法是,您不需要触摸 .rb 文件来创建新定义,只需触摸 .yaml 文件即可。 lib/holidays.rb 实际上是针对一般代码规则(如 to_weekday_if_weekend 等),而不是针对某个地区特定的规则。我知道即使您不严格遵守规则它也能正常工作有点令人困惑,今年夏天即将发布的版本(希望如此)将很快改变这种情况。

所以在 11 月的 us.yaml 中它应该是:

11: 
- name: Thanksgiving
week: 4
regions: [us]
wday: 4
- name: Day after Thanksgiving
function: day_after_thanksgiving(year)
regions: [us]

同一文件中的方法(其中定义了 us_inauguration_day,至少在主版本中)应该是:

methods:
us_inauguration_day: |
# January 20, every fourth year, following Presidential election
def self.us_inauguration_day(year)
year % 4 == 1 ? 20 : nil
end
day_after_thanksgiving: |
def self.day_after_thanksgiving(year)
Date.civil(year,11,Date.calculate_mday(year,11,:fourth,:thursday)+1)
end

然后运行 ​​rake defs:build_all(当你添加一个新的区域文件时运行 rake defs:manifest)我提取了您的副本以与您的测试相匹配,但作为引用:

tests: |
{ Date.civil(2008,11,27) => 'Thanksgiving',
Date.civil(2008,11,28) => 'Day after Thanksgiving'}.each do |date, name|
assert_equal name, (Holidays.on(date, :us)[0] || {})[:name]
end

关于ruby-on-rails-3.2 - 如何为感恩节后的一天编写函数?假日 gem ,YAML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16549690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com