mirror of
https://github.com/github/rails.git
synced 2026-01-12 08:08:31 -05:00
Compare commits
68 Commits
github33
...
2-3-github
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
529749e01b | ||
|
|
e9b3b09e08 | ||
|
|
1992a86b2e | ||
|
|
443815c4fe | ||
|
|
52abaed4b3 | ||
|
|
5b0053b2a8 | ||
|
|
1b98a0d72f | ||
|
|
1f59a8dfe8 | ||
|
|
e1011ea095 | ||
|
|
730e6a273c | ||
|
|
aa1b6d1284 | ||
|
|
5f6c95e29e | ||
|
|
7403667b89 | ||
|
|
1a45ec57bf | ||
|
|
9070fbcffe | ||
|
|
364b534815 | ||
|
|
14da203564 | ||
|
|
f46a4bab08 | ||
|
|
198aa6ef99 | ||
|
|
b3ae51c9fc | ||
|
|
1e6e438f6e | ||
|
|
2b01f832a3 | ||
|
|
1e5fda763e | ||
|
|
7c3d4ec43c | ||
|
|
7343ed7b05 | ||
|
|
2a70c9691d | ||
|
|
a141d9de0d | ||
|
|
74492f43a8 | ||
|
|
c2894170bf | ||
|
|
057aed6e18 | ||
|
|
02fc012b42 | ||
|
|
4fdaf21b28 | ||
|
|
35b871fbcd | ||
|
|
a5697840d6 | ||
|
|
d0e554d231 | ||
|
|
d38b7664cc | ||
|
|
e4cd9caf02 | ||
|
|
89e4514704 | ||
|
|
0a0d975f51 | ||
|
|
62daf4cb6f | ||
|
|
24711e1e29 | ||
|
|
cf8f36930c | ||
|
|
d622643e47 | ||
|
|
3f0241a613 | ||
|
|
38a7432590 | ||
|
|
1220d3c3ed | ||
|
|
3d72818356 | ||
|
|
221477dc21 | ||
|
|
975155c110 | ||
|
|
2931987892 | ||
|
|
e3290b98dd | ||
|
|
20088080a5 | ||
|
|
24e348489d | ||
|
|
ba4f4f8a01 | ||
|
|
ccf254b6cb | ||
|
|
3766b1b377 | ||
|
|
d3f87776a3 | ||
|
|
18c7c1f753 | ||
|
|
f63b0340ff | ||
|
|
7224ee1419 | ||
|
|
0c52ae6df3 | ||
|
|
f8b7cd2df7 | ||
|
|
c73ba86136 | ||
|
|
98fa5dd465 | ||
|
|
fa41bedf6b | ||
|
|
0a8282c557 | ||
|
|
d4a4facfcc | ||
|
|
dd4146854a |
@@ -5,3 +5,5 @@ gem install sqlite3 -v=1.3.7
|
||||
gem install rack -v=1.4.5
|
||||
gem install erubis -v=2.7.0
|
||||
gem install json -v=1.8.0
|
||||
gem install i18n -v=0.6.9
|
||||
gem install builder -v=3.2.2
|
||||
|
||||
@@ -1 +1 @@
|
||||
2.3.14.github33
|
||||
2.3.14.github47
|
||||
|
||||
@@ -1320,7 +1320,14 @@ module ActionController #:nodoc:
|
||||
render
|
||||
end
|
||||
|
||||
CVE_2014_0310 = Class.new(StandardError)
|
||||
|
||||
def perform_action
|
||||
# CVE-2014-0130 protection
|
||||
if action_name.include? "/"
|
||||
raise CVE_2014_0310
|
||||
end
|
||||
|
||||
if action_methods.include?(action_name)
|
||||
send(action_name)
|
||||
default_render unless performed?
|
||||
|
||||
@@ -87,7 +87,6 @@ module ActionController #:nodoc:
|
||||
log_message << " [#{complete_request_uri rescue "unknown"}]"
|
||||
|
||||
logger.info(log_message)
|
||||
response.headers["X-Runtime"] = "%.0f" % ms
|
||||
else
|
||||
perform_action_without_benchmark
|
||||
end
|
||||
|
||||
@@ -39,9 +39,9 @@ module ActionController #:nodoc:
|
||||
if cache = read_fragment(name, options)
|
||||
buffer.safe_concat(cache.html_safe)
|
||||
else
|
||||
pos = buffer.length
|
||||
pos = buffer.bytesize
|
||||
block.call
|
||||
write_fragment(name, buffer[pos..-1], options)
|
||||
write_fragment(name, buffer.byteslice(pos..-1), options)
|
||||
end
|
||||
else
|
||||
block.call
|
||||
|
||||
@@ -45,37 +45,74 @@ module ActionController #:nodoc:
|
||||
end
|
||||
|
||||
def []=(k, v)
|
||||
k = k.to_s
|
||||
@flash[k] = v
|
||||
@flash.discard(k)
|
||||
v
|
||||
end
|
||||
|
||||
def [](k)
|
||||
@flash[k]
|
||||
@flash[k.to_s]
|
||||
end
|
||||
end
|
||||
|
||||
class FlashHash < Hash
|
||||
def self.from_session_value(value)
|
||||
flash = case value
|
||||
when FlashHash # Rails 2.3
|
||||
value
|
||||
when Hash # Rails 4.0
|
||||
flashes = value['flashes'] || {}
|
||||
flashes.stringify_keys!
|
||||
discard = value['discard'] || []
|
||||
discard = discard.map do |item|
|
||||
item.kind_of?(Symbol) ? item.to_s : item
|
||||
end
|
||||
used = Hash[flashes.keys.map{|k| [k, discard.include?(k)] }]
|
||||
|
||||
new_from_values(flashes, used)
|
||||
else
|
||||
new
|
||||
end
|
||||
flash
|
||||
end
|
||||
|
||||
def initialize #:nodoc:
|
||||
super
|
||||
@used = {}
|
||||
end
|
||||
|
||||
def to_session_value
|
||||
return nil if empty?
|
||||
rails_3_discard_list = @used.map{|k,v| k if v}.compact
|
||||
{'discard' => rails_3_discard_list, 'flashes' => Hash[to_a]}
|
||||
end
|
||||
|
||||
def []=(k, v) #:nodoc:
|
||||
k = k.to_s
|
||||
keep(k)
|
||||
super
|
||||
super(k, v)
|
||||
end
|
||||
|
||||
def [](k)
|
||||
super(k.to_s)
|
||||
end
|
||||
|
||||
def delete(k)
|
||||
super(k.to_s)
|
||||
end
|
||||
|
||||
def update(h) #:nodoc:
|
||||
h.stringify_keys!
|
||||
h.keys.each { |k| keep(k) }
|
||||
super
|
||||
super(h)
|
||||
end
|
||||
|
||||
alias :merge! :update
|
||||
|
||||
def replace(h) #:nodoc:
|
||||
@used = {}
|
||||
super
|
||||
super(h.stringify_keys)
|
||||
end
|
||||
|
||||
# Sets a flash that will not be available to the next action, only to the current.
|
||||
@@ -126,8 +163,7 @@ module ActionController #:nodoc:
|
||||
end
|
||||
|
||||
def store(session, key = "flash")
|
||||
return if self.empty?
|
||||
session[key] = self
|
||||
session[key] = to_session_value
|
||||
end
|
||||
|
||||
private
|
||||
@@ -138,11 +174,20 @@ module ActionController #:nodoc:
|
||||
# use('msg', false) # marks the "msg" entry as unused (keeps it around for one more action)
|
||||
def use(k=nil, v=true)
|
||||
unless k.nil?
|
||||
@used[k] = v
|
||||
@used[k.to_s] = v
|
||||
else
|
||||
keys.each{ |key| use(key, v) }
|
||||
end
|
||||
end
|
||||
|
||||
def self.new_from_values(flashes, used)
|
||||
new.tap do |flash_hash|
|
||||
flashes.each do |k, v|
|
||||
flash_hash[k] = v
|
||||
end
|
||||
flash_hash.instance_variable_set("@used", used)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
module InstanceMethods #:nodoc:
|
||||
@@ -168,11 +213,11 @@ module ActionController #:nodoc:
|
||||
if notice = response_status_and_flash.delete(:notice)
|
||||
flash[:notice] = notice
|
||||
end
|
||||
|
||||
|
||||
if other_flashes = response_status_and_flash.delete(:flash)
|
||||
flash.update(other_flashes)
|
||||
end
|
||||
|
||||
|
||||
redirect_to_without_flash(options, response_status_and_flash)
|
||||
end
|
||||
|
||||
@@ -181,19 +226,19 @@ module ActionController #:nodoc:
|
||||
# to put a new one.
|
||||
def flash #:doc:
|
||||
if !defined?(@_flash)
|
||||
@_flash = session["flash"] || FlashHash.new
|
||||
@_flash = Flash::FlashHash.from_session_value(session["flash"])
|
||||
@_flash.sweep
|
||||
end
|
||||
|
||||
@_flash
|
||||
end
|
||||
|
||||
|
||||
|
||||
# Convenience accessor for flash[:alert]
|
||||
def alert
|
||||
flash[:alert]
|
||||
end
|
||||
|
||||
|
||||
# Convenience accessor for flash[:alert]=
|
||||
def alert=(message)
|
||||
flash[:alert] = message
|
||||
@@ -203,7 +248,7 @@ module ActionController #:nodoc:
|
||||
def notice
|
||||
flash[:notice]
|
||||
end
|
||||
|
||||
|
||||
# Convenience accessor for flash[:notice]=
|
||||
def notice=(message)
|
||||
flash[:notice] = message
|
||||
|
||||
@@ -2,7 +2,7 @@ require 'rack/utils'
|
||||
|
||||
module ActionController
|
||||
module Session
|
||||
class AbstractStore
|
||||
class AbstractStore
|
||||
ENV_SESSION_KEY = 'rack.session'.freeze
|
||||
ENV_SESSION_OPTIONS_KEY = 'rack.session.options'.freeze
|
||||
|
||||
@@ -55,17 +55,17 @@ module ActionController
|
||||
|
||||
def [](key)
|
||||
load_for_read!
|
||||
super
|
||||
fetch(key.to_s, super(key))
|
||||
end
|
||||
|
||||
def has_key?(key)
|
||||
load_for_read!
|
||||
super
|
||||
super(key.to_s) || super(key)
|
||||
end
|
||||
|
||||
def []=(key, value)
|
||||
load_for_write!
|
||||
super
|
||||
super(key.to_s, value)
|
||||
end
|
||||
|
||||
def clear
|
||||
@@ -82,12 +82,19 @@ module ActionController
|
||||
|
||||
def update(hash)
|
||||
load_for_write!
|
||||
super
|
||||
super(hash.stringify_keys)
|
||||
end
|
||||
|
||||
def delete(key)
|
||||
load_for_write!
|
||||
super
|
||||
if has_key? key
|
||||
value = self[key]
|
||||
super(key)
|
||||
super(key.to_s)
|
||||
value
|
||||
else
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
def data
|
||||
@@ -119,7 +126,7 @@ module ActionController
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
|
||||
def load_for_read!
|
||||
load! if !loaded? && exists?
|
||||
end
|
||||
@@ -183,7 +190,7 @@ module ActionController
|
||||
request = ActionController::Request.new(env)
|
||||
|
||||
return response if (options[:secure] && !request.ssl?)
|
||||
|
||||
|
||||
session_data.send(:load!) if session_data.is_a?(AbstractStore::SessionHash) && !session_data.loaded?
|
||||
|
||||
sid = options[:id] || generate_sid
|
||||
@@ -205,12 +212,12 @@ module ActionController
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
|
||||
def prepare!(env)
|
||||
env[ENV_SESSION_KEY] = SessionHash.new(self, env)
|
||||
env[ENV_SESSION_OPTIONS_KEY] = OptionsHash.new(self, env, @default_options)
|
||||
end
|
||||
|
||||
|
||||
def generate_sid
|
||||
ActiveSupport::SecureRandom.hex(16)
|
||||
end
|
||||
@@ -222,7 +229,7 @@ module ActionController
|
||||
[sid, session]
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def extract_session_id(env)
|
||||
stale_session_check! do
|
||||
request = Rack::Request.new(env)
|
||||
@@ -235,7 +242,7 @@ module ActionController
|
||||
def current_session_id(env)
|
||||
env[ENV_SESSION_OPTIONS_KEY][:id]
|
||||
end
|
||||
|
||||
|
||||
def exists?(env)
|
||||
current_session_id(env).present?
|
||||
end
|
||||
@@ -247,11 +254,11 @@ module ActionController
|
||||
def set_session(env, sid, session_data)
|
||||
raise '#set_session needs to be implemented.'
|
||||
end
|
||||
|
||||
|
||||
def destroy(env)
|
||||
raise '#destroy needs to be implemented.'
|
||||
end
|
||||
|
||||
|
||||
module SessionUtils
|
||||
private
|
||||
def stale_session_check!
|
||||
|
||||
@@ -37,7 +37,7 @@ module ActionController
|
||||
# Note that changing digest or secret invalidates all existing sessions!
|
||||
class CookieStore
|
||||
include AbstractStore::SessionUtils
|
||||
|
||||
|
||||
# Cookies can typically store 4096 bytes.
|
||||
MAX = 4096
|
||||
SECRET_MIN_LENGTH = 30 # characters
|
||||
@@ -86,7 +86,8 @@ module ActionController
|
||||
@secret = options.delete(:secret).freeze
|
||||
|
||||
@digest = options.delete(:digest) || 'SHA1'
|
||||
@verifier = verifier_for(@secret, @digest)
|
||||
@serializer = options.delete(:serializer) || Marshal
|
||||
@verifier = verifier_for(@secret, @digest, @serializer)
|
||||
|
||||
@default_options = DEFAULT_OPTIONS.merge(options).freeze
|
||||
|
||||
@@ -95,14 +96,21 @@ module ActionController
|
||||
|
||||
def call(env)
|
||||
prepare!(env)
|
||||
|
||||
|
||||
status, headers, body = @app.call(env)
|
||||
|
||||
session_data = env[ENV_SESSION_KEY]
|
||||
options = env[ENV_SESSION_OPTIONS_KEY]
|
||||
request = ActionController::Request.new(env)
|
||||
|
||||
|
||||
if !(options[:secure] && !request.ssl?) && (!session_data.is_a?(AbstractStore::SessionHash) || session_data.loaded? || options[:expire_after])
|
||||
|
||||
# Backport standard Rack::Session::Cookie behavior
|
||||
# Skip writing session if env['rack.session.options'][:skip] is set
|
||||
if options[:skip]
|
||||
return [status, headers, body]
|
||||
end
|
||||
|
||||
session_data.send(:load!) if session_data.is_a?(AbstractStore::SessionHash) && !session_data.loaded?
|
||||
|
||||
persistent_session_id!(session_data)
|
||||
@@ -122,7 +130,7 @@ module ActionController
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
|
||||
def prepare!(env)
|
||||
env[ENV_SESSION_KEY] = AbstractStore::SessionHash.new(self, env)
|
||||
env[ENV_SESSION_OPTIONS_KEY] = AbstractStore::OptionsHash.new(self, env, @default_options)
|
||||
@@ -131,13 +139,13 @@ module ActionController
|
||||
def load_session(env)
|
||||
data = unpacked_cookie_data(env)
|
||||
data = persistent_session_id!(data)
|
||||
[data[:session_id], data]
|
||||
[data["session_id"] || data[:session_id], data]
|
||||
end
|
||||
|
||||
|
||||
def extract_session_id(env)
|
||||
if data = unpacked_cookie_data(env)
|
||||
persistent_session_id!(data) unless data.empty?
|
||||
data[:session_id]
|
||||
data["session_id"] || data[:session_id]
|
||||
else
|
||||
nil
|
||||
end
|
||||
@@ -207,9 +215,9 @@ module ActionController
|
||||
end
|
||||
end
|
||||
|
||||
def verifier_for(secret, digest)
|
||||
def verifier_for(secret, digest, serializer)
|
||||
key = secret.respond_to?(:call) ? secret.call : secret
|
||||
ActiveSupport::MessageVerifier.new(key, digest: digest)
|
||||
ActiveSupport::MessageVerifier.new(key, digest: digest, serializer: serializer)
|
||||
end
|
||||
|
||||
def generate_sid
|
||||
@@ -225,12 +233,12 @@ module ActionController
|
||||
end
|
||||
|
||||
def inject_persistent_session_id(data)
|
||||
requires_session_id?(data) ? { :session_id => generate_sid } : {}
|
||||
requires_session_id?(data) ? { "session_id" => generate_sid } : {}
|
||||
end
|
||||
|
||||
def requires_session_id?(data)
|
||||
if data
|
||||
data.respond_to?(:key?) && !data.key?(:session_id)
|
||||
data.respond_to?(:key?) && !(data.key?("session_id") || data.key?(:session_id))
|
||||
else
|
||||
true
|
||||
end
|
||||
|
||||
@@ -219,7 +219,7 @@ module ActionController #:nodoc:
|
||||
|
||||
# A shortcut to the flash. Returns an empty hash if no session flash exists.
|
||||
def flash
|
||||
session['flash'] || {}
|
||||
ActionController::Flash::FlashHash.from_session_value(session["flash"]) || {}
|
||||
end
|
||||
|
||||
# Do we have a flash?
|
||||
|
||||
@@ -768,7 +768,11 @@ module ActionView
|
||||
options = options.stringify_keys
|
||||
tag_value = options.delete("value")
|
||||
name_and_id = options.dup
|
||||
name_and_id["id"] = name_and_id["for"]
|
||||
if name_and_id.has_key?("for")
|
||||
name_and_id["id"] = name_and_id["for"]
|
||||
else
|
||||
name_and_id.delete("id")
|
||||
end
|
||||
add_default_name_and_id_for_value(tag_value, name_and_id)
|
||||
options.delete("index")
|
||||
options["for"] ||= name_and_id["id"]
|
||||
@@ -928,15 +932,15 @@ module ActionView
|
||||
|
||||
def add_default_name_and_id(options)
|
||||
if options.has_key?("index")
|
||||
options["name"] ||= tag_name_with_index(options["index"])
|
||||
options["id"] ||= tag_id_with_index(options["index"])
|
||||
options["name"] = tag_name_with_index(options["index"]) unless options.has_key?("name")
|
||||
options["id"] = tag_id_with_index(options["index"]) unless options.has_key?("id")
|
||||
options.delete("index")
|
||||
elsif defined?(@auto_index)
|
||||
options["name"] ||= tag_name_with_index(@auto_index)
|
||||
options["id"] ||= tag_id_with_index(@auto_index)
|
||||
options["name"] = tag_name_with_index(@auto_index) unless options.has_key?("name")
|
||||
options["id"] = tag_id_with_index(@auto_index) unless options.has_key?("id")
|
||||
else
|
||||
options["name"] ||= tag_name + (options.has_key?('multiple') ? '[]' : '')
|
||||
options["id"] ||= tag_id
|
||||
options["name"] = tag_name + (options.has_key?('multiple') ? '[]' : '') unless options.has_key?("name")
|
||||
options["id"] = tag_id unless options.has_key?("id")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -73,6 +73,8 @@ module ActionView
|
||||
def number_to_currency(number, options = {})
|
||||
options.symbolize_keys!
|
||||
|
||||
options[:format] = ERB::Util.html_escape(options[:format]) if options[:format]
|
||||
|
||||
defaults = I18n.translate(:'number.format', :locale => options[:locale], :raise => true) rescue {}
|
||||
currency = I18n.translate(:'number.currency.format', :locale => options[:locale], :raise => true) rescue {}
|
||||
defaults = defaults.merge(currency)
|
||||
|
||||
@@ -17,7 +17,7 @@ module ActionView
|
||||
src << "@output_buffer.safe_append='"
|
||||
src << "\n" * @newline_pending if @newline_pending > 0
|
||||
src << escape_text(text)
|
||||
src << "';"
|
||||
src << "'.freeze;"
|
||||
|
||||
@newline_pending = 0
|
||||
end
|
||||
@@ -63,7 +63,7 @@ module ActionView
|
||||
|
||||
def flush_newline_if_pending(src)
|
||||
if @newline_pending > 0
|
||||
src << "@output_buffer.safe_append='#{"\n" * @newline_pending}';"
|
||||
src << "@output_buffer.safe_append='#{"\n" * @newline_pending}'.freeze;"
|
||||
@newline_pending = 0
|
||||
end
|
||||
end
|
||||
|
||||
@@ -622,6 +622,19 @@ class FragmentCachingTest < ActionController::TestCase
|
||||
assert_equal 'generated till now -> fragment content', buffer
|
||||
end
|
||||
|
||||
def test_fragment_for_bytesize
|
||||
buffer = "\xC4\x8D"
|
||||
buffer.force_encoding('ASCII-8BIT')
|
||||
|
||||
@controller.fragment_for(buffer, 'bytesize') do
|
||||
buffer.force_encoding('UTF-8')
|
||||
buffer << "abc"
|
||||
end
|
||||
|
||||
assert_equal Encoding::UTF_8, buffer.encoding
|
||||
assert_equal "abc", @store.read('views/bytesize')
|
||||
end
|
||||
|
||||
def test_html_safety
|
||||
assert_nil @store.read('views/name')
|
||||
content = 'value'.html_safe
|
||||
|
||||
@@ -175,6 +175,10 @@ class FormHelperTest < ActionView::TestCase
|
||||
I18n.locale = old_locale
|
||||
end
|
||||
|
||||
def test_label_with_for_attribute_as_nil
|
||||
assert_dom_equal('<label>Title</label>', label(:post, :title, nil, :for => nil))
|
||||
end
|
||||
|
||||
def test_label_with_for_attribute_as_symbol
|
||||
assert_dom_equal('<label for="my_for">Title</label>', label(:post, :title, nil, :for => "my_for"))
|
||||
end
|
||||
@@ -274,6 +278,11 @@ class FormHelperTest < ActionView::TestCase
|
||||
hidden_field("post", "title", :value => "Something Else")
|
||||
end
|
||||
|
||||
def test_text_field_with_id_as_nil
|
||||
assert_dom_equal '<input name="post[title]" type="hidden" value="Hello World" />',
|
||||
hidden_field("post", "title", :id => nil)
|
||||
end
|
||||
|
||||
def test_check_box
|
||||
assert_dom_equal(
|
||||
'<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
|
||||
|
||||
@@ -3,6 +3,12 @@ require 'abstract_unit'
|
||||
class NumberHelperTest < ActionView::TestCase
|
||||
tests ActionView::Helpers::NumberHelper
|
||||
|
||||
def test_number_helpers_escape_delimiter_and_separator
|
||||
assert_equal "$1<script></script>01", number_to_currency(1.01, :separator => "<script></script>")
|
||||
assert_equal "$1<script></script>000.00", number_to_currency(1000, :delimiter => "<script></script>")
|
||||
assert_equal "<script>1,000.00$</script>", number_to_currency(1000, :format => "<script>%n%u</script>")
|
||||
end
|
||||
|
||||
def test_number_to_phone
|
||||
assert_equal("555-1234", number_to_phone(5551234))
|
||||
assert_equal("800-555-1212", number_to_phone(8005551212))
|
||||
|
||||
@@ -9,8 +9,8 @@ module RenderTestCases
|
||||
|
||||
# Reload and register danish language for testing
|
||||
I18n.reload!
|
||||
I18n.backend.store_translations 'da', {}
|
||||
I18n.backend.store_translations 'pt-BR', {}
|
||||
I18n.backend.store_translations 'da', 'da' => {}
|
||||
I18n.backend.store_translations 'pt-BR', 'pt-BR' => {}
|
||||
|
||||
# Ensure original are still the same since we are reindexing view paths
|
||||
assert_equal ORIGINAL_LOCALES, I18n.available_locales.map(&:to_s).sort
|
||||
|
||||
@@ -195,7 +195,9 @@ module ActiveRecord
|
||||
def log_info(sql, name, ms)
|
||||
if @logger && @logger.debug?
|
||||
name = '%s (%.1fms)' % [name || 'SQL', ms]
|
||||
sql.force_encoding 'binary' if sql.respond_to?(:force_encoding)
|
||||
if sql.respond_to?(:force_encoding)
|
||||
sql = sql.dup.force_encoding 'binary'
|
||||
end
|
||||
@logger.debug(format_log_entry(name, sql.squeeze(' ')))
|
||||
end
|
||||
end
|
||||
@@ -212,13 +214,7 @@ module ActiveRecord
|
||||
log_info(sql, name, 0)
|
||||
nil
|
||||
end
|
||||
rescue SystemExit, SignalException, NoMemoryError => e
|
||||
# Don't re-wrap these exceptions. They are probably not being caused by invalid
|
||||
# sql, but rather some external stimulus beyond the responsibilty of this code.
|
||||
# Additionaly, wrapping these exceptions with StatementInvalid would lead to
|
||||
# meaningful loss of data, such as losing SystemExit#status.
|
||||
raise e
|
||||
rescue Exception => e
|
||||
rescue => e
|
||||
# Log message and raise exception.
|
||||
# Set last_verification to 0, so that connection gets verified
|
||||
# upon reentering the request loop
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
require 'active_support/core_ext/kernel/daemonizing'
|
||||
require 'active_support/core_ext/kernel/reporting'
|
||||
require 'active_support/core_ext/kernel/agnostics'
|
||||
require 'active_support/core_ext/kernel/requires'
|
||||
require 'active_support/core_ext/kernel/debugger'
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
class Object
|
||||
# Makes backticks behave (somewhat more) similarly on all platforms.
|
||||
# On win32 `nonexistent_command` raises Errno::ENOENT; on Unix, the
|
||||
# spawned shell prints a message to stderr and sets $?. We emulate
|
||||
# Unix on the former but not the latter.
|
||||
def `(command) #:nodoc:
|
||||
super
|
||||
rescue Errno::ENOENT => e
|
||||
STDERR.puts "#$0: #{e}"
|
||||
end
|
||||
end
|
||||
@@ -1,3 +1,6 @@
|
||||
require 'active_support/core_ext/kernel/singleton_class'
|
||||
require 'active_support/core_ext/module/aliasing'
|
||||
|
||||
module ActiveSupport
|
||||
module Memoizable
|
||||
def self.memoized_ivar_for(symbol)
|
||||
@@ -41,10 +44,10 @@ module ActiveSupport
|
||||
end
|
||||
end
|
||||
|
||||
def flush_cache(*syms, &block)
|
||||
def flush_cache(*syms)
|
||||
syms.each do |sym|
|
||||
(methods + private_methods + protected_methods).each do |m|
|
||||
if m.to_s =~ /^_unmemoized_(#{sym})/
|
||||
if m.to_s =~ /^_unmemoized_(#{sym.to_s.gsub(/\?\Z/, '\?')})/
|
||||
ivar = ActiveSupport::Memoizable.memoized_ivar_for($1)
|
||||
instance_variable_get(ivar).clear if instance_variable_defined?(ivar)
|
||||
end
|
||||
@@ -69,7 +72,7 @@ module ActiveSupport
|
||||
if instance_method(:#{symbol}).arity == 0 # if instance_method(:mime_type).arity == 0
|
||||
def #{symbol}(reload = false) # def mime_type(reload = false)
|
||||
if reload || !defined?(#{memoized_ivar}) || #{memoized_ivar}.empty? # if reload || !defined?(@_memoized_mime_type) || @_memoized_mime_type.empty?
|
||||
#{memoized_ivar} = [#{original_method}.freeze] # @_memoized_mime_type = [_unmemoized_mime_type.freeze]
|
||||
#{memoized_ivar} = [#{original_method}] # @_memoized_mime_type = [_unmemoized_mime_type]
|
||||
end # end
|
||||
#{memoized_ivar}[0] # @_memoized_mime_type[0]
|
||||
end # end
|
||||
@@ -82,7 +85,7 @@ module ActiveSupport
|
||||
if !reload && #{memoized_ivar}.has_key?(args) # if !reload && @_memoized_mime_type.has_key?(args)
|
||||
#{memoized_ivar}[args] # @_memoized_mime_type[args]
|
||||
elsif #{memoized_ivar} # elsif @_memoized_mime_type
|
||||
#{memoized_ivar}[args] = #{original_method}(*args).freeze # @_memoized_mime_type[args] = _unmemoized_mime_type(*args).freeze
|
||||
#{memoized_ivar}[args] = #{original_method}(*args) # @_memoized_mime_type[args] = _unmemoized_mime_type(*args)
|
||||
end # end
|
||||
else # else
|
||||
#{original_method}(*args) # _unmemoized_mime_type(*args)
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
# Prefer gems to the bundled libs.
|
||||
require 'rubygems'
|
||||
|
||||
begin
|
||||
gem 'builder', '~> 2.1.2'
|
||||
rescue Gem::LoadError
|
||||
$:.unshift "#{File.dirname(__FILE__)}/vendor/builder-2.1.2"
|
||||
end
|
||||
require 'builder'
|
||||
|
||||
begin
|
||||
@@ -14,13 +9,8 @@ rescue Gem::LoadError
|
||||
$:.unshift "#{File.dirname(__FILE__)}/vendor/memcache-client-1.7.4"
|
||||
end
|
||||
|
||||
$:.unshift "#{File.dirname(__FILE__)}/vendor/tzinfo-0.3.12"
|
||||
$:.unshift "#{File.dirname(__FILE__)}/vendor/tzinfo-0.3.39/lib"
|
||||
|
||||
begin
|
||||
gem 'i18n', '>= 0.4.1'
|
||||
rescue Gem::LoadError
|
||||
$:.unshift "#{File.dirname(__FILE__)}/vendor/i18n-0.4.1"
|
||||
end
|
||||
require 'i18n'
|
||||
|
||||
module I18n
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
#--
|
||||
# Copyright 2004 by Jim Weirich (jim@weirichhouse.org).
|
||||
# All rights reserved.
|
||||
|
||||
# Permission is granted for use, copying, modification, distribution,
|
||||
# and distribution of modified versions of this work as long as the
|
||||
# above copyright notice is included.
|
||||
#++
|
||||
|
||||
require 'builder/xmlmarkup'
|
||||
require 'builder/xmlevents'
|
||||
@@ -1,248 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
#--
|
||||
# Copyright 2004, 2005 by Jim Weirich (jim@weirichhouse.org).
|
||||
# Copyright 2005 by Scott Barron (scott@elitists.net).
|
||||
# All rights reserved.
|
||||
#
|
||||
# Permission is granted for use, copying, modification, distribution,
|
||||
# and distribution of modified versions of this work as long as the
|
||||
# above copyright notice is included.
|
||||
#
|
||||
# Much of this is taken from Jim's work in xmlbase.rb and xmlmarkup.rb.
|
||||
# Documentation has also been copied and pasted and modified to reflect
|
||||
# that we're building CSS here instead of XML. Jim is conducting the
|
||||
# orchestra here and I'm just off in the corner playing a flute.
|
||||
#++
|
||||
|
||||
# Provide a flexible and easy to use Builder for creating Cascading
|
||||
# Style Sheets (CSS).
|
||||
|
||||
|
||||
module Builder
|
||||
|
||||
# Create a Cascading Style Sheet (CSS) using Ruby.
|
||||
#
|
||||
# Example usage:
|
||||
#
|
||||
# css = Builder::CSS.new
|
||||
#
|
||||
# text_color = '#7F7F7F'
|
||||
# preferred_fonts = 'Helvetica, Arial, sans_serif'
|
||||
#
|
||||
# css.comment! 'This is our stylesheet'
|
||||
# css.body {
|
||||
# background_color '#FAFAFA'
|
||||
# font_size 'small'
|
||||
# font_family preferred_fonts
|
||||
# color text_color
|
||||
# }
|
||||
#
|
||||
# css.id!('navbar') {
|
||||
# width '500px'
|
||||
# }
|
||||
#
|
||||
# css.class!('navitem') {
|
||||
# color 'red'
|
||||
# }
|
||||
#
|
||||
# css.a :hover {
|
||||
# text_decoration 'underline'
|
||||
# }
|
||||
#
|
||||
# css.div(:id => 'menu') {
|
||||
# background 'green'
|
||||
# }
|
||||
#
|
||||
# css.div(:class => 'foo') {
|
||||
# background 'red'
|
||||
# }
|
||||
#
|
||||
# This will yield the following stylesheet:
|
||||
#
|
||||
# /* This is our stylesheet */
|
||||
# body {
|
||||
# background_color: #FAFAFA;
|
||||
# font_size: small;
|
||||
# font_family: Helvetica, Arial, sans_serif;
|
||||
# color: #7F7F7F;
|
||||
# }
|
||||
#
|
||||
# #navbar {
|
||||
# width: 500px;
|
||||
# }
|
||||
#
|
||||
# .navitem {
|
||||
# color: red;
|
||||
# }
|
||||
#
|
||||
# a:hover {
|
||||
# text_decoration: underline;
|
||||
# }
|
||||
#
|
||||
# div#menu {
|
||||
# background: green;
|
||||
# }
|
||||
#
|
||||
# div.foo {
|
||||
# background: red;
|
||||
# }
|
||||
#
|
||||
class CSS < BasicObject
|
||||
|
||||
# Create a CSS builder.
|
||||
#
|
||||
# out:: Object receiving the markup.1 +out+ must respond to
|
||||
# <tt><<</tt>.
|
||||
# indent:: Number of spaces used for indentation (0 implies no
|
||||
# indentation and no line breaks).
|
||||
#
|
||||
def initialize(indent=2)
|
||||
@indent = indent
|
||||
@target = []
|
||||
@parts = []
|
||||
@library = {}
|
||||
end
|
||||
|
||||
def +(part)
|
||||
_join_with_op! '+'
|
||||
self
|
||||
end
|
||||
|
||||
def >>(part)
|
||||
_join_with_op! ''
|
||||
self
|
||||
end
|
||||
|
||||
def >(part)
|
||||
_join_with_op! '>'
|
||||
self
|
||||
end
|
||||
|
||||
def |(part)
|
||||
_join_with_op! ','
|
||||
self
|
||||
end
|
||||
|
||||
# Return the target of the builder
|
||||
def target!
|
||||
@target * ''
|
||||
end
|
||||
|
||||
# Create a comment string in the output.
|
||||
def comment!(comment_text)
|
||||
@target << "/* #{comment_text} */\n"
|
||||
end
|
||||
|
||||
def id!(arg, &block)
|
||||
_start_container('#'+arg.to_s, nil, block_given?)
|
||||
_css_block(block) if block
|
||||
_unify_block
|
||||
self
|
||||
end
|
||||
|
||||
def class!(arg, &block)
|
||||
_start_container('.'+arg.to_s, nil, block_given?)
|
||||
_css_block(block) if block
|
||||
_unify_block
|
||||
self
|
||||
end
|
||||
|
||||
def store!(sym, &block)
|
||||
@library[sym] = block.to_proc
|
||||
end
|
||||
|
||||
def group!(*args, &block)
|
||||
args.each do |arg|
|
||||
if arg.is_a?(::Symbol)
|
||||
instance_eval(&@library[arg])
|
||||
else
|
||||
instance_eval(&arg)
|
||||
end
|
||||
_text ', ' unless arg == args.last
|
||||
end
|
||||
if block
|
||||
_css_block(block)
|
||||
_unify_block
|
||||
end
|
||||
end
|
||||
|
||||
def method_missing(sym, *args, &block)
|
||||
sym = "#{sym}:#{args.shift}" if args.first.kind_of?(::Symbol)
|
||||
if block
|
||||
_start_container(sym, args.first)
|
||||
_css_block(block)
|
||||
_unify_block
|
||||
elsif @in_block
|
||||
_indent
|
||||
_css_line(sym, *args)
|
||||
_newline
|
||||
return self
|
||||
else
|
||||
_start_container(sym, args.first, false)
|
||||
_unify_block
|
||||
end
|
||||
self
|
||||
end
|
||||
|
||||
# "Cargo culted" from Jim who also "cargo culted" it. See xmlbase.rb.
|
||||
def nil?
|
||||
false
|
||||
end
|
||||
|
||||
private
|
||||
def _unify_block
|
||||
@target << @parts * ''
|
||||
@parts = []
|
||||
end
|
||||
|
||||
def _join_with_op!(op)
|
||||
rhs, lhs = @target.pop, @target.pop
|
||||
@target << "#{lhs} #{op} #{rhs}"
|
||||
end
|
||||
|
||||
def _text(text)
|
||||
@parts << text
|
||||
end
|
||||
|
||||
def _css_block(block)
|
||||
_newline
|
||||
_nested_structures(block)
|
||||
_end_container
|
||||
_end_block
|
||||
end
|
||||
|
||||
def _end_block
|
||||
_newline
|
||||
_newline
|
||||
end
|
||||
|
||||
def _newline
|
||||
_text "\n"
|
||||
end
|
||||
|
||||
def _indent
|
||||
_text ' ' * @indent
|
||||
end
|
||||
|
||||
def _nested_structures(block)
|
||||
@in_block = true
|
||||
self.instance_eval(&block)
|
||||
@in_block = false
|
||||
end
|
||||
|
||||
def _start_container(sym, atts = {}, with_bracket = true)
|
||||
selector = sym.to_s
|
||||
selector << ".#{atts[:class]}" if atts && atts[:class]
|
||||
selector << '#' + "#{atts[:id]}" if atts && atts[:id]
|
||||
@parts << "#{selector}#{with_bracket ? ' {' : ''}"
|
||||
end
|
||||
|
||||
def _end_container
|
||||
@parts << "}"
|
||||
end
|
||||
|
||||
def _css_line(sym, *args)
|
||||
_text("#{sym.to_s.gsub('_','-')}: #{args * ' '};")
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,115 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
# The XChar library is provided courtesy of Sam Ruby (See
|
||||
# http://intertwingly.net/stories/2005/09/28/xchar.rb)
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
|
||||
# If the Builder::XChar module is not currently defined, fail on any
|
||||
# name clashes in standard library classes.
|
||||
|
||||
module Builder
|
||||
def self.check_for_name_collision(klass, method_name, defined_constant=nil)
|
||||
if klass.instance_methods.include?(method_name.to_s)
|
||||
fail RuntimeError,
|
||||
"Name Collision: Method '#{method_name}' is already defined in #{klass}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if ! defined?(Builder::XChar)
|
||||
Builder.check_for_name_collision(String, "to_xs")
|
||||
Builder.check_for_name_collision(Fixnum, "xchr")
|
||||
end
|
||||
|
||||
######################################################################
|
||||
module Builder
|
||||
|
||||
####################################################################
|
||||
# XML Character converter, from Sam Ruby:
|
||||
# (see http://intertwingly.net/stories/2005/09/28/xchar.rb).
|
||||
#
|
||||
module XChar # :nodoc:
|
||||
|
||||
# See
|
||||
# http://intertwingly.net/stories/2004/04/14/i18n.html#CleaningWindows
|
||||
# for details.
|
||||
CP1252 = { # :nodoc:
|
||||
128 => 8364, # euro sign
|
||||
130 => 8218, # single low-9 quotation mark
|
||||
131 => 402, # latin small letter f with hook
|
||||
132 => 8222, # double low-9 quotation mark
|
||||
133 => 8230, # horizontal ellipsis
|
||||
134 => 8224, # dagger
|
||||
135 => 8225, # double dagger
|
||||
136 => 710, # modifier letter circumflex accent
|
||||
137 => 8240, # per mille sign
|
||||
138 => 352, # latin capital letter s with caron
|
||||
139 => 8249, # single left-pointing angle quotation mark
|
||||
140 => 338, # latin capital ligature oe
|
||||
142 => 381, # latin capital letter z with caron
|
||||
145 => 8216, # left single quotation mark
|
||||
146 => 8217, # right single quotation mark
|
||||
147 => 8220, # left double quotation mark
|
||||
148 => 8221, # right double quotation mark
|
||||
149 => 8226, # bullet
|
||||
150 => 8211, # en dash
|
||||
151 => 8212, # em dash
|
||||
152 => 732, # small tilde
|
||||
153 => 8482, # trade mark sign
|
||||
154 => 353, # latin small letter s with caron
|
||||
155 => 8250, # single right-pointing angle quotation mark
|
||||
156 => 339, # latin small ligature oe
|
||||
158 => 382, # latin small letter z with caron
|
||||
159 => 376, # latin capital letter y with diaeresis
|
||||
}
|
||||
|
||||
# See http://www.w3.org/TR/REC-xml/#dt-chardata for details.
|
||||
PREDEFINED = {
|
||||
38 => '&', # ampersand
|
||||
60 => '<', # left angle bracket
|
||||
62 => '>', # right angle bracket
|
||||
}
|
||||
|
||||
# See http://www.w3.org/TR/REC-xml/#charsets for details.
|
||||
VALID = [
|
||||
0x9, 0xA, 0xD,
|
||||
(0x20..0xD7FF),
|
||||
(0xE000..0xFFFD),
|
||||
(0x10000..0x10FFFF)
|
||||
]
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
######################################################################
|
||||
# Enhance the Fixnum class with a XML escaped character conversion.
|
||||
#
|
||||
class Fixnum
|
||||
XChar = Builder::XChar if ! defined?(XChar)
|
||||
|
||||
# XML escaped version of chr
|
||||
def xchr
|
||||
n = XChar::CP1252[self] || self
|
||||
case n when *XChar::VALID
|
||||
XChar::PREDEFINED[n] or (n<128 ? n.chr : "&##{n};")
|
||||
else
|
||||
'*'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
######################################################################
|
||||
# Enhance the String class with a XML escaped character version of
|
||||
# to_s.
|
||||
#
|
||||
class String
|
||||
# XML escaped version of to_s
|
||||
def to_xs
|
||||
unpack('U*').map {|n| n.xchr}.join # ASCII, UTF-8
|
||||
rescue
|
||||
unpack('C*').map {|n| n.xchr}.join # ISO-8859-1, WIN-1252
|
||||
end
|
||||
end
|
||||
@@ -1,137 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
module Builder
|
||||
|
||||
# Generic error for builder
|
||||
class IllegalBlockError < RuntimeError; end
|
||||
|
||||
# XmlBase is a base class for building XML builders. See
|
||||
# Builder::XmlMarkup and Builder::XmlEvents for examples.
|
||||
class XmlBase < BasicObject
|
||||
|
||||
# Create an XML markup builder.
|
||||
#
|
||||
# out:: Object receiving the markup. +out+ must respond to
|
||||
# <tt><<</tt>.
|
||||
# indent:: Number of spaces used for indentation (0 implies no
|
||||
# indentation and no line breaks).
|
||||
# initial:: Level of initial indentation.
|
||||
#
|
||||
def initialize(indent=0, initial=0)
|
||||
@indent = indent
|
||||
@level = initial
|
||||
end
|
||||
|
||||
# Create a tag named +sym+. Other than the first argument which
|
||||
# is the tag name, the arguments are the same as the tags
|
||||
# implemented via <tt>method_missing</tt>.
|
||||
def tag!(sym, *args, &block)
|
||||
method_missing(sym.to_sym, *args, &block)
|
||||
end
|
||||
|
||||
# Create XML markup based on the name of the method. This method
|
||||
# is never invoked directly, but is called for each markup method
|
||||
# in the markup block.
|
||||
def method_missing(sym, *args, &block)
|
||||
text = nil
|
||||
attrs = nil
|
||||
sym = "#{sym}:#{args.shift}" if args.first.kind_of?(::Symbol)
|
||||
args.each do |arg|
|
||||
case arg
|
||||
when ::Hash
|
||||
attrs ||= {}
|
||||
attrs.merge!(arg)
|
||||
else
|
||||
text ||= ''
|
||||
text << arg.to_s
|
||||
end
|
||||
end
|
||||
if block
|
||||
unless text.nil?
|
||||
raise ::ArgumentError, "XmlMarkup cannot mix a text argument with a block"
|
||||
end
|
||||
_indent
|
||||
_start_tag(sym, attrs)
|
||||
_newline
|
||||
_nested_structures(block)
|
||||
_indent
|
||||
_end_tag(sym)
|
||||
_newline
|
||||
elsif text.nil?
|
||||
_indent
|
||||
_start_tag(sym, attrs, true)
|
||||
_newline
|
||||
else
|
||||
_indent
|
||||
_start_tag(sym, attrs)
|
||||
text! text
|
||||
_end_tag(sym)
|
||||
_newline
|
||||
end
|
||||
@target
|
||||
end
|
||||
|
||||
# Append text to the output target. Escape any markup. May be
|
||||
# used within the markup brackets as:
|
||||
#
|
||||
# builder.p { |b| b.br; b.text! "HI" } #=> <p><br/>HI</p>
|
||||
def text!(text)
|
||||
_text(_escape(text))
|
||||
end
|
||||
|
||||
# Append text to the output target without escaping any markup.
|
||||
# May be used within the markup brackets as:
|
||||
#
|
||||
# builder.p { |x| x << "<br/>HI" } #=> <p><br/>HI</p>
|
||||
#
|
||||
# This is useful when using non-builder enabled software that
|
||||
# generates strings. Just insert the string directly into the
|
||||
# builder without changing the inserted markup.
|
||||
#
|
||||
# It is also useful for stacking builder objects. Builders only
|
||||
# use <tt><<</tt> to append to the target, so by supporting this
|
||||
# method/operation builders can use other builders as their
|
||||
# targets.
|
||||
def <<(text)
|
||||
_text(text)
|
||||
end
|
||||
|
||||
# For some reason, nil? is sent to the XmlMarkup object. If nil?
|
||||
# is not defined and method_missing is invoked, some strange kind
|
||||
# of recursion happens. Since nil? won't ever be an XML tag, it
|
||||
# is pretty safe to define it here. (Note: this is an example of
|
||||
# cargo cult programming,
|
||||
# cf. http://fishbowl.pastiche.org/2004/10/13/cargo_cult_programming).
|
||||
def nil?
|
||||
false
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
require 'builder/xchar'
|
||||
def _escape(text)
|
||||
text.to_xs
|
||||
end
|
||||
|
||||
def _escape_quote(text)
|
||||
_escape(text).gsub(%r{"}, '"') # " WART
|
||||
end
|
||||
|
||||
def _newline
|
||||
return if @indent == 0
|
||||
text! "\n"
|
||||
end
|
||||
|
||||
def _indent
|
||||
return if @indent == 0 || @level == 0
|
||||
text!(" " * (@level * @indent))
|
||||
end
|
||||
|
||||
def _nested_structures(block)
|
||||
@level += 1
|
||||
block.call(self)
|
||||
ensure
|
||||
@level -= 1
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,63 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
#--
|
||||
# Copyright 2004 by Jim Weirich (jim@weirichhouse.org).
|
||||
# All rights reserved.
|
||||
|
||||
# Permission is granted for use, copying, modification, distribution,
|
||||
# and distribution of modified versions of this work as long as the
|
||||
# above copyright notice is included.
|
||||
#++
|
||||
|
||||
require 'builder/xmlmarkup'
|
||||
|
||||
module Builder
|
||||
|
||||
# Create a series of SAX-like XML events (e.g. start_tag, end_tag)
|
||||
# from the markup code. XmlEvent objects are used in a way similar
|
||||
# to XmlMarkup objects, except that a series of events are generated
|
||||
# and passed to a handler rather than generating character-based
|
||||
# markup.
|
||||
#
|
||||
# Usage:
|
||||
# xe = Builder::XmlEvents.new(handler)
|
||||
# xe.title("HI") # Sends start_tag/end_tag/text messages to the handler.
|
||||
#
|
||||
# Indentation may also be selected by providing value for the
|
||||
# indentation size and initial indentation level.
|
||||
#
|
||||
# xe = Builder::XmlEvents.new(handler, indent_size, initial_indent_level)
|
||||
#
|
||||
# == XML Event Handler
|
||||
#
|
||||
# The handler object must expect the following events.
|
||||
#
|
||||
# [<tt>start_tag(tag, attrs)</tt>]
|
||||
# Announces that a new tag has been found. +tag+ is the name of
|
||||
# the tag and +attrs+ is a hash of attributes for the tag.
|
||||
#
|
||||
# [<tt>end_tag(tag)</tt>]
|
||||
# Announces that an end tag for +tag+ has been found.
|
||||
#
|
||||
# [<tt>text(text)</tt>]
|
||||
# Announces that a string of characters (+text+) has been found.
|
||||
# A series of characters may be broken up into more than one
|
||||
# +text+ call, so the client cannot assume that a single
|
||||
# callback contains all the text data.
|
||||
#
|
||||
class XmlEvents < XmlMarkup
|
||||
def text!(text)
|
||||
@target.text(text)
|
||||
end
|
||||
|
||||
def _start_tag(sym, attrs, end_too=false)
|
||||
@target.start_tag(sym, attrs)
|
||||
_end_tag(sym) if end_too
|
||||
end
|
||||
|
||||
def _end_tag(sym)
|
||||
@target.end_tag(sym)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -1,328 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
#--
|
||||
# Copyright 2004, 2005 by Jim Weirich (jim@weirichhouse.org).
|
||||
# All rights reserved.
|
||||
|
||||
# Permission is granted for use, copying, modification, distribution,
|
||||
# and distribution of modified versions of this work as long as the
|
||||
# above copyright notice is included.
|
||||
#++
|
||||
|
||||
# Provide a flexible and easy to use Builder for creating XML markup.
|
||||
# See XmlBuilder for usage details.
|
||||
|
||||
require 'builder/xmlbase'
|
||||
|
||||
module Builder
|
||||
|
||||
# Create XML markup easily. All (well, almost all) methods sent to
|
||||
# an XmlMarkup object will be translated to the equivalent XML
|
||||
# markup. Any method with a block will be treated as an XML markup
|
||||
# tag with nested markup in the block.
|
||||
#
|
||||
# Examples will demonstrate this easier than words. In the
|
||||
# following, +xm+ is an +XmlMarkup+ object.
|
||||
#
|
||||
# xm.em("emphasized") # => <em>emphasized</em>
|
||||
# xm.em { xmm.b("emp & bold") } # => <em><b>emph & bold</b></em>
|
||||
# xm.a("A Link", "href"=>"http://onestepback.org")
|
||||
# # => <a href="http://onestepback.org">A Link</a>
|
||||
# xm.div { br } # => <div><br/></div>
|
||||
# xm.target("name"=>"compile", "option"=>"fast")
|
||||
# # => <target option="fast" name="compile"\>
|
||||
# # NOTE: order of attributes is not specified.
|
||||
#
|
||||
# xm.instruct! # <?xml version="1.0" encoding="UTF-8"?>
|
||||
# xm.html { # <html>
|
||||
# xm.head { # <head>
|
||||
# xm.title("History") # <title>History</title>
|
||||
# } # </head>
|
||||
# xm.body { # <body>
|
||||
# xm.comment! "HI" # <! -- HI -->
|
||||
# xm.h1("Header") # <h1>Header</h1>
|
||||
# xm.p("paragraph") # <p>paragraph</p>
|
||||
# } # </body>
|
||||
# } # </html>
|
||||
#
|
||||
# == Notes:
|
||||
#
|
||||
# * The order that attributes are inserted in markup tags is
|
||||
# undefined.
|
||||
#
|
||||
# * Sometimes you wish to insert text without enclosing tags. Use
|
||||
# the <tt>text!</tt> method to accomplish this.
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# xm.div { # <div>
|
||||
# xm.text! "line"; xm.br # line<br/>
|
||||
# xm.text! "another line"; xmbr # another line<br/>
|
||||
# } # </div>
|
||||
#
|
||||
# * The special XML characters <, >, and & are converted to <,
|
||||
# > and & automatically. Use the <tt><<</tt> operation to
|
||||
# insert text without modification.
|
||||
#
|
||||
# * Sometimes tags use special characters not allowed in ruby
|
||||
# identifiers. Use the <tt>tag!</tt> method to handle these
|
||||
# cases.
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# xml.tag!("SOAP:Envelope") { ... }
|
||||
#
|
||||
# will produce ...
|
||||
#
|
||||
# <SOAP:Envelope> ... </SOAP:Envelope>"
|
||||
#
|
||||
# <tt>tag!</tt> will also take text and attribute arguments (after
|
||||
# the tag name) like normal markup methods. (But see the next
|
||||
# bullet item for a better way to handle XML namespaces).
|
||||
#
|
||||
# * Direct support for XML namespaces is now available. If the
|
||||
# first argument to a tag call is a symbol, it will be joined to
|
||||
# the tag to produce a namespace:tag combination. It is easier to
|
||||
# show this than describe it.
|
||||
#
|
||||
# xml.SOAP :Envelope do ... end
|
||||
#
|
||||
# Just put a space before the colon in a namespace to produce the
|
||||
# right form for builder (e.g. "<tt>SOAP:Envelope</tt>" =>
|
||||
# "<tt>xml.SOAP :Envelope</tt>")
|
||||
#
|
||||
# * XmlMarkup builds the markup in any object (called a _target_)
|
||||
# that accepts the <tt><<</tt> method. If no target is given,
|
||||
# then XmlMarkup defaults to a string target.
|
||||
#
|
||||
# Examples:
|
||||
#
|
||||
# xm = Builder::XmlMarkup.new
|
||||
# result = xm.title("yada")
|
||||
# # result is a string containing the markup.
|
||||
#
|
||||
# buffer = ""
|
||||
# xm = Builder::XmlMarkup.new(buffer)
|
||||
# # The markup is appended to buffer (using <<)
|
||||
#
|
||||
# xm = Builder::XmlMarkup.new(STDOUT)
|
||||
# # The markup is written to STDOUT (using <<)
|
||||
#
|
||||
# xm = Builder::XmlMarkup.new
|
||||
# x2 = Builder::XmlMarkup.new(:target=>xm)
|
||||
# # Markup written to +x2+ will be send to +xm+.
|
||||
#
|
||||
# * Indentation is enabled by providing the number of spaces to
|
||||
# indent for each level as a second argument to XmlBuilder.new.
|
||||
# Initial indentation may be specified using a third parameter.
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# xm = Builder.new(:indent=>2)
|
||||
# # xm will produce nicely formatted and indented XML.
|
||||
#
|
||||
# xm = Builder.new(:indent=>2, :margin=>4)
|
||||
# # xm will produce nicely formatted and indented XML with 2
|
||||
# # spaces per indent and an over all indentation level of 4.
|
||||
#
|
||||
# builder = Builder::XmlMarkup.new(:target=>$stdout, :indent=>2)
|
||||
# builder.name { |b| b.first("Jim"); b.last("Weirich) }
|
||||
# # prints:
|
||||
# # <name>
|
||||
# # <first>Jim</first>
|
||||
# # <last>Weirich</last>
|
||||
# # </name>
|
||||
#
|
||||
# * The instance_eval implementation which forces self to refer to
|
||||
# the message receiver as self is now obsolete. We now use normal
|
||||
# block calls to execute the markup block. This means that all
|
||||
# markup methods must now be explicitly send to the xml builder.
|
||||
# For instance, instead of
|
||||
#
|
||||
# xml.div { strong("text") }
|
||||
#
|
||||
# you need to write:
|
||||
#
|
||||
# xml.div { xml.strong("text") }
|
||||
#
|
||||
# Although more verbose, the subtle change in semantics within the
|
||||
# block was found to be prone to error. To make this change a
|
||||
# little less cumbersome, the markup block now gets the markup
|
||||
# object sent as an argument, allowing you to use a shorter alias
|
||||
# within the block.
|
||||
#
|
||||
# For example:
|
||||
#
|
||||
# xml_builder = Builder::XmlMarkup.new
|
||||
# xml_builder.div { |xml|
|
||||
# xml.stong("text")
|
||||
# }
|
||||
#
|
||||
class XmlMarkup < XmlBase
|
||||
|
||||
# Create an XML markup builder. Parameters are specified by an
|
||||
# option hash.
|
||||
#
|
||||
# :target=><em>target_object</em>::
|
||||
# Object receiving the markup. +out+ must respond to the
|
||||
# <tt><<</tt> operator. The default is a plain string target.
|
||||
#
|
||||
# :indent=><em>indentation</em>::
|
||||
# Number of spaces used for indentation. The default is no
|
||||
# indentation and no line breaks.
|
||||
#
|
||||
# :margin=><em>initial_indentation_level</em>::
|
||||
# Amount of initial indentation (specified in levels, not
|
||||
# spaces).
|
||||
#
|
||||
# :escape_attrs=><b>OBSOLETE</em>::
|
||||
# The :escape_attrs option is no longer supported by builder
|
||||
# (and will be quietly ignored). String attribute values are
|
||||
# now automatically escaped. If you need unescaped attribute
|
||||
# values (perhaps you are using entities in the attribute
|
||||
# values), then give the value as a Symbol. This allows much
|
||||
# finer control over escaping attribute values.
|
||||
#
|
||||
def initialize(options={})
|
||||
indent = options[:indent] || 0
|
||||
margin = options[:margin] || 0
|
||||
super(indent, margin)
|
||||
@target = options[:target] || ""
|
||||
end
|
||||
|
||||
# Return the target of the builder.
|
||||
def target!
|
||||
@target
|
||||
end
|
||||
|
||||
def comment!(comment_text)
|
||||
_ensure_no_block ::Kernel.block_given?
|
||||
_special("<!-- ", " -->", comment_text, nil)
|
||||
end
|
||||
|
||||
# Insert an XML declaration into the XML markup.
|
||||
#
|
||||
# For example:
|
||||
#
|
||||
# xml.declare! :ELEMENT, :blah, "yada"
|
||||
# # => <!ELEMENT blah "yada">
|
||||
def declare!(inst, *args, &block)
|
||||
_indent
|
||||
@target << "<!#{inst}"
|
||||
args.each do |arg|
|
||||
case arg
|
||||
when ::String
|
||||
@target << %{ "#{arg}"} # " WART
|
||||
when ::Symbol
|
||||
@target << " #{arg}"
|
||||
end
|
||||
end
|
||||
if ::Kernel.block_given?
|
||||
@target << " ["
|
||||
_newline
|
||||
_nested_structures(block)
|
||||
@target << "]"
|
||||
end
|
||||
@target << ">"
|
||||
_newline
|
||||
end
|
||||
|
||||
# Insert a processing instruction into the XML markup. E.g.
|
||||
#
|
||||
# For example:
|
||||
#
|
||||
# xml.instruct!
|
||||
# #=> <?xml version="1.0" encoding="UTF-8"?>
|
||||
# xml.instruct! :aaa, :bbb=>"ccc"
|
||||
# #=> <?aaa bbb="ccc"?>
|
||||
#
|
||||
def instruct!(directive_tag=:xml, attrs={})
|
||||
_ensure_no_block ::Kernel.block_given?
|
||||
if directive_tag == :xml
|
||||
a = { :version=>"1.0", :encoding=>"UTF-8" }
|
||||
attrs = a.merge attrs
|
||||
end
|
||||
_special(
|
||||
"<?#{directive_tag}",
|
||||
"?>",
|
||||
nil,
|
||||
attrs,
|
||||
[:version, :encoding, :standalone])
|
||||
end
|
||||
|
||||
# Insert a CDATA section into the XML markup.
|
||||
#
|
||||
# For example:
|
||||
#
|
||||
# xml.cdata!("text to be included in cdata")
|
||||
# #=> <![CDATA[text to be included in cdata]]>
|
||||
#
|
||||
def cdata!(text)
|
||||
_ensure_no_block ::Kernel.block_given?
|
||||
_special("<![CDATA[", "]]>", text, nil)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# NOTE: All private methods of a builder object are prefixed when
|
||||
# a "_" character to avoid possible conflict with XML tag names.
|
||||
|
||||
# Insert text directly in to the builder's target.
|
||||
def _text(text)
|
||||
@target << text
|
||||
end
|
||||
|
||||
# Insert special instruction.
|
||||
def _special(open, close, data=nil, attrs=nil, order=[])
|
||||
_indent
|
||||
@target << open
|
||||
@target << data if data
|
||||
_insert_attributes(attrs, order) if attrs
|
||||
@target << close
|
||||
_newline
|
||||
end
|
||||
|
||||
# Start an XML tag. If <tt>end_too</tt> is true, then the start
|
||||
# tag is also the end tag (e.g. <br/>
|
||||
def _start_tag(sym, attrs, end_too=false)
|
||||
@target << "<#{sym}"
|
||||
_insert_attributes(attrs)
|
||||
@target << "/" if end_too
|
||||
@target << ">"
|
||||
end
|
||||
|
||||
# Insert an ending tag.
|
||||
def _end_tag(sym)
|
||||
@target << "</#{sym}>"
|
||||
end
|
||||
|
||||
# Insert the attributes (given in the hash).
|
||||
def _insert_attributes(attrs, order=[])
|
||||
return if attrs.nil?
|
||||
order.each do |k|
|
||||
v = attrs[k]
|
||||
@target << %{ #{k}="#{_attr_value(v)}"} if v # " WART
|
||||
end
|
||||
attrs.each do |k, v|
|
||||
@target << %{ #{k}="#{_attr_value(v)}"} unless order.member?(k) # " WART
|
||||
end
|
||||
end
|
||||
|
||||
def _attr_value(value)
|
||||
case value
|
||||
when ::Symbol
|
||||
value.to_s
|
||||
else
|
||||
_escape_quote(value.to_s)
|
||||
end
|
||||
end
|
||||
|
||||
def _ensure_no_block(got_block)
|
||||
if got_block
|
||||
fail IllegalBlockError,
|
||||
"Blocks are not allowed on XML instructions"
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
@@ -1,322 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
# Authors:: Sven Fuchs (http://www.artweb-design.de),
|
||||
# Joshua Harvey (http://www.workingwithrails.com/person/759-joshua-harvey),
|
||||
# Stephan Soller (http://www.arkanis-development.de/),
|
||||
# Saimon Moore (http://saimonmoore.net),
|
||||
# Matt Aimonetti (http://railsontherun.com/)
|
||||
# Copyright:: Copyright (c) 2008 The Ruby i18n Team
|
||||
# License:: MIT
|
||||
require 'i18n/exceptions'
|
||||
require 'i18n/core_ext/string/interpolate'
|
||||
|
||||
module I18n
|
||||
autoload :Backend, 'i18n/backend'
|
||||
autoload :Config, 'i18n/config'
|
||||
autoload :Gettext, 'i18n/gettext'
|
||||
autoload :Locale, 'i18n/locale'
|
||||
|
||||
class << self
|
||||
# Gets I18n configuration object.
|
||||
def config
|
||||
Thread.current[:i18n_config] ||= I18n::Config.new
|
||||
end
|
||||
|
||||
# Sets I18n configuration object.
|
||||
def config=(value)
|
||||
Thread.current[:i18n_config] = value
|
||||
end
|
||||
|
||||
# Write methods which delegates to the configuration object
|
||||
%w(locale backend default_locale available_locales default_separator
|
||||
exception_handler load_path).each do |method|
|
||||
module_eval <<-DELEGATORS, __FILE__, __LINE__ + 1
|
||||
def #{method}
|
||||
config.#{method}
|
||||
end
|
||||
|
||||
def #{method}=(value)
|
||||
config.#{method} = (value)
|
||||
end
|
||||
DELEGATORS
|
||||
end
|
||||
|
||||
# Tells the backend to reload translations. Used in situations like the
|
||||
# Rails development environment. Backends can implement whatever strategy
|
||||
# is useful.
|
||||
def reload!
|
||||
config.backend.reload!
|
||||
end
|
||||
|
||||
# Translates, pluralizes and interpolates a given key using a given locale,
|
||||
# scope, and default, as well as interpolation values.
|
||||
#
|
||||
# *LOOKUP*
|
||||
#
|
||||
# Translation data is organized as a nested hash using the upper-level keys
|
||||
# as namespaces. <em>E.g.</em>, ActionView ships with the translation:
|
||||
# <tt>:date => {:formats => {:short => "%b %d"}}</tt>.
|
||||
#
|
||||
# Translations can be looked up at any level of this hash using the key argument
|
||||
# and the scope option. <em>E.g.</em>, in this example <tt>I18n.t :date</tt>
|
||||
# returns the whole translations hash <tt>{:formats => {:short => "%b %d"}}</tt>.
|
||||
#
|
||||
# Key can be either a single key or a dot-separated key (both Strings and Symbols
|
||||
# work). <em>E.g.</em>, the short format can be looked up using both:
|
||||
# I18n.t 'date.formats.short'
|
||||
# I18n.t :'date.formats.short'
|
||||
#
|
||||
# Scope can be either a single key, a dot-separated key or an array of keys
|
||||
# or dot-separated keys. Keys and scopes can be combined freely. So these
|
||||
# examples will all look up the same short date format:
|
||||
# I18n.t 'date.formats.short'
|
||||
# I18n.t 'formats.short', :scope => 'date'
|
||||
# I18n.t 'short', :scope => 'date.formats'
|
||||
# I18n.t 'short', :scope => %w(date formats)
|
||||
#
|
||||
# *INTERPOLATION*
|
||||
#
|
||||
# Translations can contain interpolation variables which will be replaced by
|
||||
# values passed to #translate as part of the options hash, with the keys matching
|
||||
# the interpolation variable names.
|
||||
#
|
||||
# <em>E.g.</em>, with a translation <tt>:foo => "foo %{bar}"</tt> the option
|
||||
# value for the key +bar+ will be interpolated into the translation:
|
||||
# I18n.t :foo, :bar => 'baz' # => 'foo baz'
|
||||
#
|
||||
# *PLURALIZATION*
|
||||
#
|
||||
# Translation data can contain pluralized translations. Pluralized translations
|
||||
# are arrays of singluar/plural versions of translations like <tt>['Foo', 'Foos']</tt>.
|
||||
#
|
||||
# Note that <tt>I18n::Backend::Simple</tt> only supports an algorithm for English
|
||||
# pluralization rules. Other algorithms can be supported by custom backends.
|
||||
#
|
||||
# This returns the singular version of a pluralized translation:
|
||||
# I18n.t :foo, :count => 1 # => 'Foo'
|
||||
#
|
||||
# These both return the plural version of a pluralized translation:
|
||||
# I18n.t :foo, :count => 0 # => 'Foos'
|
||||
# I18n.t :foo, :count => 2 # => 'Foos'
|
||||
#
|
||||
# The <tt>:count</tt> option can be used both for pluralization and interpolation.
|
||||
# <em>E.g.</em>, with the translation
|
||||
# <tt>:foo => ['%{count} foo', '%{count} foos']</tt>, count will
|
||||
# be interpolated to the pluralized translation:
|
||||
# I18n.t :foo, :count => 1 # => '1 foo'
|
||||
#
|
||||
# *DEFAULTS*
|
||||
#
|
||||
# This returns the translation for <tt>:foo</tt> or <tt>default</tt> if no translation was found:
|
||||
# I18n.t :foo, :default => 'default'
|
||||
#
|
||||
# This returns the translation for <tt>:foo</tt> or the translation for <tt>:bar</tt> if no
|
||||
# translation for <tt>:foo</tt> was found:
|
||||
# I18n.t :foo, :default => :bar
|
||||
#
|
||||
# Returns the translation for <tt>:foo</tt> or the translation for <tt>:bar</tt>
|
||||
# or <tt>default</tt> if no translations for <tt>:foo</tt> and <tt>:bar</tt> were found.
|
||||
# I18n.t :foo, :default => [:bar, 'default']
|
||||
#
|
||||
# *BULK LOOKUP*
|
||||
#
|
||||
# This returns an array with the translations for <tt>:foo</tt> and <tt>:bar</tt>.
|
||||
# I18n.t [:foo, :bar]
|
||||
#
|
||||
# Can be used with dot-separated nested keys:
|
||||
# I18n.t [:'baz.foo', :'baz.bar']
|
||||
#
|
||||
# Which is the same as using a scope option:
|
||||
# I18n.t [:foo, :bar], :scope => :baz
|
||||
#
|
||||
# *LAMBDAS*
|
||||
#
|
||||
# Both translations and defaults can be given as Ruby lambdas. Lambdas will be
|
||||
# called and passed the key and options.
|
||||
#
|
||||
# E.g. assuming the key <tt>:salutation</tt> resolves to:
|
||||
# lambda { |key, options| options[:gender] == 'm' ? "Mr. %{options[:name]}" : "Mrs. %{options[:name]}" }
|
||||
#
|
||||
# Then <tt>I18n.t(:salutation, :gender => 'w', :name => 'Smith') will result in "Mrs. Smith".
|
||||
#
|
||||
# It is recommended to use/implement lambdas in an "idempotent" way. E.g. when
|
||||
# a cache layer is put in front of I18n.translate it will generate a cache key
|
||||
# from the argument values passed to #translate. Therefor your lambdas should
|
||||
# always return the same translations/values per unique combination of argument
|
||||
# values.
|
||||
def translate(*args)
|
||||
options = args.pop if args.last.is_a?(Hash)
|
||||
key = args.shift
|
||||
locale = options && options.delete(:locale) || config.locale
|
||||
raises = options && options.delete(:raise)
|
||||
config.backend.translate(locale, key, options || {})
|
||||
rescue I18n::ArgumentError => exception
|
||||
raise exception if raises
|
||||
handle_exception(exception, locale, key, options)
|
||||
end
|
||||
alias :t :translate
|
||||
|
||||
def translate!(key, options = {})
|
||||
translate(key, options.merge( :raise => true ))
|
||||
end
|
||||
alias :t! :translate!
|
||||
|
||||
# Transliterates UTF-8 characters to ASCII. By default this method will
|
||||
# transliterate only Latin strings to an ASCII approximation:
|
||||
#
|
||||
# I18n.transliterate("Ærøskøbing")
|
||||
# # => "AEroskobing"
|
||||
#
|
||||
# I18n.transliterate("日本語")
|
||||
# # => "???"
|
||||
#
|
||||
# It's also possible to add support for per-locale transliterations. I18n
|
||||
# expects transliteration rules to be stored at
|
||||
# <tt>i18n.transliterate.rule</tt>.
|
||||
#
|
||||
# Transliteration rules can either be a Hash or a Proc. Procs must accept a
|
||||
# single string argument. Hash rules inherit the default transliteration
|
||||
# rules, while Procs do not.
|
||||
#
|
||||
# *Examples*
|
||||
#
|
||||
# Setting a Hash in <locale>.yml:
|
||||
#
|
||||
# i18n:
|
||||
# transliterate:
|
||||
# rule:
|
||||
# ü: "ue"
|
||||
# ö: "oe"
|
||||
#
|
||||
# Setting a Hash using Ruby:
|
||||
#
|
||||
# store_translations(:de, :i18n => {
|
||||
# :transliterate => {
|
||||
# :rule => {
|
||||
# "ü" => "ue",
|
||||
# "ö" => "oe"
|
||||
# }
|
||||
# }
|
||||
# )
|
||||
#
|
||||
# Setting a Proc:
|
||||
#
|
||||
# translit = lambda {|string| MyTransliterator.transliterate(string) }
|
||||
# store_translations(:xx, :i18n => {:transliterate => {:rule => translit})
|
||||
#
|
||||
# Transliterating strings:
|
||||
#
|
||||
# I18n.locale = :en
|
||||
# I18n.transliterate("Jürgen") # => "Jurgen"
|
||||
# I18n.locale = :de
|
||||
# I18n.transliterate("Jürgen") # => "Juergen"
|
||||
# I18n.transliterate("Jürgen", :locale => :en) # => "Jurgen"
|
||||
# I18n.transliterate("Jürgen", :locale => :de) # => "Juergen"
|
||||
def transliterate(*args)
|
||||
options = args.pop if args.last.is_a?(Hash)
|
||||
key = args.shift
|
||||
locale = options && options.delete(:locale) || config.locale
|
||||
raises = options && options.delete(:raise)
|
||||
replacement = options && options.delete(:replacement)
|
||||
config.backend.transliterate(locale, key, replacement)
|
||||
rescue I18n::ArgumentError => exception
|
||||
raise exception if raises
|
||||
handle_exception(exception, locale, key, options)
|
||||
end
|
||||
|
||||
# Localizes certain objects, such as dates and numbers to local formatting.
|
||||
def localize(object, options = {})
|
||||
locale = options.delete(:locale) || config.locale
|
||||
format = options.delete(:format) || :default
|
||||
config.backend.localize(locale, object, format, options)
|
||||
end
|
||||
alias :l :localize
|
||||
|
||||
# Executes block with given I18n.locale set.
|
||||
def with_locale(tmp_locale = nil)
|
||||
if tmp_locale
|
||||
current_locale = self.locale
|
||||
self.locale = tmp_locale
|
||||
end
|
||||
yield
|
||||
ensure
|
||||
self.locale = current_locale if tmp_locale
|
||||
end
|
||||
|
||||
|
||||
# Merges the given locale, key and scope into a single array of keys.
|
||||
# Splits keys that contain dots into multiple keys. Makes sure all
|
||||
# keys are Symbols.
|
||||
def normalize_keys(locale, key, scope, separator = nil)
|
||||
separator ||= I18n.default_separator
|
||||
|
||||
keys = []
|
||||
keys.concat normalize_key(locale, separator)
|
||||
keys.concat normalize_key(scope, separator)
|
||||
keys.concat normalize_key(key, separator)
|
||||
keys
|
||||
end
|
||||
|
||||
# making these private until Ruby 1.9.2 can send to protected methods again
|
||||
# see http://redmine.ruby-lang.org/repositories/revision/ruby-19?rev=24280
|
||||
private
|
||||
|
||||
# Handles exceptions raised in the backend. All exceptions except for
|
||||
# MissingTranslationData exceptions are re-raised. When a MissingTranslationData
|
||||
# was caught and the option :raise is not set the handler returns an error
|
||||
# message string containing the key/scope.
|
||||
def default_exception_handler(exception, locale, key, options)
|
||||
return exception.message if MissingTranslationData === exception
|
||||
raise exception
|
||||
end
|
||||
|
||||
# Any exceptions thrown in translate will be sent to the @@exception_handler
|
||||
# which can be a Symbol, a Proc or any other Object.
|
||||
#
|
||||
# If exception_handler is a Symbol then it will simply be sent to I18n as
|
||||
# a method call. A Proc will simply be called. In any other case the
|
||||
# method #call will be called on the exception_handler object.
|
||||
#
|
||||
# Examples:
|
||||
#
|
||||
# I18n.exception_handler = :default_exception_handler # this is the default
|
||||
# I18n.default_exception_handler(exception, locale, key, options) # will be called like this
|
||||
#
|
||||
# I18n.exception_handler = lambda { |*args| ... } # a lambda
|
||||
# I18n.exception_handler.call(exception, locale, key, options) # will be called like this
|
||||
#
|
||||
# I18n.exception_handler = I18nExceptionHandler.new # an object
|
||||
# I18n.exception_handler.call(exception, locale, key, options) # will be called like this
|
||||
def handle_exception(exception, locale, key, options)
|
||||
case config.exception_handler
|
||||
when Symbol
|
||||
send(config.exception_handler, exception, locale, key, options)
|
||||
else
|
||||
config.exception_handler.call(exception, locale, key, options)
|
||||
end
|
||||
end
|
||||
|
||||
# Deprecated. Will raise a warning in future versions and then finally be
|
||||
# removed. Use I18n.normalize_keys instead.
|
||||
def normalize_translation_keys(locale, key, scope, separator = nil)
|
||||
normalize_keys(locale, key, scope, separator)
|
||||
end
|
||||
|
||||
def normalize_key(key, separator)
|
||||
normalized_key_cache[separator][key] ||=
|
||||
case key
|
||||
when Array
|
||||
key.map { |k| normalize_key(k, separator) }.flatten
|
||||
else
|
||||
keys = key.to_s.split(separator)
|
||||
keys.delete('')
|
||||
keys.map!{ |k| k.to_sym }
|
||||
keys
|
||||
end
|
||||
end
|
||||
|
||||
def normalized_key_cache
|
||||
@normalized_key_cache ||= Hash.new { |h,k| h[k] = {} }
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,20 +0,0 @@
|
||||
module I18n
|
||||
module Backend
|
||||
autoload :ActiveRecord, 'i18n/backend/active_record'
|
||||
autoload :Base, 'i18n/backend/base'
|
||||
autoload :InterpolationCompiler, 'i18n/backend/interpolation_compiler'
|
||||
autoload :Cache, 'i18n/backend/cache'
|
||||
autoload :Cascade, 'i18n/backend/cascade'
|
||||
autoload :Chain, 'i18n/backend/chain'
|
||||
autoload :Cldr, 'i18n/backend/cldr'
|
||||
autoload :Fallbacks, 'i18n/backend/fallbacks'
|
||||
autoload :Flatten, 'i18n/backend/flatten'
|
||||
autoload :Gettext, 'i18n/backend/gettext'
|
||||
autoload :KeyValue, 'i18n/backend/key_value'
|
||||
autoload :Memoize, 'i18n/backend/memoize'
|
||||
autoload :Metadata, 'i18n/backend/metadata'
|
||||
autoload :Pluralization, 'i18n/backend/pluralization'
|
||||
autoload :Simple, 'i18n/backend/simple'
|
||||
autoload :Transliterator, 'i18n/backend/transliterator'
|
||||
end
|
||||
end
|
||||
@@ -1,61 +0,0 @@
|
||||
require 'i18n/backend/base'
|
||||
require 'i18n/backend/active_record/translation'
|
||||
|
||||
module I18n
|
||||
module Backend
|
||||
class ActiveRecord
|
||||
autoload :Missing, 'i18n/backend/active_record/missing'
|
||||
autoload :StoreProcs, 'i18n/backend/active_record/store_procs'
|
||||
autoload :Translation, 'i18n/backend/active_record/translation'
|
||||
|
||||
module Implementation
|
||||
include Base, Flatten
|
||||
|
||||
def available_locales
|
||||
begin
|
||||
Translation.available_locales
|
||||
rescue ::ActiveRecord::StatementInvalid
|
||||
[]
|
||||
end
|
||||
end
|
||||
|
||||
def store_translations(locale, data, options = {})
|
||||
escape = options.fetch(:escape, true)
|
||||
flatten_translations(locale, data, escape, false).each do |key, value|
|
||||
Translation.locale(locale).lookup(expand_keys(key)).delete_all
|
||||
Translation.create(:locale => locale.to_s, :key => key.to_s, :value => value)
|
||||
end
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def lookup(locale, key, scope = [], options = {})
|
||||
key = normalize_flat_keys(locale, key, scope, options[:separator])
|
||||
result = Translation.locale(locale).lookup(key).all
|
||||
|
||||
if result.empty?
|
||||
nil
|
||||
elsif result.first.key == key
|
||||
result.first.value
|
||||
else
|
||||
chop_range = (key.size + FLATTEN_SEPARATOR.size)..-1
|
||||
result = result.inject({}) do |hash, r|
|
||||
hash[r.key.slice(chop_range)] = r.value
|
||||
hash
|
||||
end
|
||||
result.deep_symbolize_keys
|
||||
end
|
||||
end
|
||||
|
||||
# For a key :'foo.bar.baz' return ['foo', 'foo.bar', 'foo.bar.baz']
|
||||
def expand_keys(key)
|
||||
key.to_s.split(FLATTEN_SEPARATOR).inject([]) do |keys, key|
|
||||
keys << [keys.last, key].compact.join(FLATTEN_SEPARATOR)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
include Implementation
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,65 +0,0 @@
|
||||
# This extension stores translation stub records for missing translations to
|
||||
# the database.
|
||||
#
|
||||
# This is useful if you have a web based translation tool. It will populate
|
||||
# the database with untranslated keys as the application is being used. A
|
||||
# translator can then go through these and add missing translations.
|
||||
#
|
||||
# Example usage:
|
||||
#
|
||||
# I18n::Backend::Chain.send(:include, I18n::Backend::ActiveRecord::Missing)
|
||||
# I18n.backend = I18nChainBackend.new(I18n::Backend::ActiveRecord.new, I18n::Backend::Simple.new)
|
||||
#
|
||||
# Stub records for pluralizations will also be created for each key defined
|
||||
# in i18n.plural.keys.
|
||||
#
|
||||
# For example:
|
||||
#
|
||||
# # en.yml
|
||||
# en:
|
||||
# i18n:
|
||||
# plural:
|
||||
# keys: [:zero, :one, :other]
|
||||
#
|
||||
# # pl.yml
|
||||
# pl:
|
||||
# i18n:
|
||||
# plural:
|
||||
# keys: [:zero, :one, :few, :other]
|
||||
#
|
||||
# It will also persist interpolation keys in Translation#interpolations so
|
||||
# translators will be able to review and use them.
|
||||
module I18n
|
||||
module Backend
|
||||
class ActiveRecord
|
||||
module Missing
|
||||
def store_default_translations(locale, key, options = {})
|
||||
count, scope, default, separator = options.values_at(:count, *Base::RESERVED_KEYS)
|
||||
separator ||= I18n.default_separator
|
||||
|
||||
keys = I18n.normalize_keys(locale, key, scope, separator)[1..-1]
|
||||
key = keys.join(separator || I18n.default_separator)
|
||||
|
||||
unless ActiveRecord::Translation.locale(locale).lookup(key).exists?
|
||||
interpolations = options.reject { |name, value| Base::RESERVED_KEYS.include?(name) }.keys
|
||||
keys = count ? I18n.t('i18n.plural.keys', :locale => locale).map { |k| [key, k].join(separator) } : [key]
|
||||
keys.each { |key| store_default_translation(locale, key, interpolations) }
|
||||
end
|
||||
end
|
||||
|
||||
def store_default_translation(locale, key, interpolations)
|
||||
translation = ActiveRecord::Translation.new :locale => locale.to_s, :key => key
|
||||
translation.interpolations = interpolations
|
||||
translation.save
|
||||
end
|
||||
|
||||
def translate(locale, key, options = {})
|
||||
super
|
||||
rescue I18n::MissingTranslationData => e
|
||||
self.store_default_translations(locale, key, options)
|
||||
raise e
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,38 +0,0 @@
|
||||
# This module is intended to be mixed into the ActiveRecord backend to allow
|
||||
# storing Ruby Procs as translation values in the database.
|
||||
#
|
||||
# I18n.backend = I18n::Backend::ActiveRecord.new
|
||||
# I18n::Backend::ActiveRecord::Translation.send(:include, I18n::Backend::ActiveRecord::StoreProcs)
|
||||
#
|
||||
# The StoreProcs module requires the ParseTree and ruby2ruby gems and therefor
|
||||
# was extracted from the original backend.
|
||||
#
|
||||
# ParseTree is not compatible with Ruby 1.9.
|
||||
|
||||
begin
|
||||
require 'ruby2ruby'
|
||||
require 'parse_tree'
|
||||
require 'parse_tree_extensions'
|
||||
rescue LoadError => e
|
||||
puts "can't use StoreProcs because: #{e.message}"
|
||||
end
|
||||
|
||||
module I18n
|
||||
module Backend
|
||||
class ActiveRecord
|
||||
module StoreProcs
|
||||
def value=(v)
|
||||
case v
|
||||
when Proc
|
||||
write_attribute(:value, v.to_ruby)
|
||||
write_attribute(:is_proc, true)
|
||||
else
|
||||
write_attribute(:value, v)
|
||||
end
|
||||
end
|
||||
|
||||
Translation.send(:include, self) if method(:to_s).respond_to?(:to_ruby)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,93 +0,0 @@
|
||||
require 'active_record'
|
||||
|
||||
module I18n
|
||||
module Backend
|
||||
# ActiveRecord model used to store actual translations to the database.
|
||||
#
|
||||
# This model expects a table like the following to be already set up in
|
||||
# your the database:
|
||||
#
|
||||
# create_table :translations do |t|
|
||||
# t.string :locale
|
||||
# t.string :key
|
||||
# t.text :value
|
||||
# t.text :interpolations
|
||||
# t.boolean :is_proc, :default => false
|
||||
# end
|
||||
#
|
||||
# This model supports to named scopes :locale and :lookup. The :locale
|
||||
# scope simply adds a condition for a given locale:
|
||||
#
|
||||
# I18n::Backend::ActiveRecord::Translation.locale(:en).all
|
||||
# # => all translation records that belong to the :en locale
|
||||
#
|
||||
# The :lookup scope adds a condition for looking up all translations
|
||||
# that either start with the given keys (joined by an optionally given
|
||||
# separator or I18n.default_separator) or that exactly have this key.
|
||||
#
|
||||
# # with translations present for :"foo.bar" and :"foo.baz"
|
||||
# I18n::Backend::ActiveRecord::Translation.lookup(:foo)
|
||||
# # => an array with both translation records :"foo.bar" and :"foo.baz"
|
||||
#
|
||||
# I18n::Backend::ActiveRecord::Translation.lookup([:foo, :bar])
|
||||
# I18n::Backend::ActiveRecord::Translation.lookup(:"foo.bar")
|
||||
# # => an array with the translation record :"foo.bar"
|
||||
#
|
||||
# When the StoreProcs module was mixed into this model then Procs will
|
||||
# be stored to the database as Ruby code and evaluated when :value is
|
||||
# called.
|
||||
#
|
||||
# Translation = I18n::Backend::ActiveRecord::Translation
|
||||
# Translation.create \
|
||||
# :locale => 'en'
|
||||
# :key => 'foo'
|
||||
# :value => lambda { |key, options| 'FOO' }
|
||||
# Translation.find_by_locale_and_key('en', 'foo').value
|
||||
# # => 'FOO'
|
||||
class ActiveRecord
|
||||
class Translation < ::ActiveRecord::Base
|
||||
set_table_name 'translations'
|
||||
attr_protected :is_proc, :interpolations
|
||||
|
||||
serialize :value
|
||||
serialize :interpolations, Array
|
||||
|
||||
scope_method = ::ActiveRecord::VERSION::MAJOR == 2 ? :named_scope : :scope
|
||||
|
||||
send scope_method, :locale, lambda { |locale|
|
||||
{ :conditions => { :locale => locale.to_s } }
|
||||
}
|
||||
|
||||
send scope_method, :lookup, lambda { |keys, *separator|
|
||||
column_name = connection.quote_column_name('key')
|
||||
keys = Array(keys).map! { |key| key.to_s }
|
||||
|
||||
unless separator.empty?
|
||||
warn "[DEPRECATION] Giving a separator to Translation.lookup is deprecated. " <<
|
||||
"You can change the internal separator by overwriting FLATTEN_SEPARATOR."
|
||||
end
|
||||
|
||||
namespace = "#{keys.last}#{I18n::Backend::Flatten::FLATTEN_SEPARATOR}%"
|
||||
{ :conditions => ["#{column_name} IN (?) OR #{column_name} LIKE ?", keys, namespace] }
|
||||
}
|
||||
|
||||
def self.available_locales
|
||||
Translation.find(:all, :select => 'DISTINCT locale').map { |t| t.locale.to_sym }
|
||||
end
|
||||
|
||||
def interpolates?(key)
|
||||
self.interpolations.include?(key) if self.interpolations
|
||||
end
|
||||
|
||||
def value
|
||||
if is_proc
|
||||
Kernel.eval(read_attribute(:value))
|
||||
else
|
||||
value = read_attribute(:value)
|
||||
value == 'f' ? false : value
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,237 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
require 'yaml'
|
||||
require 'i18n/core_ext/hash'
|
||||
|
||||
module I18n
|
||||
module Backend
|
||||
module Base
|
||||
include I18n::Backend::Transliterator
|
||||
|
||||
RESERVED_KEYS = [:scope, :default, :separator, :resolve]
|
||||
RESERVED_KEYS_PATTERN = /%\{(#{RESERVED_KEYS.join("|")})\}/
|
||||
DEPRECATED_INTERPOLATION_SYNTAX_PATTERN = /(\\)?\{\{([^\}]+)\}\}/
|
||||
INTERPOLATION_SYNTAX_PATTERN = /%\{([^\}]+)\}/
|
||||
|
||||
# Accepts a list of paths to translation files. Loads translations from
|
||||
# plain Ruby (*.rb) or YAML files (*.yml). See #load_rb and #load_yml
|
||||
# for details.
|
||||
def load_translations(*filenames)
|
||||
filenames = I18n.load_path.flatten if filenames.empty?
|
||||
filenames.each { |filename| load_file(filename) }
|
||||
end
|
||||
|
||||
# This method receives a locale, a data hash and options for storing translations.
|
||||
# Should be implemented
|
||||
def store_translations(locale, data, options = {})
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
def translate(locale, key, options = {})
|
||||
raise InvalidLocale.new(locale) unless locale
|
||||
return key.map { |k| translate(locale, k, options) } if key.is_a?(Array)
|
||||
|
||||
entry = key && lookup(locale, key, options[:scope], options)
|
||||
|
||||
if options.empty?
|
||||
entry = resolve(locale, key, entry, options)
|
||||
else
|
||||
count, default = options.values_at(:count, :default)
|
||||
values = options.except(*RESERVED_KEYS)
|
||||
entry = entry.nil? && default ?
|
||||
default(locale, key, default, options) : resolve(locale, key, entry, options)
|
||||
end
|
||||
|
||||
raise(I18n::MissingTranslationData.new(locale, key, options)) if entry.nil?
|
||||
entry = entry.dup if entry.is_a?(String)
|
||||
|
||||
entry = pluralize(locale, entry, count) if count
|
||||
entry = interpolate(locale, entry, values) if values
|
||||
entry
|
||||
end
|
||||
|
||||
# Acts the same as +strftime+, but uses a localized version of the
|
||||
# format string. Takes a key from the date/time formats translations as
|
||||
# a format argument (<em>e.g.</em>, <tt>:short</tt> in <tt>:'date.formats'</tt>).
|
||||
def localize(locale, object, format = :default, options = {})
|
||||
raise ArgumentError, "Object must be a Date, DateTime or Time object. #{object.inspect} given." unless object.respond_to?(:strftime)
|
||||
|
||||
if Symbol === format
|
||||
key = format
|
||||
type = object.respond_to?(:sec) ? 'time' : 'date'
|
||||
format = I18n.t(:"#{type}.formats.#{key}", options.merge(:raise => true, :object => object, :locale => locale))
|
||||
end
|
||||
|
||||
# format = resolve(locale, object, format, options)
|
||||
format = format.to_s.gsub(/%[aAbBp]/) do |match|
|
||||
case match
|
||||
when '%a' then I18n.t(:"date.abbr_day_names", :locale => locale, :format => format)[object.wday]
|
||||
when '%A' then I18n.t(:"date.day_names", :locale => locale, :format => format)[object.wday]
|
||||
when '%b' then I18n.t(:"date.abbr_month_names", :locale => locale, :format => format)[object.mon]
|
||||
when '%B' then I18n.t(:"date.month_names", :locale => locale, :format => format)[object.mon]
|
||||
when '%p' then I18n.t(:"time.#{object.hour < 12 ? :am : :pm}", :locale => locale, :format => format) if object.respond_to? :hour
|
||||
end
|
||||
end
|
||||
|
||||
object.strftime(format)
|
||||
end
|
||||
|
||||
# Returns an array of locales for which translations are available
|
||||
# ignoring the reserved translation meta data key :i18n.
|
||||
def available_locales
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
def reload!
|
||||
@skip_syntax_deprecation = false
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
# The method which actually looks up for the translation in the store.
|
||||
def lookup(locale, key, scope = [], options = {})
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
# Evaluates defaults.
|
||||
# If given subject is an Array, it walks the array and returns the
|
||||
# first translation that can be resolved. Otherwise it tries to resolve
|
||||
# the translation directly.
|
||||
def default(locale, object, subject, options = {})
|
||||
options = options.dup.reject { |key, value| key == :default }
|
||||
case subject
|
||||
when Array
|
||||
subject.each do |item|
|
||||
result = resolve(locale, object, item, options) and return result
|
||||
end and nil
|
||||
else
|
||||
resolve(locale, object, subject, options)
|
||||
end
|
||||
end
|
||||
|
||||
# Resolves a translation.
|
||||
# If the given subject is a Symbol, it will be translated with the
|
||||
# given options. If it is a Proc then it will be evaluated. All other
|
||||
# subjects will be returned directly.
|
||||
def resolve(locale, object, subject, options = nil)
|
||||
return subject if options[:resolve] == false
|
||||
case subject
|
||||
when Symbol
|
||||
I18n.translate(subject, (options || {}).merge(:locale => locale, :raise => true))
|
||||
when Proc
|
||||
date_or_time = options.delete(:object) || object
|
||||
resolve(locale, object, subject.call(date_or_time, options), options = {})
|
||||
else
|
||||
subject
|
||||
end
|
||||
rescue MissingTranslationData
|
||||
nil
|
||||
end
|
||||
|
||||
# Picks a translation from an array according to English pluralization
|
||||
# rules. It will pick the first translation if count is not equal to 1
|
||||
# and the second translation if it is equal to 1. Other backends can
|
||||
# implement more flexible or complex pluralization rules.
|
||||
def pluralize(locale, entry, count)
|
||||
return entry unless entry.is_a?(Hash) && count
|
||||
|
||||
key = :zero if count == 0 && entry.has_key?(:zero)
|
||||
key ||= count == 1 ? :one : :other
|
||||
raise InvalidPluralizationData.new(entry, count) unless entry.has_key?(key)
|
||||
entry[key]
|
||||
end
|
||||
|
||||
# Interpolates values into a given string.
|
||||
#
|
||||
# interpolate "file %{file} opened by %%{user}", :file => 'test.txt', :user => 'Mr. X'
|
||||
# # => "file test.txt opened by %{user}"
|
||||
#
|
||||
# Note that you have to double escape the <tt>\\</tt> when you want to escape
|
||||
# the <tt>{{...}}</tt> key in a string (once for the string and once for the
|
||||
# interpolation).
|
||||
def interpolate(locale, string, values = {})
|
||||
return string unless string.is_a?(::String) && !values.empty?
|
||||
original_values = values.dup
|
||||
|
||||
preserve_encoding(string) do
|
||||
string = string.gsub(DEPRECATED_INTERPOLATION_SYNTAX_PATTERN) do
|
||||
escaped, key = $1, $2.to_sym
|
||||
if escaped
|
||||
"{{#{key}}}"
|
||||
else
|
||||
warn_syntax_deprecation!
|
||||
"%{#{key}}"
|
||||
end
|
||||
end
|
||||
|
||||
keys = string.scan(INTERPOLATION_SYNTAX_PATTERN).flatten
|
||||
return string if keys.empty?
|
||||
|
||||
values.each do |key, value|
|
||||
if keys.include?(key.to_s)
|
||||
value = value.call(values) if interpolate_lambda?(value, string, key)
|
||||
value = value.to_s unless value.is_a?(::String)
|
||||
values[key] = value
|
||||
else
|
||||
values.delete(key)
|
||||
end
|
||||
end
|
||||
|
||||
string % values
|
||||
end
|
||||
rescue KeyError => e
|
||||
if string =~ RESERVED_KEYS_PATTERN
|
||||
raise ReservedInterpolationKey.new($1.to_sym, string)
|
||||
else
|
||||
raise MissingInterpolationArgument.new(original_values, string)
|
||||
end
|
||||
end
|
||||
|
||||
def preserve_encoding(string)
|
||||
if string.respond_to?(:encoding)
|
||||
encoding = string.encoding
|
||||
result = yield
|
||||
result.force_encoding(encoding) if result.respond_to?(:force_encoding)
|
||||
result
|
||||
else
|
||||
yield
|
||||
end
|
||||
end
|
||||
|
||||
# returns true when the given value responds to :call and the key is
|
||||
# an interpolation placeholder in the given string
|
||||
def interpolate_lambda?(object, string, key)
|
||||
object.respond_to?(:call) && string =~ /%\{#{key}\}|%\<#{key}>.*?\d*\.?\d*[bBdiouxXeEfgGcps]\}/
|
||||
end
|
||||
|
||||
# Loads a single translations file by delegating to #load_rb or
|
||||
# #load_yml depending on the file extension and directly merges the
|
||||
# data to the existing translations. Raises I18n::UnknownFileType
|
||||
# for all other file extensions.
|
||||
def load_file(filename)
|
||||
type = File.extname(filename).tr('.', '').downcase
|
||||
raise UnknownFileType.new(type, filename) unless respond_to?(:"load_#{type}", true)
|
||||
data = send(:"load_#{type}", filename) # TODO raise a meaningful exception if this does not yield a Hash
|
||||
data.each { |locale, d| store_translations(locale, d) }
|
||||
end
|
||||
|
||||
# Loads a plain Ruby translations file. eval'ing the file must yield
|
||||
# a Hash containing translation data with locales as toplevel keys.
|
||||
def load_rb(filename)
|
||||
eval(IO.read(filename), binding, filename)
|
||||
end
|
||||
|
||||
# Loads a YAML translations file. The data must have locales as
|
||||
# toplevel keys.
|
||||
def load_yml(filename)
|
||||
YAML::load(IO.read(filename))
|
||||
end
|
||||
|
||||
def warn_syntax_deprecation! #:nodoc:
|
||||
return if @skip_syntax_deprecation
|
||||
warn "The {{key}} interpolation syntax in I18n messages is deprecated. Please use %{key} instead.\n#{caller.join("\n")}"
|
||||
@skip_syntax_deprecation = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,77 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
# This module allows you to easily cache all responses from the backend - thus
|
||||
# speeding up the I18n aspects of your application quite a bit.
|
||||
#
|
||||
# To enable caching you can simply include the Cache module to the Simple
|
||||
# backend - or whatever other backend you are using:
|
||||
#
|
||||
# I18n::Backend::Simple.send(:include, I18n::Backend::Cache)
|
||||
#
|
||||
# You will also need to set a cache store implementation that you want to use:
|
||||
#
|
||||
# I18n.cache_store = ActiveSupport::Cache.lookup_store(:memory_store)
|
||||
#
|
||||
# You can use any cache implementation you want that provides the same API as
|
||||
# ActiveSupport::Cache (only the methods #fetch and #write are being used).
|
||||
#
|
||||
# The cache_key implementation assumes that you only pass values to
|
||||
# I18n.translate that return a valid key from #hash (see
|
||||
# http://www.ruby-doc.org/core/classes/Object.html#M000337).
|
||||
module I18n
|
||||
class << self
|
||||
@@cache_store = nil
|
||||
@@cache_namespace = nil
|
||||
|
||||
def cache_store
|
||||
@@cache_store
|
||||
end
|
||||
|
||||
def cache_store=(store)
|
||||
@@cache_store = store
|
||||
end
|
||||
|
||||
def cache_namespace
|
||||
@@cache_namespace
|
||||
end
|
||||
|
||||
def cache_namespace=(namespace)
|
||||
@@cache_namespace = namespace
|
||||
end
|
||||
|
||||
def perform_caching?
|
||||
!cache_store.nil?
|
||||
end
|
||||
end
|
||||
|
||||
module Backend
|
||||
# TODO Should the cache be cleared if new translations are stored?
|
||||
module Cache
|
||||
def translate(*args)
|
||||
I18n.perform_caching? ? fetch(*args) { super } : super
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def fetch(*args, &block)
|
||||
result = I18n.cache_store.fetch(cache_key(*args), &block)
|
||||
raise result if result.is_a?(Exception)
|
||||
result = result.dup if result.frozen? rescue result
|
||||
result
|
||||
rescue MissingTranslationData => exception
|
||||
I18n.cache_store.write(cache_key(*args), exception)
|
||||
raise exception
|
||||
end
|
||||
|
||||
def cache_key(*args)
|
||||
# This assumes that only simple, native Ruby values are passed to I18n.translate.
|
||||
# Also, in Ruby < 1.8.7 {}.hash != {}.hash
|
||||
# (see http://paulbarry.com/articles/2009/09/14/why-rails-3-will-require-ruby-1-8-7)
|
||||
# If args.inspect does not work for you for some reason, patches are very welcome :)
|
||||
hash = RUBY_VERSION >= "1.8.7" ? args.hash : args.inspect
|
||||
keys = ['i18n', I18n.cache_namespace, hash]
|
||||
keys.compact.join('-')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,57 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
# EXPERIMENTAL
|
||||
#
|
||||
# The Cascade module adds the ability to do cascading lookups to backends that
|
||||
# are compatible to the Simple backend.
|
||||
#
|
||||
# By cascading lookups we mean that for any key that can not be found the
|
||||
# Cascade module strips one segment off the scope part of the key and then
|
||||
# tries to look up the key in that scope.
|
||||
#
|
||||
# E.g. when a lookup for the key :"foo.bar.baz" does not yield a result then
|
||||
# the segment :bar will be stripped off the scope part :"foo.bar" and the new
|
||||
# scope :foo will be used to look up the key :baz. If that does not succeed
|
||||
# then the remaining scope segment :foo will be omitted, too, and again the
|
||||
# key :baz will be looked up (now with no scope).
|
||||
#
|
||||
# To enable a cascading lookup one passes the :cascade option:
|
||||
#
|
||||
# I18n.t(:'foo.bar.baz', :cascade => true)
|
||||
#
|
||||
# This will return the first translation found for :"foo.bar.baz", :"foo.baz"
|
||||
# or :baz in this order.
|
||||
#
|
||||
# The cascading lookup takes precedence over resolving any given defaults.
|
||||
# I.e. defaults will kick in after the cascading lookups haven't succeeded.
|
||||
#
|
||||
# This behavior is useful for libraries like ActiveRecord validations where
|
||||
# the library wants to give users a bunch of more or less fine-grained options
|
||||
# of scopes for a particular key.
|
||||
#
|
||||
# Thanks to Clemens Kofler for the initial idea and implementation! See
|
||||
# http://github.com/clemens/i18n-cascading-backend
|
||||
|
||||
module I18n
|
||||
module Backend
|
||||
module Cascade
|
||||
def lookup(locale, key, scope = [], options = {})
|
||||
return super unless cascade = options[:cascade]
|
||||
|
||||
separator = options[:separator] || I18n.default_separator
|
||||
skip_root = cascade.has_key?(:skip_root) ? cascade[:skip_root] : true
|
||||
step = cascade[:step]
|
||||
|
||||
keys = I18n.normalize_keys(nil, key, nil, separator)
|
||||
offset = options[:cascade][:offset] || keys.length
|
||||
scope = I18n.normalize_keys(nil, nil, scope, separator) + keys
|
||||
key = scope.slice!(-offset, offset).join(separator)
|
||||
|
||||
begin
|
||||
result = super
|
||||
return result unless result.nil?
|
||||
end while !scope.empty? && scope.slice!(-step, step) && (!scope.empty? || !skip_root)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,77 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
module I18n
|
||||
module Backend
|
||||
# Backend that chains multiple other backends and checks each of them when
|
||||
# a translation needs to be looked up. This is useful when you want to use
|
||||
# standard translations with a Simple backend but store custom application
|
||||
# translations in a database or other backends.
|
||||
#
|
||||
# To use the Chain backend instantiate it and set it to the I18n module.
|
||||
# You can add chained backends through the initializer or backends
|
||||
# accessor:
|
||||
#
|
||||
# # preserves the existing Simple backend set to I18n.backend
|
||||
# I18n.backend = I18n::Backend::Chain.new(I18n::Backend::ActiveRecord.new, I18n.backend)
|
||||
#
|
||||
# The implementation assumes that all backends added to the Chain implement
|
||||
# a lookup method with the same API as Simple backend does.
|
||||
class Chain
|
||||
include Base
|
||||
|
||||
attr_accessor :backends
|
||||
|
||||
def initialize(*backends)
|
||||
self.backends = backends
|
||||
end
|
||||
|
||||
def reload!
|
||||
backends.each { |backend| backend.reload! }
|
||||
end
|
||||
|
||||
def store_translations(locale, data, options = {})
|
||||
backends.first.store_translations(locale, data, options = {})
|
||||
end
|
||||
|
||||
def available_locales
|
||||
backends.map { |backend| backend.available_locales }.flatten.uniq
|
||||
end
|
||||
|
||||
def translate(locale, key, options = {})
|
||||
return key.map { |k| translate(locale, k, options) } if key.is_a?(Array)
|
||||
|
||||
default = options.delete(:default)
|
||||
namespace = {}
|
||||
backends.each do |backend|
|
||||
begin
|
||||
options.update(:default => default) if default and backend == backends.last
|
||||
translation = backend.translate(locale, key, options)
|
||||
if namespace_lookup?(translation, options)
|
||||
namespace.update(translation)
|
||||
elsif !translation.nil?
|
||||
return translation
|
||||
end
|
||||
rescue MissingTranslationData
|
||||
end
|
||||
end
|
||||
return namespace unless namespace.empty?
|
||||
raise(I18n::MissingTranslationData.new(locale, key, options))
|
||||
end
|
||||
|
||||
def localize(locale, object, format = :default, options = {})
|
||||
backends.each do |backend|
|
||||
begin
|
||||
result = backend.localize(locale, object, format, options) and return result
|
||||
rescue MissingTranslationData
|
||||
end
|
||||
end
|
||||
raise(I18n::MissingTranslationData.new(locale, format, options))
|
||||
end
|
||||
|
||||
protected
|
||||
def namespace_lookup?(result, options)
|
||||
result.is_a?(Hash) and not options.has_key?(:count)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,100 +0,0 @@
|
||||
# encoding: utf-8
|
||||
require 'cldr'
|
||||
|
||||
module I18n
|
||||
module Backend
|
||||
module Cldr
|
||||
include ::Cldr::Format
|
||||
|
||||
def localize(locale, object, format = :default, options = {})
|
||||
options[:as] ||= detect_type(object, options)
|
||||
send(:"format_#{options[:as]}", locale, object, format, options)
|
||||
end
|
||||
|
||||
def format_decimal(locale, object, format = :default, options = {})
|
||||
formatter(locale, :decimal, format).apply(object, options)
|
||||
end
|
||||
|
||||
def format_integer(locale, object, format = :default, options = {})
|
||||
format_object(number, options.merge(:precision => 0))
|
||||
end
|
||||
|
||||
def format_currency(locale, object, format = :default, options = {})
|
||||
options.merge!(:currency => lookup_currency(locale, options[:currency], object)) if options[:currency].is_a?(Symbol)
|
||||
formatter(locale, :currency, format).apply(object, options)
|
||||
end
|
||||
|
||||
def format_percent(locale, object, format = :default, options = {})
|
||||
formatter(locale, :percent, format).apply(object, options)
|
||||
end
|
||||
|
||||
def format_date(locale, object, format = :default, options = {})
|
||||
formatter(locale, :date, format).apply(object, options)
|
||||
end
|
||||
|
||||
def format_time(locale, object, format = :default, options = {})
|
||||
formatter(locale, :time, format).apply(object, options)
|
||||
end
|
||||
|
||||
def format_datetime(locale, object, format = :default, options = {})
|
||||
key = :"calendars.gregorian.formats.datetime.#{format}.pattern"
|
||||
date = I18n.l(object, :format => options[:date_format] || format, :locale => locale, :as => :date)
|
||||
time = I18n.l(object, :format => options[:time_format] || format, :locale => locale, :as => :time)
|
||||
I18n.t(key, :date => date, :time => time, :locale => locale, :raise => true)
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def detect_type(object, options)
|
||||
options.has_key?(:currency) ? :currency : case object
|
||||
when ::Numeric
|
||||
:decimal
|
||||
when ::Date, ::DateTime, ::Time
|
||||
object.class.name.downcase.to_sym
|
||||
else
|
||||
raise_unspecified_format_type!
|
||||
end
|
||||
end
|
||||
|
||||
def formatter(locale, type, format)
|
||||
(@formatters ||= {})[:"#{locale}.#{type}.#{format}"] ||= begin
|
||||
format = lookup_format(locale, type, format)
|
||||
data = lookup_format_data(locale, type)
|
||||
::Cldr::Format.const_get(type.to_s.camelize).new(format, data)
|
||||
end
|
||||
end
|
||||
|
||||
def lookup_format(locale, type, format)
|
||||
key = case type
|
||||
when :date, :time, :datetime
|
||||
:"calendars.gregorian.formats.#{type}.#{format}.pattern"
|
||||
else
|
||||
:"numbers.formats.#{type}.patterns.#{format || :default}"
|
||||
end
|
||||
I18n.t(key, :locale => locale, :raise => true)
|
||||
end
|
||||
|
||||
def lookup_format_data(locale, type)
|
||||
key = case type
|
||||
when :date, :time, :datetime
|
||||
:'calendars.gregorian'
|
||||
else
|
||||
:'numbers.symbols'
|
||||
end
|
||||
I18n.t(key, :locale => locale, :raise => true)
|
||||
end
|
||||
|
||||
def lookup_currency(locale, currency, count)
|
||||
I18n.t(:"currencies.#{currency}", :locale => locale, :count => count)
|
||||
end
|
||||
|
||||
def raise_unspecified_format_type!
|
||||
raise ArgumentError.new("You have to specify a format type, e.g. :as => :number.")
|
||||
end
|
||||
|
||||
def raise_unspecified_currency!
|
||||
raise ArgumentError.new("You have to specify a currency, e.g. :currency => 'EUR'.")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,69 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
# I18n locale fallbacks are useful when you want your application to use
|
||||
# translations from other locales when translations for the current locale are
|
||||
# missing. E.g. you might want to use :en translations when translations in
|
||||
# your applications main locale :de are missing.
|
||||
#
|
||||
# To enable locale fallbacks you can simply include the Fallbacks module to
|
||||
# the Simple backend - or whatever other backend you are using:
|
||||
#
|
||||
# I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
|
||||
module I18n
|
||||
@@fallbacks = nil
|
||||
|
||||
class << self
|
||||
# Returns the current fallbacks implementation. Defaults to +I18n::Locale::Fallbacks+.
|
||||
def fallbacks
|
||||
@@fallbacks ||= I18n::Locale::Fallbacks.new
|
||||
end
|
||||
|
||||
# Sets the current fallbacks implementation. Use this to set a different fallbacks implementation.
|
||||
def fallbacks=(fallbacks)
|
||||
@@fallbacks = fallbacks
|
||||
end
|
||||
end
|
||||
|
||||
module Backend
|
||||
module Fallbacks
|
||||
# Overwrites the Base backend translate method so that it will try each
|
||||
# locale given by I18n.fallbacks for the given locale. E.g. for the
|
||||
# locale :"de-DE" it might try the locales :"de-DE", :de and :en
|
||||
# (depends on the fallbacks implementation) until it finds a result with
|
||||
# the given options. If it does not find any result for any of the
|
||||
# locales it will then raise a MissingTranslationData exception as
|
||||
# usual.
|
||||
#
|
||||
# The default option takes precedence over fallback locales
|
||||
# only when it's not a String. When default contains String it
|
||||
# is evaluated after fallback locales.
|
||||
def translate(locale, key, options = {})
|
||||
default = extract_string_default!(options) if options[:default]
|
||||
|
||||
I18n.fallbacks[locale].each do |fallback|
|
||||
begin
|
||||
result = super(fallback, key, options)
|
||||
return result unless result.nil?
|
||||
rescue I18n::MissingTranslationData
|
||||
end
|
||||
end
|
||||
|
||||
return super(locale, nil, options.merge(:default => default)) if default
|
||||
raise(I18n::MissingTranslationData.new(locale, key, options))
|
||||
end
|
||||
|
||||
def extract_string_default!(options)
|
||||
defaults = Array(options[:default])
|
||||
if index = find_first_string_default(defaults)
|
||||
options[:default] = defaults[0, index]
|
||||
defaults[index]
|
||||
end
|
||||
end
|
||||
|
||||
def find_first_string_default(defaults)
|
||||
defaults.each_index { |ix| return ix if String === defaults[ix] }
|
||||
nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,113 +0,0 @@
|
||||
module I18n
|
||||
module Backend
|
||||
# This module contains several helpers to assist flattening translations.
|
||||
# You may want to flatten translations for:
|
||||
#
|
||||
# 1) speed up lookups, as in the Memoize backend;
|
||||
# 2) In case you want to store translations in a data store, as in ActiveRecord backend;
|
||||
#
|
||||
# You can check both backends above for some examples.
|
||||
# This module also keeps all links in a hash so they can be properly resolved when flattened.
|
||||
module Flatten
|
||||
SEPARATOR_ESCAPE_CHAR = "\001"
|
||||
FLATTEN_SEPARATOR = "."
|
||||
|
||||
# normalize_keys the flatten way. This method is significantly faster
|
||||
# and creates way less objects than the one at I18n.normalize_keys.
|
||||
# It also handles escaping the translation keys.
|
||||
def self.normalize_flat_keys(locale, key, scope, separator)
|
||||
keys = [scope, key].flatten.compact
|
||||
separator ||= I18n.default_separator
|
||||
|
||||
if separator != FLATTEN_SEPARATOR
|
||||
keys.map! do |k|
|
||||
k.to_s.tr("#{FLATTEN_SEPARATOR}#{separator}",
|
||||
"#{SEPARATOR_ESCAPE_CHAR}#{FLATTEN_SEPARATOR}")
|
||||
end
|
||||
end
|
||||
|
||||
keys.join(".")
|
||||
end
|
||||
|
||||
# Receives a string and escape the default separator.
|
||||
def self.escape_default_separator(key) #:nodoc:
|
||||
key.to_s.tr(FLATTEN_SEPARATOR, SEPARATOR_ESCAPE_CHAR)
|
||||
end
|
||||
|
||||
# Shortcut to I18n::Backend::Flatten.normalize_flat_keys
|
||||
# and then resolve_links.
|
||||
def normalize_flat_keys(locale, key, scope, separator)
|
||||
key = I18n::Backend::Flatten.normalize_flat_keys(locale, key, scope, separator)
|
||||
resolve_link(locale, key)
|
||||
end
|
||||
|
||||
# Store flattened links.
|
||||
def links
|
||||
@links ||= Hash.new { |h,k| h[k] = {} }
|
||||
end
|
||||
|
||||
# Flatten keys for nested Hashes by chaining up keys:
|
||||
#
|
||||
# >> { "a" => { "b" => { "c" => "d", "e" => "f" }, "g" => "h" }, "i" => "j"}.wind
|
||||
# => { "a.b.c" => "d", "a.b.e" => "f", "a.g" => "h", "i" => "j" }
|
||||
#
|
||||
def flatten_keys(hash, escape, prev_key=nil, &block)
|
||||
hash.each_pair do |key, value|
|
||||
key = escape_default_separator(key) if escape
|
||||
curr_key = [prev_key, key].compact.join(FLATTEN_SEPARATOR).to_sym
|
||||
yield curr_key, value
|
||||
flatten_keys(value, escape, curr_key, &block) if value.is_a?(Hash)
|
||||
end
|
||||
end
|
||||
|
||||
# Receives a hash of translations (where the key is a locale and
|
||||
# the value is another hash) and return a hash with all
|
||||
# translations flattened.
|
||||
#
|
||||
# Nested hashes are included in the flattened hash just if subtree
|
||||
# is true and Symbols are automatically stored as links.
|
||||
def flatten_translations(locale, data, escape, subtree)
|
||||
hash = {}
|
||||
flatten_keys(data, escape) do |key, value|
|
||||
if value.is_a?(Hash)
|
||||
hash[key] = value if subtree
|
||||
else
|
||||
store_link(locale, key, value) if value.is_a?(Symbol)
|
||||
hash[key] = value
|
||||
end
|
||||
end
|
||||
hash
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def store_link(locale, key, link)
|
||||
links[locale.to_sym][key.to_s] = link.to_s
|
||||
end
|
||||
|
||||
def resolve_link(locale, key)
|
||||
key, locale = key.to_s, locale.to_sym
|
||||
links = self.links[locale]
|
||||
|
||||
if links.key?(key)
|
||||
links[key]
|
||||
elsif link = find_link(locale, key)
|
||||
store_link(locale, key, key.gsub(*link))
|
||||
else
|
||||
key
|
||||
end
|
||||
end
|
||||
|
||||
def find_link(locale, key) #:nodoc:
|
||||
links[locale].each do |from, to|
|
||||
return [from, to] if key[0, from.length] == from
|
||||
end && nil
|
||||
end
|
||||
|
||||
def escape_default_separator(key) #:nodoc:
|
||||
I18n::Backend::Flatten.escape_default_separator(key)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,75 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
require 'i18n/gettext'
|
||||
require 'i18n/gettext/po_parser'
|
||||
|
||||
# Experimental support for using Gettext po files to store translations.
|
||||
#
|
||||
# To use this you can simply include the module to the Simple backend - or
|
||||
# whatever other backend you are using.
|
||||
#
|
||||
# I18n::Backend::Simple.send(:include, I18n::Backend::Gettext)
|
||||
#
|
||||
# Now you should be able to include your Gettext translation (*.po) files to
|
||||
# the I18n.load_path so they're loaded to the backend and you can use them as
|
||||
# usual:
|
||||
#
|
||||
# I18n.load_path += Dir["path/to/locales/*.po"]
|
||||
#
|
||||
# Following the Gettext convention this implementation expects that your
|
||||
# translation files are named by their locales. E.g. the file en.po would
|
||||
# contain the translations for the English locale.
|
||||
module I18n
|
||||
module Backend
|
||||
module Gettext
|
||||
class PoData < Hash
|
||||
def set_comment(msgid_or_sym, comment)
|
||||
# ignore
|
||||
end
|
||||
end
|
||||
|
||||
protected
|
||||
def load_po(filename)
|
||||
locale = ::File.basename(filename, '.po').to_sym
|
||||
data = normalize(locale, parse(filename))
|
||||
{ locale => data }
|
||||
end
|
||||
|
||||
def parse(filename)
|
||||
GetText::PoParser.new.parse(::File.read(filename), PoData.new)
|
||||
end
|
||||
|
||||
def normalize(locale, data)
|
||||
data.inject({}) do |result, (key, value)|
|
||||
unless key.nil? || key.empty?
|
||||
key, value = normalize_pluralization(locale, key, value) if key.index("\000")
|
||||
|
||||
parts = key.split('|').reverse
|
||||
normalized = parts.inject({}) do |normalized, part|
|
||||
normalized = { part => normalized.empty? ? value : normalized }
|
||||
end
|
||||
|
||||
# deep_merge by Stefan Rusterholz, see http://www.ruby-forum.com/topic/142809
|
||||
merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
|
||||
result.merge!(normalized, &merger)
|
||||
end
|
||||
result
|
||||
end
|
||||
end
|
||||
|
||||
def normalize_pluralization(locale, key, value)
|
||||
# FIXME po_parser includes \000 chars that can not be turned into Symbols
|
||||
key = key.gsub("\000", I18n::Gettext::PLURAL_SEPARATOR).split(I18n::Gettext::PLURAL_SEPARATOR).first
|
||||
|
||||
keys = I18n::Gettext.plural_keys(locale)
|
||||
values = value.split("\000")
|
||||
raise "invalid number of plurals: #{values.size}, keys: #{keys.inspect}" if values.size != keys.size
|
||||
|
||||
result = {}
|
||||
values.each_with_index { |value, ix| result[keys[ix]] = value }
|
||||
[key, result]
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,123 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
# The InterpolationCompiler module contains optimizations that can tremendously
|
||||
# speed up the interpolation process on the Simple backend.
|
||||
#
|
||||
# It works by defining a pre-compiled method on stored translation Strings that
|
||||
# already bring all the knowledge about contained interpolation variables etc.
|
||||
# so that the actual recurring interpolation will be very fast.
|
||||
#
|
||||
# To enable pre-compiled interpolations you can simply include the
|
||||
# InterpolationCompiler module to the Simple backend:
|
||||
#
|
||||
# I18n::Backend::Simple.send(:include, I18n::Backend::InterpolationCompiler)
|
||||
#
|
||||
# Note that InterpolationCompiler does not yield meaningful results and consequently
|
||||
# should not be used with Ruby 1.9 (YARV) but improves performance everywhere else
|
||||
# (jRuby, Rubinius and 1.8.7).
|
||||
module I18n
|
||||
module Backend
|
||||
module InterpolationCompiler
|
||||
module Compiler
|
||||
extend self
|
||||
|
||||
TOKENIZER = /(%%\{[^\}]+\}|%\{[^\}]+\})/
|
||||
INTERPOLATION_SYNTAX_PATTERN = /(%)?(%\{([^\}]+)\})/
|
||||
|
||||
def compile_if_an_interpolation(string)
|
||||
if interpolated_str?(string)
|
||||
string.instance_eval <<-RUBY_EVAL, __FILE__, __LINE__
|
||||
def i18n_interpolate(v = {})
|
||||
"#{compiled_interpolation_body(string)}"
|
||||
end
|
||||
RUBY_EVAL
|
||||
end
|
||||
|
||||
string
|
||||
end
|
||||
|
||||
def interpolated_str?(str)
|
||||
str.kind_of?(::String) && str =~ INTERPOLATION_SYNTAX_PATTERN
|
||||
end
|
||||
|
||||
protected
|
||||
# tokenize("foo %{bar} baz %%{buz}") # => ["foo ", "%{bar}", " baz ", "%%{buz}"]
|
||||
def tokenize(str)
|
||||
str.split(TOKENIZER)
|
||||
end
|
||||
|
||||
def compiled_interpolation_body(str)
|
||||
tokenize(str).map do |token|
|
||||
(matchdata = token.match(INTERPOLATION_SYNTAX_PATTERN)) ? handle_interpolation_token(token, matchdata) : escape_plain_str(token)
|
||||
end.join
|
||||
end
|
||||
|
||||
def handle_interpolation_token(interpolation, matchdata)
|
||||
escaped, pattern, key = matchdata.values_at(1, 2, 3)
|
||||
escaped ? pattern : compile_interpolation_token(key.to_sym)
|
||||
end
|
||||
|
||||
def compile_interpolation_token(key)
|
||||
"\#{#{interpolate_or_raise_missing(key)}}"
|
||||
end
|
||||
|
||||
def interpolate_or_raise_missing(key)
|
||||
escaped_key = escape_key_sym(key)
|
||||
Base::RESERVED_KEYS.include?(key) ? reserved_key(escaped_key) : interpolate_key(escaped_key)
|
||||
end
|
||||
|
||||
def interpolate_key(key)
|
||||
[direct_key(key), nil_key(key), missing_key(key)].join('||')
|
||||
end
|
||||
|
||||
def direct_key(key)
|
||||
"((t = v[#{key}]) && t.respond_to?(:call) ? t.call : t)"
|
||||
end
|
||||
|
||||
def nil_key(key)
|
||||
"(v.has_key?(#{key}) && '')"
|
||||
end
|
||||
|
||||
def missing_key(key)
|
||||
"raise(MissingInterpolationArgument.new(#{key}, self))"
|
||||
end
|
||||
|
||||
def reserved_key(key)
|
||||
"raise(ReservedInterpolationKey.new(#{key}, self))"
|
||||
end
|
||||
|
||||
def escape_plain_str(str)
|
||||
str.gsub(/"|\\|#/) {|x| "\\#{x}"}
|
||||
end
|
||||
|
||||
def escape_key_sym(key)
|
||||
# rely on Ruby to do all the hard work :)
|
||||
key.to_sym.inspect
|
||||
end
|
||||
end
|
||||
|
||||
def interpolate(locale, string, values)
|
||||
if string.respond_to?(:i18n_interpolate)
|
||||
string.i18n_interpolate(values)
|
||||
elsif values
|
||||
super
|
||||
else
|
||||
string
|
||||
end
|
||||
end
|
||||
|
||||
def store_translations(locale, data, options = {})
|
||||
compile_all_strings_in(data)
|
||||
super
|
||||
end
|
||||
|
||||
protected
|
||||
def compile_all_strings_in(data)
|
||||
data.each_value do |value|
|
||||
Compiler.compile_if_an_interpolation(value)
|
||||
compile_all_strings_in(value) if value.kind_of?(Hash)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,102 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
require 'i18n/backend/base'
|
||||
require 'active_support/json'
|
||||
|
||||
module I18n
|
||||
module Backend
|
||||
# This is a basic backend for key value stores. It receives on
|
||||
# initialization the store, which should respond to three methods:
|
||||
#
|
||||
# * store#[](key) - Used to get a value
|
||||
# * store#[]=(key, value) - Used to set a value
|
||||
# * store#keys - Used to get all keys
|
||||
#
|
||||
# Since these stores only supports string, all values are converted
|
||||
# to JSON before being stored, allowing it to also store booleans,
|
||||
# hashes and arrays. However, this store does not support Procs.
|
||||
#
|
||||
# As the ActiveRecord backend, Symbols are just supported when loading
|
||||
# translations from the filesystem or through explicit store translations.
|
||||
#
|
||||
# Also, avoid calling I18n.available_locales since it's a somehow
|
||||
# expensive operation in most stores.
|
||||
#
|
||||
# == Example
|
||||
#
|
||||
# To setup I18n to use TokyoCabinet in memory is quite straightforward:
|
||||
#
|
||||
# require 'rufus/tokyo/cabinet' # gem install rufus-tokyo
|
||||
# I18n.backend = I18n::Backend::KeyValue.new(Rufus::Tokyo::Cabinet.new('*'))
|
||||
#
|
||||
# == Performance
|
||||
#
|
||||
# You may make this backend even faster by including the Memoize module.
|
||||
# However, notice that you should properly clear the cache if you change
|
||||
# values directly in the key-store.
|
||||
#
|
||||
# == Subtrees
|
||||
#
|
||||
# In most backends, you are allowed to retrieve part of a translation tree:
|
||||
#
|
||||
# I18n.backend.store_translations :en, :foo => { :bar => :baz }
|
||||
# I18n.t "foo" #=> { :bar => :baz }
|
||||
#
|
||||
# This backend supports this feature by default, but it slows down the storage
|
||||
# of new data considerably and makes hard to delete entries. That said, you are
|
||||
# allowed to disable the storage of subtrees on initialization:
|
||||
#
|
||||
# I18n::Backend::KeyValue.new(@store, false)
|
||||
#
|
||||
# This is useful if you are using a KeyValue backend chained to a Simple backend.
|
||||
class KeyValue
|
||||
module Implementation
|
||||
attr_accessor :store
|
||||
|
||||
include Base, Flatten
|
||||
|
||||
def initialize(store, subtrees=true)
|
||||
@store, @subtrees = store, subtrees
|
||||
end
|
||||
|
||||
def store_translations(locale, data, options = {})
|
||||
escape = options.fetch(:escape, true)
|
||||
flatten_translations(locale, data, escape, @subtrees).each do |key, value|
|
||||
key = "#{locale}.#{key}"
|
||||
|
||||
case value
|
||||
when Hash
|
||||
if @subtrees && (old_value = @store[key])
|
||||
old_value = ActiveSupport::JSON.decode(old_value)
|
||||
value = old_value.deep_symbolize_keys.deep_merge!(value) if old_value.is_a?(Hash)
|
||||
end
|
||||
when Proc
|
||||
raise "Key-value stores cannot handle procs"
|
||||
end
|
||||
|
||||
@store[key] = ActiveSupport::JSON.encode(value) unless value.is_a?(Symbol)
|
||||
end
|
||||
end
|
||||
|
||||
def available_locales
|
||||
locales = @store.keys.map { |k| k =~ /\./; $` }
|
||||
locales.uniq!
|
||||
locales.compact!
|
||||
locales.map! { |k| k.to_sym }
|
||||
locales
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def lookup(locale, key, scope = [], options = {})
|
||||
key = normalize_flat_keys(locale, key, scope, options[:separator])
|
||||
value = @store["#{locale}.#{key}"]
|
||||
value = ActiveSupport::JSON.decode(value) if value
|
||||
value.is_a?(Hash) ? value.deep_symbolize_keys : value
|
||||
end
|
||||
end
|
||||
|
||||
include Implementation
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,48 +0,0 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Memoize module simply memoizes the values returned by lookup using
|
||||
# a flat hash and can tremendously speed up the lookup process in a backend.
|
||||
#
|
||||
# To enable it you can simply include the Memoize module to your backend:
|
||||
#
|
||||
# I18n::Backend::Simple.send(:include, I18n::Backend::Memoize)
|
||||
#
|
||||
# Notice that it's the responsibility of the backend to define whenever the
|
||||
# cache should be cleaned.
|
||||
module I18n
|
||||
module Backend
|
||||
module Memoize
|
||||
def available_locales
|
||||
@memoized_locales ||= super
|
||||
end
|
||||
|
||||
def store_translations(locale, data, options = {})
|
||||
reset_memoizations!(locale)
|
||||
super
|
||||
end
|
||||
|
||||
def reload!
|
||||
reset_memoizations!
|
||||
super
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def lookup(locale, key, scope = nil, options = {})
|
||||
flat_key = I18n::Backend::Flatten.normalize_flat_keys(locale,
|
||||
key, scope, options[:separator]).to_sym
|
||||
flat_hash = memoized_lookup[locale.to_sym]
|
||||
flat_hash.key?(flat_key) ? flat_hash[flat_key] : (flat_hash[flat_key] = super)
|
||||
end
|
||||
|
||||
def memoized_lookup
|
||||
@memoized_lookup ||= Hash.new { |h, k| h[k] = {} }
|
||||
end
|
||||
|
||||
def reset_memoizations!(locale=nil)
|
||||
@memoized_locales = nil
|
||||
(locale ? memoized_lookup[locale.to_sym] : memoized_lookup).clear
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,65 +0,0 @@
|
||||
# I18n translation metadata is useful when you want to access information
|
||||
# about how a translation was looked up, pluralized or interpolated in
|
||||
# your application.
|
||||
#
|
||||
# msg = I18n.t(:message, :default => 'Hi!', :scope => :foo)
|
||||
# msg.translation_metadata
|
||||
# # => { :key => :message, :scope => :foo, :default => 'Hi!' }
|
||||
#
|
||||
# If a :count option was passed to #translate it will be set to the metadata.
|
||||
# Likewise, if any interpolation variables were passed they will also be set.
|
||||
#
|
||||
# To enable translation metadata you can simply include the Metadata module
|
||||
# into the Simple backend class - or whatever other backend you are using:
|
||||
#
|
||||
# I18n::Backend::Simple.send(:include, I18n::Backend::Metadata)
|
||||
#
|
||||
module I18n
|
||||
module Backend
|
||||
module Metadata
|
||||
class << self
|
||||
def included(base)
|
||||
Object.class_eval do
|
||||
def translation_metadata
|
||||
@translation_metadata ||= {}
|
||||
end
|
||||
|
||||
def translation_metadata=(translation_metadata)
|
||||
@translation_metadata = translation_metadata
|
||||
end
|
||||
end unless Object.method_defined?(:translation_metadata)
|
||||
end
|
||||
end
|
||||
|
||||
def translate(locale, key, options = {})
|
||||
metadata = {
|
||||
:locale => locale,
|
||||
:key => key,
|
||||
:scope => options[:scope],
|
||||
:default => options[:default],
|
||||
:separator => options[:separator],
|
||||
:values => options.reject { |name, value| Base::RESERVED_KEYS.include?(name) }
|
||||
}
|
||||
with_metadata(metadata) { super }
|
||||
end
|
||||
|
||||
def interpolate(locale, entry, values = {})
|
||||
metadata = entry.translation_metadata.merge(:original => entry)
|
||||
with_metadata(metadata) { super }
|
||||
end
|
||||
|
||||
def pluralize(locale, entry, count)
|
||||
with_metadata(:count => count) { super }
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def with_metadata(metadata, &block)
|
||||
result = yield
|
||||
result.translation_metadata = result.translation_metadata.merge(metadata) if result
|
||||
result
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,57 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
# I18n locale fallbacks are useful when you want your application to use
|
||||
# translations from other locales when translations for the current locale are
|
||||
# missing. E.g. you might want to use :en translations when translations in
|
||||
# your applications main locale :de are missing.
|
||||
#
|
||||
# To enable locale specific pluralizations you can simply include the
|
||||
# Pluralization module to the Simple backend - or whatever other backend you
|
||||
# are using.
|
||||
#
|
||||
# I18n::Backend::Simple.send(:include, I18n::Backend::Pluralization)
|
||||
#
|
||||
# You also need to make sure to provide pluralization algorithms to the
|
||||
# backend, i.e. include them to your I18n.load_path accordingly.
|
||||
module I18n
|
||||
module Backend
|
||||
module Pluralization
|
||||
# Overwrites the Base backend translate method so that it will check the
|
||||
# translation meta data space (:i18n) for a locale specific pluralization
|
||||
# rule and use it to pluralize the given entry. I.e. the library expects
|
||||
# pluralization rules to be stored at I18n.t(:'i18n.plural.rule')
|
||||
#
|
||||
# Pluralization rules are expected to respond to #call(entry, count) and
|
||||
# return a pluralization key. Valid keys depend on the translation data
|
||||
# hash (entry) but it is generally recommended to follow CLDR's style,
|
||||
# i.e., return one of the keys :zero, :one, :few, :many, :other.
|
||||
#
|
||||
# The :zero key is always picked directly when count equals 0 AND the
|
||||
# translation data has the key :zero. This way translators are free to
|
||||
# either pick a special :zero translation even for languages where the
|
||||
# pluralizer does not return a :zero key.
|
||||
def pluralize(locale, entry, count)
|
||||
return entry unless entry.is_a?(Hash) and count
|
||||
|
||||
pluralizer = pluralizer(locale)
|
||||
if pluralizer.respond_to?(:call)
|
||||
key = count == 0 && entry.has_key?(:zero) ? :zero : pluralizer.call(count)
|
||||
raise InvalidPluralizationData.new(entry, count) unless entry.has_key?(key)
|
||||
entry[key]
|
||||
else
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def pluralizers
|
||||
@pluralizers ||= {}
|
||||
end
|
||||
|
||||
def pluralizer(locale)
|
||||
pluralizers[locale] ||= I18n.t(:'i18n.plural.rule', :locale => locale, :resolve => false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,87 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
module I18n
|
||||
module Backend
|
||||
# A simple backend that reads translations from YAML files and stores them in
|
||||
# an in-memory hash. Relies on the Base backend.
|
||||
#
|
||||
# The implementation is provided by a Implementation module allowing to easily
|
||||
# extend Simple backend's behavior by including modules. E.g.:
|
||||
#
|
||||
# module I18n::Backend::Pluralization
|
||||
# def pluralize(*args)
|
||||
# # extended pluralization logic
|
||||
# super
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# I18n::Backend::Simple.send(:include, I18n::Backend::Pluralization)
|
||||
class Simple
|
||||
module Implementation
|
||||
include Base
|
||||
|
||||
def initialized?
|
||||
@initialized ||= false
|
||||
end
|
||||
|
||||
# Stores translations for the given locale in memory.
|
||||
# This uses a deep merge for the translations hash, so existing
|
||||
# translations will be overwritten by new ones only at the deepest
|
||||
# level of the hash.
|
||||
def store_translations(locale, data, options = {})
|
||||
locale = locale.to_sym
|
||||
translations[locale] ||= {}
|
||||
data = data.deep_symbolize_keys
|
||||
translations[locale].deep_merge!(data)
|
||||
end
|
||||
|
||||
# Get available locales from the translations hash
|
||||
def available_locales
|
||||
init_translations unless initialized?
|
||||
translations.inject([]) do |locales, (locale, data)|
|
||||
locales << locale unless (data.keys - [:i18n]).empty?
|
||||
locales
|
||||
end
|
||||
end
|
||||
|
||||
# Clean up translations hash and set initialized to false on reload!
|
||||
def reload!
|
||||
@initialized = false
|
||||
@translations = nil
|
||||
super
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def init_translations
|
||||
load_translations
|
||||
@initialized = true
|
||||
end
|
||||
|
||||
def translations
|
||||
@translations ||= {}
|
||||
end
|
||||
|
||||
# Looks up a translation from the translations hash. Returns nil if
|
||||
# eiher key is nil, or locale, scope or key do not exist as a key in the
|
||||
# nested translations hash. Splits keys or scopes containing dots
|
||||
# into multiple keys, i.e. <tt>currency.format</tt> is regarded the same as
|
||||
# <tt>%w(currency format)</tt>.
|
||||
def lookup(locale, key, scope = [], options = {})
|
||||
init_translations unless initialized?
|
||||
keys = I18n.normalize_keys(locale, key, scope, options[:separator])
|
||||
|
||||
keys.inject(translations) do |result, key|
|
||||
key = key.to_sym
|
||||
return nil unless result.is_a?(Hash) && result.has_key?(key)
|
||||
result = result[key]
|
||||
result = resolve(locale, key, result, options.merge(:scope => nil)) if result.is_a?(Symbol)
|
||||
result
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
include Implementation
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,98 +0,0 @@
|
||||
# encoding: utf-8
|
||||
module I18n
|
||||
module Backend
|
||||
module Transliterator
|
||||
DEFAULT_REPLACEMENT_CHAR = "?"
|
||||
|
||||
# Given a locale and a UTF-8 string, return the locale's ASCII
|
||||
# approximation for the string.
|
||||
def transliterate(locale, string, replacement = nil)
|
||||
@transliterators ||= {}
|
||||
@transliterators[locale] ||= Transliterator.get I18n.t(:'i18n.transliterate.rule',
|
||||
:locale => locale, :resolve => false, :default => {})
|
||||
@transliterators[locale].transliterate(string, replacement)
|
||||
end
|
||||
|
||||
# Get a transliterator instance.
|
||||
def self.get(rule = nil)
|
||||
if !rule || rule.kind_of?(Hash)
|
||||
HashTransliterator.new(rule)
|
||||
elsif rule.kind_of? Proc
|
||||
ProcTransliterator.new(rule)
|
||||
else
|
||||
raise I18n::ArgumentError, "Transliteration rule must be a proc or a hash."
|
||||
end
|
||||
end
|
||||
|
||||
# A transliterator which accepts a Proc as its transliteration rule.
|
||||
class ProcTransliterator
|
||||
def initialize(rule)
|
||||
@rule = rule
|
||||
end
|
||||
|
||||
def transliterate(string, replacement = nil)
|
||||
@rule.call(string)
|
||||
end
|
||||
end
|
||||
|
||||
# A transliterator which accepts a Hash of characters as its translation
|
||||
# rule.
|
||||
class HashTransliterator
|
||||
DEFAULT_APPROXIMATIONS = {
|
||||
"À"=>"A", "Á"=>"A", "Â"=>"A", "Ã"=>"A", "Ä"=>"A", "Å"=>"A", "Æ"=>"AE",
|
||||
"Ç"=>"C", "È"=>"E", "É"=>"E", "Ê"=>"E", "Ë"=>"E", "Ì"=>"I", "Í"=>"I",
|
||||
"Î"=>"I", "Ï"=>"I", "Ð"=>"D", "Ñ"=>"N", "Ò"=>"O", "Ó"=>"O", "Ô"=>"O",
|
||||
"Õ"=>"O", "Ö"=>"O", "×"=>"x", "Ø"=>"O", "Ù"=>"U", "Ú"=>"U", "Û"=>"U",
|
||||
"Ü"=>"U", "Ý"=>"Y", "Þ"=>"Th", "ß"=>"ss", "à"=>"a", "á"=>"a", "â"=>"a",
|
||||
"ã"=>"a", "ä"=>"a", "å"=>"a", "æ"=>"ae", "ç"=>"c", "è"=>"e", "é"=>"e",
|
||||
"ê"=>"e", "ë"=>"e", "ì"=>"i", "í"=>"i", "î"=>"i", "ï"=>"i", "ð"=>"d",
|
||||
"ñ"=>"n", "ò"=>"o", "ó"=>"o", "ô"=>"o", "õ"=>"o", "ö"=>"o", "ø"=>"o",
|
||||
"ù"=>"u", "ú"=>"u", "û"=>"u", "ü"=>"u", "ý"=>"y", "þ"=>"th", "ÿ"=>"y",
|
||||
"Ā"=>"A", "ā"=>"a", "Ă"=>"A", "ă"=>"a", "Ą"=>"A", "ą"=>"a", "Ć"=>"C",
|
||||
"ć"=>"c", "Ĉ"=>"C", "ĉ"=>"c", "Ċ"=>"C", "ċ"=>"c", "Č"=>"C", "č"=>"c",
|
||||
"Ď"=>"D", "ď"=>"d", "Đ"=>"D", "đ"=>"d", "Ē"=>"E", "ē"=>"e", "Ĕ"=>"E",
|
||||
"ĕ"=>"e", "Ė"=>"E", "ė"=>"e", "Ę"=>"E", "ę"=>"e", "Ě"=>"E", "ě"=>"e",
|
||||
"Ĝ"=>"G", "ĝ"=>"g", "Ğ"=>"G", "ğ"=>"g", "Ġ"=>"G", "ġ"=>"g", "Ģ"=>"G",
|
||||
"ģ"=>"g", "Ĥ"=>"H", "ĥ"=>"h", "Ħ"=>"H", "ħ"=>"h", "Ĩ"=>"I", "ĩ"=>"i",
|
||||
"Ī"=>"I", "ī"=>"i", "Ĭ"=>"I", "ĭ"=>"i", "Į"=>"I", "į"=>"i", "İ"=>"I",
|
||||
"ı"=>"i", "IJ"=>"IJ", "ij"=>"ij", "Ĵ"=>"J", "ĵ"=>"j", "Ķ"=>"K", "ķ"=>"k",
|
||||
"ĸ"=>"k", "Ĺ"=>"L", "ĺ"=>"l", "Ļ"=>"L", "ļ"=>"l", "Ľ"=>"L", "ľ"=>"l",
|
||||
"Ŀ"=>"L", "ŀ"=>"l", "Ł"=>"L", "ł"=>"l", "Ń"=>"N", "ń"=>"n", "Ņ"=>"N",
|
||||
"ņ"=>"n", "Ň"=>"N", "ň"=>"n", "ʼn"=>"'n", "Ŋ"=>"NG", "ŋ"=>"ng",
|
||||
"Ō"=>"O", "ō"=>"o", "Ŏ"=>"O", "ŏ"=>"o", "Ő"=>"O", "ő"=>"o", "Œ"=>"OE",
|
||||
"œ"=>"oe", "Ŕ"=>"R", "ŕ"=>"r", "Ŗ"=>"R", "ŗ"=>"r", "Ř"=>"R", "ř"=>"r",
|
||||
"Ś"=>"S", "ś"=>"s", "Ŝ"=>"S", "ŝ"=>"s", "Ş"=>"S", "ş"=>"s", "Š"=>"S",
|
||||
"š"=>"s", "Ţ"=>"T", "ţ"=>"t", "Ť"=>"T", "ť"=>"t", "Ŧ"=>"T", "ŧ"=>"t",
|
||||
"Ũ"=>"U", "ũ"=>"u", "Ū"=>"U", "ū"=>"u", "Ŭ"=>"U", "ŭ"=>"u", "Ů"=>"U",
|
||||
"ů"=>"u", "Ű"=>"U", "ű"=>"u", "Ų"=>"U", "ų"=>"u", "Ŵ"=>"W", "ŵ"=>"w",
|
||||
"Ŷ"=>"Y", "ŷ"=>"y", "Ÿ"=>"Y", "Ź"=>"Z", "ź"=>"z", "Ż"=>"Z", "ż"=>"z",
|
||||
"Ž"=>"Z", "ž"=>"z"
|
||||
}
|
||||
|
||||
def initialize(rule = nil)
|
||||
@rule = rule
|
||||
add DEFAULT_APPROXIMATIONS
|
||||
add rule if rule
|
||||
end
|
||||
|
||||
def transliterate(string, replacement = nil)
|
||||
string.gsub(/[^\x00-\x7f]/u) do |char|
|
||||
approximations[char] || replacement || DEFAULT_REPLACEMENT_CHAR
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def approximations
|
||||
@approximations ||= {}
|
||||
end
|
||||
|
||||
# Add transliteration rules to the approximations hash.
|
||||
def add(hash)
|
||||
hash.keys.each {|key| hash[key.to_s] = hash.delete(key).to_s}
|
||||
approximations.merge! hash
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,84 +0,0 @@
|
||||
module I18n
|
||||
class Config
|
||||
# The only configuration value that is not global and scoped to thread is :locale.
|
||||
# It defaults to the default_locale.
|
||||
def locale
|
||||
@locale ||= default_locale
|
||||
end
|
||||
|
||||
# Sets the current locale pseudo-globally, i.e. in the Thread.current hash.
|
||||
def locale=(locale)
|
||||
@locale = locale.to_sym rescue nil
|
||||
end
|
||||
|
||||
# Returns the current backend. Defaults to +Backend::Simple+.
|
||||
def backend
|
||||
@@backend ||= Backend::Simple.new
|
||||
end
|
||||
|
||||
# Sets the current backend. Used to set a custom backend.
|
||||
def backend=(backend)
|
||||
@@backend = backend
|
||||
end
|
||||
|
||||
# Returns the current default locale. Defaults to :'en'
|
||||
def default_locale
|
||||
@@default_locale ||= :en
|
||||
end
|
||||
|
||||
# Sets the current default locale. Used to set a custom default locale.
|
||||
def default_locale=(locale)
|
||||
@@default_locale = locale.to_sym rescue nil
|
||||
end
|
||||
|
||||
# Returns an array of locales for which translations are available.
|
||||
# Unless you explicitely set the these through I18n.available_locales=
|
||||
# the call will be delegated to the backend and memoized on the I18n module.
|
||||
def available_locales
|
||||
@@available_locales ||= backend.available_locales
|
||||
end
|
||||
|
||||
# Sets the available locales.
|
||||
def available_locales=(locales)
|
||||
@@available_locales = locales
|
||||
end
|
||||
|
||||
# Returns the current default scope separator. Defaults to '.'
|
||||
def default_separator
|
||||
@@default_separator ||= '.'
|
||||
end
|
||||
|
||||
# Sets the current default scope separator.
|
||||
def default_separator=(separator)
|
||||
@@default_separator = separator
|
||||
end
|
||||
|
||||
# Return the current exception handler. Defaults to :default_exception_handler.
|
||||
def exception_handler
|
||||
@@exception_handler ||= :default_exception_handler
|
||||
end
|
||||
|
||||
# Sets the exception handler.
|
||||
def exception_handler=(exception_handler)
|
||||
@@exception_handler = exception_handler
|
||||
end
|
||||
|
||||
# Allow clients to register paths providing translation data sources. The
|
||||
# backend defines acceptable sources.
|
||||
#
|
||||
# E.g. the provided SimpleBackend accepts a list of paths to translation
|
||||
# files which are either named *.rb and contain plain Ruby Hashes or are
|
||||
# named *.yml and contain YAML data. So for the SimpleBackend clients may
|
||||
# register translation files like this:
|
||||
# I18n.load_path << 'path/to/locale/en.yml'
|
||||
def load_path
|
||||
@@load_path ||= []
|
||||
end
|
||||
|
||||
# Sets the load path instance. Custom implementations are expected to
|
||||
# behave like a Ruby Array.
|
||||
def load_path=(load_path)
|
||||
@@load_path = load_path
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,29 +0,0 @@
|
||||
class Hash
|
||||
def slice(*keep_keys)
|
||||
h = {}
|
||||
keep_keys.each { |key| h[key] = fetch(key) }
|
||||
h
|
||||
end unless Hash.method_defined?(:slice)
|
||||
|
||||
def except(*less_keys)
|
||||
slice(*keys - less_keys)
|
||||
end unless Hash.method_defined?(:except)
|
||||
|
||||
def deep_symbolize_keys
|
||||
inject({}) { |result, (key, value)|
|
||||
value = value.deep_symbolize_keys if value.is_a?(Hash)
|
||||
result[(key.to_sym rescue key) || key] = value
|
||||
result
|
||||
}
|
||||
end unless Hash.method_defined?(:deep_symbolize_keys)
|
||||
|
||||
# deep_merge_hash! by Stefan Rusterholz, see http://www.ruby-forum.com/topic/142809
|
||||
MERGER = proc do |key, v1, v2|
|
||||
Hash === v1 && Hash === v2 ? v1.merge(v2, &MERGER) : v2
|
||||
end
|
||||
|
||||
def deep_merge!(data)
|
||||
merge!(data, &MERGER)
|
||||
end unless Hash.method_defined?(:deep_merge!)
|
||||
end
|
||||
|
||||
@@ -1,98 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
=begin
|
||||
heavily based on Masao Mutoh's gettext String interpolation extension
|
||||
http://github.com/mutoh/gettext/blob/f6566738b981fe0952548c421042ad1e0cdfb31e/lib/gettext/core_ext/string.rb
|
||||
Copyright (C) 2005-2009 Masao Mutoh
|
||||
You may redistribute it and/or modify it under the same license terms as Ruby.
|
||||
=end
|
||||
|
||||
begin
|
||||
raise ArgumentError if ("a %{x}" % {:x=>'b'}) != 'a b'
|
||||
rescue ArgumentError
|
||||
# KeyError is raised by String#% when the string contains a named placeholder
|
||||
# that is not contained in the given arguments hash. Ruby 1.9 includes and
|
||||
# raises this exception natively. We define it to mimic Ruby 1.9's behaviour
|
||||
# in Ruby 1.8.x
|
||||
class KeyError < IndexError
|
||||
def initialize(message = nil)
|
||||
super(message || "key not found")
|
||||
end
|
||||
end unless defined?(KeyError)
|
||||
|
||||
# Extension for String class. This feature is included in Ruby 1.9 or later but not occur TypeError.
|
||||
#
|
||||
# String#% method which accept "named argument". The translator can know
|
||||
# the meaning of the msgids using "named argument" instead of %s/%d style.
|
||||
class String
|
||||
# For older ruby versions, such as ruby-1.8.5
|
||||
alias :bytesize :size unless instance_methods.find {|m| m.to_s == 'bytesize'}
|
||||
alias :interpolate_without_ruby_19_syntax :% # :nodoc:
|
||||
|
||||
INTERPOLATION_PATTERN = Regexp.union(
|
||||
/%\{(\w+)\}/, # matches placeholders like "%{foo}"
|
||||
/%<(\w+)>(.*?\d*\.?\d*[bBdiouxXeEfgGcps])/ # matches placeholders like "%<foo>.d"
|
||||
)
|
||||
|
||||
INTERPOLATION_PATTERN_WITH_ESCAPE = Regexp.union(
|
||||
/%%/,
|
||||
INTERPOLATION_PATTERN
|
||||
)
|
||||
|
||||
# % uses self (i.e. the String) as a format specification and returns the
|
||||
# result of applying it to the given arguments. In other words it interpolates
|
||||
# the given arguments to the string according to the formats the string
|
||||
# defines.
|
||||
#
|
||||
# There are three ways to use it:
|
||||
#
|
||||
# * Using a single argument or Array of arguments.
|
||||
#
|
||||
# This is the default behaviour of the String class. See Kernel#sprintf for
|
||||
# more details about the format string.
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# "%d %s" % [1, "message"]
|
||||
# # => "1 message"
|
||||
#
|
||||
# * Using a Hash as an argument and unformatted, named placeholders.
|
||||
#
|
||||
# When you pass a Hash as an argument and specify placeholders with %{foo}
|
||||
# it will interpret the hash values as named arguments.
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# "%{firstname}, %{lastname}" % {:firstname => "Masao", :lastname => "Mutoh"}
|
||||
# # => "Masao Mutoh"
|
||||
#
|
||||
# * Using a Hash as an argument and formatted, named placeholders.
|
||||
#
|
||||
# When you pass a Hash as an argument and specify placeholders with %<foo>d
|
||||
# it will interpret the hash values as named arguments and format the value
|
||||
# according to the formatting instruction appended to the closing >.
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# "%<integer>d, %<float>.1f" % { :integer => 10, :float => 43.4 }
|
||||
# # => "10, 43.3"
|
||||
def %(args)
|
||||
if args.kind_of?(Hash)
|
||||
dup.gsub(INTERPOLATION_PATTERN_WITH_ESCAPE) do |match|
|
||||
if match == '%%'
|
||||
'%'
|
||||
else
|
||||
key = ($1 || $2).to_sym
|
||||
raise KeyError unless args.has_key?(key)
|
||||
$3 ? sprintf("%#{$3}", args[key]) : args[key]
|
||||
end
|
||||
end
|
||||
elsif self =~ INTERPOLATION_PATTERN
|
||||
raise ArgumentError.new('one hash required')
|
||||
else
|
||||
result = gsub(/%([{<])/, '%%\1')
|
||||
result.send :'interpolate_without_ruby_19_syntax', args
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,61 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
class KeyError < IndexError
|
||||
def initialize(message = nil)
|
||||
super(message || "key not found")
|
||||
end
|
||||
end unless defined?(KeyError)
|
||||
|
||||
module I18n
|
||||
class ArgumentError < ::ArgumentError; end
|
||||
|
||||
class InvalidLocale < ArgumentError
|
||||
attr_reader :locale
|
||||
def initialize(locale)
|
||||
@locale = locale
|
||||
super "#{locale.inspect} is not a valid locale"
|
||||
end
|
||||
end
|
||||
|
||||
class MissingTranslationData < ArgumentError
|
||||
attr_reader :locale, :key, :options
|
||||
def initialize(locale, key, opts = nil)
|
||||
@key, @locale, @options = key, locale, opts || {}
|
||||
keys = I18n.normalize_keys(locale, key, options[:scope])
|
||||
keys << 'no key' if keys.size < 2
|
||||
super "translation missing: #{keys.join(', ')}"
|
||||
end
|
||||
end
|
||||
|
||||
class InvalidPluralizationData < ArgumentError
|
||||
attr_reader :entry, :count
|
||||
def initialize(entry, count)
|
||||
@entry, @count = entry, count
|
||||
super "translation data #{entry.inspect} can not be used with :count => #{count}"
|
||||
end
|
||||
end
|
||||
|
||||
class MissingInterpolationArgument < ArgumentError
|
||||
attr_reader :values, :string
|
||||
def initialize(values, string)
|
||||
@values, @string = values, string
|
||||
super "missing interpolation argument in #{string.inspect} (#{values.inspect} given)"
|
||||
end
|
||||
end
|
||||
|
||||
class ReservedInterpolationKey < ArgumentError
|
||||
attr_reader :key, :string
|
||||
def initialize(key, string)
|
||||
@key, @string = key, string
|
||||
super "reserved key #{key.inspect} used in #{string.inspect}"
|
||||
end
|
||||
end
|
||||
|
||||
class UnknownFileType < ArgumentError
|
||||
attr_reader :type, :filename
|
||||
def initialize(type, filename)
|
||||
@type, @filename = type, filename
|
||||
super "can not load translations from #{filename}, the file type #{type} is not known"
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,27 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
module I18n
|
||||
module Gettext
|
||||
PLURAL_SEPARATOR = "\001"
|
||||
CONTEXT_SEPARATOR = "\004"
|
||||
|
||||
autoload :Helpers, 'i18n/gettext/helpers'
|
||||
|
||||
@@plural_keys = { :en => [:one, :other] }
|
||||
|
||||
class << self
|
||||
# returns an array of plural keys for the given locale so that we can
|
||||
# convert from gettext's integer-index based style
|
||||
# TODO move this information to the pluralization module
|
||||
def plural_keys(locale)
|
||||
@@plural_keys[locale] || @@plural_keys[:en]
|
||||
end
|
||||
|
||||
def extract_scope(msgid, separator)
|
||||
scope = msgid.to_s.split(separator)
|
||||
msgid = scope.pop
|
||||
[scope, msgid]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,65 +0,0 @@
|
||||
# encoding: utf-8
|
||||
require 'i18n/gettext'
|
||||
|
||||
module I18n
|
||||
module Gettext
|
||||
# Implements classical Gettext style accessors. To use this include the
|
||||
# module to the global namespace or wherever you want to use it.
|
||||
#
|
||||
# include I18n::Helpers::Gettext
|
||||
module Helpers
|
||||
def gettext(msgid, options = {})
|
||||
I18n.t(msgid, { :default => msgid, :separator => '|' }.merge(options))
|
||||
end
|
||||
alias _ gettext
|
||||
|
||||
def sgettext(msgid, separator = '|')
|
||||
scope, msgid = I18n::Gettext.extract_scope(msgid, separator)
|
||||
I18n.t(msgid, :scope => scope, :default => msgid, :separator => separator)
|
||||
end
|
||||
alias s_ sgettext
|
||||
|
||||
def pgettext(msgctxt, msgid)
|
||||
separator = I18n::Gettext::CONTEXT_SEPARATOR
|
||||
sgettext([msgctxt, msgid].join(separator), separator)
|
||||
end
|
||||
alias p_ pgettext
|
||||
|
||||
def ngettext(msgid, msgid_plural, n = 1)
|
||||
nsgettext(msgid, msgid_plural, n)
|
||||
end
|
||||
alias n_ ngettext
|
||||
|
||||
# Method signatures:
|
||||
# nsgettext('Fruits|apple', 'apples', 2)
|
||||
# nsgettext(['Fruits|apple', 'apples'], 2)
|
||||
def nsgettext(msgid, msgid_plural, n = 1, separator = '|')
|
||||
if msgid.is_a?(Array)
|
||||
msgid, msgid_plural, n, separator = msgid[0], msgid[1], msgid_plural, n
|
||||
separator = '|' unless separator.is_a?(::String)
|
||||
end
|
||||
|
||||
scope, msgid = I18n::Gettext.extract_scope(msgid, separator)
|
||||
default = { :one => msgid, :other => msgid_plural }
|
||||
I18n.t(msgid, :default => default, :count => n, :scope => scope, :separator => separator)
|
||||
end
|
||||
alias ns_ nsgettext
|
||||
|
||||
# Method signatures:
|
||||
# npgettext('Fruits', 'apple', 'apples', 2)
|
||||
# npgettext('Fruits', ['apple', 'apples'], 2)
|
||||
def npgettext(msgctxt, msgid, msgid_plural, n = 1)
|
||||
separator = I18n::Gettext::CONTEXT_SEPARATOR
|
||||
|
||||
if msgid.is_a?(Array)
|
||||
msgid_plural, msgid, n = msgid[1], [msgctxt, msgid[0]].join(separator), msgid_plural
|
||||
else
|
||||
msgid = [msgctxt, msgid].join(separator)
|
||||
end
|
||||
|
||||
nsgettext(msgid, msgid_plural, n, separator)
|
||||
end
|
||||
alias np_ npgettext
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,329 +0,0 @@
|
||||
=begin
|
||||
poparser.rb - Generate a .mo
|
||||
|
||||
Copyright (C) 2003-2009 Masao Mutoh <mutoh at highway.ne.jp>
|
||||
|
||||
You may redistribute it and/or modify it under the same
|
||||
license terms as Ruby.
|
||||
=end
|
||||
|
||||
#MODIFIED
|
||||
# removed include GetText etc
|
||||
# added stub translation method _(x)
|
||||
require 'racc/parser'
|
||||
|
||||
module GetText
|
||||
|
||||
class PoParser < Racc::Parser
|
||||
|
||||
def _(x)
|
||||
x
|
||||
end
|
||||
|
||||
module_eval <<'..end src/poparser.ry modeval..id7a99570e05', 'src/poparser.ry', 108
|
||||
def unescape(orig)
|
||||
ret = orig.gsub(/\\n/, "\n")
|
||||
ret.gsub!(/\\t/, "\t")
|
||||
ret.gsub!(/\\r/, "\r")
|
||||
ret.gsub!(/\\"/, "\"")
|
||||
ret
|
||||
end
|
||||
|
||||
def parse(str, data, ignore_fuzzy = true)
|
||||
@comments = []
|
||||
@data = data
|
||||
@fuzzy = false
|
||||
@msgctxt = ""
|
||||
$ignore_fuzzy = ignore_fuzzy
|
||||
|
||||
str.strip!
|
||||
@q = []
|
||||
until str.empty? do
|
||||
case str
|
||||
when /\A\s+/
|
||||
str = $'
|
||||
when /\Amsgctxt/
|
||||
@q.push [:MSGCTXT, $&]
|
||||
str = $'
|
||||
when /\Amsgid_plural/
|
||||
@q.push [:MSGID_PLURAL, $&]
|
||||
str = $'
|
||||
when /\Amsgid/
|
||||
@q.push [:MSGID, $&]
|
||||
str = $'
|
||||
when /\Amsgstr/
|
||||
@q.push [:MSGSTR, $&]
|
||||
str = $'
|
||||
when /\A\[(\d+)\]/
|
||||
@q.push [:PLURAL_NUM, $1]
|
||||
str = $'
|
||||
when /\A\#~(.*)/
|
||||
$stderr.print _("Warning: obsolete msgid exists.\n")
|
||||
$stderr.print " #{$&}\n"
|
||||
@q.push [:COMMENT, $&]
|
||||
str = $'
|
||||
when /\A\#(.*)/
|
||||
@q.push [:COMMENT, $&]
|
||||
str = $'
|
||||
when /\A\"(.*)\"/
|
||||
@q.push [:STRING, $1]
|
||||
str = $'
|
||||
else
|
||||
#c = str[0,1]
|
||||
#@q.push [:STRING, c]
|
||||
str = str[1..-1]
|
||||
end
|
||||
end
|
||||
@q.push [false, '$end']
|
||||
if $DEBUG
|
||||
@q.each do |a,b|
|
||||
puts "[#{a}, #{b}]"
|
||||
end
|
||||
end
|
||||
@yydebug = true if $DEBUG
|
||||
do_parse
|
||||
|
||||
if @comments.size > 0
|
||||
@data.set_comment(:last, @comments.join("\n"))
|
||||
end
|
||||
@data
|
||||
end
|
||||
|
||||
def next_token
|
||||
@q.shift
|
||||
end
|
||||
|
||||
def on_message(msgid, msgstr)
|
||||
if msgstr.size > 0
|
||||
@data[msgid] = msgstr
|
||||
@data.set_comment(msgid, @comments.join("\n"))
|
||||
end
|
||||
@comments.clear
|
||||
@msgctxt = ""
|
||||
end
|
||||
|
||||
def on_comment(comment)
|
||||
@fuzzy = true if (/fuzzy/ =~ comment)
|
||||
@comments << comment
|
||||
end
|
||||
|
||||
|
||||
..end src/poparser.ry modeval..id7a99570e05
|
||||
|
||||
##### racc 1.4.5 generates ###
|
||||
|
||||
racc_reduce_table = [
|
||||
0, 0, :racc_error,
|
||||
0, 10, :_reduce_none,
|
||||
2, 10, :_reduce_none,
|
||||
2, 10, :_reduce_none,
|
||||
2, 10, :_reduce_none,
|
||||
2, 12, :_reduce_5,
|
||||
1, 13, :_reduce_none,
|
||||
1, 13, :_reduce_none,
|
||||
4, 15, :_reduce_8,
|
||||
5, 16, :_reduce_9,
|
||||
2, 17, :_reduce_10,
|
||||
1, 17, :_reduce_none,
|
||||
3, 18, :_reduce_12,
|
||||
1, 11, :_reduce_13,
|
||||
2, 14, :_reduce_14,
|
||||
1, 14, :_reduce_15 ]
|
||||
|
||||
racc_reduce_n = 16
|
||||
|
||||
racc_shift_n = 26
|
||||
|
||||
racc_action_table = [
|
||||
3, 13, 5, 7, 9, 15, 16, 17, 20, 17,
|
||||
13, 17, 13, 13, 11, 17, 23, 20, 13, 17 ]
|
||||
|
||||
racc_action_check = [
|
||||
1, 16, 1, 1, 1, 12, 12, 12, 18, 18,
|
||||
7, 14, 15, 9, 3, 19, 20, 21, 23, 25 ]
|
||||
|
||||
racc_action_pointer = [
|
||||
nil, 0, nil, 14, nil, nil, nil, 3, nil, 6,
|
||||
nil, nil, 0, nil, 4, 5, -6, nil, 2, 8,
|
||||
8, 11, nil, 11, nil, 12 ]
|
||||
|
||||
racc_action_default = [
|
||||
-1, -16, -2, -16, -3, -13, -4, -16, -6, -16,
|
||||
-7, 26, -16, -15, -5, -16, -16, -14, -16, -8,
|
||||
-16, -9, -11, -16, -10, -12 ]
|
||||
|
||||
racc_goto_table = [
|
||||
12, 22, 14, 4, 24, 6, 2, 8, 18, 19,
|
||||
10, 21, 1, nil, nil, nil, 25 ]
|
||||
|
||||
racc_goto_check = [
|
||||
5, 9, 5, 3, 9, 4, 2, 6, 5, 5,
|
||||
7, 8, 1, nil, nil, nil, 5 ]
|
||||
|
||||
racc_goto_pointer = [
|
||||
nil, 12, 5, 2, 4, -7, 6, 9, -7, -17 ]
|
||||
|
||||
racc_goto_default = [
|
||||
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil ]
|
||||
|
||||
racc_token_table = {
|
||||
false => 0,
|
||||
Object.new => 1,
|
||||
:COMMENT => 2,
|
||||
:MSGID => 3,
|
||||
:MSGCTXT => 4,
|
||||
:MSGID_PLURAL => 5,
|
||||
:MSGSTR => 6,
|
||||
:STRING => 7,
|
||||
:PLURAL_NUM => 8 }
|
||||
|
||||
racc_use_result_var = true
|
||||
|
||||
racc_nt_base = 9
|
||||
|
||||
Racc_arg = [
|
||||
racc_action_table,
|
||||
racc_action_check,
|
||||
racc_action_default,
|
||||
racc_action_pointer,
|
||||
racc_goto_table,
|
||||
racc_goto_check,
|
||||
racc_goto_default,
|
||||
racc_goto_pointer,
|
||||
racc_nt_base,
|
||||
racc_reduce_table,
|
||||
racc_token_table,
|
||||
racc_shift_n,
|
||||
racc_reduce_n,
|
||||
racc_use_result_var ]
|
||||
|
||||
Racc_token_to_s_table = [
|
||||
'$end',
|
||||
'error',
|
||||
'COMMENT',
|
||||
'MSGID',
|
||||
'MSGCTXT',
|
||||
'MSGID_PLURAL',
|
||||
'MSGSTR',
|
||||
'STRING',
|
||||
'PLURAL_NUM',
|
||||
'$start',
|
||||
'msgfmt',
|
||||
'comment',
|
||||
'msgctxt',
|
||||
'message',
|
||||
'string_list',
|
||||
'single_message',
|
||||
'plural_message',
|
||||
'msgstr_plural',
|
||||
'msgstr_plural_line']
|
||||
|
||||
Racc_debug_parser = true
|
||||
|
||||
##### racc system variables end #####
|
||||
|
||||
# reduce 0 omitted
|
||||
|
||||
# reduce 1 omitted
|
||||
|
||||
# reduce 2 omitted
|
||||
|
||||
# reduce 3 omitted
|
||||
|
||||
# reduce 4 omitted
|
||||
|
||||
module_eval <<'.,.,', 'src/poparser.ry', 25
|
||||
def _reduce_5( val, _values, result )
|
||||
@msgctxt = unescape(val[1]) + "\004"
|
||||
result
|
||||
end
|
||||
.,.,
|
||||
|
||||
# reduce 6 omitted
|
||||
|
||||
# reduce 7 omitted
|
||||
|
||||
module_eval <<'.,.,', 'src/poparser.ry', 48
|
||||
def _reduce_8( val, _values, result )
|
||||
if @fuzzy and $ignore_fuzzy
|
||||
if val[1] != ""
|
||||
$stderr.print _("Warning: fuzzy message was ignored.\n")
|
||||
$stderr.print " msgid '#{val[1]}'\n"
|
||||
else
|
||||
on_message('', unescape(val[3]))
|
||||
end
|
||||
@fuzzy = false
|
||||
else
|
||||
on_message(@msgctxt + unescape(val[1]), unescape(val[3]))
|
||||
end
|
||||
result = ""
|
||||
result
|
||||
end
|
||||
.,.,
|
||||
|
||||
module_eval <<'.,.,', 'src/poparser.ry', 65
|
||||
def _reduce_9( val, _values, result )
|
||||
if @fuzzy and $ignore_fuzzy
|
||||
if val[1] != ""
|
||||
$stderr.print _("Warning: fuzzy message was ignored.\n")
|
||||
$stderr.print "msgid = '#{val[1]}\n"
|
||||
else
|
||||
on_message('', unescape(val[3]))
|
||||
end
|
||||
@fuzzy = false
|
||||
else
|
||||
on_message(@msgctxt + unescape(val[1]) + "\000" + unescape(val[3]), unescape(val[4]))
|
||||
end
|
||||
result = ""
|
||||
result
|
||||
end
|
||||
.,.,
|
||||
|
||||
module_eval <<'.,.,', 'src/poparser.ry', 76
|
||||
def _reduce_10( val, _values, result )
|
||||
if val[0].size > 0
|
||||
result = val[0] + "\000" + val[1]
|
||||
else
|
||||
result = ""
|
||||
end
|
||||
result
|
||||
end
|
||||
.,.,
|
||||
|
||||
# reduce 11 omitted
|
||||
|
||||
module_eval <<'.,.,', 'src/poparser.ry', 84
|
||||
def _reduce_12( val, _values, result )
|
||||
result = val[2]
|
||||
result
|
||||
end
|
||||
.,.,
|
||||
|
||||
module_eval <<'.,.,', 'src/poparser.ry', 91
|
||||
def _reduce_13( val, _values, result )
|
||||
on_comment(val[0])
|
||||
result
|
||||
end
|
||||
.,.,
|
||||
|
||||
module_eval <<'.,.,', 'src/poparser.ry', 99
|
||||
def _reduce_14( val, _values, result )
|
||||
result = val.delete_if{|item| item == ""}.join
|
||||
result
|
||||
end
|
||||
.,.,
|
||||
|
||||
module_eval <<'.,.,', 'src/poparser.ry', 103
|
||||
def _reduce_15( val, _values, result )
|
||||
result = val[0]
|
||||
result
|
||||
end
|
||||
.,.,
|
||||
|
||||
def _reduce_none( val, _values, result )
|
||||
result
|
||||
end
|
||||
|
||||
end # class PoParser
|
||||
|
||||
end # module GetText
|
||||
@@ -1,6 +0,0 @@
|
||||
module I18n
|
||||
module Locale
|
||||
autoload :Fallbacks, 'i18n/locale/fallbacks'
|
||||
autoload :Tag, 'i18n/locale/tag'
|
||||
end
|
||||
end
|
||||
@@ -1,98 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
# Locale Fallbacks
|
||||
#
|
||||
# Extends the I18n module to hold a fallbacks instance which is set to an
|
||||
# instance of I18n::Locale::Fallbacks by default but can be swapped with a
|
||||
# different implementation.
|
||||
#
|
||||
# Locale fallbacks will compute a number of fallback locales for a given locale.
|
||||
# For example:
|
||||
#
|
||||
# <pre><code>
|
||||
# I18n.fallbacks[:"es-MX"] # => [:"es-MX", :es, :en] </code></pre>
|
||||
#
|
||||
# Locale fallbacks always fall back to
|
||||
#
|
||||
# * all parent locales of a given locale (e.g. :es for :"es-MX") first,
|
||||
# * the current default locales and all of their parents second
|
||||
#
|
||||
# The default locales are set to [I18n.default_locale] by default but can be
|
||||
# set to something else.
|
||||
#
|
||||
# One can additionally add any number of additional fallback locales manually.
|
||||
# These will be added before the default locales to the fallback chain. For
|
||||
# example:
|
||||
#
|
||||
# # using the default locale as default fallback locale
|
||||
#
|
||||
# I18n.default_locale = :"en-US"
|
||||
# I18n.fallbacks = I18n::Fallbacks.new(:"de-AT" => :"de-DE")
|
||||
# I18n.fallbacks[:"de-AT"] # => [:"de-AT", :"de-DE", :de, :"en-US", :en]
|
||||
#
|
||||
# # using a custom locale as default fallback locale
|
||||
#
|
||||
# I18n.fallbacks = I18n::Fallbacks.new(:"en-GB", :"de-AT" => :de, :"de-CH" => :de)
|
||||
# I18n.fallbacks[:"de-AT"] # => [:"de-AT", :de, :"en-GB", :en]
|
||||
# I18n.fallbacks[:"de-CH"] # => [:"de-CH", :de, :"en-GB", :en]
|
||||
#
|
||||
# # mapping fallbacks to an existing instance
|
||||
#
|
||||
# # people speaking Catalan also speak Spanish as spoken in Spain
|
||||
# fallbacks = I18n.fallbacks
|
||||
# fallbacks.map(:ca => :"es-ES")
|
||||
# fallbacks[:ca] # => [:ca, :"es-ES", :es, :"en-US", :en]
|
||||
#
|
||||
# # people speaking Arabian as spoken in Palestine also speak Hebrew as spoken in Israel
|
||||
# fallbacks.map(:"ar-PS" => :"he-IL")
|
||||
# fallbacks[:"ar-PS"] # => [:"ar-PS", :ar, :"he-IL", :he, :"en-US", :en]
|
||||
# fallbacks[:"ar-EG"] # => [:"ar-EG", :ar, :"en-US", :en]
|
||||
#
|
||||
# # people speaking Sami as spoken in Finnland also speak Swedish and Finnish as spoken in Finnland
|
||||
# fallbacks.map(:sms => [:"se-FI", :"fi-FI"])
|
||||
# fallbacks[:sms] # => [:sms, :"se-FI", :se, :"fi-FI", :fi, :"en-US", :en]
|
||||
|
||||
module I18n
|
||||
module Locale
|
||||
class Fallbacks < Hash
|
||||
def initialize(*mappings)
|
||||
@map = {}
|
||||
map(mappings.pop) if mappings.last.is_a?(Hash)
|
||||
self.defaults = mappings.empty? ? [I18n.default_locale.to_sym] : mappings
|
||||
end
|
||||
|
||||
def defaults=(defaults)
|
||||
@defaults = defaults.map { |default| compute(default, false) }.flatten
|
||||
end
|
||||
attr_reader :defaults
|
||||
|
||||
def [](locale)
|
||||
raise InvalidLocale.new(locale) if locale.nil?
|
||||
locale = locale.to_sym
|
||||
super || store(locale, compute(locale))
|
||||
end
|
||||
|
||||
def map(mappings)
|
||||
mappings.each do |from, to|
|
||||
from, to = from.to_sym, Array(to)
|
||||
to.each do |to|
|
||||
@map[from] ||= []
|
||||
@map[from] << to.to_sym
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def compute(tags, include_defaults = true)
|
||||
result = Array(tags).collect do |tag|
|
||||
tags = I18n::Locale::Tag.tag(tag).self_and_parents.map! { |t| t.to_sym }
|
||||
tags.each { |tag| tags += compute(@map[tag]) if @map[tag] }
|
||||
tags
|
||||
end.flatten
|
||||
result.push(*defaults) if include_defaults
|
||||
result.uniq
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,28 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
module I18n
|
||||
module Locale
|
||||
module Tag
|
||||
autoload :Parents, 'i18n/locale/tag/parents'
|
||||
autoload :Rfc4646, 'i18n/locale/tag/rfc4646'
|
||||
autoload :Simple, 'i18n/locale/tag/simple'
|
||||
|
||||
class << self
|
||||
# Returns the current locale tag implementation. Defaults to +I18n::Locale::Tag::Simple+.
|
||||
def implementation
|
||||
@@implementation ||= Simple
|
||||
end
|
||||
|
||||
# Sets the current locale tag implementation. Use this to set a different locale tag implementation.
|
||||
def implementation=(implementation)
|
||||
@@implementation = implementation
|
||||
end
|
||||
|
||||
# Factory method for locale tags. Delegates to the current locale tag implementation.
|
||||
def tag(tag)
|
||||
implementation.tag(tag)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,24 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
module I18n
|
||||
module Locale
|
||||
module Tag
|
||||
module Parents
|
||||
def parent
|
||||
@parent ||= begin
|
||||
segs = to_a.compact
|
||||
segs.length > 1 ? self.class.tag(*segs[0..(segs.length-2)].join('-')) : nil
|
||||
end
|
||||
end
|
||||
|
||||
def self_and_parents
|
||||
@self_and_parents ||= [self] + parents
|
||||
end
|
||||
|
||||
def parents
|
||||
@parents ||= ([parent] + (parent ? parent.parents : [])).compact
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,76 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
# RFC 4646/47 compliant Locale tag implementation that parses locale tags to
|
||||
# subtags such as language, script, region, variant etc.
|
||||
#
|
||||
# For more information see by http://en.wikipedia.org/wiki/IETF_language_tag
|
||||
#
|
||||
# Rfc4646::Parser does not implement grandfathered tags.
|
||||
|
||||
module I18n
|
||||
module Locale
|
||||
module Tag
|
||||
RFC4646_SUBTAGS = [ :language, :script, :region, :variant, :extension, :privateuse, :grandfathered ]
|
||||
RFC4646_FORMATS = { :language => :downcase, :script => :capitalize, :region => :upcase, :variant => :downcase }
|
||||
|
||||
class Rfc4646 < Struct.new(*RFC4646_SUBTAGS)
|
||||
class << self
|
||||
# Parses the given tag and returns a Tag instance if it is valid.
|
||||
# Returns false if the given tag is not valid according to RFC 4646.
|
||||
def tag(tag)
|
||||
matches = parser.match(tag)
|
||||
new(*matches) if matches
|
||||
end
|
||||
|
||||
def parser
|
||||
@@parser ||= Rfc4646::Parser
|
||||
end
|
||||
|
||||
def parser=(parser)
|
||||
@@parser = parser
|
||||
end
|
||||
end
|
||||
|
||||
include Parents
|
||||
|
||||
RFC4646_FORMATS.each do |name, format|
|
||||
define_method(name) { self[name].send(format) unless self[name].nil? }
|
||||
end
|
||||
|
||||
def to_sym
|
||||
to_s.to_sym
|
||||
end
|
||||
|
||||
def to_s
|
||||
@tag ||= to_a.compact.join("-")
|
||||
end
|
||||
|
||||
def to_a
|
||||
members.collect { |attr| self.send(attr) }
|
||||
end
|
||||
|
||||
module Parser
|
||||
PATTERN = %r{\A(?:
|
||||
([a-z]{2,3}(?:(?:-[a-z]{3}){0,3})?|[a-z]{4}|[a-z]{5,8}) # language
|
||||
(?:-([a-z]{4}))? # script
|
||||
(?:-([a-z]{2}|\d{3}))? # region
|
||||
(?:-([0-9a-z]{5,8}|\d[0-9a-z]{3}))* # variant
|
||||
(?:-([0-9a-wyz](?:-[0-9a-z]{2,8})+))* # extension
|
||||
(?:-(x(?:-[0-9a-z]{1,8})+))?| # privateuse subtag
|
||||
(x(?:-[0-9a-z]{1,8})+)| # privateuse tag
|
||||
/* ([a-z]{1,3}(?:-[0-9a-z]{2,8}){1,2}) */ # grandfathered
|
||||
)\z}xi
|
||||
|
||||
class << self
|
||||
def match(tag)
|
||||
c = PATTERN.match(tag.to_s).captures
|
||||
c[0..4] << (c[5].nil? ? c[6] : c[5]) << c[7] # TODO c[7] is grandfathered, throw a NotImplemented exception here?
|
||||
rescue
|
||||
false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,41 +0,0 @@
|
||||
# encoding: utf-8
|
||||
|
||||
# Simple Locale tag implementation that computes subtags by simply splitting
|
||||
# the locale tag at '-' occurences.
|
||||
module I18n
|
||||
module Locale
|
||||
module Tag
|
||||
class Simple
|
||||
class << self
|
||||
def tag(tag)
|
||||
new(tag)
|
||||
end
|
||||
end
|
||||
|
||||
include Parents
|
||||
|
||||
attr_reader :tag
|
||||
|
||||
def initialize(*tag)
|
||||
@tag = tag.join('-').to_sym
|
||||
end
|
||||
|
||||
def subtags
|
||||
@subtags = tag.to_s.split('-').map { |subtag| subtag.to_s }
|
||||
end
|
||||
|
||||
def to_sym
|
||||
tag
|
||||
end
|
||||
|
||||
def to_s
|
||||
tag.to_s
|
||||
end
|
||||
|
||||
def to_a
|
||||
subtags
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,3 +0,0 @@
|
||||
module I18n
|
||||
VERSION = "0.4.1"
|
||||
end
|
||||
Binary file not shown.
@@ -1,30 +0,0 @@
|
||||
require "tzinfo/data_timezone_info"
|
||||
require "tzinfo/linked_timezone_info"
|
||||
require "tzinfo/timezone_definition"
|
||||
|
||||
module TZInfo
|
||||
module Definitions
|
||||
def self.load_all!
|
||||
return true if @loaded
|
||||
@loaded = true
|
||||
|
||||
defns = Marshal.load(File.read(File.expand_path("../definitions.dump", __FILE__)))
|
||||
|
||||
defns.each do |defn|
|
||||
tz_mod = defn.instance_variable_get(:@identifier).split("/").reduce(TZInfo::Definitions) { |mod, name|
|
||||
if mod.const_defined?(name)
|
||||
mod.const_get(name)
|
||||
else
|
||||
mod.const_set(name, Module.new)
|
||||
end
|
||||
}
|
||||
|
||||
def tz_mod.get
|
||||
@timezone
|
||||
end
|
||||
|
||||
tz_mod.instance_variable_set(:@timezone, defn)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,40 +0,0 @@
|
||||
require 'tzinfo/timezone_definition'
|
||||
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Africa
|
||||
module Casablanca
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Africa/Casablanca' do |tz|
|
||||
tz.offset :o0, -1820, 0, :LMT
|
||||
tz.offset :o1, 0, 0, :WET
|
||||
tz.offset :o2, 0, 3600, :WEST
|
||||
tz.offset :o3, 3600, 0, :CET
|
||||
|
||||
tz.transition 1913, 10, :o1, 10454687371, 4320
|
||||
tz.transition 1939, 9, :o2, 4859037, 2
|
||||
tz.transition 1939, 11, :o1, 58310075, 24
|
||||
tz.transition 1940, 2, :o2, 4859369, 2
|
||||
tz.transition 1945, 11, :o1, 58362659, 24
|
||||
tz.transition 1950, 6, :o2, 4866887, 2
|
||||
tz.transition 1950, 10, :o1, 58406003, 24
|
||||
tz.transition 1967, 6, :o2, 2439645, 1
|
||||
tz.transition 1967, 9, :o1, 58554347, 24
|
||||
tz.transition 1974, 6, :o2, 141264000
|
||||
tz.transition 1974, 8, :o1, 147222000
|
||||
tz.transition 1976, 5, :o2, 199756800
|
||||
tz.transition 1976, 7, :o1, 207702000
|
||||
tz.transition 1977, 5, :o2, 231292800
|
||||
tz.transition 1977, 9, :o1, 244249200
|
||||
tz.transition 1978, 6, :o2, 265507200
|
||||
tz.transition 1978, 8, :o1, 271033200
|
||||
tz.transition 1984, 3, :o3, 448243200
|
||||
tz.transition 1985, 12, :o1, 504918000
|
||||
tz.transition 2008, 6, :o2, 1212278400
|
||||
tz.transition 2008, 8, :o1, 1220223600
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,166 +0,0 @@
|
||||
require 'tzinfo/timezone_definition'
|
||||
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module America
|
||||
module Argentina
|
||||
module Buenos_Aires
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'America/Argentina/Buenos_Aires' do |tz|
|
||||
tz.offset :o0, -14028, 0, :LMT
|
||||
tz.offset :o1, -15408, 0, :CMT
|
||||
tz.offset :o2, -14400, 0, :ART
|
||||
tz.offset :o3, -14400, 3600, :ARST
|
||||
tz.offset :o4, -10800, 0, :ART
|
||||
tz.offset :o5, -10800, 3600, :ARST
|
||||
|
||||
tz.transition 1894, 10, :o1, 17374555169, 7200
|
||||
tz.transition 1920, 5, :o2, 1453467407, 600
|
||||
tz.transition 1930, 12, :o3, 7278935, 3
|
||||
tz.transition 1931, 4, :o2, 19411461, 8
|
||||
tz.transition 1931, 10, :o3, 7279889, 3
|
||||
tz.transition 1932, 3, :o2, 19414141, 8
|
||||
tz.transition 1932, 11, :o3, 7281038, 3
|
||||
tz.transition 1933, 3, :o2, 19417061, 8
|
||||
tz.transition 1933, 11, :o3, 7282133, 3
|
||||
tz.transition 1934, 3, :o2, 19419981, 8
|
||||
tz.transition 1934, 11, :o3, 7283228, 3
|
||||
tz.transition 1935, 3, :o2, 19422901, 8
|
||||
tz.transition 1935, 11, :o3, 7284323, 3
|
||||
tz.transition 1936, 3, :o2, 19425829, 8
|
||||
tz.transition 1936, 11, :o3, 7285421, 3
|
||||
tz.transition 1937, 3, :o2, 19428749, 8
|
||||
tz.transition 1937, 11, :o3, 7286516, 3
|
||||
tz.transition 1938, 3, :o2, 19431669, 8
|
||||
tz.transition 1938, 11, :o3, 7287611, 3
|
||||
tz.transition 1939, 3, :o2, 19434589, 8
|
||||
tz.transition 1939, 11, :o3, 7288706, 3
|
||||
tz.transition 1940, 3, :o2, 19437517, 8
|
||||
tz.transition 1940, 7, :o3, 7289435, 3
|
||||
tz.transition 1941, 6, :o2, 19441285, 8
|
||||
tz.transition 1941, 10, :o3, 7290848, 3
|
||||
tz.transition 1943, 8, :o2, 19447501, 8
|
||||
tz.transition 1943, 10, :o3, 7293038, 3
|
||||
tz.transition 1946, 3, :o2, 19455045, 8
|
||||
tz.transition 1946, 10, :o3, 7296284, 3
|
||||
tz.transition 1963, 10, :o2, 19506429, 8
|
||||
tz.transition 1963, 12, :o3, 7315136, 3
|
||||
tz.transition 1964, 3, :o2, 19507645, 8
|
||||
tz.transition 1964, 10, :o3, 7316051, 3
|
||||
tz.transition 1965, 3, :o2, 19510565, 8
|
||||
tz.transition 1965, 10, :o3, 7317146, 3
|
||||
tz.transition 1966, 3, :o2, 19513485, 8
|
||||
tz.transition 1966, 10, :o3, 7318241, 3
|
||||
tz.transition 1967, 4, :o2, 19516661, 8
|
||||
tz.transition 1967, 10, :o3, 7319294, 3
|
||||
tz.transition 1968, 4, :o2, 19519629, 8
|
||||
tz.transition 1968, 10, :o3, 7320407, 3
|
||||
tz.transition 1969, 4, :o2, 19522541, 8
|
||||
tz.transition 1969, 10, :o4, 7321499, 3
|
||||
tz.transition 1974, 1, :o5, 128142000
|
||||
tz.transition 1974, 5, :o4, 136605600
|
||||
tz.transition 1988, 12, :o5, 596948400
|
||||
tz.transition 1989, 3, :o4, 605066400
|
||||
tz.transition 1989, 10, :o5, 624423600
|
||||
tz.transition 1990, 3, :o4, 636516000
|
||||
tz.transition 1990, 10, :o5, 656478000
|
||||
tz.transition 1991, 3, :o4, 667965600
|
||||
tz.transition 1991, 10, :o5, 687927600
|
||||
tz.transition 1992, 3, :o4, 699415200
|
||||
tz.transition 1992, 10, :o5, 719377200
|
||||
tz.transition 1993, 3, :o4, 731469600
|
||||
tz.transition 1999, 10, :o3, 938919600
|
||||
tz.transition 2000, 3, :o4, 952052400
|
||||
tz.transition 2007, 12, :o5, 1198983600
|
||||
tz.transition 2008, 3, :o4, 1205632800
|
||||
tz.transition 2008, 10, :o5, 1224385200
|
||||
tz.transition 2009, 3, :o4, 1237082400
|
||||
tz.transition 2009, 10, :o5, 1255834800
|
||||
tz.transition 2010, 3, :o4, 1269136800
|
||||
tz.transition 2010, 10, :o5, 1287284400
|
||||
tz.transition 2011, 3, :o4, 1300586400
|
||||
tz.transition 2011, 10, :o5, 1318734000
|
||||
tz.transition 2012, 3, :o4, 1332036000
|
||||
tz.transition 2012, 10, :o5, 1350788400
|
||||
tz.transition 2013, 3, :o4, 1363485600
|
||||
tz.transition 2013, 10, :o5, 1382238000
|
||||
tz.transition 2014, 3, :o4, 1394935200
|
||||
tz.transition 2014, 10, :o5, 1413687600
|
||||
tz.transition 2015, 3, :o4, 1426384800
|
||||
tz.transition 2015, 10, :o5, 1445137200
|
||||
tz.transition 2016, 3, :o4, 1458439200
|
||||
tz.transition 2016, 10, :o5, 1476586800
|
||||
tz.transition 2017, 3, :o4, 1489888800
|
||||
tz.transition 2017, 10, :o5, 1508036400
|
||||
tz.transition 2018, 3, :o4, 1521338400
|
||||
tz.transition 2018, 10, :o5, 1540090800
|
||||
tz.transition 2019, 3, :o4, 1552788000
|
||||
tz.transition 2019, 10, :o5, 1571540400
|
||||
tz.transition 2020, 3, :o4, 1584237600
|
||||
tz.transition 2020, 10, :o5, 1602990000
|
||||
tz.transition 2021, 3, :o4, 1616292000
|
||||
tz.transition 2021, 10, :o5, 1634439600
|
||||
tz.transition 2022, 3, :o4, 1647741600
|
||||
tz.transition 2022, 10, :o5, 1665889200
|
||||
tz.transition 2023, 3, :o4, 1679191200
|
||||
tz.transition 2023, 10, :o5, 1697338800
|
||||
tz.transition 2024, 3, :o4, 1710640800
|
||||
tz.transition 2024, 10, :o5, 1729393200
|
||||
tz.transition 2025, 3, :o4, 1742090400
|
||||
tz.transition 2025, 10, :o5, 1760842800
|
||||
tz.transition 2026, 3, :o4, 1773540000
|
||||
tz.transition 2026, 10, :o5, 1792292400
|
||||
tz.transition 2027, 3, :o4, 1805594400
|
||||
tz.transition 2027, 10, :o5, 1823742000
|
||||
tz.transition 2028, 3, :o4, 1837044000
|
||||
tz.transition 2028, 10, :o5, 1855191600
|
||||
tz.transition 2029, 3, :o4, 1868493600
|
||||
tz.transition 2029, 10, :o5, 1887246000
|
||||
tz.transition 2030, 3, :o4, 1899943200
|
||||
tz.transition 2030, 10, :o5, 1918695600
|
||||
tz.transition 2031, 3, :o4, 1931392800
|
||||
tz.transition 2031, 10, :o5, 1950145200
|
||||
tz.transition 2032, 3, :o4, 1963447200
|
||||
tz.transition 2032, 10, :o5, 1981594800
|
||||
tz.transition 2033, 3, :o4, 1994896800
|
||||
tz.transition 2033, 10, :o5, 2013044400
|
||||
tz.transition 2034, 3, :o4, 2026346400
|
||||
tz.transition 2034, 10, :o5, 2044494000
|
||||
tz.transition 2035, 3, :o4, 2057796000
|
||||
tz.transition 2035, 10, :o5, 2076548400
|
||||
tz.transition 2036, 3, :o4, 2089245600
|
||||
tz.transition 2036, 10, :o5, 2107998000
|
||||
tz.transition 2037, 3, :o4, 2120695200
|
||||
tz.transition 2037, 10, :o5, 2139447600
|
||||
tz.transition 2038, 3, :o4, 29586043, 12
|
||||
tz.transition 2038, 10, :o5, 19725709, 8
|
||||
tz.transition 2039, 3, :o4, 29590411, 12
|
||||
tz.transition 2039, 10, :o5, 19728621, 8
|
||||
tz.transition 2040, 3, :o4, 29594779, 12
|
||||
tz.transition 2040, 10, :o5, 19731589, 8
|
||||
tz.transition 2041, 3, :o4, 29599147, 12
|
||||
tz.transition 2041, 10, :o5, 19734501, 8
|
||||
tz.transition 2042, 3, :o4, 29603515, 12
|
||||
tz.transition 2042, 10, :o5, 19737413, 8
|
||||
tz.transition 2043, 3, :o4, 29607883, 12
|
||||
tz.transition 2043, 10, :o5, 19740325, 8
|
||||
tz.transition 2044, 3, :o4, 29612335, 12
|
||||
tz.transition 2044, 10, :o5, 19743237, 8
|
||||
tz.transition 2045, 3, :o4, 29616703, 12
|
||||
tz.transition 2045, 10, :o5, 19746149, 8
|
||||
tz.transition 2046, 3, :o4, 29621071, 12
|
||||
tz.transition 2046, 10, :o5, 19749117, 8
|
||||
tz.transition 2047, 3, :o4, 29625439, 12
|
||||
tz.transition 2047, 10, :o5, 19752029, 8
|
||||
tz.transition 2048, 3, :o4, 29629807, 12
|
||||
tz.transition 2048, 10, :o5, 19754941, 8
|
||||
tz.transition 2049, 3, :o4, 29634259, 12
|
||||
tz.transition 2049, 10, :o5, 19757853, 8
|
||||
tz.transition 2050, 3, :o4, 29638627, 12
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,165 +0,0 @@
|
||||
require 'tzinfo/timezone_definition'
|
||||
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Asia
|
||||
module Irkutsk
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Asia/Irkutsk' do |tz|
|
||||
tz.offset :o0, 25040, 0, :LMT
|
||||
tz.offset :o1, 25040, 0, :IMT
|
||||
tz.offset :o2, 25200, 0, :IRKT
|
||||
tz.offset :o3, 28800, 0, :IRKT
|
||||
tz.offset :o4, 28800, 3600, :IRKST
|
||||
tz.offset :o5, 25200, 3600, :IRKST
|
||||
|
||||
tz.transition 1879, 12, :o1, 2600332427, 1080
|
||||
tz.transition 1920, 1, :o2, 2616136067, 1080
|
||||
tz.transition 1930, 6, :o3, 58227557, 24
|
||||
tz.transition 1981, 3, :o4, 354902400
|
||||
tz.transition 1981, 9, :o3, 370710000
|
||||
tz.transition 1982, 3, :o4, 386438400
|
||||
tz.transition 1982, 9, :o3, 402246000
|
||||
tz.transition 1983, 3, :o4, 417974400
|
||||
tz.transition 1983, 9, :o3, 433782000
|
||||
tz.transition 1984, 3, :o4, 449596800
|
||||
tz.transition 1984, 9, :o3, 465328800
|
||||
tz.transition 1985, 3, :o4, 481053600
|
||||
tz.transition 1985, 9, :o3, 496778400
|
||||
tz.transition 1986, 3, :o4, 512503200
|
||||
tz.transition 1986, 9, :o3, 528228000
|
||||
tz.transition 1987, 3, :o4, 543952800
|
||||
tz.transition 1987, 9, :o3, 559677600
|
||||
tz.transition 1988, 3, :o4, 575402400
|
||||
tz.transition 1988, 9, :o3, 591127200
|
||||
tz.transition 1989, 3, :o4, 606852000
|
||||
tz.transition 1989, 9, :o3, 622576800
|
||||
tz.transition 1990, 3, :o4, 638301600
|
||||
tz.transition 1990, 9, :o3, 654631200
|
||||
tz.transition 1991, 3, :o5, 670356000
|
||||
tz.transition 1991, 9, :o2, 686084400
|
||||
tz.transition 1992, 1, :o3, 695761200
|
||||
tz.transition 1992, 3, :o4, 701794800
|
||||
tz.transition 1992, 9, :o3, 717516000
|
||||
tz.transition 1993, 3, :o4, 733255200
|
||||
tz.transition 1993, 9, :o3, 748980000
|
||||
tz.transition 1994, 3, :o4, 764704800
|
||||
tz.transition 1994, 9, :o3, 780429600
|
||||
tz.transition 1995, 3, :o4, 796154400
|
||||
tz.transition 1995, 9, :o3, 811879200
|
||||
tz.transition 1996, 3, :o4, 828208800
|
||||
tz.transition 1996, 10, :o3, 846352800
|
||||
tz.transition 1997, 3, :o4, 859658400
|
||||
tz.transition 1997, 10, :o3, 877802400
|
||||
tz.transition 1998, 3, :o4, 891108000
|
||||
tz.transition 1998, 10, :o3, 909252000
|
||||
tz.transition 1999, 3, :o4, 922557600
|
||||
tz.transition 1999, 10, :o3, 941306400
|
||||
tz.transition 2000, 3, :o4, 954007200
|
||||
tz.transition 2000, 10, :o3, 972756000
|
||||
tz.transition 2001, 3, :o4, 985456800
|
||||
tz.transition 2001, 10, :o3, 1004205600
|
||||
tz.transition 2002, 3, :o4, 1017511200
|
||||
tz.transition 2002, 10, :o3, 1035655200
|
||||
tz.transition 2003, 3, :o4, 1048960800
|
||||
tz.transition 2003, 10, :o3, 1067104800
|
||||
tz.transition 2004, 3, :o4, 1080410400
|
||||
tz.transition 2004, 10, :o3, 1099159200
|
||||
tz.transition 2005, 3, :o4, 1111860000
|
||||
tz.transition 2005, 10, :o3, 1130608800
|
||||
tz.transition 2006, 3, :o4, 1143309600
|
||||
tz.transition 2006, 10, :o3, 1162058400
|
||||
tz.transition 2007, 3, :o4, 1174759200
|
||||
tz.transition 2007, 10, :o3, 1193508000
|
||||
tz.transition 2008, 3, :o4, 1206813600
|
||||
tz.transition 2008, 10, :o3, 1224957600
|
||||
tz.transition 2009, 3, :o4, 1238263200
|
||||
tz.transition 2009, 10, :o3, 1256407200
|
||||
tz.transition 2010, 3, :o4, 1269712800
|
||||
tz.transition 2010, 10, :o3, 1288461600
|
||||
tz.transition 2011, 3, :o4, 1301162400
|
||||
tz.transition 2011, 10, :o3, 1319911200
|
||||
tz.transition 2012, 3, :o4, 1332612000
|
||||
tz.transition 2012, 10, :o3, 1351360800
|
||||
tz.transition 2013, 3, :o4, 1364666400
|
||||
tz.transition 2013, 10, :o3, 1382810400
|
||||
tz.transition 2014, 3, :o4, 1396116000
|
||||
tz.transition 2014, 10, :o3, 1414260000
|
||||
tz.transition 2015, 3, :o4, 1427565600
|
||||
tz.transition 2015, 10, :o3, 1445709600
|
||||
tz.transition 2016, 3, :o4, 1459015200
|
||||
tz.transition 2016, 10, :o3, 1477764000
|
||||
tz.transition 2017, 3, :o4, 1490464800
|
||||
tz.transition 2017, 10, :o3, 1509213600
|
||||
tz.transition 2018, 3, :o4, 1521914400
|
||||
tz.transition 2018, 10, :o3, 1540663200
|
||||
tz.transition 2019, 3, :o4, 1553968800
|
||||
tz.transition 2019, 10, :o3, 1572112800
|
||||
tz.transition 2020, 3, :o4, 1585418400
|
||||
tz.transition 2020, 10, :o3, 1603562400
|
||||
tz.transition 2021, 3, :o4, 1616868000
|
||||
tz.transition 2021, 10, :o3, 1635616800
|
||||
tz.transition 2022, 3, :o4, 1648317600
|
||||
tz.transition 2022, 10, :o3, 1667066400
|
||||
tz.transition 2023, 3, :o4, 1679767200
|
||||
tz.transition 2023, 10, :o3, 1698516000
|
||||
tz.transition 2024, 3, :o4, 1711821600
|
||||
tz.transition 2024, 10, :o3, 1729965600
|
||||
tz.transition 2025, 3, :o4, 1743271200
|
||||
tz.transition 2025, 10, :o3, 1761415200
|
||||
tz.transition 2026, 3, :o4, 1774720800
|
||||
tz.transition 2026, 10, :o3, 1792864800
|
||||
tz.transition 2027, 3, :o4, 1806170400
|
||||
tz.transition 2027, 10, :o3, 1824919200
|
||||
tz.transition 2028, 3, :o4, 1837620000
|
||||
tz.transition 2028, 10, :o3, 1856368800
|
||||
tz.transition 2029, 3, :o4, 1869069600
|
||||
tz.transition 2029, 10, :o3, 1887818400
|
||||
tz.transition 2030, 3, :o4, 1901124000
|
||||
tz.transition 2030, 10, :o3, 1919268000
|
||||
tz.transition 2031, 3, :o4, 1932573600
|
||||
tz.transition 2031, 10, :o3, 1950717600
|
||||
tz.transition 2032, 3, :o4, 1964023200
|
||||
tz.transition 2032, 10, :o3, 1982772000
|
||||
tz.transition 2033, 3, :o4, 1995472800
|
||||
tz.transition 2033, 10, :o3, 2014221600
|
||||
tz.transition 2034, 3, :o4, 2026922400
|
||||
tz.transition 2034, 10, :o3, 2045671200
|
||||
tz.transition 2035, 3, :o4, 2058372000
|
||||
tz.transition 2035, 10, :o3, 2077120800
|
||||
tz.transition 2036, 3, :o4, 2090426400
|
||||
tz.transition 2036, 10, :o3, 2108570400
|
||||
tz.transition 2037, 3, :o4, 2121876000
|
||||
tz.transition 2037, 10, :o3, 2140020000
|
||||
tz.transition 2038, 3, :o4, 9862041, 4
|
||||
tz.transition 2038, 10, :o3, 9862909, 4
|
||||
tz.transition 2039, 3, :o4, 9863497, 4
|
||||
tz.transition 2039, 10, :o3, 9864365, 4
|
||||
tz.transition 2040, 3, :o4, 9864953, 4
|
||||
tz.transition 2040, 10, :o3, 9865821, 4
|
||||
tz.transition 2041, 3, :o4, 9866437, 4
|
||||
tz.transition 2041, 10, :o3, 9867277, 4
|
||||
tz.transition 2042, 3, :o4, 9867893, 4
|
||||
tz.transition 2042, 10, :o3, 9868733, 4
|
||||
tz.transition 2043, 3, :o4, 9869349, 4
|
||||
tz.transition 2043, 10, :o3, 9870189, 4
|
||||
tz.transition 2044, 3, :o4, 9870805, 4
|
||||
tz.transition 2044, 10, :o3, 9871673, 4
|
||||
tz.transition 2045, 3, :o4, 9872261, 4
|
||||
tz.transition 2045, 10, :o3, 9873129, 4
|
||||
tz.transition 2046, 3, :o4, 9873717, 4
|
||||
tz.transition 2046, 10, :o3, 9874585, 4
|
||||
tz.transition 2047, 3, :o4, 9875201, 4
|
||||
tz.transition 2047, 10, :o3, 9876041, 4
|
||||
tz.transition 2048, 3, :o4, 9876657, 4
|
||||
tz.transition 2048, 10, :o3, 9877497, 4
|
||||
tz.transition 2049, 3, :o4, 9878113, 4
|
||||
tz.transition 2049, 10, :o3, 9878981, 4
|
||||
tz.transition 2050, 3, :o4, 9879569, 4
|
||||
tz.transition 2050, 10, :o3, 9880437, 4
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,163 +0,0 @@
|
||||
require 'tzinfo/timezone_definition'
|
||||
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Asia
|
||||
module Kamchatka
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Asia/Kamchatka' do |tz|
|
||||
tz.offset :o0, 38076, 0, :LMT
|
||||
tz.offset :o1, 39600, 0, :PETT
|
||||
tz.offset :o2, 43200, 0, :PETT
|
||||
tz.offset :o3, 43200, 3600, :PETST
|
||||
tz.offset :o4, 39600, 3600, :PETST
|
||||
|
||||
tz.transition 1922, 11, :o1, 17448250027, 7200
|
||||
tz.transition 1930, 6, :o2, 58227553, 24
|
||||
tz.transition 1981, 3, :o3, 354888000
|
||||
tz.transition 1981, 9, :o2, 370695600
|
||||
tz.transition 1982, 3, :o3, 386424000
|
||||
tz.transition 1982, 9, :o2, 402231600
|
||||
tz.transition 1983, 3, :o3, 417960000
|
||||
tz.transition 1983, 9, :o2, 433767600
|
||||
tz.transition 1984, 3, :o3, 449582400
|
||||
tz.transition 1984, 9, :o2, 465314400
|
||||
tz.transition 1985, 3, :o3, 481039200
|
||||
tz.transition 1985, 9, :o2, 496764000
|
||||
tz.transition 1986, 3, :o3, 512488800
|
||||
tz.transition 1986, 9, :o2, 528213600
|
||||
tz.transition 1987, 3, :o3, 543938400
|
||||
tz.transition 1987, 9, :o2, 559663200
|
||||
tz.transition 1988, 3, :o3, 575388000
|
||||
tz.transition 1988, 9, :o2, 591112800
|
||||
tz.transition 1989, 3, :o3, 606837600
|
||||
tz.transition 1989, 9, :o2, 622562400
|
||||
tz.transition 1990, 3, :o3, 638287200
|
||||
tz.transition 1990, 9, :o2, 654616800
|
||||
tz.transition 1991, 3, :o4, 670341600
|
||||
tz.transition 1991, 9, :o1, 686070000
|
||||
tz.transition 1992, 1, :o2, 695746800
|
||||
tz.transition 1992, 3, :o3, 701780400
|
||||
tz.transition 1992, 9, :o2, 717501600
|
||||
tz.transition 1993, 3, :o3, 733240800
|
||||
tz.transition 1993, 9, :o2, 748965600
|
||||
tz.transition 1994, 3, :o3, 764690400
|
||||
tz.transition 1994, 9, :o2, 780415200
|
||||
tz.transition 1995, 3, :o3, 796140000
|
||||
tz.transition 1995, 9, :o2, 811864800
|
||||
tz.transition 1996, 3, :o3, 828194400
|
||||
tz.transition 1996, 10, :o2, 846338400
|
||||
tz.transition 1997, 3, :o3, 859644000
|
||||
tz.transition 1997, 10, :o2, 877788000
|
||||
tz.transition 1998, 3, :o3, 891093600
|
||||
tz.transition 1998, 10, :o2, 909237600
|
||||
tz.transition 1999, 3, :o3, 922543200
|
||||
tz.transition 1999, 10, :o2, 941292000
|
||||
tz.transition 2000, 3, :o3, 953992800
|
||||
tz.transition 2000, 10, :o2, 972741600
|
||||
tz.transition 2001, 3, :o3, 985442400
|
||||
tz.transition 2001, 10, :o2, 1004191200
|
||||
tz.transition 2002, 3, :o3, 1017496800
|
||||
tz.transition 2002, 10, :o2, 1035640800
|
||||
tz.transition 2003, 3, :o3, 1048946400
|
||||
tz.transition 2003, 10, :o2, 1067090400
|
||||
tz.transition 2004, 3, :o3, 1080396000
|
||||
tz.transition 2004, 10, :o2, 1099144800
|
||||
tz.transition 2005, 3, :o3, 1111845600
|
||||
tz.transition 2005, 10, :o2, 1130594400
|
||||
tz.transition 2006, 3, :o3, 1143295200
|
||||
tz.transition 2006, 10, :o2, 1162044000
|
||||
tz.transition 2007, 3, :o3, 1174744800
|
||||
tz.transition 2007, 10, :o2, 1193493600
|
||||
tz.transition 2008, 3, :o3, 1206799200
|
||||
tz.transition 2008, 10, :o2, 1224943200
|
||||
tz.transition 2009, 3, :o3, 1238248800
|
||||
tz.transition 2009, 10, :o2, 1256392800
|
||||
tz.transition 2010, 3, :o3, 1269698400
|
||||
tz.transition 2010, 10, :o2, 1288447200
|
||||
tz.transition 2011, 3, :o3, 1301148000
|
||||
tz.transition 2011, 10, :o2, 1319896800
|
||||
tz.transition 2012, 3, :o3, 1332597600
|
||||
tz.transition 2012, 10, :o2, 1351346400
|
||||
tz.transition 2013, 3, :o3, 1364652000
|
||||
tz.transition 2013, 10, :o2, 1382796000
|
||||
tz.transition 2014, 3, :o3, 1396101600
|
||||
tz.transition 2014, 10, :o2, 1414245600
|
||||
tz.transition 2015, 3, :o3, 1427551200
|
||||
tz.transition 2015, 10, :o2, 1445695200
|
||||
tz.transition 2016, 3, :o3, 1459000800
|
||||
tz.transition 2016, 10, :o2, 1477749600
|
||||
tz.transition 2017, 3, :o3, 1490450400
|
||||
tz.transition 2017, 10, :o2, 1509199200
|
||||
tz.transition 2018, 3, :o3, 1521900000
|
||||
tz.transition 2018, 10, :o2, 1540648800
|
||||
tz.transition 2019, 3, :o3, 1553954400
|
||||
tz.transition 2019, 10, :o2, 1572098400
|
||||
tz.transition 2020, 3, :o3, 1585404000
|
||||
tz.transition 2020, 10, :o2, 1603548000
|
||||
tz.transition 2021, 3, :o3, 1616853600
|
||||
tz.transition 2021, 10, :o2, 1635602400
|
||||
tz.transition 2022, 3, :o3, 1648303200
|
||||
tz.transition 2022, 10, :o2, 1667052000
|
||||
tz.transition 2023, 3, :o3, 1679752800
|
||||
tz.transition 2023, 10, :o2, 1698501600
|
||||
tz.transition 2024, 3, :o3, 1711807200
|
||||
tz.transition 2024, 10, :o2, 1729951200
|
||||
tz.transition 2025, 3, :o3, 1743256800
|
||||
tz.transition 2025, 10, :o2, 1761400800
|
||||
tz.transition 2026, 3, :o3, 1774706400
|
||||
tz.transition 2026, 10, :o2, 1792850400
|
||||
tz.transition 2027, 3, :o3, 1806156000
|
||||
tz.transition 2027, 10, :o2, 1824904800
|
||||
tz.transition 2028, 3, :o3, 1837605600
|
||||
tz.transition 2028, 10, :o2, 1856354400
|
||||
tz.transition 2029, 3, :o3, 1869055200
|
||||
tz.transition 2029, 10, :o2, 1887804000
|
||||
tz.transition 2030, 3, :o3, 1901109600
|
||||
tz.transition 2030, 10, :o2, 1919253600
|
||||
tz.transition 2031, 3, :o3, 1932559200
|
||||
tz.transition 2031, 10, :o2, 1950703200
|
||||
tz.transition 2032, 3, :o3, 1964008800
|
||||
tz.transition 2032, 10, :o2, 1982757600
|
||||
tz.transition 2033, 3, :o3, 1995458400
|
||||
tz.transition 2033, 10, :o2, 2014207200
|
||||
tz.transition 2034, 3, :o3, 2026908000
|
||||
tz.transition 2034, 10, :o2, 2045656800
|
||||
tz.transition 2035, 3, :o3, 2058357600
|
||||
tz.transition 2035, 10, :o2, 2077106400
|
||||
tz.transition 2036, 3, :o3, 2090412000
|
||||
tz.transition 2036, 10, :o2, 2108556000
|
||||
tz.transition 2037, 3, :o3, 2121861600
|
||||
tz.transition 2037, 10, :o2, 2140005600
|
||||
tz.transition 2038, 3, :o3, 29586121, 12
|
||||
tz.transition 2038, 10, :o2, 29588725, 12
|
||||
tz.transition 2039, 3, :o3, 29590489, 12
|
||||
tz.transition 2039, 10, :o2, 29593093, 12
|
||||
tz.transition 2040, 3, :o3, 29594857, 12
|
||||
tz.transition 2040, 10, :o2, 29597461, 12
|
||||
tz.transition 2041, 3, :o3, 29599309, 12
|
||||
tz.transition 2041, 10, :o2, 29601829, 12
|
||||
tz.transition 2042, 3, :o3, 29603677, 12
|
||||
tz.transition 2042, 10, :o2, 29606197, 12
|
||||
tz.transition 2043, 3, :o3, 29608045, 12
|
||||
tz.transition 2043, 10, :o2, 29610565, 12
|
||||
tz.transition 2044, 3, :o3, 29612413, 12
|
||||
tz.transition 2044, 10, :o2, 29615017, 12
|
||||
tz.transition 2045, 3, :o3, 29616781, 12
|
||||
tz.transition 2045, 10, :o2, 29619385, 12
|
||||
tz.transition 2046, 3, :o3, 29621149, 12
|
||||
tz.transition 2046, 10, :o2, 29623753, 12
|
||||
tz.transition 2047, 3, :o3, 29625601, 12
|
||||
tz.transition 2047, 10, :o2, 29628121, 12
|
||||
tz.transition 2048, 3, :o3, 29629969, 12
|
||||
tz.transition 2048, 10, :o2, 29632489, 12
|
||||
tz.transition 2049, 3, :o3, 29634337, 12
|
||||
tz.transition 2049, 10, :o2, 29636941, 12
|
||||
tz.transition 2050, 3, :o3, 29638705, 12
|
||||
tz.transition 2050, 10, :o2, 29641309, 12
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,163 +0,0 @@
|
||||
require 'tzinfo/timezone_definition'
|
||||
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Asia
|
||||
module Krasnoyarsk
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Asia/Krasnoyarsk' do |tz|
|
||||
tz.offset :o0, 22280, 0, :LMT
|
||||
tz.offset :o1, 21600, 0, :KRAT
|
||||
tz.offset :o2, 25200, 0, :KRAT
|
||||
tz.offset :o3, 25200, 3600, :KRAST
|
||||
tz.offset :o4, 21600, 3600, :KRAST
|
||||
|
||||
tz.transition 1920, 1, :o1, 5232231163, 2160
|
||||
tz.transition 1930, 6, :o2, 9704593, 4
|
||||
tz.transition 1981, 3, :o3, 354906000
|
||||
tz.transition 1981, 9, :o2, 370713600
|
||||
tz.transition 1982, 3, :o3, 386442000
|
||||
tz.transition 1982, 9, :o2, 402249600
|
||||
tz.transition 1983, 3, :o3, 417978000
|
||||
tz.transition 1983, 9, :o2, 433785600
|
||||
tz.transition 1984, 3, :o3, 449600400
|
||||
tz.transition 1984, 9, :o2, 465332400
|
||||
tz.transition 1985, 3, :o3, 481057200
|
||||
tz.transition 1985, 9, :o2, 496782000
|
||||
tz.transition 1986, 3, :o3, 512506800
|
||||
tz.transition 1986, 9, :o2, 528231600
|
||||
tz.transition 1987, 3, :o3, 543956400
|
||||
tz.transition 1987, 9, :o2, 559681200
|
||||
tz.transition 1988, 3, :o3, 575406000
|
||||
tz.transition 1988, 9, :o2, 591130800
|
||||
tz.transition 1989, 3, :o3, 606855600
|
||||
tz.transition 1989, 9, :o2, 622580400
|
||||
tz.transition 1990, 3, :o3, 638305200
|
||||
tz.transition 1990, 9, :o2, 654634800
|
||||
tz.transition 1991, 3, :o4, 670359600
|
||||
tz.transition 1991, 9, :o1, 686088000
|
||||
tz.transition 1992, 1, :o2, 695764800
|
||||
tz.transition 1992, 3, :o3, 701798400
|
||||
tz.transition 1992, 9, :o2, 717519600
|
||||
tz.transition 1993, 3, :o3, 733258800
|
||||
tz.transition 1993, 9, :o2, 748983600
|
||||
tz.transition 1994, 3, :o3, 764708400
|
||||
tz.transition 1994, 9, :o2, 780433200
|
||||
tz.transition 1995, 3, :o3, 796158000
|
||||
tz.transition 1995, 9, :o2, 811882800
|
||||
tz.transition 1996, 3, :o3, 828212400
|
||||
tz.transition 1996, 10, :o2, 846356400
|
||||
tz.transition 1997, 3, :o3, 859662000
|
||||
tz.transition 1997, 10, :o2, 877806000
|
||||
tz.transition 1998, 3, :o3, 891111600
|
||||
tz.transition 1998, 10, :o2, 909255600
|
||||
tz.transition 1999, 3, :o3, 922561200
|
||||
tz.transition 1999, 10, :o2, 941310000
|
||||
tz.transition 2000, 3, :o3, 954010800
|
||||
tz.transition 2000, 10, :o2, 972759600
|
||||
tz.transition 2001, 3, :o3, 985460400
|
||||
tz.transition 2001, 10, :o2, 1004209200
|
||||
tz.transition 2002, 3, :o3, 1017514800
|
||||
tz.transition 2002, 10, :o2, 1035658800
|
||||
tz.transition 2003, 3, :o3, 1048964400
|
||||
tz.transition 2003, 10, :o2, 1067108400
|
||||
tz.transition 2004, 3, :o3, 1080414000
|
||||
tz.transition 2004, 10, :o2, 1099162800
|
||||
tz.transition 2005, 3, :o3, 1111863600
|
||||
tz.transition 2005, 10, :o2, 1130612400
|
||||
tz.transition 2006, 3, :o3, 1143313200
|
||||
tz.transition 2006, 10, :o2, 1162062000
|
||||
tz.transition 2007, 3, :o3, 1174762800
|
||||
tz.transition 2007, 10, :o2, 1193511600
|
||||
tz.transition 2008, 3, :o3, 1206817200
|
||||
tz.transition 2008, 10, :o2, 1224961200
|
||||
tz.transition 2009, 3, :o3, 1238266800
|
||||
tz.transition 2009, 10, :o2, 1256410800
|
||||
tz.transition 2010, 3, :o3, 1269716400
|
||||
tz.transition 2010, 10, :o2, 1288465200
|
||||
tz.transition 2011, 3, :o3, 1301166000
|
||||
tz.transition 2011, 10, :o2, 1319914800
|
||||
tz.transition 2012, 3, :o3, 1332615600
|
||||
tz.transition 2012, 10, :o2, 1351364400
|
||||
tz.transition 2013, 3, :o3, 1364670000
|
||||
tz.transition 2013, 10, :o2, 1382814000
|
||||
tz.transition 2014, 3, :o3, 1396119600
|
||||
tz.transition 2014, 10, :o2, 1414263600
|
||||
tz.transition 2015, 3, :o3, 1427569200
|
||||
tz.transition 2015, 10, :o2, 1445713200
|
||||
tz.transition 2016, 3, :o3, 1459018800
|
||||
tz.transition 2016, 10, :o2, 1477767600
|
||||
tz.transition 2017, 3, :o3, 1490468400
|
||||
tz.transition 2017, 10, :o2, 1509217200
|
||||
tz.transition 2018, 3, :o3, 1521918000
|
||||
tz.transition 2018, 10, :o2, 1540666800
|
||||
tz.transition 2019, 3, :o3, 1553972400
|
||||
tz.transition 2019, 10, :o2, 1572116400
|
||||
tz.transition 2020, 3, :o3, 1585422000
|
||||
tz.transition 2020, 10, :o2, 1603566000
|
||||
tz.transition 2021, 3, :o3, 1616871600
|
||||
tz.transition 2021, 10, :o2, 1635620400
|
||||
tz.transition 2022, 3, :o3, 1648321200
|
||||
tz.transition 2022, 10, :o2, 1667070000
|
||||
tz.transition 2023, 3, :o3, 1679770800
|
||||
tz.transition 2023, 10, :o2, 1698519600
|
||||
tz.transition 2024, 3, :o3, 1711825200
|
||||
tz.transition 2024, 10, :o2, 1729969200
|
||||
tz.transition 2025, 3, :o3, 1743274800
|
||||
tz.transition 2025, 10, :o2, 1761418800
|
||||
tz.transition 2026, 3, :o3, 1774724400
|
||||
tz.transition 2026, 10, :o2, 1792868400
|
||||
tz.transition 2027, 3, :o3, 1806174000
|
||||
tz.transition 2027, 10, :o2, 1824922800
|
||||
tz.transition 2028, 3, :o3, 1837623600
|
||||
tz.transition 2028, 10, :o2, 1856372400
|
||||
tz.transition 2029, 3, :o3, 1869073200
|
||||
tz.transition 2029, 10, :o2, 1887822000
|
||||
tz.transition 2030, 3, :o3, 1901127600
|
||||
tz.transition 2030, 10, :o2, 1919271600
|
||||
tz.transition 2031, 3, :o3, 1932577200
|
||||
tz.transition 2031, 10, :o2, 1950721200
|
||||
tz.transition 2032, 3, :o3, 1964026800
|
||||
tz.transition 2032, 10, :o2, 1982775600
|
||||
tz.transition 2033, 3, :o3, 1995476400
|
||||
tz.transition 2033, 10, :o2, 2014225200
|
||||
tz.transition 2034, 3, :o3, 2026926000
|
||||
tz.transition 2034, 10, :o2, 2045674800
|
||||
tz.transition 2035, 3, :o3, 2058375600
|
||||
tz.transition 2035, 10, :o2, 2077124400
|
||||
tz.transition 2036, 3, :o3, 2090430000
|
||||
tz.transition 2036, 10, :o2, 2108574000
|
||||
tz.transition 2037, 3, :o3, 2121879600
|
||||
tz.transition 2037, 10, :o2, 2140023600
|
||||
tz.transition 2038, 3, :o3, 59172247, 24
|
||||
tz.transition 2038, 10, :o2, 59177455, 24
|
||||
tz.transition 2039, 3, :o3, 59180983, 24
|
||||
tz.transition 2039, 10, :o2, 59186191, 24
|
||||
tz.transition 2040, 3, :o3, 59189719, 24
|
||||
tz.transition 2040, 10, :o2, 59194927, 24
|
||||
tz.transition 2041, 3, :o3, 59198623, 24
|
||||
tz.transition 2041, 10, :o2, 59203663, 24
|
||||
tz.transition 2042, 3, :o3, 59207359, 24
|
||||
tz.transition 2042, 10, :o2, 59212399, 24
|
||||
tz.transition 2043, 3, :o3, 59216095, 24
|
||||
tz.transition 2043, 10, :o2, 59221135, 24
|
||||
tz.transition 2044, 3, :o3, 59224831, 24
|
||||
tz.transition 2044, 10, :o2, 59230039, 24
|
||||
tz.transition 2045, 3, :o3, 59233567, 24
|
||||
tz.transition 2045, 10, :o2, 59238775, 24
|
||||
tz.transition 2046, 3, :o3, 59242303, 24
|
||||
tz.transition 2046, 10, :o2, 59247511, 24
|
||||
tz.transition 2047, 3, :o3, 59251207, 24
|
||||
tz.transition 2047, 10, :o2, 59256247, 24
|
||||
tz.transition 2048, 3, :o3, 59259943, 24
|
||||
tz.transition 2048, 10, :o2, 59264983, 24
|
||||
tz.transition 2049, 3, :o3, 59268679, 24
|
||||
tz.transition 2049, 10, :o2, 59273887, 24
|
||||
tz.transition 2050, 3, :o3, 59277415, 24
|
||||
tz.transition 2050, 10, :o2, 59282623, 24
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,163 +0,0 @@
|
||||
require 'tzinfo/timezone_definition'
|
||||
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Asia
|
||||
module Magadan
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Asia/Magadan' do |tz|
|
||||
tz.offset :o0, 36192, 0, :LMT
|
||||
tz.offset :o1, 36000, 0, :MAGT
|
||||
tz.offset :o2, 39600, 0, :MAGT
|
||||
tz.offset :o3, 39600, 3600, :MAGST
|
||||
tz.offset :o4, 36000, 3600, :MAGST
|
||||
|
||||
tz.transition 1924, 5, :o1, 2181516373, 900
|
||||
tz.transition 1930, 6, :o2, 29113777, 12
|
||||
tz.transition 1981, 3, :o3, 354891600
|
||||
tz.transition 1981, 9, :o2, 370699200
|
||||
tz.transition 1982, 3, :o3, 386427600
|
||||
tz.transition 1982, 9, :o2, 402235200
|
||||
tz.transition 1983, 3, :o3, 417963600
|
||||
tz.transition 1983, 9, :o2, 433771200
|
||||
tz.transition 1984, 3, :o3, 449586000
|
||||
tz.transition 1984, 9, :o2, 465318000
|
||||
tz.transition 1985, 3, :o3, 481042800
|
||||
tz.transition 1985, 9, :o2, 496767600
|
||||
tz.transition 1986, 3, :o3, 512492400
|
||||
tz.transition 1986, 9, :o2, 528217200
|
||||
tz.transition 1987, 3, :o3, 543942000
|
||||
tz.transition 1987, 9, :o2, 559666800
|
||||
tz.transition 1988, 3, :o3, 575391600
|
||||
tz.transition 1988, 9, :o2, 591116400
|
||||
tz.transition 1989, 3, :o3, 606841200
|
||||
tz.transition 1989, 9, :o2, 622566000
|
||||
tz.transition 1990, 3, :o3, 638290800
|
||||
tz.transition 1990, 9, :o2, 654620400
|
||||
tz.transition 1991, 3, :o4, 670345200
|
||||
tz.transition 1991, 9, :o1, 686073600
|
||||
tz.transition 1992, 1, :o2, 695750400
|
||||
tz.transition 1992, 3, :o3, 701784000
|
||||
tz.transition 1992, 9, :o2, 717505200
|
||||
tz.transition 1993, 3, :o3, 733244400
|
||||
tz.transition 1993, 9, :o2, 748969200
|
||||
tz.transition 1994, 3, :o3, 764694000
|
||||
tz.transition 1994, 9, :o2, 780418800
|
||||
tz.transition 1995, 3, :o3, 796143600
|
||||
tz.transition 1995, 9, :o2, 811868400
|
||||
tz.transition 1996, 3, :o3, 828198000
|
||||
tz.transition 1996, 10, :o2, 846342000
|
||||
tz.transition 1997, 3, :o3, 859647600
|
||||
tz.transition 1997, 10, :o2, 877791600
|
||||
tz.transition 1998, 3, :o3, 891097200
|
||||
tz.transition 1998, 10, :o2, 909241200
|
||||
tz.transition 1999, 3, :o3, 922546800
|
||||
tz.transition 1999, 10, :o2, 941295600
|
||||
tz.transition 2000, 3, :o3, 953996400
|
||||
tz.transition 2000, 10, :o2, 972745200
|
||||
tz.transition 2001, 3, :o3, 985446000
|
||||
tz.transition 2001, 10, :o2, 1004194800
|
||||
tz.transition 2002, 3, :o3, 1017500400
|
||||
tz.transition 2002, 10, :o2, 1035644400
|
||||
tz.transition 2003, 3, :o3, 1048950000
|
||||
tz.transition 2003, 10, :o2, 1067094000
|
||||
tz.transition 2004, 3, :o3, 1080399600
|
||||
tz.transition 2004, 10, :o2, 1099148400
|
||||
tz.transition 2005, 3, :o3, 1111849200
|
||||
tz.transition 2005, 10, :o2, 1130598000
|
||||
tz.transition 2006, 3, :o3, 1143298800
|
||||
tz.transition 2006, 10, :o2, 1162047600
|
||||
tz.transition 2007, 3, :o3, 1174748400
|
||||
tz.transition 2007, 10, :o2, 1193497200
|
||||
tz.transition 2008, 3, :o3, 1206802800
|
||||
tz.transition 2008, 10, :o2, 1224946800
|
||||
tz.transition 2009, 3, :o3, 1238252400
|
||||
tz.transition 2009, 10, :o2, 1256396400
|
||||
tz.transition 2010, 3, :o3, 1269702000
|
||||
tz.transition 2010, 10, :o2, 1288450800
|
||||
tz.transition 2011, 3, :o3, 1301151600
|
||||
tz.transition 2011, 10, :o2, 1319900400
|
||||
tz.transition 2012, 3, :o3, 1332601200
|
||||
tz.transition 2012, 10, :o2, 1351350000
|
||||
tz.transition 2013, 3, :o3, 1364655600
|
||||
tz.transition 2013, 10, :o2, 1382799600
|
||||
tz.transition 2014, 3, :o3, 1396105200
|
||||
tz.transition 2014, 10, :o2, 1414249200
|
||||
tz.transition 2015, 3, :o3, 1427554800
|
||||
tz.transition 2015, 10, :o2, 1445698800
|
||||
tz.transition 2016, 3, :o3, 1459004400
|
||||
tz.transition 2016, 10, :o2, 1477753200
|
||||
tz.transition 2017, 3, :o3, 1490454000
|
||||
tz.transition 2017, 10, :o2, 1509202800
|
||||
tz.transition 2018, 3, :o3, 1521903600
|
||||
tz.transition 2018, 10, :o2, 1540652400
|
||||
tz.transition 2019, 3, :o3, 1553958000
|
||||
tz.transition 2019, 10, :o2, 1572102000
|
||||
tz.transition 2020, 3, :o3, 1585407600
|
||||
tz.transition 2020, 10, :o2, 1603551600
|
||||
tz.transition 2021, 3, :o3, 1616857200
|
||||
tz.transition 2021, 10, :o2, 1635606000
|
||||
tz.transition 2022, 3, :o3, 1648306800
|
||||
tz.transition 2022, 10, :o2, 1667055600
|
||||
tz.transition 2023, 3, :o3, 1679756400
|
||||
tz.transition 2023, 10, :o2, 1698505200
|
||||
tz.transition 2024, 3, :o3, 1711810800
|
||||
tz.transition 2024, 10, :o2, 1729954800
|
||||
tz.transition 2025, 3, :o3, 1743260400
|
||||
tz.transition 2025, 10, :o2, 1761404400
|
||||
tz.transition 2026, 3, :o3, 1774710000
|
||||
tz.transition 2026, 10, :o2, 1792854000
|
||||
tz.transition 2027, 3, :o3, 1806159600
|
||||
tz.transition 2027, 10, :o2, 1824908400
|
||||
tz.transition 2028, 3, :o3, 1837609200
|
||||
tz.transition 2028, 10, :o2, 1856358000
|
||||
tz.transition 2029, 3, :o3, 1869058800
|
||||
tz.transition 2029, 10, :o2, 1887807600
|
||||
tz.transition 2030, 3, :o3, 1901113200
|
||||
tz.transition 2030, 10, :o2, 1919257200
|
||||
tz.transition 2031, 3, :o3, 1932562800
|
||||
tz.transition 2031, 10, :o2, 1950706800
|
||||
tz.transition 2032, 3, :o3, 1964012400
|
||||
tz.transition 2032, 10, :o2, 1982761200
|
||||
tz.transition 2033, 3, :o3, 1995462000
|
||||
tz.transition 2033, 10, :o2, 2014210800
|
||||
tz.transition 2034, 3, :o3, 2026911600
|
||||
tz.transition 2034, 10, :o2, 2045660400
|
||||
tz.transition 2035, 3, :o3, 2058361200
|
||||
tz.transition 2035, 10, :o2, 2077110000
|
||||
tz.transition 2036, 3, :o3, 2090415600
|
||||
tz.transition 2036, 10, :o2, 2108559600
|
||||
tz.transition 2037, 3, :o3, 2121865200
|
||||
tz.transition 2037, 10, :o2, 2140009200
|
||||
tz.transition 2038, 3, :o3, 19724081, 8
|
||||
tz.transition 2038, 10, :o2, 19725817, 8
|
||||
tz.transition 2039, 3, :o3, 19726993, 8
|
||||
tz.transition 2039, 10, :o2, 19728729, 8
|
||||
tz.transition 2040, 3, :o3, 19729905, 8
|
||||
tz.transition 2040, 10, :o2, 19731641, 8
|
||||
tz.transition 2041, 3, :o3, 19732873, 8
|
||||
tz.transition 2041, 10, :o2, 19734553, 8
|
||||
tz.transition 2042, 3, :o3, 19735785, 8
|
||||
tz.transition 2042, 10, :o2, 19737465, 8
|
||||
tz.transition 2043, 3, :o3, 19738697, 8
|
||||
tz.transition 2043, 10, :o2, 19740377, 8
|
||||
tz.transition 2044, 3, :o3, 19741609, 8
|
||||
tz.transition 2044, 10, :o2, 19743345, 8
|
||||
tz.transition 2045, 3, :o3, 19744521, 8
|
||||
tz.transition 2045, 10, :o2, 19746257, 8
|
||||
tz.transition 2046, 3, :o3, 19747433, 8
|
||||
tz.transition 2046, 10, :o2, 19749169, 8
|
||||
tz.transition 2047, 3, :o3, 19750401, 8
|
||||
tz.transition 2047, 10, :o2, 19752081, 8
|
||||
tz.transition 2048, 3, :o3, 19753313, 8
|
||||
tz.transition 2048, 10, :o2, 19754993, 8
|
||||
tz.transition 2049, 3, :o3, 19756225, 8
|
||||
tz.transition 2049, 10, :o2, 19757961, 8
|
||||
tz.transition 2050, 3, :o3, 19759137, 8
|
||||
tz.transition 2050, 10, :o2, 19760873, 8
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,164 +0,0 @@
|
||||
require 'tzinfo/timezone_definition'
|
||||
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Asia
|
||||
module Novosibirsk
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Asia/Novosibirsk' do |tz|
|
||||
tz.offset :o0, 19900, 0, :LMT
|
||||
tz.offset :o1, 21600, 0, :NOVT
|
||||
tz.offset :o2, 25200, 0, :NOVT
|
||||
tz.offset :o3, 25200, 3600, :NOVST
|
||||
tz.offset :o4, 21600, 3600, :NOVST
|
||||
|
||||
tz.transition 1919, 12, :o1, 2092872833, 864
|
||||
tz.transition 1930, 6, :o2, 9704593, 4
|
||||
tz.transition 1981, 3, :o3, 354906000
|
||||
tz.transition 1981, 9, :o2, 370713600
|
||||
tz.transition 1982, 3, :o3, 386442000
|
||||
tz.transition 1982, 9, :o2, 402249600
|
||||
tz.transition 1983, 3, :o3, 417978000
|
||||
tz.transition 1983, 9, :o2, 433785600
|
||||
tz.transition 1984, 3, :o3, 449600400
|
||||
tz.transition 1984, 9, :o2, 465332400
|
||||
tz.transition 1985, 3, :o3, 481057200
|
||||
tz.transition 1985, 9, :o2, 496782000
|
||||
tz.transition 1986, 3, :o3, 512506800
|
||||
tz.transition 1986, 9, :o2, 528231600
|
||||
tz.transition 1987, 3, :o3, 543956400
|
||||
tz.transition 1987, 9, :o2, 559681200
|
||||
tz.transition 1988, 3, :o3, 575406000
|
||||
tz.transition 1988, 9, :o2, 591130800
|
||||
tz.transition 1989, 3, :o3, 606855600
|
||||
tz.transition 1989, 9, :o2, 622580400
|
||||
tz.transition 1990, 3, :o3, 638305200
|
||||
tz.transition 1990, 9, :o2, 654634800
|
||||
tz.transition 1991, 3, :o4, 670359600
|
||||
tz.transition 1991, 9, :o1, 686088000
|
||||
tz.transition 1992, 1, :o2, 695764800
|
||||
tz.transition 1992, 3, :o3, 701798400
|
||||
tz.transition 1992, 9, :o2, 717519600
|
||||
tz.transition 1993, 3, :o3, 733258800
|
||||
tz.transition 1993, 5, :o4, 738086400
|
||||
tz.transition 1993, 9, :o1, 748987200
|
||||
tz.transition 1994, 3, :o4, 764712000
|
||||
tz.transition 1994, 9, :o1, 780436800
|
||||
tz.transition 1995, 3, :o4, 796161600
|
||||
tz.transition 1995, 9, :o1, 811886400
|
||||
tz.transition 1996, 3, :o4, 828216000
|
||||
tz.transition 1996, 10, :o1, 846360000
|
||||
tz.transition 1997, 3, :o4, 859665600
|
||||
tz.transition 1997, 10, :o1, 877809600
|
||||
tz.transition 1998, 3, :o4, 891115200
|
||||
tz.transition 1998, 10, :o1, 909259200
|
||||
tz.transition 1999, 3, :o4, 922564800
|
||||
tz.transition 1999, 10, :o1, 941313600
|
||||
tz.transition 2000, 3, :o4, 954014400
|
||||
tz.transition 2000, 10, :o1, 972763200
|
||||
tz.transition 2001, 3, :o4, 985464000
|
||||
tz.transition 2001, 10, :o1, 1004212800
|
||||
tz.transition 2002, 3, :o4, 1017518400
|
||||
tz.transition 2002, 10, :o1, 1035662400
|
||||
tz.transition 2003, 3, :o4, 1048968000
|
||||
tz.transition 2003, 10, :o1, 1067112000
|
||||
tz.transition 2004, 3, :o4, 1080417600
|
||||
tz.transition 2004, 10, :o1, 1099166400
|
||||
tz.transition 2005, 3, :o4, 1111867200
|
||||
tz.transition 2005, 10, :o1, 1130616000
|
||||
tz.transition 2006, 3, :o4, 1143316800
|
||||
tz.transition 2006, 10, :o1, 1162065600
|
||||
tz.transition 2007, 3, :o4, 1174766400
|
||||
tz.transition 2007, 10, :o1, 1193515200
|
||||
tz.transition 2008, 3, :o4, 1206820800
|
||||
tz.transition 2008, 10, :o1, 1224964800
|
||||
tz.transition 2009, 3, :o4, 1238270400
|
||||
tz.transition 2009, 10, :o1, 1256414400
|
||||
tz.transition 2010, 3, :o4, 1269720000
|
||||
tz.transition 2010, 10, :o1, 1288468800
|
||||
tz.transition 2011, 3, :o4, 1301169600
|
||||
tz.transition 2011, 10, :o1, 1319918400
|
||||
tz.transition 2012, 3, :o4, 1332619200
|
||||
tz.transition 2012, 10, :o1, 1351368000
|
||||
tz.transition 2013, 3, :o4, 1364673600
|
||||
tz.transition 2013, 10, :o1, 1382817600
|
||||
tz.transition 2014, 3, :o4, 1396123200
|
||||
tz.transition 2014, 10, :o1, 1414267200
|
||||
tz.transition 2015, 3, :o4, 1427572800
|
||||
tz.transition 2015, 10, :o1, 1445716800
|
||||
tz.transition 2016, 3, :o4, 1459022400
|
||||
tz.transition 2016, 10, :o1, 1477771200
|
||||
tz.transition 2017, 3, :o4, 1490472000
|
||||
tz.transition 2017, 10, :o1, 1509220800
|
||||
tz.transition 2018, 3, :o4, 1521921600
|
||||
tz.transition 2018, 10, :o1, 1540670400
|
||||
tz.transition 2019, 3, :o4, 1553976000
|
||||
tz.transition 2019, 10, :o1, 1572120000
|
||||
tz.transition 2020, 3, :o4, 1585425600
|
||||
tz.transition 2020, 10, :o1, 1603569600
|
||||
tz.transition 2021, 3, :o4, 1616875200
|
||||
tz.transition 2021, 10, :o1, 1635624000
|
||||
tz.transition 2022, 3, :o4, 1648324800
|
||||
tz.transition 2022, 10, :o1, 1667073600
|
||||
tz.transition 2023, 3, :o4, 1679774400
|
||||
tz.transition 2023, 10, :o1, 1698523200
|
||||
tz.transition 2024, 3, :o4, 1711828800
|
||||
tz.transition 2024, 10, :o1, 1729972800
|
||||
tz.transition 2025, 3, :o4, 1743278400
|
||||
tz.transition 2025, 10, :o1, 1761422400
|
||||
tz.transition 2026, 3, :o4, 1774728000
|
||||
tz.transition 2026, 10, :o1, 1792872000
|
||||
tz.transition 2027, 3, :o4, 1806177600
|
||||
tz.transition 2027, 10, :o1, 1824926400
|
||||
tz.transition 2028, 3, :o4, 1837627200
|
||||
tz.transition 2028, 10, :o1, 1856376000
|
||||
tz.transition 2029, 3, :o4, 1869076800
|
||||
tz.transition 2029, 10, :o1, 1887825600
|
||||
tz.transition 2030, 3, :o4, 1901131200
|
||||
tz.transition 2030, 10, :o1, 1919275200
|
||||
tz.transition 2031, 3, :o4, 1932580800
|
||||
tz.transition 2031, 10, :o1, 1950724800
|
||||
tz.transition 2032, 3, :o4, 1964030400
|
||||
tz.transition 2032, 10, :o1, 1982779200
|
||||
tz.transition 2033, 3, :o4, 1995480000
|
||||
tz.transition 2033, 10, :o1, 2014228800
|
||||
tz.transition 2034, 3, :o4, 2026929600
|
||||
tz.transition 2034, 10, :o1, 2045678400
|
||||
tz.transition 2035, 3, :o4, 2058379200
|
||||
tz.transition 2035, 10, :o1, 2077128000
|
||||
tz.transition 2036, 3, :o4, 2090433600
|
||||
tz.transition 2036, 10, :o1, 2108577600
|
||||
tz.transition 2037, 3, :o4, 2121883200
|
||||
tz.transition 2037, 10, :o1, 2140027200
|
||||
tz.transition 2038, 3, :o4, 7396531, 3
|
||||
tz.transition 2038, 10, :o1, 7397182, 3
|
||||
tz.transition 2039, 3, :o4, 7397623, 3
|
||||
tz.transition 2039, 10, :o1, 7398274, 3
|
||||
tz.transition 2040, 3, :o4, 7398715, 3
|
||||
tz.transition 2040, 10, :o1, 7399366, 3
|
||||
tz.transition 2041, 3, :o4, 7399828, 3
|
||||
tz.transition 2041, 10, :o1, 7400458, 3
|
||||
tz.transition 2042, 3, :o4, 7400920, 3
|
||||
tz.transition 2042, 10, :o1, 7401550, 3
|
||||
tz.transition 2043, 3, :o4, 7402012, 3
|
||||
tz.transition 2043, 10, :o1, 7402642, 3
|
||||
tz.transition 2044, 3, :o4, 7403104, 3
|
||||
tz.transition 2044, 10, :o1, 7403755, 3
|
||||
tz.transition 2045, 3, :o4, 7404196, 3
|
||||
tz.transition 2045, 10, :o1, 7404847, 3
|
||||
tz.transition 2046, 3, :o4, 7405288, 3
|
||||
tz.transition 2046, 10, :o1, 7405939, 3
|
||||
tz.transition 2047, 3, :o4, 7406401, 3
|
||||
tz.transition 2047, 10, :o1, 7407031, 3
|
||||
tz.transition 2048, 3, :o4, 7407493, 3
|
||||
tz.transition 2048, 10, :o1, 7408123, 3
|
||||
tz.transition 2049, 3, :o4, 7408585, 3
|
||||
tz.transition 2049, 10, :o1, 7409236, 3
|
||||
tz.transition 2050, 3, :o4, 7409677, 3
|
||||
tz.transition 2050, 10, :o1, 7410328, 3
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,164 +0,0 @@
|
||||
require 'tzinfo/timezone_definition'
|
||||
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Asia
|
||||
module Vladivostok
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Asia/Vladivostok' do |tz|
|
||||
tz.offset :o0, 31664, 0, :LMT
|
||||
tz.offset :o1, 32400, 0, :VLAT
|
||||
tz.offset :o2, 36000, 0, :VLAT
|
||||
tz.offset :o3, 36000, 3600, :VLAST
|
||||
tz.offset :o4, 32400, 3600, :VLASST
|
||||
tz.offset :o5, 32400, 0, :VLAST
|
||||
|
||||
tz.transition 1922, 11, :o1, 13086214921, 5400
|
||||
tz.transition 1930, 6, :o2, 19409185, 8
|
||||
tz.transition 1981, 3, :o3, 354895200
|
||||
tz.transition 1981, 9, :o2, 370702800
|
||||
tz.transition 1982, 3, :o3, 386431200
|
||||
tz.transition 1982, 9, :o2, 402238800
|
||||
tz.transition 1983, 3, :o3, 417967200
|
||||
tz.transition 1983, 9, :o2, 433774800
|
||||
tz.transition 1984, 3, :o3, 449589600
|
||||
tz.transition 1984, 9, :o2, 465321600
|
||||
tz.transition 1985, 3, :o3, 481046400
|
||||
tz.transition 1985, 9, :o2, 496771200
|
||||
tz.transition 1986, 3, :o3, 512496000
|
||||
tz.transition 1986, 9, :o2, 528220800
|
||||
tz.transition 1987, 3, :o3, 543945600
|
||||
tz.transition 1987, 9, :o2, 559670400
|
||||
tz.transition 1988, 3, :o3, 575395200
|
||||
tz.transition 1988, 9, :o2, 591120000
|
||||
tz.transition 1989, 3, :o3, 606844800
|
||||
tz.transition 1989, 9, :o2, 622569600
|
||||
tz.transition 1990, 3, :o3, 638294400
|
||||
tz.transition 1990, 9, :o2, 654624000
|
||||
tz.transition 1991, 3, :o4, 670348800
|
||||
tz.transition 1991, 9, :o5, 686077200
|
||||
tz.transition 1992, 1, :o2, 695754000
|
||||
tz.transition 1992, 3, :o3, 701787600
|
||||
tz.transition 1992, 9, :o2, 717508800
|
||||
tz.transition 1993, 3, :o3, 733248000
|
||||
tz.transition 1993, 9, :o2, 748972800
|
||||
tz.transition 1994, 3, :o3, 764697600
|
||||
tz.transition 1994, 9, :o2, 780422400
|
||||
tz.transition 1995, 3, :o3, 796147200
|
||||
tz.transition 1995, 9, :o2, 811872000
|
||||
tz.transition 1996, 3, :o3, 828201600
|
||||
tz.transition 1996, 10, :o2, 846345600
|
||||
tz.transition 1997, 3, :o3, 859651200
|
||||
tz.transition 1997, 10, :o2, 877795200
|
||||
tz.transition 1998, 3, :o3, 891100800
|
||||
tz.transition 1998, 10, :o2, 909244800
|
||||
tz.transition 1999, 3, :o3, 922550400
|
||||
tz.transition 1999, 10, :o2, 941299200
|
||||
tz.transition 2000, 3, :o3, 954000000
|
||||
tz.transition 2000, 10, :o2, 972748800
|
||||
tz.transition 2001, 3, :o3, 985449600
|
||||
tz.transition 2001, 10, :o2, 1004198400
|
||||
tz.transition 2002, 3, :o3, 1017504000
|
||||
tz.transition 2002, 10, :o2, 1035648000
|
||||
tz.transition 2003, 3, :o3, 1048953600
|
||||
tz.transition 2003, 10, :o2, 1067097600
|
||||
tz.transition 2004, 3, :o3, 1080403200
|
||||
tz.transition 2004, 10, :o2, 1099152000
|
||||
tz.transition 2005, 3, :o3, 1111852800
|
||||
tz.transition 2005, 10, :o2, 1130601600
|
||||
tz.transition 2006, 3, :o3, 1143302400
|
||||
tz.transition 2006, 10, :o2, 1162051200
|
||||
tz.transition 2007, 3, :o3, 1174752000
|
||||
tz.transition 2007, 10, :o2, 1193500800
|
||||
tz.transition 2008, 3, :o3, 1206806400
|
||||
tz.transition 2008, 10, :o2, 1224950400
|
||||
tz.transition 2009, 3, :o3, 1238256000
|
||||
tz.transition 2009, 10, :o2, 1256400000
|
||||
tz.transition 2010, 3, :o3, 1269705600
|
||||
tz.transition 2010, 10, :o2, 1288454400
|
||||
tz.transition 2011, 3, :o3, 1301155200
|
||||
tz.transition 2011, 10, :o2, 1319904000
|
||||
tz.transition 2012, 3, :o3, 1332604800
|
||||
tz.transition 2012, 10, :o2, 1351353600
|
||||
tz.transition 2013, 3, :o3, 1364659200
|
||||
tz.transition 2013, 10, :o2, 1382803200
|
||||
tz.transition 2014, 3, :o3, 1396108800
|
||||
tz.transition 2014, 10, :o2, 1414252800
|
||||
tz.transition 2015, 3, :o3, 1427558400
|
||||
tz.transition 2015, 10, :o2, 1445702400
|
||||
tz.transition 2016, 3, :o3, 1459008000
|
||||
tz.transition 2016, 10, :o2, 1477756800
|
||||
tz.transition 2017, 3, :o3, 1490457600
|
||||
tz.transition 2017, 10, :o2, 1509206400
|
||||
tz.transition 2018, 3, :o3, 1521907200
|
||||
tz.transition 2018, 10, :o2, 1540656000
|
||||
tz.transition 2019, 3, :o3, 1553961600
|
||||
tz.transition 2019, 10, :o2, 1572105600
|
||||
tz.transition 2020, 3, :o3, 1585411200
|
||||
tz.transition 2020, 10, :o2, 1603555200
|
||||
tz.transition 2021, 3, :o3, 1616860800
|
||||
tz.transition 2021, 10, :o2, 1635609600
|
||||
tz.transition 2022, 3, :o3, 1648310400
|
||||
tz.transition 2022, 10, :o2, 1667059200
|
||||
tz.transition 2023, 3, :o3, 1679760000
|
||||
tz.transition 2023, 10, :o2, 1698508800
|
||||
tz.transition 2024, 3, :o3, 1711814400
|
||||
tz.transition 2024, 10, :o2, 1729958400
|
||||
tz.transition 2025, 3, :o3, 1743264000
|
||||
tz.transition 2025, 10, :o2, 1761408000
|
||||
tz.transition 2026, 3, :o3, 1774713600
|
||||
tz.transition 2026, 10, :o2, 1792857600
|
||||
tz.transition 2027, 3, :o3, 1806163200
|
||||
tz.transition 2027, 10, :o2, 1824912000
|
||||
tz.transition 2028, 3, :o3, 1837612800
|
||||
tz.transition 2028, 10, :o2, 1856361600
|
||||
tz.transition 2029, 3, :o3, 1869062400
|
||||
tz.transition 2029, 10, :o2, 1887811200
|
||||
tz.transition 2030, 3, :o3, 1901116800
|
||||
tz.transition 2030, 10, :o2, 1919260800
|
||||
tz.transition 2031, 3, :o3, 1932566400
|
||||
tz.transition 2031, 10, :o2, 1950710400
|
||||
tz.transition 2032, 3, :o3, 1964016000
|
||||
tz.transition 2032, 10, :o2, 1982764800
|
||||
tz.transition 2033, 3, :o3, 1995465600
|
||||
tz.transition 2033, 10, :o2, 2014214400
|
||||
tz.transition 2034, 3, :o3, 2026915200
|
||||
tz.transition 2034, 10, :o2, 2045664000
|
||||
tz.transition 2035, 3, :o3, 2058364800
|
||||
tz.transition 2035, 10, :o2, 2077113600
|
||||
tz.transition 2036, 3, :o3, 2090419200
|
||||
tz.transition 2036, 10, :o2, 2108563200
|
||||
tz.transition 2037, 3, :o3, 2121868800
|
||||
tz.transition 2037, 10, :o2, 2140012800
|
||||
tz.transition 2038, 3, :o3, 14793061, 6
|
||||
tz.transition 2038, 10, :o2, 14794363, 6
|
||||
tz.transition 2039, 3, :o3, 14795245, 6
|
||||
tz.transition 2039, 10, :o2, 14796547, 6
|
||||
tz.transition 2040, 3, :o3, 14797429, 6
|
||||
tz.transition 2040, 10, :o2, 14798731, 6
|
||||
tz.transition 2041, 3, :o3, 14799655, 6
|
||||
tz.transition 2041, 10, :o2, 14800915, 6
|
||||
tz.transition 2042, 3, :o3, 14801839, 6
|
||||
tz.transition 2042, 10, :o2, 14803099, 6
|
||||
tz.transition 2043, 3, :o3, 14804023, 6
|
||||
tz.transition 2043, 10, :o2, 14805283, 6
|
||||
tz.transition 2044, 3, :o3, 14806207, 6
|
||||
tz.transition 2044, 10, :o2, 14807509, 6
|
||||
tz.transition 2045, 3, :o3, 14808391, 6
|
||||
tz.transition 2045, 10, :o2, 14809693, 6
|
||||
tz.transition 2046, 3, :o3, 14810575, 6
|
||||
tz.transition 2046, 10, :o2, 14811877, 6
|
||||
tz.transition 2047, 3, :o3, 14812801, 6
|
||||
tz.transition 2047, 10, :o2, 14814061, 6
|
||||
tz.transition 2048, 3, :o3, 14814985, 6
|
||||
tz.transition 2048, 10, :o2, 14816245, 6
|
||||
tz.transition 2049, 3, :o3, 14817169, 6
|
||||
tz.transition 2049, 10, :o2, 14818471, 6
|
||||
tz.transition 2050, 3, :o3, 14819353, 6
|
||||
tz.transition 2050, 10, :o2, 14820655, 6
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,163 +0,0 @@
|
||||
require 'tzinfo/timezone_definition'
|
||||
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Asia
|
||||
module Yakutsk
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Asia/Yakutsk' do |tz|
|
||||
tz.offset :o0, 31120, 0, :LMT
|
||||
tz.offset :o1, 28800, 0, :YAKT
|
||||
tz.offset :o2, 32400, 0, :YAKT
|
||||
tz.offset :o3, 32400, 3600, :YAKST
|
||||
tz.offset :o4, 28800, 3600, :YAKST
|
||||
|
||||
tz.transition 1919, 12, :o1, 2616091711, 1080
|
||||
tz.transition 1930, 6, :o2, 14556889, 6
|
||||
tz.transition 1981, 3, :o3, 354898800
|
||||
tz.transition 1981, 9, :o2, 370706400
|
||||
tz.transition 1982, 3, :o3, 386434800
|
||||
tz.transition 1982, 9, :o2, 402242400
|
||||
tz.transition 1983, 3, :o3, 417970800
|
||||
tz.transition 1983, 9, :o2, 433778400
|
||||
tz.transition 1984, 3, :o3, 449593200
|
||||
tz.transition 1984, 9, :o2, 465325200
|
||||
tz.transition 1985, 3, :o3, 481050000
|
||||
tz.transition 1985, 9, :o2, 496774800
|
||||
tz.transition 1986, 3, :o3, 512499600
|
||||
tz.transition 1986, 9, :o2, 528224400
|
||||
tz.transition 1987, 3, :o3, 543949200
|
||||
tz.transition 1987, 9, :o2, 559674000
|
||||
tz.transition 1988, 3, :o3, 575398800
|
||||
tz.transition 1988, 9, :o2, 591123600
|
||||
tz.transition 1989, 3, :o3, 606848400
|
||||
tz.transition 1989, 9, :o2, 622573200
|
||||
tz.transition 1990, 3, :o3, 638298000
|
||||
tz.transition 1990, 9, :o2, 654627600
|
||||
tz.transition 1991, 3, :o4, 670352400
|
||||
tz.transition 1991, 9, :o1, 686080800
|
||||
tz.transition 1992, 1, :o2, 695757600
|
||||
tz.transition 1992, 3, :o3, 701791200
|
||||
tz.transition 1992, 9, :o2, 717512400
|
||||
tz.transition 1993, 3, :o3, 733251600
|
||||
tz.transition 1993, 9, :o2, 748976400
|
||||
tz.transition 1994, 3, :o3, 764701200
|
||||
tz.transition 1994, 9, :o2, 780426000
|
||||
tz.transition 1995, 3, :o3, 796150800
|
||||
tz.transition 1995, 9, :o2, 811875600
|
||||
tz.transition 1996, 3, :o3, 828205200
|
||||
tz.transition 1996, 10, :o2, 846349200
|
||||
tz.transition 1997, 3, :o3, 859654800
|
||||
tz.transition 1997, 10, :o2, 877798800
|
||||
tz.transition 1998, 3, :o3, 891104400
|
||||
tz.transition 1998, 10, :o2, 909248400
|
||||
tz.transition 1999, 3, :o3, 922554000
|
||||
tz.transition 1999, 10, :o2, 941302800
|
||||
tz.transition 2000, 3, :o3, 954003600
|
||||
tz.transition 2000, 10, :o2, 972752400
|
||||
tz.transition 2001, 3, :o3, 985453200
|
||||
tz.transition 2001, 10, :o2, 1004202000
|
||||
tz.transition 2002, 3, :o3, 1017507600
|
||||
tz.transition 2002, 10, :o2, 1035651600
|
||||
tz.transition 2003, 3, :o3, 1048957200
|
||||
tz.transition 2003, 10, :o2, 1067101200
|
||||
tz.transition 2004, 3, :o3, 1080406800
|
||||
tz.transition 2004, 10, :o2, 1099155600
|
||||
tz.transition 2005, 3, :o3, 1111856400
|
||||
tz.transition 2005, 10, :o2, 1130605200
|
||||
tz.transition 2006, 3, :o3, 1143306000
|
||||
tz.transition 2006, 10, :o2, 1162054800
|
||||
tz.transition 2007, 3, :o3, 1174755600
|
||||
tz.transition 2007, 10, :o2, 1193504400
|
||||
tz.transition 2008, 3, :o3, 1206810000
|
||||
tz.transition 2008, 10, :o2, 1224954000
|
||||
tz.transition 2009, 3, :o3, 1238259600
|
||||
tz.transition 2009, 10, :o2, 1256403600
|
||||
tz.transition 2010, 3, :o3, 1269709200
|
||||
tz.transition 2010, 10, :o2, 1288458000
|
||||
tz.transition 2011, 3, :o3, 1301158800
|
||||
tz.transition 2011, 10, :o2, 1319907600
|
||||
tz.transition 2012, 3, :o3, 1332608400
|
||||
tz.transition 2012, 10, :o2, 1351357200
|
||||
tz.transition 2013, 3, :o3, 1364662800
|
||||
tz.transition 2013, 10, :o2, 1382806800
|
||||
tz.transition 2014, 3, :o3, 1396112400
|
||||
tz.transition 2014, 10, :o2, 1414256400
|
||||
tz.transition 2015, 3, :o3, 1427562000
|
||||
tz.transition 2015, 10, :o2, 1445706000
|
||||
tz.transition 2016, 3, :o3, 1459011600
|
||||
tz.transition 2016, 10, :o2, 1477760400
|
||||
tz.transition 2017, 3, :o3, 1490461200
|
||||
tz.transition 2017, 10, :o2, 1509210000
|
||||
tz.transition 2018, 3, :o3, 1521910800
|
||||
tz.transition 2018, 10, :o2, 1540659600
|
||||
tz.transition 2019, 3, :o3, 1553965200
|
||||
tz.transition 2019, 10, :o2, 1572109200
|
||||
tz.transition 2020, 3, :o3, 1585414800
|
||||
tz.transition 2020, 10, :o2, 1603558800
|
||||
tz.transition 2021, 3, :o3, 1616864400
|
||||
tz.transition 2021, 10, :o2, 1635613200
|
||||
tz.transition 2022, 3, :o3, 1648314000
|
||||
tz.transition 2022, 10, :o2, 1667062800
|
||||
tz.transition 2023, 3, :o3, 1679763600
|
||||
tz.transition 2023, 10, :o2, 1698512400
|
||||
tz.transition 2024, 3, :o3, 1711818000
|
||||
tz.transition 2024, 10, :o2, 1729962000
|
||||
tz.transition 2025, 3, :o3, 1743267600
|
||||
tz.transition 2025, 10, :o2, 1761411600
|
||||
tz.transition 2026, 3, :o3, 1774717200
|
||||
tz.transition 2026, 10, :o2, 1792861200
|
||||
tz.transition 2027, 3, :o3, 1806166800
|
||||
tz.transition 2027, 10, :o2, 1824915600
|
||||
tz.transition 2028, 3, :o3, 1837616400
|
||||
tz.transition 2028, 10, :o2, 1856365200
|
||||
tz.transition 2029, 3, :o3, 1869066000
|
||||
tz.transition 2029, 10, :o2, 1887814800
|
||||
tz.transition 2030, 3, :o3, 1901120400
|
||||
tz.transition 2030, 10, :o2, 1919264400
|
||||
tz.transition 2031, 3, :o3, 1932570000
|
||||
tz.transition 2031, 10, :o2, 1950714000
|
||||
tz.transition 2032, 3, :o3, 1964019600
|
||||
tz.transition 2032, 10, :o2, 1982768400
|
||||
tz.transition 2033, 3, :o3, 1995469200
|
||||
tz.transition 2033, 10, :o2, 2014218000
|
||||
tz.transition 2034, 3, :o3, 2026918800
|
||||
tz.transition 2034, 10, :o2, 2045667600
|
||||
tz.transition 2035, 3, :o3, 2058368400
|
||||
tz.transition 2035, 10, :o2, 2077117200
|
||||
tz.transition 2036, 3, :o3, 2090422800
|
||||
tz.transition 2036, 10, :o2, 2108566800
|
||||
tz.transition 2037, 3, :o3, 2121872400
|
||||
tz.transition 2037, 10, :o2, 2140016400
|
||||
tz.transition 2038, 3, :o3, 59172245, 24
|
||||
tz.transition 2038, 10, :o2, 59177453, 24
|
||||
tz.transition 2039, 3, :o3, 59180981, 24
|
||||
tz.transition 2039, 10, :o2, 59186189, 24
|
||||
tz.transition 2040, 3, :o3, 59189717, 24
|
||||
tz.transition 2040, 10, :o2, 59194925, 24
|
||||
tz.transition 2041, 3, :o3, 59198621, 24
|
||||
tz.transition 2041, 10, :o2, 59203661, 24
|
||||
tz.transition 2042, 3, :o3, 59207357, 24
|
||||
tz.transition 2042, 10, :o2, 59212397, 24
|
||||
tz.transition 2043, 3, :o3, 59216093, 24
|
||||
tz.transition 2043, 10, :o2, 59221133, 24
|
||||
tz.transition 2044, 3, :o3, 59224829, 24
|
||||
tz.transition 2044, 10, :o2, 59230037, 24
|
||||
tz.transition 2045, 3, :o3, 59233565, 24
|
||||
tz.transition 2045, 10, :o2, 59238773, 24
|
||||
tz.transition 2046, 3, :o3, 59242301, 24
|
||||
tz.transition 2046, 10, :o2, 59247509, 24
|
||||
tz.transition 2047, 3, :o3, 59251205, 24
|
||||
tz.transition 2047, 10, :o2, 59256245, 24
|
||||
tz.transition 2048, 3, :o3, 59259941, 24
|
||||
tz.transition 2048, 10, :o2, 59264981, 24
|
||||
tz.transition 2049, 3, :o3, 59268677, 24
|
||||
tz.transition 2049, 10, :o2, 59273885, 24
|
||||
tz.transition 2050, 3, :o3, 59277413, 24
|
||||
tz.transition 2050, 10, :o2, 59282621, 24
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,165 +0,0 @@
|
||||
require 'tzinfo/timezone_definition'
|
||||
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Asia
|
||||
module Yekaterinburg
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Asia/Yekaterinburg' do |tz|
|
||||
tz.offset :o0, 14544, 0, :LMT
|
||||
tz.offset :o1, 14400, 0, :SVET
|
||||
tz.offset :o2, 18000, 0, :SVET
|
||||
tz.offset :o3, 18000, 3600, :SVEST
|
||||
tz.offset :o4, 14400, 3600, :SVEST
|
||||
tz.offset :o5, 18000, 0, :YEKT
|
||||
tz.offset :o6, 18000, 3600, :YEKST
|
||||
|
||||
tz.transition 1919, 7, :o1, 1453292699, 600
|
||||
tz.transition 1930, 6, :o2, 7278445, 3
|
||||
tz.transition 1981, 3, :o3, 354913200
|
||||
tz.transition 1981, 9, :o2, 370720800
|
||||
tz.transition 1982, 3, :o3, 386449200
|
||||
tz.transition 1982, 9, :o2, 402256800
|
||||
tz.transition 1983, 3, :o3, 417985200
|
||||
tz.transition 1983, 9, :o2, 433792800
|
||||
tz.transition 1984, 3, :o3, 449607600
|
||||
tz.transition 1984, 9, :o2, 465339600
|
||||
tz.transition 1985, 3, :o3, 481064400
|
||||
tz.transition 1985, 9, :o2, 496789200
|
||||
tz.transition 1986, 3, :o3, 512514000
|
||||
tz.transition 1986, 9, :o2, 528238800
|
||||
tz.transition 1987, 3, :o3, 543963600
|
||||
tz.transition 1987, 9, :o2, 559688400
|
||||
tz.transition 1988, 3, :o3, 575413200
|
||||
tz.transition 1988, 9, :o2, 591138000
|
||||
tz.transition 1989, 3, :o3, 606862800
|
||||
tz.transition 1989, 9, :o2, 622587600
|
||||
tz.transition 1990, 3, :o3, 638312400
|
||||
tz.transition 1990, 9, :o2, 654642000
|
||||
tz.transition 1991, 3, :o4, 670366800
|
||||
tz.transition 1991, 9, :o1, 686095200
|
||||
tz.transition 1992, 1, :o5, 695772000
|
||||
tz.transition 1992, 3, :o6, 701805600
|
||||
tz.transition 1992, 9, :o5, 717526800
|
||||
tz.transition 1993, 3, :o6, 733266000
|
||||
tz.transition 1993, 9, :o5, 748990800
|
||||
tz.transition 1994, 3, :o6, 764715600
|
||||
tz.transition 1994, 9, :o5, 780440400
|
||||
tz.transition 1995, 3, :o6, 796165200
|
||||
tz.transition 1995, 9, :o5, 811890000
|
||||
tz.transition 1996, 3, :o6, 828219600
|
||||
tz.transition 1996, 10, :o5, 846363600
|
||||
tz.transition 1997, 3, :o6, 859669200
|
||||
tz.transition 1997, 10, :o5, 877813200
|
||||
tz.transition 1998, 3, :o6, 891118800
|
||||
tz.transition 1998, 10, :o5, 909262800
|
||||
tz.transition 1999, 3, :o6, 922568400
|
||||
tz.transition 1999, 10, :o5, 941317200
|
||||
tz.transition 2000, 3, :o6, 954018000
|
||||
tz.transition 2000, 10, :o5, 972766800
|
||||
tz.transition 2001, 3, :o6, 985467600
|
||||
tz.transition 2001, 10, :o5, 1004216400
|
||||
tz.transition 2002, 3, :o6, 1017522000
|
||||
tz.transition 2002, 10, :o5, 1035666000
|
||||
tz.transition 2003, 3, :o6, 1048971600
|
||||
tz.transition 2003, 10, :o5, 1067115600
|
||||
tz.transition 2004, 3, :o6, 1080421200
|
||||
tz.transition 2004, 10, :o5, 1099170000
|
||||
tz.transition 2005, 3, :o6, 1111870800
|
||||
tz.transition 2005, 10, :o5, 1130619600
|
||||
tz.transition 2006, 3, :o6, 1143320400
|
||||
tz.transition 2006, 10, :o5, 1162069200
|
||||
tz.transition 2007, 3, :o6, 1174770000
|
||||
tz.transition 2007, 10, :o5, 1193518800
|
||||
tz.transition 2008, 3, :o6, 1206824400
|
||||
tz.transition 2008, 10, :o5, 1224968400
|
||||
tz.transition 2009, 3, :o6, 1238274000
|
||||
tz.transition 2009, 10, :o5, 1256418000
|
||||
tz.transition 2010, 3, :o6, 1269723600
|
||||
tz.transition 2010, 10, :o5, 1288472400
|
||||
tz.transition 2011, 3, :o6, 1301173200
|
||||
tz.transition 2011, 10, :o5, 1319922000
|
||||
tz.transition 2012, 3, :o6, 1332622800
|
||||
tz.transition 2012, 10, :o5, 1351371600
|
||||
tz.transition 2013, 3, :o6, 1364677200
|
||||
tz.transition 2013, 10, :o5, 1382821200
|
||||
tz.transition 2014, 3, :o6, 1396126800
|
||||
tz.transition 2014, 10, :o5, 1414270800
|
||||
tz.transition 2015, 3, :o6, 1427576400
|
||||
tz.transition 2015, 10, :o5, 1445720400
|
||||
tz.transition 2016, 3, :o6, 1459026000
|
||||
tz.transition 2016, 10, :o5, 1477774800
|
||||
tz.transition 2017, 3, :o6, 1490475600
|
||||
tz.transition 2017, 10, :o5, 1509224400
|
||||
tz.transition 2018, 3, :o6, 1521925200
|
||||
tz.transition 2018, 10, :o5, 1540674000
|
||||
tz.transition 2019, 3, :o6, 1553979600
|
||||
tz.transition 2019, 10, :o5, 1572123600
|
||||
tz.transition 2020, 3, :o6, 1585429200
|
||||
tz.transition 2020, 10, :o5, 1603573200
|
||||
tz.transition 2021, 3, :o6, 1616878800
|
||||
tz.transition 2021, 10, :o5, 1635627600
|
||||
tz.transition 2022, 3, :o6, 1648328400
|
||||
tz.transition 2022, 10, :o5, 1667077200
|
||||
tz.transition 2023, 3, :o6, 1679778000
|
||||
tz.transition 2023, 10, :o5, 1698526800
|
||||
tz.transition 2024, 3, :o6, 1711832400
|
||||
tz.transition 2024, 10, :o5, 1729976400
|
||||
tz.transition 2025, 3, :o6, 1743282000
|
||||
tz.transition 2025, 10, :o5, 1761426000
|
||||
tz.transition 2026, 3, :o6, 1774731600
|
||||
tz.transition 2026, 10, :o5, 1792875600
|
||||
tz.transition 2027, 3, :o6, 1806181200
|
||||
tz.transition 2027, 10, :o5, 1824930000
|
||||
tz.transition 2028, 3, :o6, 1837630800
|
||||
tz.transition 2028, 10, :o5, 1856379600
|
||||
tz.transition 2029, 3, :o6, 1869080400
|
||||
tz.transition 2029, 10, :o5, 1887829200
|
||||
tz.transition 2030, 3, :o6, 1901134800
|
||||
tz.transition 2030, 10, :o5, 1919278800
|
||||
tz.transition 2031, 3, :o6, 1932584400
|
||||
tz.transition 2031, 10, :o5, 1950728400
|
||||
tz.transition 2032, 3, :o6, 1964034000
|
||||
tz.transition 2032, 10, :o5, 1982782800
|
||||
tz.transition 2033, 3, :o6, 1995483600
|
||||
tz.transition 2033, 10, :o5, 2014232400
|
||||
tz.transition 2034, 3, :o6, 2026933200
|
||||
tz.transition 2034, 10, :o5, 2045682000
|
||||
tz.transition 2035, 3, :o6, 2058382800
|
||||
tz.transition 2035, 10, :o5, 2077131600
|
||||
tz.transition 2036, 3, :o6, 2090437200
|
||||
tz.transition 2036, 10, :o5, 2108581200
|
||||
tz.transition 2037, 3, :o6, 2121886800
|
||||
tz.transition 2037, 10, :o5, 2140030800
|
||||
tz.transition 2038, 3, :o6, 19724083, 8
|
||||
tz.transition 2038, 10, :o5, 19725819, 8
|
||||
tz.transition 2039, 3, :o6, 19726995, 8
|
||||
tz.transition 2039, 10, :o5, 19728731, 8
|
||||
tz.transition 2040, 3, :o6, 19729907, 8
|
||||
tz.transition 2040, 10, :o5, 19731643, 8
|
||||
tz.transition 2041, 3, :o6, 19732875, 8
|
||||
tz.transition 2041, 10, :o5, 19734555, 8
|
||||
tz.transition 2042, 3, :o6, 19735787, 8
|
||||
tz.transition 2042, 10, :o5, 19737467, 8
|
||||
tz.transition 2043, 3, :o6, 19738699, 8
|
||||
tz.transition 2043, 10, :o5, 19740379, 8
|
||||
tz.transition 2044, 3, :o6, 19741611, 8
|
||||
tz.transition 2044, 10, :o5, 19743347, 8
|
||||
tz.transition 2045, 3, :o6, 19744523, 8
|
||||
tz.transition 2045, 10, :o5, 19746259, 8
|
||||
tz.transition 2046, 3, :o6, 19747435, 8
|
||||
tz.transition 2046, 10, :o5, 19749171, 8
|
||||
tz.transition 2047, 3, :o6, 19750403, 8
|
||||
tz.transition 2047, 10, :o5, 19752083, 8
|
||||
tz.transition 2048, 3, :o6, 19753315, 8
|
||||
tz.transition 2048, 10, :o5, 19754995, 8
|
||||
tz.transition 2049, 3, :o6, 19756227, 8
|
||||
tz.transition 2049, 10, :o5, 19757963, 8
|
||||
tz.transition 2050, 3, :o6, 19759139, 8
|
||||
tz.transition 2050, 10, :o5, 19760875, 8
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,165 +0,0 @@
|
||||
require 'tzinfo/timezone_definition'
|
||||
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Asia
|
||||
module Yerevan
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Asia/Yerevan' do |tz|
|
||||
tz.offset :o0, 10680, 0, :LMT
|
||||
tz.offset :o1, 10800, 0, :YERT
|
||||
tz.offset :o2, 14400, 0, :YERT
|
||||
tz.offset :o3, 14400, 3600, :YERST
|
||||
tz.offset :o4, 10800, 3600, :YERST
|
||||
tz.offset :o5, 10800, 3600, :AMST
|
||||
tz.offset :o6, 10800, 0, :AMT
|
||||
tz.offset :o7, 14400, 0, :AMT
|
||||
tz.offset :o8, 14400, 3600, :AMST
|
||||
|
||||
tz.transition 1924, 5, :o1, 1745213311, 720
|
||||
tz.transition 1957, 2, :o2, 19487187, 8
|
||||
tz.transition 1981, 3, :o3, 354916800
|
||||
tz.transition 1981, 9, :o2, 370724400
|
||||
tz.transition 1982, 3, :o3, 386452800
|
||||
tz.transition 1982, 9, :o2, 402260400
|
||||
tz.transition 1983, 3, :o3, 417988800
|
||||
tz.transition 1983, 9, :o2, 433796400
|
||||
tz.transition 1984, 3, :o3, 449611200
|
||||
tz.transition 1984, 9, :o2, 465343200
|
||||
tz.transition 1985, 3, :o3, 481068000
|
||||
tz.transition 1985, 9, :o2, 496792800
|
||||
tz.transition 1986, 3, :o3, 512517600
|
||||
tz.transition 1986, 9, :o2, 528242400
|
||||
tz.transition 1987, 3, :o3, 543967200
|
||||
tz.transition 1987, 9, :o2, 559692000
|
||||
tz.transition 1988, 3, :o3, 575416800
|
||||
tz.transition 1988, 9, :o2, 591141600
|
||||
tz.transition 1989, 3, :o3, 606866400
|
||||
tz.transition 1989, 9, :o2, 622591200
|
||||
tz.transition 1990, 3, :o3, 638316000
|
||||
tz.transition 1990, 9, :o2, 654645600
|
||||
tz.transition 1991, 3, :o4, 670370400
|
||||
tz.transition 1991, 9, :o5, 685569600
|
||||
tz.transition 1991, 9, :o6, 686098800
|
||||
tz.transition 1992, 3, :o5, 701812800
|
||||
tz.transition 1992, 9, :o6, 717534000
|
||||
tz.transition 1993, 3, :o5, 733273200
|
||||
tz.transition 1993, 9, :o6, 748998000
|
||||
tz.transition 1994, 3, :o5, 764722800
|
||||
tz.transition 1994, 9, :o6, 780447600
|
||||
tz.transition 1995, 3, :o5, 796172400
|
||||
tz.transition 1995, 9, :o7, 811897200
|
||||
tz.transition 1997, 3, :o8, 859672800
|
||||
tz.transition 1997, 10, :o7, 877816800
|
||||
tz.transition 1998, 3, :o8, 891122400
|
||||
tz.transition 1998, 10, :o7, 909266400
|
||||
tz.transition 1999, 3, :o8, 922572000
|
||||
tz.transition 1999, 10, :o7, 941320800
|
||||
tz.transition 2000, 3, :o8, 954021600
|
||||
tz.transition 2000, 10, :o7, 972770400
|
||||
tz.transition 2001, 3, :o8, 985471200
|
||||
tz.transition 2001, 10, :o7, 1004220000
|
||||
tz.transition 2002, 3, :o8, 1017525600
|
||||
tz.transition 2002, 10, :o7, 1035669600
|
||||
tz.transition 2003, 3, :o8, 1048975200
|
||||
tz.transition 2003, 10, :o7, 1067119200
|
||||
tz.transition 2004, 3, :o8, 1080424800
|
||||
tz.transition 2004, 10, :o7, 1099173600
|
||||
tz.transition 2005, 3, :o8, 1111874400
|
||||
tz.transition 2005, 10, :o7, 1130623200
|
||||
tz.transition 2006, 3, :o8, 1143324000
|
||||
tz.transition 2006, 10, :o7, 1162072800
|
||||
tz.transition 2007, 3, :o8, 1174773600
|
||||
tz.transition 2007, 10, :o7, 1193522400
|
||||
tz.transition 2008, 3, :o8, 1206828000
|
||||
tz.transition 2008, 10, :o7, 1224972000
|
||||
tz.transition 2009, 3, :o8, 1238277600
|
||||
tz.transition 2009, 10, :o7, 1256421600
|
||||
tz.transition 2010, 3, :o8, 1269727200
|
||||
tz.transition 2010, 10, :o7, 1288476000
|
||||
tz.transition 2011, 3, :o8, 1301176800
|
||||
tz.transition 2011, 10, :o7, 1319925600
|
||||
tz.transition 2012, 3, :o8, 1332626400
|
||||
tz.transition 2012, 10, :o7, 1351375200
|
||||
tz.transition 2013, 3, :o8, 1364680800
|
||||
tz.transition 2013, 10, :o7, 1382824800
|
||||
tz.transition 2014, 3, :o8, 1396130400
|
||||
tz.transition 2014, 10, :o7, 1414274400
|
||||
tz.transition 2015, 3, :o8, 1427580000
|
||||
tz.transition 2015, 10, :o7, 1445724000
|
||||
tz.transition 2016, 3, :o8, 1459029600
|
||||
tz.transition 2016, 10, :o7, 1477778400
|
||||
tz.transition 2017, 3, :o8, 1490479200
|
||||
tz.transition 2017, 10, :o7, 1509228000
|
||||
tz.transition 2018, 3, :o8, 1521928800
|
||||
tz.transition 2018, 10, :o7, 1540677600
|
||||
tz.transition 2019, 3, :o8, 1553983200
|
||||
tz.transition 2019, 10, :o7, 1572127200
|
||||
tz.transition 2020, 3, :o8, 1585432800
|
||||
tz.transition 2020, 10, :o7, 1603576800
|
||||
tz.transition 2021, 3, :o8, 1616882400
|
||||
tz.transition 2021, 10, :o7, 1635631200
|
||||
tz.transition 2022, 3, :o8, 1648332000
|
||||
tz.transition 2022, 10, :o7, 1667080800
|
||||
tz.transition 2023, 3, :o8, 1679781600
|
||||
tz.transition 2023, 10, :o7, 1698530400
|
||||
tz.transition 2024, 3, :o8, 1711836000
|
||||
tz.transition 2024, 10, :o7, 1729980000
|
||||
tz.transition 2025, 3, :o8, 1743285600
|
||||
tz.transition 2025, 10, :o7, 1761429600
|
||||
tz.transition 2026, 3, :o8, 1774735200
|
||||
tz.transition 2026, 10, :o7, 1792879200
|
||||
tz.transition 2027, 3, :o8, 1806184800
|
||||
tz.transition 2027, 10, :o7, 1824933600
|
||||
tz.transition 2028, 3, :o8, 1837634400
|
||||
tz.transition 2028, 10, :o7, 1856383200
|
||||
tz.transition 2029, 3, :o8, 1869084000
|
||||
tz.transition 2029, 10, :o7, 1887832800
|
||||
tz.transition 2030, 3, :o8, 1901138400
|
||||
tz.transition 2030, 10, :o7, 1919282400
|
||||
tz.transition 2031, 3, :o8, 1932588000
|
||||
tz.transition 2031, 10, :o7, 1950732000
|
||||
tz.transition 2032, 3, :o8, 1964037600
|
||||
tz.transition 2032, 10, :o7, 1982786400
|
||||
tz.transition 2033, 3, :o8, 1995487200
|
||||
tz.transition 2033, 10, :o7, 2014236000
|
||||
tz.transition 2034, 3, :o8, 2026936800
|
||||
tz.transition 2034, 10, :o7, 2045685600
|
||||
tz.transition 2035, 3, :o8, 2058386400
|
||||
tz.transition 2035, 10, :o7, 2077135200
|
||||
tz.transition 2036, 3, :o8, 2090440800
|
||||
tz.transition 2036, 10, :o7, 2108584800
|
||||
tz.transition 2037, 3, :o8, 2121890400
|
||||
tz.transition 2037, 10, :o7, 2140034400
|
||||
tz.transition 2038, 3, :o8, 29586125, 12
|
||||
tz.transition 2038, 10, :o7, 29588729, 12
|
||||
tz.transition 2039, 3, :o8, 29590493, 12
|
||||
tz.transition 2039, 10, :o7, 29593097, 12
|
||||
tz.transition 2040, 3, :o8, 29594861, 12
|
||||
tz.transition 2040, 10, :o7, 29597465, 12
|
||||
tz.transition 2041, 3, :o8, 29599313, 12
|
||||
tz.transition 2041, 10, :o7, 29601833, 12
|
||||
tz.transition 2042, 3, :o8, 29603681, 12
|
||||
tz.transition 2042, 10, :o7, 29606201, 12
|
||||
tz.transition 2043, 3, :o8, 29608049, 12
|
||||
tz.transition 2043, 10, :o7, 29610569, 12
|
||||
tz.transition 2044, 3, :o8, 29612417, 12
|
||||
tz.transition 2044, 10, :o7, 29615021, 12
|
||||
tz.transition 2045, 3, :o8, 29616785, 12
|
||||
tz.transition 2045, 10, :o7, 29619389, 12
|
||||
tz.transition 2046, 3, :o8, 29621153, 12
|
||||
tz.transition 2046, 10, :o7, 29623757, 12
|
||||
tz.transition 2047, 3, :o8, 29625605, 12
|
||||
tz.transition 2047, 10, :o7, 29628125, 12
|
||||
tz.transition 2048, 3, :o8, 29629973, 12
|
||||
tz.transition 2048, 10, :o7, 29632493, 12
|
||||
tz.transition 2049, 3, :o8, 29634341, 12
|
||||
tz.transition 2049, 10, :o7, 29636945, 12
|
||||
tz.transition 2050, 3, :o8, 29638709, 12
|
||||
tz.transition 2050, 10, :o7, 29641313, 12
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,170 +0,0 @@
|
||||
require 'tzinfo/timezone_definition'
|
||||
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Europe
|
||||
module Minsk
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Europe/Minsk' do |tz|
|
||||
tz.offset :o0, 6616, 0, :LMT
|
||||
tz.offset :o1, 6600, 0, :MMT
|
||||
tz.offset :o2, 7200, 0, :EET
|
||||
tz.offset :o3, 10800, 0, :MSK
|
||||
tz.offset :o4, 3600, 3600, :CEST
|
||||
tz.offset :o5, 3600, 0, :CET
|
||||
tz.offset :o6, 10800, 3600, :MSD
|
||||
tz.offset :o7, 7200, 3600, :EEST
|
||||
|
||||
tz.transition 1879, 12, :o1, 26003326573, 10800
|
||||
tz.transition 1924, 5, :o2, 349042669, 144
|
||||
tz.transition 1930, 6, :o3, 29113781, 12
|
||||
tz.transition 1941, 6, :o4, 19441387, 8
|
||||
tz.transition 1942, 11, :o5, 58335973, 24
|
||||
tz.transition 1943, 3, :o4, 58339501, 24
|
||||
tz.transition 1943, 10, :o5, 58344037, 24
|
||||
tz.transition 1944, 4, :o4, 58348405, 24
|
||||
tz.transition 1944, 7, :o3, 29175293, 12
|
||||
tz.transition 1981, 3, :o6, 354920400
|
||||
tz.transition 1981, 9, :o3, 370728000
|
||||
tz.transition 1982, 3, :o6, 386456400
|
||||
tz.transition 1982, 9, :o3, 402264000
|
||||
tz.transition 1983, 3, :o6, 417992400
|
||||
tz.transition 1983, 9, :o3, 433800000
|
||||
tz.transition 1984, 3, :o6, 449614800
|
||||
tz.transition 1984, 9, :o3, 465346800
|
||||
tz.transition 1985, 3, :o6, 481071600
|
||||
tz.transition 1985, 9, :o3, 496796400
|
||||
tz.transition 1986, 3, :o6, 512521200
|
||||
tz.transition 1986, 9, :o3, 528246000
|
||||
tz.transition 1987, 3, :o6, 543970800
|
||||
tz.transition 1987, 9, :o3, 559695600
|
||||
tz.transition 1988, 3, :o6, 575420400
|
||||
tz.transition 1988, 9, :o3, 591145200
|
||||
tz.transition 1989, 3, :o6, 606870000
|
||||
tz.transition 1989, 9, :o3, 622594800
|
||||
tz.transition 1991, 3, :o7, 670374000
|
||||
tz.transition 1991, 9, :o2, 686102400
|
||||
tz.transition 1992, 3, :o7, 701820000
|
||||
tz.transition 1992, 9, :o2, 717544800
|
||||
tz.transition 1993, 3, :o7, 733276800
|
||||
tz.transition 1993, 9, :o2, 749001600
|
||||
tz.transition 1994, 3, :o7, 764726400
|
||||
tz.transition 1994, 9, :o2, 780451200
|
||||
tz.transition 1995, 3, :o7, 796176000
|
||||
tz.transition 1995, 9, :o2, 811900800
|
||||
tz.transition 1996, 3, :o7, 828230400
|
||||
tz.transition 1996, 10, :o2, 846374400
|
||||
tz.transition 1997, 3, :o7, 859680000
|
||||
tz.transition 1997, 10, :o2, 877824000
|
||||
tz.transition 1998, 3, :o7, 891129600
|
||||
tz.transition 1998, 10, :o2, 909273600
|
||||
tz.transition 1999, 3, :o7, 922579200
|
||||
tz.transition 1999, 10, :o2, 941328000
|
||||
tz.transition 2000, 3, :o7, 954028800
|
||||
tz.transition 2000, 10, :o2, 972777600
|
||||
tz.transition 2001, 3, :o7, 985478400
|
||||
tz.transition 2001, 10, :o2, 1004227200
|
||||
tz.transition 2002, 3, :o7, 1017532800
|
||||
tz.transition 2002, 10, :o2, 1035676800
|
||||
tz.transition 2003, 3, :o7, 1048982400
|
||||
tz.transition 2003, 10, :o2, 1067126400
|
||||
tz.transition 2004, 3, :o7, 1080432000
|
||||
tz.transition 2004, 10, :o2, 1099180800
|
||||
tz.transition 2005, 3, :o7, 1111881600
|
||||
tz.transition 2005, 10, :o2, 1130630400
|
||||
tz.transition 2006, 3, :o7, 1143331200
|
||||
tz.transition 2006, 10, :o2, 1162080000
|
||||
tz.transition 2007, 3, :o7, 1174780800
|
||||
tz.transition 2007, 10, :o2, 1193529600
|
||||
tz.transition 2008, 3, :o7, 1206835200
|
||||
tz.transition 2008, 10, :o2, 1224979200
|
||||
tz.transition 2009, 3, :o7, 1238284800
|
||||
tz.transition 2009, 10, :o2, 1256428800
|
||||
tz.transition 2010, 3, :o7, 1269734400
|
||||
tz.transition 2010, 10, :o2, 1288483200
|
||||
tz.transition 2011, 3, :o7, 1301184000
|
||||
tz.transition 2011, 10, :o2, 1319932800
|
||||
tz.transition 2012, 3, :o7, 1332633600
|
||||
tz.transition 2012, 10, :o2, 1351382400
|
||||
tz.transition 2013, 3, :o7, 1364688000
|
||||
tz.transition 2013, 10, :o2, 1382832000
|
||||
tz.transition 2014, 3, :o7, 1396137600
|
||||
tz.transition 2014, 10, :o2, 1414281600
|
||||
tz.transition 2015, 3, :o7, 1427587200
|
||||
tz.transition 2015, 10, :o2, 1445731200
|
||||
tz.transition 2016, 3, :o7, 1459036800
|
||||
tz.transition 2016, 10, :o2, 1477785600
|
||||
tz.transition 2017, 3, :o7, 1490486400
|
||||
tz.transition 2017, 10, :o2, 1509235200
|
||||
tz.transition 2018, 3, :o7, 1521936000
|
||||
tz.transition 2018, 10, :o2, 1540684800
|
||||
tz.transition 2019, 3, :o7, 1553990400
|
||||
tz.transition 2019, 10, :o2, 1572134400
|
||||
tz.transition 2020, 3, :o7, 1585440000
|
||||
tz.transition 2020, 10, :o2, 1603584000
|
||||
tz.transition 2021, 3, :o7, 1616889600
|
||||
tz.transition 2021, 10, :o2, 1635638400
|
||||
tz.transition 2022, 3, :o7, 1648339200
|
||||
tz.transition 2022, 10, :o2, 1667088000
|
||||
tz.transition 2023, 3, :o7, 1679788800
|
||||
tz.transition 2023, 10, :o2, 1698537600
|
||||
tz.transition 2024, 3, :o7, 1711843200
|
||||
tz.transition 2024, 10, :o2, 1729987200
|
||||
tz.transition 2025, 3, :o7, 1743292800
|
||||
tz.transition 2025, 10, :o2, 1761436800
|
||||
tz.transition 2026, 3, :o7, 1774742400
|
||||
tz.transition 2026, 10, :o2, 1792886400
|
||||
tz.transition 2027, 3, :o7, 1806192000
|
||||
tz.transition 2027, 10, :o2, 1824940800
|
||||
tz.transition 2028, 3, :o7, 1837641600
|
||||
tz.transition 2028, 10, :o2, 1856390400
|
||||
tz.transition 2029, 3, :o7, 1869091200
|
||||
tz.transition 2029, 10, :o2, 1887840000
|
||||
tz.transition 2030, 3, :o7, 1901145600
|
||||
tz.transition 2030, 10, :o2, 1919289600
|
||||
tz.transition 2031, 3, :o7, 1932595200
|
||||
tz.transition 2031, 10, :o2, 1950739200
|
||||
tz.transition 2032, 3, :o7, 1964044800
|
||||
tz.transition 2032, 10, :o2, 1982793600
|
||||
tz.transition 2033, 3, :o7, 1995494400
|
||||
tz.transition 2033, 10, :o2, 2014243200
|
||||
tz.transition 2034, 3, :o7, 2026944000
|
||||
tz.transition 2034, 10, :o2, 2045692800
|
||||
tz.transition 2035, 3, :o7, 2058393600
|
||||
tz.transition 2035, 10, :o2, 2077142400
|
||||
tz.transition 2036, 3, :o7, 2090448000
|
||||
tz.transition 2036, 10, :o2, 2108592000
|
||||
tz.transition 2037, 3, :o7, 2121897600
|
||||
tz.transition 2037, 10, :o2, 2140041600
|
||||
tz.transition 2038, 3, :o7, 4931021, 2
|
||||
tz.transition 2038, 10, :o2, 4931455, 2
|
||||
tz.transition 2039, 3, :o7, 4931749, 2
|
||||
tz.transition 2039, 10, :o2, 4932183, 2
|
||||
tz.transition 2040, 3, :o7, 4932477, 2
|
||||
tz.transition 2040, 10, :o2, 4932911, 2
|
||||
tz.transition 2041, 3, :o7, 4933219, 2
|
||||
tz.transition 2041, 10, :o2, 4933639, 2
|
||||
tz.transition 2042, 3, :o7, 4933947, 2
|
||||
tz.transition 2042, 10, :o2, 4934367, 2
|
||||
tz.transition 2043, 3, :o7, 4934675, 2
|
||||
tz.transition 2043, 10, :o2, 4935095, 2
|
||||
tz.transition 2044, 3, :o7, 4935403, 2
|
||||
tz.transition 2044, 10, :o2, 4935837, 2
|
||||
tz.transition 2045, 3, :o7, 4936131, 2
|
||||
tz.transition 2045, 10, :o2, 4936565, 2
|
||||
tz.transition 2046, 3, :o7, 4936859, 2
|
||||
tz.transition 2046, 10, :o2, 4937293, 2
|
||||
tz.transition 2047, 3, :o7, 4937601, 2
|
||||
tz.transition 2047, 10, :o2, 4938021, 2
|
||||
tz.transition 2048, 3, :o7, 4938329, 2
|
||||
tz.transition 2048, 10, :o2, 4938749, 2
|
||||
tz.transition 2049, 3, :o7, 4939057, 2
|
||||
tz.transition 2049, 10, :o2, 4939491, 2
|
||||
tz.transition 2050, 3, :o7, 4939785, 2
|
||||
tz.transition 2050, 10, :o2, 4940219, 2
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,23 +0,0 @@
|
||||
require 'tzinfo/timezone_definition'
|
||||
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Pacific
|
||||
module Fiji
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Pacific/Fiji' do |tz|
|
||||
tz.offset :o0, 42820, 0, :LMT
|
||||
tz.offset :o1, 43200, 0, :FJT
|
||||
tz.offset :o2, 43200, 3600, :FJST
|
||||
|
||||
tz.transition 1915, 10, :o1, 10457838739, 4320
|
||||
tz.transition 1998, 10, :o2, 909842400
|
||||
tz.transition 1999, 2, :o1, 920124000
|
||||
tz.transition 1999, 11, :o2, 941896800
|
||||
tz.transition 2000, 2, :o1, 951573600
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
8
activesupport/lib/active_support/vendor/tzinfo-0.3.39/.yardopts
vendored
Normal file
8
activesupport/lib/active_support/vendor/tzinfo-0.3.39/.yardopts
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
--no-private
|
||||
--exclude ^lib/tzinfo/definitions/
|
||||
--exclude ^lib/tzinfo/indexes/
|
||||
lib/**/*.rb
|
||||
-
|
||||
CHANGES
|
||||
LICENSE
|
||||
README
|
||||
505
activesupport/lib/active_support/vendor/tzinfo-0.3.39/CHANGES
vendored
Normal file
505
activesupport/lib/active_support/vendor/tzinfo-0.3.39/CHANGES
vendored
Normal file
@@ -0,0 +1,505 @@
|
||||
== Version 0.3.39 (tzdata v2014a) - 9-Mar-2014
|
||||
|
||||
* Updated to tzdata version 2014a
|
||||
(http://mm.icann.org/pipermail/tz-announce/2014-March/000018.html).
|
||||
|
||||
|
||||
== Version 0.3.38 (tzdata v2013g) - 8-Oct-2013
|
||||
|
||||
* Updated to tzdata version 2013g
|
||||
(http://mm.icann.org/pipermail/tz-announce/2013-October/000015.html).
|
||||
|
||||
|
||||
== Version 0.3.37 (tzdata v2013b) - 11-Mar-2013
|
||||
|
||||
* Updated to tzdata version 2013b
|
||||
(http://mm.icann.org/pipermail/tz-announce/2013-March/000010.html).
|
||||
|
||||
|
||||
== Version 0.3.36 (tzdata v2013a) - 3-Mar-2013
|
||||
|
||||
* Updated to tzdata version 2013a
|
||||
(http://mm.icann.org/pipermail/tz-announce/2013-March/000009.html).
|
||||
* Fix TimezoneTransitionInfo#eql? incorrectly returning false when running on
|
||||
Ruby 2.0.
|
||||
* Change eql? and == implementations to test the class of the passed in object
|
||||
instead of checking individual properties with 'respond_to?'.
|
||||
|
||||
|
||||
== Version 0.3.35 (tzdata v2012i) - 4-Nov-2012
|
||||
|
||||
* Updated to tzdata version 2012i
|
||||
(http://mm.icann.org/pipermail/tz-announce/2012-November/000007.html).
|
||||
|
||||
|
||||
== Version 0.3.34 (tzdata v2012h) - 27-Oct-2012
|
||||
|
||||
* Updated to tzdata version 2012h
|
||||
(http://mm.icann.org/pipermail/tz-announce/2012-October/000006.html).
|
||||
|
||||
|
||||
== Version 0.3.33 (tzdata v2012c) - 8-Apr-2012
|
||||
|
||||
* Updated to tzdata version 2012c
|
||||
(http://article.gmane.org/gmane.comp.time.tz/4859).
|
||||
|
||||
|
||||
== Version 0.3.32 (tzdata v2012b) - 4-Mar-2012
|
||||
|
||||
* Updated to tzdata version 2012b
|
||||
(http://article.gmane.org/gmane.comp.time.tz/4756).
|
||||
|
||||
|
||||
== Version 0.3.31 (tzdata v2011n) - 6-Nov-2011
|
||||
|
||||
* Updated to tzdata version 2011n
|
||||
(http://article.gmane.org/gmane.comp.time.tz/4434).
|
||||
|
||||
|
||||
== Version 0.3.30 (tzdata v2011k) - 29-Sep-2011
|
||||
|
||||
* Updated to tzdata version 2011k
|
||||
(http://article.gmane.org/gmane.comp.time.tz/4084).
|
||||
|
||||
|
||||
== Version 0.3.29 (tzdata v2011h) - 27-Jun-2011
|
||||
|
||||
* Updated to tzdata version 2011h
|
||||
(http://article.gmane.org/gmane.comp.time.tz/3814).
|
||||
* Allow the default value of the local_to_utc and period_for_local dst
|
||||
parameter to be specified globally with a Timezone.default_dst attribute.
|
||||
Thanks to Kurt Werle for the suggestion and patch.
|
||||
|
||||
|
||||
== Version 0.3.28 (tzdata v2011g) - 13-Jun-2011
|
||||
|
||||
* Add support for Ruby 1.9.3 (trunk revision 31668 and later). Thanks to
|
||||
Aaron Patterson for reporting the problems running on the new version.
|
||||
Closes #29233.
|
||||
|
||||
|
||||
== Version 0.3.27 (tzdata v2011g) - 26-Apr-2011
|
||||
|
||||
* Updated to tzdata version 2011g
|
||||
(http://article.gmane.org/gmane.comp.time.tz/3758).
|
||||
|
||||
|
||||
== Version 0.3.26 (tzdata v2011e) - 2-Apr-2011
|
||||
|
||||
* Updated to tzdata version 2011e
|
||||
(http://article.gmane.org/gmane.comp.time.tz/3707).
|
||||
|
||||
|
||||
== Version 0.3.25 (tzdata v2011d) - 14-Mar-2011
|
||||
|
||||
* Updated to tzdata version 2011d
|
||||
(http://article.gmane.org/gmane.comp.time.tz/3662).
|
||||
|
||||
|
||||
== Version 0.3.24 (tzdata v2010o) - 15-Jan-2011
|
||||
|
||||
* Updated to tzdata version 2010o
|
||||
(http://article.gmane.org/gmane.comp.time.tz/3473).
|
||||
|
||||
|
||||
== Version 0.3.23 (tzdata v2010l) - 19-Aug-2010
|
||||
|
||||
* Updated to tzdata version 2010l
|
||||
(http://article.gmane.org/gmane.comp.time.tz/3354).
|
||||
|
||||
|
||||
== Version 0.3.22 (tzdata v2010j) - 29-May-2010
|
||||
|
||||
* Corrected file permissions issue with 0.3.21 release.
|
||||
|
||||
|
||||
== Version 0.3.21 (tzdata v2010j) - 28-May-2010
|
||||
|
||||
* Updated to tzdata version 2010j
|
||||
(http://article.gmane.org/gmane.comp.time.tz/3225).
|
||||
* Change invalid timezone check to exclude characters not used in timezone
|
||||
identifiers and avoid 'character class has duplicated range' warnings with
|
||||
Ruby 1.9.2.
|
||||
* Ruby 1.9.2 has deprecated "require 'rational'", but older versions of
|
||||
Ruby need rational to be required. Require rational only when the Rational
|
||||
module has not already been loaded.
|
||||
* Remove circular requires (now a warning in Ruby 1.9.2). Instead of using
|
||||
requires in each file for dependencies, tzinfo.rb now requires all tzinfo
|
||||
files. If you were previously requiring files within the tzinfo directory
|
||||
(e.g. require 'tzinfo/timezone'), then you will now have to
|
||||
require 'tzinfo' instead.
|
||||
|
||||
|
||||
== Version 0.3.20 (tzdata v2010i) - 19-Apr-2010
|
||||
|
||||
* Updated to tzdata version 2010i
|
||||
(http://article.gmane.org/gmane.comp.time.tz/3202).
|
||||
|
||||
|
||||
== Version 0.3.19 (tzdata v2010h) - 5-Apr-2010
|
||||
|
||||
* Updated to tzdata version 2010h
|
||||
(http://article.gmane.org/gmane.comp.time.tz/3188).
|
||||
|
||||
|
||||
== Version 0.3.18 (tzdata v2010g) - 29-Mar-2010
|
||||
|
||||
* Updated to tzdata version 2010g
|
||||
(http://article.gmane.org/gmane.comp.time.tz/3172).
|
||||
|
||||
|
||||
== Version 0.3.17 (tzdata v2010e) - 8-Mar-2010
|
||||
|
||||
* Updated to tzdata version 2010e
|
||||
(http://article.gmane.org/gmane.comp.time.tz/3128).
|
||||
|
||||
|
||||
== Version 0.3.16 (tzdata v2009u) - 5-Jan-2010
|
||||
|
||||
* Support the use of '-' to denote '0' as an offset in the tz data files.
|
||||
Used for the first time in the SAVE field in tzdata v2009u.
|
||||
* Updated to tzdata version 2009u
|
||||
(http://article.gmane.org/gmane.comp.time.tz/3053).
|
||||
|
||||
|
||||
== Version 0.3.15 (tzdata v2009p) - 26-Oct-2009
|
||||
|
||||
* Updated to tzdata version 2009p
|
||||
(http://article.gmane.org/gmane.comp.time.tz/2953).
|
||||
* Added a description to the gem spec.
|
||||
* List test files in test_files instead of files in the gem spec.
|
||||
|
||||
|
||||
== Version 0.3.14 (tzdata v2009l) - 19-Aug-2009
|
||||
|
||||
* Updated to tzdata version 2009l
|
||||
(http://article.gmane.org/gmane.comp.time.tz/2818).
|
||||
* Include current directory in load path to allow running tests on
|
||||
Ruby 1.9.2, which doesn't include it by default any more.
|
||||
|
||||
|
||||
== Version 0.3.13 (tzdata v2009f) - 15-Apr-2009
|
||||
|
||||
* Updated to tzdata version 2009f
|
||||
(http://article.gmane.org/gmane.comp.time.tz/2668).
|
||||
* Untaint the timezone module filename after validation to allow use
|
||||
with $SAFE == 1 (e.g. under mod_ruby). Thanks to Dmitry Borodaenko for
|
||||
the suggestion. Closes #25349.
|
||||
|
||||
|
||||
== Version 0.3.12 (tzdata v2008i) - 12-Nov-2008
|
||||
|
||||
* Updated to tzdata version 2008i
|
||||
(http://article.gmane.org/gmane.comp.time.tz/2440).
|
||||
|
||||
|
||||
== Version 0.3.11 (tzdata v2008g) - 7-Oct-2008
|
||||
|
||||
* Updated to tzdata version 2008g
|
||||
(http://article.gmane.org/gmane.comp.time.tz/2335).
|
||||
* Support Ruby 1.9.0-5. Rational.new! has now been removed in Ruby 1.9.
|
||||
Only use Rational.new! if it is available (it is preferable in Ruby 1.8
|
||||
for performance reasons). Thanks to Jeremy Kemper and Pratik Naik for
|
||||
reporting this. Closes #22312.
|
||||
* Apply a patch from Pratik Naik to replace assert calls that have been
|
||||
deprecated in the Ruby svn trunk. Closes #22308.
|
||||
|
||||
|
||||
== Version 0.3.10 (tzdata v2008f) - 16-Sep-2008
|
||||
|
||||
* Updated to tzdata version 2008f
|
||||
(http://article.gmane.org/gmane.comp.time.tz/2293).
|
||||
|
||||
|
||||
== Version 0.3.9 (tzdata v2008c) - 27-May-2008
|
||||
|
||||
* Updated to tzdata version 2008c
|
||||
(http://article.gmane.org/gmane.comp.time.tz/2183).
|
||||
* Support loading timezone data in the latest trunk versions of Ruby 1.9.
|
||||
Rational.new! is now private, so call it using Rational.send :new! instead.
|
||||
Thanks to Jeremy Kemper and Pratik Naik for spotting this. Closes #19184.
|
||||
* Prevent warnings from being output when running Ruby with the -v or -w
|
||||
command line options. Thanks to Paul McMahon for the patch. Closes #19719.
|
||||
|
||||
|
||||
== Version 0.3.8 (tzdata v2008b) - 24-Mar-2008
|
||||
|
||||
* Updated to tzdata version 2008b
|
||||
(http://article.gmane.org/gmane.comp.time.tz/2149).
|
||||
* Support loading timezone data in Ruby 1.9.0. Use DateTime.new! if it is
|
||||
available instead of DateTime.new0 when constructing transition times.
|
||||
DateTime.new! was added in Ruby 1.8.6. DateTime.new0 was removed in
|
||||
Ruby 1.9.0. Thanks to Joshua Peek for reporting this. Closes #17606.
|
||||
* Modify some of the equality test cases to cope with the differences
|
||||
between Ruby 1.8.6 and Ruby 1.9.0.
|
||||
|
||||
|
||||
== Version 0.3.7 (tzdata v2008a) - 10-Mar-2008
|
||||
|
||||
* Updated to tzdata version 2008a
|
||||
(http://article.gmane.org/gmane.comp.time.tz/2071).
|
||||
|
||||
|
||||
== Version 0.3.6 (tzdata v2007k) - 1-Jan-2008
|
||||
|
||||
* Updated to tzdata version 2007k
|
||||
(http://article.gmane.org/gmane.comp.time.tz/2029).
|
||||
* Removed deprecated RubyGems autorequire option.
|
||||
|
||||
|
||||
== Version 0.3.5 (tzdata v2007h) - 1-Oct-2007
|
||||
|
||||
* Updated to tzdata version 2007h
|
||||
(http://article.gmane.org/gmane.comp.time.tz/1878).
|
||||
|
||||
|
||||
== Version 0.3.4 (tzdata v2007g) - 21-Aug-2007
|
||||
|
||||
* Updated to tzdata version 2007g
|
||||
(http://article.gmane.org/gmane.comp.time.tz/1810).
|
||||
|
||||
|
||||
== Version 0.3.3 (tzdata v2006p) - 27-Nov-2006
|
||||
|
||||
* Updated to tzdata version 2006p
|
||||
(http://article.gmane.org/gmane.comp.time.tz/1358).
|
||||
|
||||
|
||||
== Version 0.3.2 (tzdata v2006n) - 11-Oct-2006
|
||||
|
||||
* Updated to tzdata version 2006n
|
||||
(http://article.gmane.org/gmane.comp.time.tz/1288). Note that this release of
|
||||
tzdata removes the country Serbia and Montenegro (CS) and replaces it with
|
||||
separate Serbia (RS) and Montenegro (ME) entries.
|
||||
|
||||
|
||||
== Version 0.3.1 (tzdata v2006j) - 21-Aug-2006
|
||||
|
||||
* Remove colon from case statements to avoid warning in Ruby 1.8.5. #5198.
|
||||
* Use temporary variable to avoid dynamic string warning from rdoc.
|
||||
* Updated to tzdata version 2006j
|
||||
(http://article.gmane.org/gmane.comp.time.tz/1175).
|
||||
|
||||
|
||||
== Version 0.3.0 (tzdata v2006g) - 17-Jul-2006
|
||||
|
||||
* New timezone data format. Timezone data now occupies less space on disk and
|
||||
takes less memory once loaded. #4142, #4144.
|
||||
* Timezone data is defined in modules rather than classes. Timezone instances
|
||||
returned by Timezone.get are no longer instances of data classes, but are
|
||||
instead instances of new DataTimezone and LinkedTimezone classes.
|
||||
* Timezone instances can now be used with Marshal.dump and Marshal.load. #4240.
|
||||
* Added a Timezone.get_proxy method that returns a TimezoneProxy object for a
|
||||
given identifier.
|
||||
* Country index data is now defined in a single module that is independent
|
||||
of the Country class implementation.
|
||||
* Country instances can now be used with Marshal.dump and Marshal.load. #4240.
|
||||
* Country has a new zone_info method that returns CountryTimezone objects
|
||||
containing additional information (latitude, longitude and a description)
|
||||
relating to each Timezone. #4140.
|
||||
* Timezones within a Country are now returned in an order that makes
|
||||
geographic sense.
|
||||
* The zdumptest utility now checks local to utc conversions in addition to
|
||||
utc to local conversions.
|
||||
* eql? method defined on Country and Timezone that is equivalent to ==.
|
||||
* == method of Timezone no longer raises an exception when passed an object
|
||||
with no identifier method.
|
||||
* == method of Country no longer raises an exception when passed an object
|
||||
with no code method.
|
||||
* hash method defined on Country that returns the hash of the code.
|
||||
* hash method defined on Timezone that returns the hash of the identifier.
|
||||
* Miscellaneous API documentation corrections and improvements.
|
||||
* Timezone definition and indexes are now excluded from rdoc (the contents were
|
||||
previously ignored with #:nodoc: anyway).
|
||||
* Removed no longer needed #:nodoc: directives from timezone data files (which
|
||||
are now excluded from the rdoc build).
|
||||
* Installation of the gem now causes rdoc API documentation to be generated.
|
||||
#4905.
|
||||
* When optimizing transitions to generate zone definitions, check the
|
||||
UTC and standard offsets separately rather than just the total offset to UTC.
|
||||
Fixes an incorrect abbreviation issue with Europe/London, Europe/Dublin and
|
||||
Pacific/Auckland.
|
||||
* Eliminated unnecessary .nil? calls to give a minor performance gain.
|
||||
* Timezone.all and Timezone.all_identifiers now return all the
|
||||
Timezones/identifiers rather than just those associated with countries. #4146.
|
||||
* Added all_data_zones, all_data_zone_identifiers, all_linked_zones and
|
||||
all_linked_zone_identifiers class methods to Timezone.
|
||||
* Added a strftime method to Timezone that converts a time in UTC to local
|
||||
time and then returns it formatted. %Z is replaced with the Timezone
|
||||
abbreviation for the given time (for example, EST or EDT). #4143.
|
||||
* Fix escaping of quotes in TZDataParser. This affected country names and
|
||||
descriptions of timezones within countries.
|
||||
|
||||
|
||||
== Version 0.2.2 (tzdata v2006g) - 17-May-2006
|
||||
|
||||
* Use class-scoped instance variables to store the Timezone identifier and
|
||||
singleton instance. Loading a linked zone no longer causes the parent
|
||||
zone's identifier to be changed. The instance method of a linked zone class
|
||||
also now returns an instance of the linked zone class rather than the parent
|
||||
class. #4502.
|
||||
* The zdumptest utility now compares the TZInfo zone identifier with the zdump
|
||||
zone identifier.
|
||||
* The zdumptestall utility now exits if not supplied with enough parameters.
|
||||
* Updated to tzdata version 2006g
|
||||
(http://article.gmane.org/gmane.comp.time.tz/1008).
|
||||
|
||||
|
||||
== Version 0.2.1 (tzdata v2006d) - 17-Apr-2006
|
||||
|
||||
* Fix a performance issue caused in 0.2.0 with Timezone.local_to_utc.
|
||||
Conversions performed on TimeOrDateTime instances passed to <=> are now
|
||||
cached as originally intended. Thanks to Michael Smedberg for spotting this.
|
||||
* Fix a performance issue with the local_to_utc period search algorithm
|
||||
originally implemented in 0.1.0. The condition that was supposed to cause
|
||||
the search to terminate when enough periods had been found was only being
|
||||
evaluated in a small subset of cases. Thanks to Michael Smedberg and
|
||||
Jamis Buck for reporting this.
|
||||
* Added abbreviation as an alias for TimezonePeriod.zone_identifier.
|
||||
* Updated to tzdata version 2006d
|
||||
(http://article.gmane.org/gmane.comp.time.tz/936).
|
||||
* Ignore any offset in DateTimes passed in (as is already done for Times).
|
||||
All of the following now refer to the same UTC time (15:40 on 17 April 2006).
|
||||
Previously, the DateTime in the second line would have been interpreted
|
||||
as 20:40.
|
||||
|
||||
tz.utc_to_local(DateTime.new(2006, 4, 17, 15, 40, 0))
|
||||
tz.utc_to_local(DateTime.new(2006, 4, 17, 15, 40, 0).new_offset(Rational(5, 24)))
|
||||
tz.utc_to_local(Time.utc(2006, 4, 17, 15, 40, 0))
|
||||
tz.utc_to_local(Time.local(2006, 4, 17, 15, 40, 0))
|
||||
|
||||
|
||||
== Version 0.2.0 (tzdata v2006c) - 3-Apr-2006
|
||||
|
||||
* Use timestamps rather than DateTime objects in zone files for times between
|
||||
1970 and 2037 (the range of Time).
|
||||
* Don't convert passed in Time objects to DateTime in most cases (provides
|
||||
a substantial performance improvement).
|
||||
* Allow integer timestamps (time in seconds since 1970-1-1) to be used as well
|
||||
as Time and DateTime objects in all public methods that take times as
|
||||
parameters.
|
||||
* Tool to compare TZInfo conversions with output from zdump.
|
||||
* TZDataParser zone generation algorithm rewritten. Now based on the zic code.
|
||||
TZInfo is now 100% compatible with zic/zdump output.
|
||||
* Riyadh Solar Time zones now included again (generation time has been reduced
|
||||
with TZDataParser changes).
|
||||
* Use binary mode when writing zone and country files to get Unix (\n) new
|
||||
lines.
|
||||
* Omit unnecessary quotes in zone identifier symbols.
|
||||
* Omit the final transition to DST if there is a prior transition in the last
|
||||
year processed to standard time.
|
||||
* Updated to tzdata version 2006c
|
||||
(http://article.gmane.org/gmane.comp.time.tz/920).
|
||||
|
||||
|
||||
== Version 0.1.2 (tzdata v2006a) - 5-Feb-2006
|
||||
|
||||
* Add lib directory to the load path when tzinfo is required. Makes it easier
|
||||
to use tzinfo gem when unpacked to vendor directory in rails.
|
||||
* Updated to tzdata version 2006a
|
||||
(http://article.gmane.org/gmane.comp.time.tz/738).
|
||||
* build_tz_classes rake task now handles running svn add and svn delete as new
|
||||
timezones and countries are added and old ones are removed.
|
||||
* Return a better error when attempting to use a Timezone instance that was
|
||||
constructed with Timezone.new(nil). This will occur when using Rails'
|
||||
composed_of. When the timezone identifier in the database is null, attempting
|
||||
to use the Timezone will now result in an UnknownTimezone exception rather
|
||||
than a NameError.
|
||||
|
||||
|
||||
== Version 0.1.1 (tzdata v2005q) - 18-Dec-2005
|
||||
|
||||
* Timezones that are defined by a single unbounded period (e.g. UTC) now
|
||||
work again.
|
||||
* Updated to tzdata version 2005q.
|
||||
|
||||
|
||||
== Version 0.1.0 (tzdata v2005n) - 27-Nov-2005
|
||||
|
||||
* period_for_local and local_to_utc now allow resolution of ambiguous
|
||||
times (e.g. when switching from daylight savings to standard time).
|
||||
The behaviour of these methods when faced with an ambiguous local time
|
||||
has now changed. If you are using these methods you should check
|
||||
the documentation. Thanks to Cliff Matthews for suggesting this change.
|
||||
* Added require 'date' to timezone.rb (date isn't loaded by default in all
|
||||
environments).
|
||||
* Use rake to build packages and documentation.
|
||||
* License file is now included in gem distribution.
|
||||
* Dates in definitions stored as Astronomical Julian Day numbers rather than
|
||||
as civil dates (improves performance creating DateTime instances).
|
||||
* Added options to TZDataParser to allow generation of specific zones and
|
||||
countries.
|
||||
* Moved TimezonePeriod class to timezone_period.rb.
|
||||
* New TimezonePeriodList class to store TimezonePeriods for a timezone and
|
||||
perform searches for periods.
|
||||
* Timezones now defined using blocks. TimezonePeriods are only instantiated
|
||||
when they are needed. Thanks to Jamis Buck for the suggestion.
|
||||
* Add options to TZDataParser to allow exclusion of specific zones and
|
||||
countries.
|
||||
* Exclude the Riyadh Solar Time zones. The rules are only for 1987 to 1989 and
|
||||
take a long time to generate and process. Riyadh Solar Time is no longer
|
||||
observed.
|
||||
* The last TimezonePeriod for each Timezone is now written out with an
|
||||
unbounded rather than arbitrary end time.
|
||||
* Construct the Rational offset in TimezonePeriod once when the TimezonePeriod
|
||||
is constructed rather than each time it is needed.
|
||||
* Timezone and Country now keep a cache of loaded instances to avoid running
|
||||
require which can be slow on some platforms.
|
||||
* Updated to tzdata version 2005n.
|
||||
|
||||
|
||||
== Version 0.0.4 (tzdata v2005m) - 18-Sep-2005
|
||||
|
||||
* Removed debug output accidentally included in the previous release.
|
||||
* Fixed a bug in the generation of friendly zone identifiers (was inserting
|
||||
apostrophes into UTC, GMT, etc).
|
||||
* Fixed Country <=> operator (was comparing non-existent attribute)
|
||||
* Fixed Timezone.period_for_local error when period not found.
|
||||
* Added testcases for Timezone, TimezoneProxy, TimezonePeriod, Country and
|
||||
some selected timezones.
|
||||
|
||||
|
||||
== Version 0.0.3 (tzdata v2005m) - 17-Sep-2005
|
||||
|
||||
* Reduced visibility of some methods added in Timezone#setup and Country#setup.
|
||||
* Added name method to Timezone (returns the identifier).
|
||||
* Added friendly_identifier method to Timezone. Returns a more friendly version
|
||||
of the identifier.
|
||||
* Added to_s method to Timezone. Returns the friendly identifier.
|
||||
* Added == and <=> operators to Timezone (compares identifiers).
|
||||
* Timezone now includes Comparable.
|
||||
* Added to_s method to Country.
|
||||
* Added == and <=> operators to Country (compares ISO 3166 country codes).
|
||||
* Country now includes Comparable.
|
||||
* New TimezoneProxy class that behaves the same as a Timezone but doesn't
|
||||
actually load in its definition until it is actually required.
|
||||
* Modified Timezone and Country methods that return Timezones to return
|
||||
TimezoneProxy instances instead. This makes these methods much quicker.
|
||||
|
||||
In Ruby on Rails, you can now show a drop-down list of all timezones using the
|
||||
Rails time_zone_select helper method:
|
||||
|
||||
<%= time_zone_select 'user', 'time_zone', TZInfo::Timezone.all.sort, :model => TZInfo::Timezone %>
|
||||
|
||||
|
||||
== Version 0.0.2 (tzdata v2005m) - 13-Sep-2005
|
||||
|
||||
* Country and Timezone data is now loaded into class rather than instance
|
||||
variables. This makes Timezone links more efficient and saves memory if
|
||||
creating specific Timezone and Country classes directly.
|
||||
* TimezonePeriod zone_identifier is now defined as a symbol to save memory
|
||||
(was previously a string).
|
||||
* TimezonePeriod zone_identifiers that were previously '' are now :Unknown.
|
||||
* Timezones and Countries can now be returned using Timezone.new(identifier)
|
||||
and Country.new(identifier). When passed an identifier, the new method
|
||||
calls get to return an instance of the specified timezone or country.
|
||||
* Added new class methods to Timezone to return sets of zones and identifiers.
|
||||
|
||||
Thanks to Scott Barron of Lunchbox Software for the suggestions in his
|
||||
article about using TZInfo with Rails
|
||||
(http://lunchroom.lunchboxsoftware.com/pages/tzinfo_rails)
|
||||
|
||||
|
||||
== Version 0.0.1 (tzdata v2005m) - 29-Aug-2005
|
||||
|
||||
* First release.
|
||||
19
activesupport/lib/active_support/vendor/tzinfo-0.3.39/LICENSE
vendored
Normal file
19
activesupport/lib/active_support/vendor/tzinfo-0.3.39/LICENSE
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
Copyright (c) 2005-2006 Philip Ross
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
98
activesupport/lib/active_support/vendor/tzinfo-0.3.39/README
vendored
Normal file
98
activesupport/lib/active_support/vendor/tzinfo-0.3.39/README
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
= TZInfo -- Daylight-savings aware timezone support for Ruby
|
||||
|
||||
TZInfo[http://tzinfo.github.io] uses the IANA Time Zone Database
|
||||
(http://www.iana.org/time-zones) to provide
|
||||
daylight-savings aware transformations between times in different timezones.
|
||||
This is the same database as used for zoneinfo on Unix machines.
|
||||
|
||||
The Time Zone database has been imported (using TZDataParser) and turned into a
|
||||
set of Ruby modules (which are packaged with this release).
|
||||
|
||||
|
||||
== Example usage
|
||||
|
||||
To convert a time in UTC to a local time in the America/New_York timezone, you
|
||||
can do the following:
|
||||
|
||||
require 'tzinfo'
|
||||
|
||||
tz = TZInfo::Timezone.get('America/New_York')
|
||||
local = tz.utc_to_local(Time.utc(2005,8,29,15,35,0))
|
||||
|
||||
Note that the Time returned will look like it is UTC (Time.zone will return
|
||||
"UTC"). This is because it is not currently possible to change the offset of
|
||||
an individual Time instance.
|
||||
|
||||
To convert from a local time to UTC, the local_to_utc method can be used.
|
||||
|
||||
utc = tz.local_to_utc(local)
|
||||
|
||||
Note that the timezone information of the time you pass in is ignored. The
|
||||
following two lines will return the same result regardless of the local
|
||||
timezone:
|
||||
|
||||
tz.local_to_utc(Time.local(2006,6,26,1,0,0))
|
||||
tz.local_to_utc(Time.utc(2006,6,26,1,0,0))
|
||||
|
||||
To get information about the rules in force at a particular UTC or local time,
|
||||
the Timezone.period_for_utc and Timezone.period_for_local methods can be used.
|
||||
Both of these methods return TimezonePeriod objects. The following gets the
|
||||
identifier for the period (in this case EDT).
|
||||
|
||||
period = tz.period_for_utc(DateTime.new(2005,8,29,15,35,0))
|
||||
id = period.zone_identifier
|
||||
|
||||
In all the above examples, instances of Time can be used instead of DateTime.
|
||||
Timezone#utc_to_local and Timezone#local_to_utc both return the type they are
|
||||
passed.
|
||||
|
||||
You can get the current local time in a Timezone with the Timezone#now method:
|
||||
|
||||
now = tz.now
|
||||
|
||||
All methods in TZInfo that take a time can be used with either Time, DateTime
|
||||
or Integers (Time#to_i). The return type will be the same as the type passed in.
|
||||
|
||||
You can also access Timezones by Country (ISO 3166 country code). The following
|
||||
gets all the Timezone identifiers for the US:
|
||||
|
||||
us = TZInfo::Country.get('US')
|
||||
timezones = us.zone_identifiers
|
||||
|
||||
The zone_info method of Country provides an additional description and
|
||||
location for each Timezone in the Country.
|
||||
|
||||
The above covers the most common uses of Timezone and Country. For more detail,
|
||||
see the API documentation for the individual classes.
|
||||
|
||||
|
||||
== Documentation
|
||||
|
||||
API documentation for TZInfo is available on RubyDoc.info[http://rubydoc.info/gems/tzinfo/frames].
|
||||
|
||||
|
||||
== Installation
|
||||
|
||||
The preferred method of installing TZInfo is through the GEM file (RubyGems[http://docs.rubygems.org/] required):
|
||||
|
||||
% gem install tzinfo-x.y.z.gem
|
||||
|
||||
or to automatically download and install:
|
||||
|
||||
% gem install tzinfo --remote
|
||||
|
||||
|
||||
== License
|
||||
|
||||
TZInfo is released under the MIT[http://opensource.org/licenses/mit-license.html] license.
|
||||
|
||||
|
||||
== Source Code
|
||||
|
||||
Source code for TZInfo is available on GitHub[https://github.com/tzinfo/tzinfo].
|
||||
|
||||
|
||||
== Issue Tracker
|
||||
|
||||
Please post any bugs, issues, feature requests or questions to the
|
||||
{GitHub issue tracker}[https://github.com/tzinfo/tzinfo/issues].
|
||||
282
activesupport/lib/active_support/vendor/tzinfo-0.3.39/Rakefile
vendored
Normal file
282
activesupport/lib/active_support/vendor/tzinfo-0.3.39/Rakefile
vendored
Normal file
@@ -0,0 +1,282 @@
|
||||
# Available options:
|
||||
#
|
||||
# rake test - Runs all test cases.
|
||||
# rake package - Runs test cases and builds packages for distribution.
|
||||
# rake rdoc - Builds API documentation in doc dir.
|
||||
# rake build_tz_modules - Builds Timezone modules and the Country index.
|
||||
# Expects to find source data in ../data.
|
||||
# rake build_tz_module zone=Zone/Name - Builds a single Timezone module.
|
||||
# Expects to find source data in ../data.
|
||||
# rake build_countries - Builds the Country index.
|
||||
# Expects to find source data in ../data.
|
||||
|
||||
require 'rake'
|
||||
require 'rake/testtask'
|
||||
require 'rake/rdoctask'
|
||||
require 'rake/gempackagetask'
|
||||
require 'fileutils'
|
||||
|
||||
Rake::TaskManager.class_eval do
|
||||
def remove_task(task_name)
|
||||
@tasks.delete(task_name.to_s)
|
||||
end
|
||||
end
|
||||
|
||||
def remove_task(task_name)
|
||||
Rake.application.remove_task(task_name)
|
||||
end
|
||||
|
||||
self.class.class_eval { alias_method :orig_sh, :sh }
|
||||
private :orig_sh
|
||||
|
||||
def sh(*cmd, &block)
|
||||
if cmd.first =~ /\A__tar_with_owner__ -?([zjcvf]+)(.*)\z/
|
||||
opts = $1
|
||||
args = $2
|
||||
cmd[0] = "tar c --owner 0 --group 0 -#{opts.gsub('c', '')}#{args}"
|
||||
end
|
||||
|
||||
orig_sh(*cmd, &block)
|
||||
end
|
||||
|
||||
|
||||
BUILD_TZ_CLASSES_DIR = 'lib/tzinfo.build_tz_classes'
|
||||
|
||||
SPEC = eval(File.read('tzinfo.gemspec'))
|
||||
|
||||
package_task = Rake::GemPackageTask.new(SPEC) do |pkg|
|
||||
pkg.need_zip = true
|
||||
pkg.need_tar_gz = true
|
||||
pkg.tar_command = '__tar_with_owner__'
|
||||
end
|
||||
|
||||
# Replace the Rake::PackageTask task that prepares the files to package with
|
||||
# a version that ensures the permissions are correct for the package.
|
||||
# Also just copy rather than link the files so that old versions are maintained.
|
||||
remove_task package_task.package_dir_path
|
||||
file package_task.package_dir_path => [package_task.package_dir] + package_task.package_files do
|
||||
mkdir_p package_task.package_dir_path rescue nil
|
||||
chmod(0755, package_task.package_dir_path)
|
||||
package_task.package_files.each do |fn|
|
||||
f = File.join(package_task.package_dir_path, fn)
|
||||
fdir = File.dirname(f)
|
||||
mkdir_p(fdir) if !File.exist?(fdir)
|
||||
if File.directory?(fn)
|
||||
mkdir_p(f)
|
||||
chmod(0755, f)
|
||||
else
|
||||
rm_f f
|
||||
cp(fn, f)
|
||||
chmod(0644, f)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
# Replace the Rake::GemPackageTask task that builds the gem with a version that
|
||||
# changes to the copied package directory first. This allows the gem builder
|
||||
# to pick up the correct file permissions.
|
||||
remove_task "#{package_task.package_dir}/#{package_task.gem_file}"
|
||||
file "#{package_task.package_dir}/#{package_task.gem_file}" => [package_task.package_dir] + package_task.gem_spec.files do
|
||||
when_writing("Creating GEM") do
|
||||
chdir(package_task.package_dir_path) do
|
||||
Gem::Builder.new(package_task.gem_spec).build
|
||||
end
|
||||
|
||||
verbose(true) do
|
||||
mv File.join(package_task.package_dir_path, package_task.gem_file), "#{package_task.package_dir}/#{package_task.gem_file}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Rake::TestTask.new('test') do |t|
|
||||
# Force a particular timezone to be local (helps find issues when local
|
||||
# timezone isn't GMT). This won't work on Windows.
|
||||
ENV['TZ'] = 'America/Los_Angeles'
|
||||
|
||||
t.libs << '.'
|
||||
t.pattern = 'test/tc_*.rb'
|
||||
t.verbose = true
|
||||
end
|
||||
|
||||
|
||||
Rake::RDocTask.new do |rdoc|
|
||||
rdoc.rdoc_dir = 'doc'
|
||||
rdoc.title = "TZInfo"
|
||||
rdoc.options << '--inline-source'
|
||||
rdoc.options.concat SPEC.rdoc_options
|
||||
rdoc.rdoc_files.include(*SPEC.extra_rdoc_files)
|
||||
rdoc.rdoc_files.include('lib')
|
||||
end
|
||||
|
||||
task :build_tz_modules do
|
||||
require 'lib/tzinfo/tzdataparser'
|
||||
|
||||
FileUtils.mkdir_p(BUILD_TZ_CLASSES_DIR)
|
||||
begin
|
||||
p = TZInfo::TZDataParser.new('data', BUILD_TZ_CLASSES_DIR)
|
||||
p.execute
|
||||
|
||||
scm = Scm.create(File.dirname(__FILE__))
|
||||
|
||||
['indexes', 'definitions'].each do |dir|
|
||||
scm.sync("#{BUILD_TZ_CLASSES_DIR}/#{dir}", "lib/tzinfo/#{dir}")
|
||||
end
|
||||
ensure
|
||||
FileUtils.rm_rf(BUILD_TZ_CLASSES_DIR)
|
||||
end
|
||||
end
|
||||
|
||||
class Scm
|
||||
def self.create(dir)
|
||||
if File.directory?(File.join(dir, '.git'))
|
||||
GitScm.new(dir)
|
||||
elsif File.directory?(File.join(dir, '.svn'))
|
||||
SvnScm.new(dir)
|
||||
else
|
||||
NullScm.new(dir)
|
||||
end
|
||||
end
|
||||
|
||||
def initialize(dir)
|
||||
end
|
||||
|
||||
def sync(source_dir, target_dir)
|
||||
puts "Sync from #{source_dir} to #{target_dir}#{command ? " using #{command}" : ''}"
|
||||
sync_dirs(source_dir, target_dir)
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def exec_scm(params)
|
||||
puts "#{command} #{params}"
|
||||
`#{command} #{params}`
|
||||
raise "#{command} exited with status #$?" if $? != 0
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def sync_dirs(source_dir, target_dir)
|
||||
# Assumes a directory will never turn into a file and vice-versa
|
||||
# (files will all end in .rb, directories won't).
|
||||
|
||||
source_entries, target_entries = [source_dir, target_dir].collect do |dir|
|
||||
Dir.entries(dir).delete_if {|entry| entry =~ /\A\./}.sort
|
||||
end
|
||||
|
||||
until source_entries.empty? || target_entries.empty?
|
||||
last_source = source_entries.last
|
||||
last_target = target_entries.last
|
||||
|
||||
if last_source == last_target
|
||||
source_file = File.join(source_dir, last_source)
|
||||
target_file = File.join(target_dir, last_target)
|
||||
|
||||
if File.directory?(source_file)
|
||||
sync_dirs(source_file, target_file)
|
||||
else
|
||||
FileUtils.cp(source_file, target_file)
|
||||
end
|
||||
|
||||
source_entries.pop
|
||||
target_entries.pop
|
||||
elsif source_entries.last < target_entries.last
|
||||
sync_only_in_target(target_dir, target_entries)
|
||||
else
|
||||
sync_only_in_source(source_dir, target_dir, source_entries)
|
||||
end
|
||||
end
|
||||
|
||||
until target_entries.empty?
|
||||
sync_only_in_target(target_dir, target_entries)
|
||||
end
|
||||
|
||||
until source_entries.empty?
|
||||
sync_only_in_source(source_dir, target_dir, source_entries)
|
||||
end
|
||||
end
|
||||
|
||||
def sync_only_in_target(target_dir, target_entries)
|
||||
target_file = File.join(target_dir, target_entries.last)
|
||||
delete(target_file)
|
||||
target_entries.pop
|
||||
end
|
||||
|
||||
def sync_only_in_source(source_dir, target_dir, source_entries)
|
||||
source_file = File.join(source_dir, source_entries.last)
|
||||
target_file = File.join(target_dir, source_entries.last)
|
||||
|
||||
if File.directory?(source_file)
|
||||
Dir.mkdir(target_file)
|
||||
add(target_file)
|
||||
sync_dirs(source_file, target_file)
|
||||
else
|
||||
FileUtils.cp(source_file, target_file)
|
||||
add(target_file)
|
||||
end
|
||||
|
||||
source_entries.pop
|
||||
end
|
||||
end
|
||||
|
||||
class NullScm < Scm
|
||||
def command
|
||||
nil
|
||||
end
|
||||
|
||||
def add(file)
|
||||
end
|
||||
|
||||
def delete(file)
|
||||
puts "rm -rf \"#{file}\""
|
||||
FileUtils.rm_rf(file)
|
||||
end
|
||||
end
|
||||
|
||||
class GitScm < Scm
|
||||
def command
|
||||
'git'
|
||||
end
|
||||
|
||||
def add(file)
|
||||
unless File.directory?(file)
|
||||
exec_scm "add \"#{file}\""
|
||||
end
|
||||
end
|
||||
|
||||
def delete(file)
|
||||
exec_scm "rm -rf \"#{file}\""
|
||||
end
|
||||
end
|
||||
|
||||
class SvnScm < Scm
|
||||
def command
|
||||
'svn'
|
||||
end
|
||||
|
||||
def add(file)
|
||||
exec_scm "add \"#{file}\""
|
||||
end
|
||||
|
||||
def delete(file)
|
||||
exec_scm "delete --force \"#{file}\""
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
task :build_tz_module do
|
||||
require 'lib/tzinfo/tzdataparser'
|
||||
p = TZInfo::TZDataParser.new('data', 'lib/tzinfo')
|
||||
p.generate_countries = false
|
||||
p.only_zones = [ENV['zone']]
|
||||
p.execute
|
||||
end
|
||||
|
||||
task :build_countries do
|
||||
require 'lib/tzinfo/tzdataparser'
|
||||
p = TZInfo::TZDataParser.new('data', 'lib/tzinfo')
|
||||
p.generate_countries = true
|
||||
p.generate_zones = false
|
||||
p.execute
|
||||
end
|
||||
@@ -1,13 +1,13 @@
|
||||
#--
|
||||
# Copyright (c) 2005-2006 Philip Ross
|
||||
#
|
||||
# Copyright (c) 2005-2010 Philip Ross
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
#
|
||||
@@ -25,10 +25,31 @@
|
||||
$:.unshift(File.dirname(__FILE__)) unless
|
||||
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
||||
|
||||
|
||||
require 'tzinfo/ruby_core_support'
|
||||
require 'tzinfo/offset_rationals'
|
||||
require 'tzinfo/time_or_datetime'
|
||||
|
||||
require 'tzinfo/timezone_definition'
|
||||
|
||||
require 'tzinfo/timezone_offset_info'
|
||||
require 'tzinfo/timezone_transition_info'
|
||||
|
||||
require 'tzinfo/timezone_index_definition'
|
||||
|
||||
require 'tzinfo/timezone_info'
|
||||
require 'tzinfo/data_timezone_info'
|
||||
require 'tzinfo/linked_timezone_info'
|
||||
|
||||
require 'tzinfo/timezone_period'
|
||||
require 'tzinfo/timezone'
|
||||
# require 'tzinfo/country'
|
||||
# require 'tzinfo/tzdataparser'
|
||||
# require 'tzinfo/timezone_proxy'
|
||||
require 'tzinfo/info_timezone'
|
||||
require 'tzinfo/data_timezone'
|
||||
require 'tzinfo/linked_timezone'
|
||||
require 'tzinfo/definitions'
|
||||
require 'tzinfo/timezone_proxy'
|
||||
|
||||
require 'tzinfo/country_index_definition'
|
||||
require 'tzinfo/country_info'
|
||||
|
||||
require 'tzinfo/country'
|
||||
require 'tzinfo/country_timezone'
|
||||
180
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/country.rb
vendored
Normal file
180
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/country.rb
vendored
Normal file
@@ -0,0 +1,180 @@
|
||||
#--
|
||||
# Copyright (c) 2005-2013 Philip Ross
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#++
|
||||
|
||||
module TZInfo
|
||||
# Thrown by Country#get if the code given is not valid.
|
||||
class InvalidCountryCode < StandardError
|
||||
end
|
||||
|
||||
# An ISO 3166 country. Can be used to get a list of Timezones for a country.
|
||||
# For example:
|
||||
#
|
||||
# us = Country.get('US')
|
||||
# us.zone_identifiers
|
||||
# us.zones
|
||||
# us.zone_info
|
||||
class Country
|
||||
include Comparable
|
||||
|
||||
# Defined countries.
|
||||
#
|
||||
# @!visibility private
|
||||
@@countries = {}
|
||||
|
||||
# Whether the countries index has been loaded yet.
|
||||
#
|
||||
# @!visibility private
|
||||
@@index_loaded = false
|
||||
|
||||
# Gets a Country by its ISO 3166 code. Raises an InvalidCountryCode
|
||||
# exception if it couldn't be found.
|
||||
def self.get(identifier)
|
||||
instance = @@countries[identifier]
|
||||
|
||||
unless instance
|
||||
load_index
|
||||
info = Indexes::Countries.countries[identifier]
|
||||
raise InvalidCountryCode.new, 'Invalid identifier' unless info
|
||||
instance = Country.new(info)
|
||||
@@countries[identifier] = instance
|
||||
end
|
||||
|
||||
instance
|
||||
end
|
||||
|
||||
# If identifier is a CountryInfo object, initializes the Country instance,
|
||||
# otherwise calls get(identifier).
|
||||
def self.new(identifier)
|
||||
if identifier.kind_of?(CountryInfo)
|
||||
instance = super()
|
||||
instance.send :setup, identifier
|
||||
instance
|
||||
else
|
||||
get(identifier)
|
||||
end
|
||||
end
|
||||
|
||||
# Returns an Array of all the valid country codes.
|
||||
def self.all_codes
|
||||
load_index
|
||||
Indexes::Countries.countries.keys
|
||||
end
|
||||
|
||||
# Returns an Array of all the defined Countries.
|
||||
def self.all
|
||||
load_index
|
||||
Indexes::Countries.countries.keys.collect {|code| get(code)}
|
||||
end
|
||||
|
||||
# The ISO 3166 country code.
|
||||
def code
|
||||
@info.code
|
||||
end
|
||||
|
||||
# The name of the country.
|
||||
def name
|
||||
@info.name
|
||||
end
|
||||
|
||||
# Alias for name.
|
||||
def to_s
|
||||
name
|
||||
end
|
||||
|
||||
# Returns internal object state as a programmer-readable string.
|
||||
def inspect
|
||||
"#<#{self.class}: #{@info.code}>"
|
||||
end
|
||||
|
||||
# Returns a frozen array of all the zone identifiers for the country. These
|
||||
# are in an order that
|
||||
# (1) makes some geographical sense, and
|
||||
# (2) puts the most populous zones first, where that does not contradict (1).
|
||||
def zone_identifiers
|
||||
@info.zone_identifiers
|
||||
end
|
||||
alias zone_names zone_identifiers
|
||||
|
||||
# An array of all the Timezones for this country. Returns TimezoneProxy
|
||||
# objects to avoid the overhead of loading Timezone definitions until
|
||||
# a conversion is actually required. The Timezones are returned in an order
|
||||
# that
|
||||
# (1) makes some geographical sense, and
|
||||
# (2) puts the most populous zones first, where that does not contradict (1).
|
||||
def zones
|
||||
zone_identifiers.collect {|id|
|
||||
Timezone.get_proxy(id)
|
||||
}
|
||||
end
|
||||
|
||||
# Returns a frozen array of all the timezones for the for the country as
|
||||
# CountryTimezone instances (containing extra information about each zone).
|
||||
# These are in an order that
|
||||
# (1) makes some geographical sense, and
|
||||
# (2) puts the most populous zones first, where that does not contradict (1).
|
||||
def zone_info
|
||||
@info.zones
|
||||
end
|
||||
|
||||
# Compare two Countries based on their code. Returns -1 if c is less
|
||||
# than self, 0 if c is equal to self and +1 if c is greater than self.
|
||||
def <=>(c)
|
||||
code <=> c.code
|
||||
end
|
||||
|
||||
# Returns true if and only if the code of c is equal to the code of this
|
||||
# Country.
|
||||
def eql?(c)
|
||||
self == c
|
||||
end
|
||||
|
||||
# Returns a hash value for this Country.
|
||||
def hash
|
||||
code.hash
|
||||
end
|
||||
|
||||
# Dumps this Country for marshalling.
|
||||
def _dump(limit)
|
||||
code
|
||||
end
|
||||
|
||||
# Loads a marshalled Country.
|
||||
def self._load(data)
|
||||
Country.get(data)
|
||||
end
|
||||
|
||||
private
|
||||
# Loads in the index of countries if it hasn't already been loaded.
|
||||
def self.load_index
|
||||
unless @@index_loaded
|
||||
require 'tzinfo/indexes/countries'
|
||||
@@index_loaded = true
|
||||
end
|
||||
end
|
||||
|
||||
# Called by Country.new to initialize a new Country instance. The info
|
||||
# parameter is a CountryInfo that defines the country.
|
||||
def setup(info)
|
||||
@info = info
|
||||
end
|
||||
end
|
||||
end
|
||||
53
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/country_index_definition.rb
vendored
Normal file
53
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/country_index_definition.rb
vendored
Normal file
@@ -0,0 +1,53 @@
|
||||
#--
|
||||
# Copyright (c) 2006-2013 Philip Ross
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#++
|
||||
|
||||
module TZInfo
|
||||
# The country index file includes CountryIndexDefinition which provides
|
||||
# a country method used to define each country in the index.
|
||||
#
|
||||
# @private
|
||||
module CountryIndexDefinition #:nodoc:
|
||||
def self.append_features(base)
|
||||
super
|
||||
base.extend(ClassMethods)
|
||||
base.instance_eval { @countries = {} }
|
||||
end
|
||||
|
||||
# Class methods for inclusion.
|
||||
#
|
||||
# @private
|
||||
module ClassMethods #:nodoc:
|
||||
# Defines a country with an ISO 3166 country code, name and block. The
|
||||
# block will be evaluated to obtain all the timezones for the country.
|
||||
# Calls Country.country_defined with the definition of each country.
|
||||
def country(code, name, &block)
|
||||
@countries[code] = CountryInfo.new(code, name, &block)
|
||||
end
|
||||
|
||||
# Returns a frozen hash of all the countries that have been defined in
|
||||
# the index.
|
||||
def countries
|
||||
@countries.freeze
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
82
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/country_info.rb
vendored
Normal file
82
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/country_info.rb
vendored
Normal file
@@ -0,0 +1,82 @@
|
||||
#--
|
||||
# Copyright (c) 2006-2013 Philip Ross
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#++
|
||||
|
||||
module TZInfo
|
||||
# Class to store the data loaded from the country index. Instances of this
|
||||
# class are passed to the blocks in the index that define timezones.
|
||||
#
|
||||
# @private
|
||||
class CountryInfo #:nodoc:
|
||||
attr_reader :code
|
||||
attr_reader :name
|
||||
|
||||
# Constructs a new CountryInfo with an ISO 3166 country code, name and
|
||||
# block. The block will be evaluated to obtain the timezones for the country
|
||||
# (when they are first needed).
|
||||
def initialize(code, name, &block)
|
||||
@code = code
|
||||
@name = name
|
||||
@block = block
|
||||
@zones = nil
|
||||
@zone_identifiers = nil
|
||||
end
|
||||
|
||||
# Called by the index data to define a timezone for the country.
|
||||
def timezone(identifier, latitude_numerator, latitude_denominator,
|
||||
longitude_numerator, longitude_denominator, description = nil)
|
||||
# Currently only store the identifiers.
|
||||
@zones << CountryTimezone.new(identifier, latitude_numerator,
|
||||
latitude_denominator, longitude_numerator, longitude_denominator,
|
||||
description)
|
||||
end
|
||||
|
||||
# Returns a frozen array of all the zone identifiers for the country. These
|
||||
# are in the order they were added using the timezone method.
|
||||
def zone_identifiers
|
||||
unless @zone_identifiers
|
||||
@zone_identifiers = zones.collect {|zone| zone.identifier}
|
||||
@zone_identifiers.freeze
|
||||
end
|
||||
|
||||
@zone_identifiers
|
||||
end
|
||||
|
||||
# Returns internal object state as a programmer-readable string.
|
||||
def inspect
|
||||
"#<#{self.class}: #@code>"
|
||||
end
|
||||
|
||||
# Returns a frozen array of all the timezones for the for the country as
|
||||
# CountryTimezone instances. These are in the order they were added using
|
||||
# the timezone method.
|
||||
def zones
|
||||
unless @zones
|
||||
@zones = []
|
||||
@block.call(self) if @block
|
||||
@block = nil
|
||||
@zones.freeze
|
||||
end
|
||||
|
||||
@zones
|
||||
end
|
||||
end
|
||||
end
|
||||
100
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/country_timezone.rb
vendored
Normal file
100
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/country_timezone.rb
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
#--
|
||||
# Copyright (c) 2006-2013 Philip Ross
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#++
|
||||
|
||||
module TZInfo
|
||||
# A Timezone within a Country. This contains extra information about the
|
||||
# Timezone that is specific to the Country (a Timezone could be used by
|
||||
# multiple countries).
|
||||
class CountryTimezone
|
||||
# The zone identifier.
|
||||
attr_reader :identifier
|
||||
|
||||
# A description of this timezone in relation to the country, e.g.
|
||||
# "Eastern Time". This is usually nil for countries having only a single
|
||||
# Timezone.
|
||||
attr_reader :description
|
||||
|
||||
# Creates a new CountryTimezone with a timezone identifier, latitude,
|
||||
# longitude and description. The latitude and longitude are specified as
|
||||
# rationals - a numerator and denominator. For performance reasons, the
|
||||
# numerators and denominators must be specified in their lowest form.
|
||||
#
|
||||
# CountryTimezone instances should not normally be constructed manually.
|
||||
def initialize(identifier, latitude_numerator, latitude_denominator,
|
||||
longitude_numerator, longitude_denominator, description = nil) #:nodoc:
|
||||
@identifier = identifier
|
||||
@latitude_numerator = latitude_numerator
|
||||
@latitude_denominator = latitude_denominator
|
||||
@longitude_numerator = longitude_numerator
|
||||
@longitude_denominator = longitude_denominator
|
||||
@description = description
|
||||
end
|
||||
|
||||
# The Timezone (actually a TimezoneProxy for performance reasons).
|
||||
def timezone
|
||||
Timezone.get_proxy(@identifier)
|
||||
end
|
||||
|
||||
# if description is not nil, this method returns description; otherwise it
|
||||
# returns timezone.friendly_identifier(true).
|
||||
def description_or_friendly_identifier
|
||||
description || timezone.friendly_identifier(true)
|
||||
end
|
||||
|
||||
# The latitude of this timezone in degrees as a Rational.
|
||||
def latitude
|
||||
@latitude ||= RubyCoreSupport.rational_new!(@latitude_numerator, @latitude_denominator)
|
||||
end
|
||||
|
||||
# The longitude of this timezone in degrees as a Rational.
|
||||
def longitude
|
||||
@longitude ||= RubyCoreSupport.rational_new!(@longitude_numerator, @longitude_denominator)
|
||||
end
|
||||
|
||||
# Returns true if and only if the given CountryTimezone is equal to the
|
||||
# current CountryTimezone (has the same identifer, latitude, longitude
|
||||
# and description).
|
||||
def ==(ct)
|
||||
ct.kind_of?(CountryTimezone) &&
|
||||
identifier == ct.identifier && latitude == ct.latitude &&
|
||||
longitude == ct.longitude && description == ct.description
|
||||
end
|
||||
|
||||
# Returns true if and only if the given CountryTimezone is equal to the
|
||||
# current CountryTimezone (has the same identifer, latitude, longitude
|
||||
# and description).
|
||||
def eql?(ct)
|
||||
self == ct
|
||||
end
|
||||
|
||||
# Returns a hash of this CountryTimezone.
|
||||
def hash
|
||||
@identifier.hash ^ @latitude_numerator.hash ^ @latitude_denominator.hash ^
|
||||
@longitude_numerator.hash ^ @longitude_denominator.hash ^ @description.hash
|
||||
end
|
||||
|
||||
# Returns internal object state as a programmer-readable string.
|
||||
def inspect
|
||||
"#<#{self.class}: #@identifier>"
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,5 +1,5 @@
|
||||
#--
|
||||
# Copyright (c) 2006 Philip Ross
|
||||
# Copyright (c) 2006-2013 Philip Ross
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -20,11 +20,11 @@
|
||||
# THE SOFTWARE.
|
||||
#++
|
||||
|
||||
require 'tzinfo/info_timezone'
|
||||
|
||||
module TZInfo
|
||||
|
||||
# A Timezone based on a DataTimezoneInfo.
|
||||
#
|
||||
# @private
|
||||
class DataTimezone < InfoTimezone #:nodoc:
|
||||
|
||||
# Returns the TimezonePeriod for the given UTC time. utc can either be
|
||||
@@ -1,5 +1,5 @@
|
||||
#--
|
||||
# Copyright (c) 2006 Philip Ross
|
||||
# Copyright (c) 2006-2013 Philip Ross
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -20,12 +20,6 @@
|
||||
# THE SOFTWARE.
|
||||
#++
|
||||
|
||||
require 'tzinfo/time_or_datetime'
|
||||
require 'tzinfo/timezone_info'
|
||||
require 'tzinfo/timezone_offset_info'
|
||||
require 'tzinfo/timezone_period'
|
||||
require 'tzinfo/timezone_transition_info'
|
||||
|
||||
module TZInfo
|
||||
# Thrown if no offsets have been defined when calling period_for_utc or
|
||||
# periods_for_local. Indicates an error in the timezone data.
|
||||
@@ -33,6 +27,8 @@ module TZInfo
|
||||
end
|
||||
|
||||
# Represents a (non-linked) timezone defined in a data module.
|
||||
#
|
||||
# @private
|
||||
class DataTimezoneInfo < TimezoneInfo #:nodoc:
|
||||
|
||||
# Constructs a new TimezoneInfo with its identifier.
|
||||
16
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/definitions/Africa/Abidjan.rb
vendored
Normal file
16
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/definitions/Africa/Abidjan.rb
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Africa
|
||||
module Abidjan
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Africa/Abidjan' do |tz|
|
||||
tz.offset :o0, -968, 0, :LMT
|
||||
tz.offset :o1, 0, 0, :GMT
|
||||
|
||||
tz.transition 1912, 1, :o1, 26129547121, 10800
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
31
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/definitions/Africa/Accra.rb
vendored
Normal file
31
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/definitions/Africa/Accra.rb
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Africa
|
||||
module Accra
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Africa/Accra' do |tz|
|
||||
tz.offset :o0, -52, 0, :LMT
|
||||
tz.offset :o1, 0, 0, :GMT
|
||||
tz.offset :o2, 0, 1200, :GHST
|
||||
|
||||
tz.transition 1918, 1, :o1, 52306441213, 21600
|
||||
tz.transition 1936, 9, :o2, 4856825, 2
|
||||
tz.transition 1936, 12, :o1, 174854411, 72
|
||||
tz.transition 1937, 9, :o2, 4857555, 2
|
||||
tz.transition 1937, 12, :o1, 174880691, 72
|
||||
tz.transition 1938, 9, :o2, 4858285, 2
|
||||
tz.transition 1938, 12, :o1, 174906971, 72
|
||||
tz.transition 1939, 9, :o2, 4859015, 2
|
||||
tz.transition 1939, 12, :o1, 174933251, 72
|
||||
tz.transition 1940, 9, :o2, 4859747, 2
|
||||
tz.transition 1940, 12, :o1, 174959603, 72
|
||||
tz.transition 1941, 9, :o2, 4860477, 2
|
||||
tz.transition 1941, 12, :o1, 174985883, 72
|
||||
tz.transition 1942, 9, :o2, 4861207, 2
|
||||
tz.transition 1942, 12, :o1, 175012163, 72
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,18 @@
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Africa
|
||||
module Addis_Ababa
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Africa/Addis_Ababa' do |tz|
|
||||
tz.offset :o0, 9288, 0, :LMT
|
||||
tz.offset :o1, 9320, 0, :ADMT
|
||||
tz.offset :o2, 10800, 0, :EAT
|
||||
|
||||
tz.transition 1869, 12, :o1, 961625357, 400
|
||||
tz.transition 1936, 5, :o2, 5245113727, 2160
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,5 +1,3 @@
|
||||
require 'tzinfo/timezone_definition'
|
||||
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Africa
|
||||
20
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/definitions/Africa/Asmara.rb
vendored
Normal file
20
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/definitions/Africa/Asmara.rb
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Africa
|
||||
module Asmara
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Africa/Asmara' do |tz|
|
||||
tz.offset :o0, 9332, 0, :LMT
|
||||
tz.offset :o1, 9332, 0, :AMT
|
||||
tz.offset :o2, 9320, 0, :ADMT
|
||||
tz.offset :o3, 10800, 0, :EAT
|
||||
|
||||
tz.transition 1869, 12, :o1, 51927769267, 21600
|
||||
tz.transition 1889, 12, :o2, 52085557267, 21600
|
||||
tz.transition 1936, 5, :o3, 5245113727, 2160
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
11
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/definitions/Africa/Asmera.rb
vendored
Normal file
11
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/definitions/Africa/Asmera.rb
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Africa
|
||||
module Asmera
|
||||
include TimezoneDefinition
|
||||
|
||||
linked_timezone 'Africa/Asmera', 'Africa/Asmara'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
19
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/definitions/Africa/Bamako.rb
vendored
Normal file
19
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/definitions/Africa/Bamako.rb
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Africa
|
||||
module Bamako
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Africa/Bamako' do |tz|
|
||||
tz.offset :o0, -1920, 0, :LMT
|
||||
tz.offset :o1, 0, 0, :GMT
|
||||
tz.offset :o2, -3600, 0, :WAT
|
||||
|
||||
tz.transition 1912, 1, :o1, 217746227, 90
|
||||
tz.transition 1934, 2, :o2, 4854989, 2
|
||||
tz.transition 1960, 6, :o1, 58490533, 24
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
16
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/definitions/Africa/Bangui.rb
vendored
Normal file
16
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/definitions/Africa/Bangui.rb
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Africa
|
||||
module Bangui
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Africa/Bangui' do |tz|
|
||||
tz.offset :o0, 4460, 0, :LMT
|
||||
tz.offset :o1, 3600, 0, :WAT
|
||||
|
||||
tz.transition 1911, 12, :o1, 10451818577, 4320
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
20
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/definitions/Africa/Banjul.rb
vendored
Normal file
20
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/definitions/Africa/Banjul.rb
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Africa
|
||||
module Banjul
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Africa/Banjul' do |tz|
|
||||
tz.offset :o0, -3996, 0, :LMT
|
||||
tz.offset :o1, -3996, 0, :BMT
|
||||
tz.offset :o2, -3600, 0, :WAT
|
||||
tz.offset :o3, 0, 0, :GMT
|
||||
|
||||
tz.transition 1912, 1, :o1, 1935522037, 800
|
||||
tz.transition 1935, 1, :o2, 1942242837, 800
|
||||
tz.transition 1964, 1, :o3, 58521493, 24
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
18
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/definitions/Africa/Bissau.rb
vendored
Normal file
18
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/definitions/Africa/Bissau.rb
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Africa
|
||||
module Bissau
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Africa/Bissau' do |tz|
|
||||
tz.offset :o0, -3740, 0, :LMT
|
||||
tz.offset :o1, -3600, 0, :WAT
|
||||
tz.offset :o2, 0, 0, :GMT
|
||||
|
||||
tz.transition 1911, 5, :o1, 10450868587, 4320
|
||||
tz.transition 1975, 1, :o2, 157770000
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
16
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/definitions/Africa/Blantyre.rb
vendored
Normal file
16
activesupport/lib/active_support/vendor/tzinfo-0.3.39/lib/tzinfo/definitions/Africa/Blantyre.rb
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
module TZInfo
|
||||
module Definitions
|
||||
module Africa
|
||||
module Blantyre
|
||||
include TimezoneDefinition
|
||||
|
||||
timezone 'Africa/Blantyre' do |tz|
|
||||
tz.offset :o0, 8400, 0, :LMT
|
||||
tz.offset :o1, 7200, 0, :CAT
|
||||
|
||||
tz.transition 1903, 2, :o1, 173964557, 72
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user