2007-11-21 22:08:34 +01:00
|
|
|
require 'yaml'
|
2007-11-21 01:13:18 +01:00
|
|
|
|
2007-11-23 22:10:21 +01:00
|
|
|
#module_name = 'NorthAmerica'
|
|
|
|
#files = ['data/ca.yaml', 'data/mx.yaml', 'data/us.yaml', 'data/common_methods.yaml', 'data/north_america_informal.yaml']
|
|
|
|
|
|
|
|
#module_name = 'Europe'
|
|
|
|
#files = ['data/dk.yaml', 'data/es.yaml', 'data/fr.yaml', 'data/gb.yaml', 'data/ie.yaml', 'data/is.yaml', 'data/common_methods.yaml']
|
|
|
|
|
|
|
|
module_name = 'CA'
|
|
|
|
files = ['data/ca.yaml', 'data/common_methods.yaml', 'data/north_america_informal.yaml']
|
2007-11-21 22:08:34 +01:00
|
|
|
|
2007-11-22 21:39:26 +01:00
|
|
|
regions = []
|
2007-11-21 02:03:20 +01:00
|
|
|
rules_by_month = {}
|
2007-11-21 22:08:34 +01:00
|
|
|
custom_methods = {}
|
|
|
|
|
2007-11-21 02:03:20 +01:00
|
|
|
files.each do |file|
|
2007-11-21 22:08:34 +01:00
|
|
|
def_file = YAML.load_file(file)
|
2007-11-22 21:39:26 +01:00
|
|
|
puts "Loading #{file}"
|
|
|
|
if def_file['months']
|
|
|
|
puts " importing dates..."
|
|
|
|
def_file['months'].each do |month, definitions|
|
|
|
|
rules_by_month[month] = [] unless rules_by_month[month]
|
|
|
|
definitions.each do |definition|
|
|
|
|
rule = {}
|
|
|
|
definition.each do |key, val|
|
|
|
|
rule[key] = val
|
|
|
|
end
|
|
|
|
|
|
|
|
rule['regions'] = rule['regions'].collect { |r| r.to_sym }
|
|
|
|
|
|
|
|
regions << rule['regions']
|
|
|
|
|
|
|
|
exists = false
|
|
|
|
rules_by_month[month].each do |ex|
|
|
|
|
if ex['name'] == rule['name'] and ex['wday'] == rule['wday'] and ex['mday'] == rule['mday'] and ex['week'] == rule['week']
|
2007-11-22 23:28:38 +01:00
|
|
|
ex['regions'] << rule['regions'].flatten
|
2007-11-22 21:39:26 +01:00
|
|
|
exists = true
|
|
|
|
end
|
|
|
|
end
|
2007-11-22 23:28:38 +01:00
|
|
|
unless exists
|
2007-11-22 21:39:26 +01:00
|
|
|
rules_by_month[month] << rule
|
2007-11-22 23:28:38 +01:00
|
|
|
end
|
2007-11-22 21:39:26 +01:00
|
|
|
|
|
|
|
end # /defs.each
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if def_file['methods']
|
|
|
|
puts " importing methods..."
|
2007-11-21 22:08:34 +01:00
|
|
|
def_file['methods'].each do |name, code|
|
|
|
|
custom_methods[name] = code
|
|
|
|
end # /methods.each
|
2007-11-21 01:13:18 +01:00
|
|
|
end
|
|
|
|
|
2007-11-22 21:39:26 +01:00
|
|
|
end
|
2007-11-21 01:13:18 +01:00
|
|
|
|
2007-11-21 22:08:34 +01:00
|
|
|
# Build the definitions
|
2007-11-21 01:13:18 +01:00
|
|
|
month_strs = []
|
|
|
|
rules_by_month.each do |month, rules|
|
2007-11-21 22:08:34 +01:00
|
|
|
month_str = " #{month.to_s} => ["
|
2007-11-21 01:13:18 +01:00
|
|
|
rule_strings = []
|
|
|
|
rules.each do |rule|
|
|
|
|
str = '{'
|
|
|
|
if rule['mday']
|
|
|
|
str << ":mday => #{rule['mday']}, "
|
2007-11-21 02:03:20 +01:00
|
|
|
elsif rule['function']
|
|
|
|
str << ":function => #{rule['function']}, "
|
2007-11-21 01:13:18 +01:00
|
|
|
else
|
|
|
|
str << ":wday => #{rule['wday']}, :week => #{rule['week']}, "
|
|
|
|
end
|
|
|
|
|
2007-11-21 02:03:20 +01:00
|
|
|
# shouldn't allow the same region twice
|
|
|
|
str << ":name => \"#{rule['name']}\", :regions => [:" + rule['regions'].uniq.join(', :') + "]}"
|
2007-11-21 01:13:18 +01:00
|
|
|
rule_strings << str
|
|
|
|
end
|
2007-11-21 22:08:34 +01:00
|
|
|
month_str << rule_strings.join(",\n ") + "]"
|
2007-11-21 01:13:18 +01:00
|
|
|
month_strs << month_str
|
|
|
|
end
|
|
|
|
|
|
|
|
month_strs.join(",\n")
|
|
|
|
|
2007-11-21 22:08:34 +01:00
|
|
|
|
|
|
|
# Build the methods
|
|
|
|
method_str = ''
|
|
|
|
custom_methods.each do |key, code|
|
|
|
|
method_str << code + "\n\n"
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
# Build the output file
|
|
|
|
out =<<-EOC
|
|
|
|
module Holidays
|
2007-11-22 21:39:26 +01:00
|
|
|
# This file is generated by the Ruby Holiday gem.
|
|
|
|
#
|
|
|
|
# Definitions loaded: #{files.join(', ')}
|
|
|
|
#
|
|
|
|
# To use the definitions in the file, load them right after you load the
|
|
|
|
# Holiday gem:
|
|
|
|
#
|
|
|
|
# require 'holidays'
|
|
|
|
# require 'path/to/#{module_name.downcase}'
|
|
|
|
#
|
|
|
|
# More definitions are available at http://code.dunae.ca/holidays.
|
|
|
|
module #{module_name} # :nodoc:
|
|
|
|
DEFINED_REGIONS = [:#{regions.flatten.uniq.join(', :')}]
|
2007-11-21 22:08:34 +01:00
|
|
|
|
|
|
|
HOLIDAYS_BY_MONTH = {
|
|
|
|
#{month_strs.join(",\n")}
|
|
|
|
}
|
|
|
|
|
|
|
|
#{method_str}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2007-11-23 22:10:21 +01:00
|
|
|
Holidays.merge_defs(Holidays::#{module_name}::DEFINED_REGIONS, Holidays::#{module_name}::HOLIDAYS_BY_MONTH)
|
2007-11-21 22:08:34 +01:00
|
|
|
EOC
|
2007-11-21 01:13:18 +01:00
|
|
|
|
|
|
|
File.open("test_file.rb","w") do |file|
|
|
|
|
file.puts out
|
|
|
|
end
|