twitter_cldr 1.7.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +6 -0
- data/README.md +61 -5
- data/Rakefile +64 -60
- data/js/lib/twitter_cldr_js.rb +0 -2
- data/lib/twitter_cldr/core_ext.rb +12 -12
- data/lib/twitter_cldr/formatters/calendars/timespan_formatter.rb +13 -11
- data/lib/twitter_cldr/localized/localized_array.rb +33 -0
- data/lib/twitter_cldr/localized/localized_date.rb +23 -0
- data/lib/twitter_cldr/localized/localized_datetime.rb +63 -0
- data/lib/twitter_cldr/localized/localized_number.rb +50 -0
- data/lib/twitter_cldr/localized/localized_object.rb +38 -0
- data/lib/twitter_cldr/localized/localized_string.rb +41 -0
- data/lib/twitter_cldr/localized/localized_symbol.rb +20 -0
- data/lib/twitter_cldr/localized/localized_time.rb +23 -0
- data/lib/twitter_cldr/localized/localized_timespan.rb +26 -0
- data/lib/twitter_cldr/localized.rb +18 -0
- data/lib/twitter_cldr/normalization.rb +23 -0
- data/lib/twitter_cldr/resources/{tries_dumper.rb → collation_tries_dumper.rb} +1 -1
- data/lib/twitter_cldr/resources/composition_exclusions_importer.rb +1 -1
- data/lib/twitter_cldr/resources/language_codes_importer.rb +232 -0
- data/lib/twitter_cldr/resources/locales_resources_importer.rb +1 -1
- data/lib/twitter_cldr/resources/phone_codes_importer.rb +1 -1
- data/lib/twitter_cldr/resources/postal_codes_importer.rb +1 -1
- data/lib/twitter_cldr/resources/tailoring_importer.rb +12 -3
- data/lib/twitter_cldr/resources/unicode_data_importer.rb +3 -1
- data/lib/twitter_cldr/resources.rb +2 -1
- data/lib/twitter_cldr/shared/calendar.rb +2 -6
- data/lib/twitter_cldr/shared/language_codes.rb +75 -0
- data/lib/twitter_cldr/shared/languages.rb +4 -11
- data/lib/twitter_cldr/shared.rb +8 -7
- data/lib/twitter_cldr/tokenizers/base.rb +2 -8
- data/lib/twitter_cldr/utils.rb +8 -0
- data/lib/twitter_cldr/version.rb +1 -1
- data/lib/twitter_cldr.rb +5 -4
- data/resources/custom/locales/cs/units.yml +3 -3
- data/resources/custom/locales/pl/units.yml +4 -4
- data/resources/custom/locales/pt/units.yml +2 -2
- data/resources/shared/language_codes_table.dump +0 -0
- data/spec/core_ext_spec.rb +19 -0
- data/spec/{core_ext/array_spec.rb → localized/localized_array_spec.rb} +1 -1
- data/spec/{core_ext/calendars/date_spec.rb → localized/localized_date_spec.rb} +24 -44
- data/spec/localized/localized_datetime_spec.rb +81 -0
- data/spec/{core_ext/numbers → localized}/localized_number_spec.rb +34 -1
- data/spec/localized/localized_object_spec.rb +89 -0
- data/spec/{core_ext/string_spec.rb → localized/localized_string_spec.rb} +16 -33
- data/spec/{core_ext/symbol_spec.rb → localized/localized_symbol_spec.rb} +3 -1
- data/spec/localized/localized_time_spec.rb +70 -0
- data/spec/normalization_spec.rb +42 -0
- data/spec/readme_spec.rb +51 -5
- data/spec/shared/language_codes_spec.rb +161 -0
- data/spec/shared/phone_codes_spec.rb +2 -2
- data/spec/shared/postal_codes_spec.rb +2 -2
- data/spec/spec_helper.rb +2 -0
- data/spec/tokenizers/base_spec.rb +15 -6
- data/spec/utils_spec.rb +18 -2
- data/twitter_cldr.gemspec +2 -1
- metadata +28 -44
- data/lib/twitter_cldr/core_ext/array.rb +0 -35
- data/lib/twitter_cldr/core_ext/calendars/date.rb +0 -25
- data/lib/twitter_cldr/core_ext/calendars/datetime.rb +0 -65
- data/lib/twitter_cldr/core_ext/calendars/time.rb +0 -25
- data/lib/twitter_cldr/core_ext/calendars/timespan.rb +0 -24
- data/lib/twitter_cldr/core_ext/localized_object.rb +0 -25
- data/lib/twitter_cldr/core_ext/numbers/bignum.rb +0 -8
- data/lib/twitter_cldr/core_ext/numbers/fixnum.rb +0 -8
- data/lib/twitter_cldr/core_ext/numbers/float.rb +0 -8
- data/lib/twitter_cldr/core_ext/numbers/localized_number.rb +0 -54
- data/lib/twitter_cldr/core_ext/string.rb +0 -51
- data/lib/twitter_cldr/core_ext/symbol.rb +0 -22
- data/spec/core_ext/calendars/datetime_spec.rb +0 -90
- data/spec/core_ext/calendars/time_spec.rb +0 -90
- data/spec/core_ext/calendars_spec.rb +0 -34
- data/spec/core_ext/numbers/bignum_spec.rb +0 -25
- data/spec/core_ext/numbers/fixnum_spec.rb +0 -25
- data/spec/core_ext/numbers/float_spec.rb +0 -25
- data/spec/core_ext/numbers_spec.rb +0 -39
@@ -6,7 +6,7 @@
|
|
6
6
|
require 'nokogiri'
|
7
7
|
require 'java'
|
8
8
|
|
9
|
-
require '
|
9
|
+
require 'twitter_cldr/resources/download'
|
10
10
|
|
11
11
|
module TwitterCldr
|
12
12
|
module Resources
|
@@ -34,6 +34,8 @@ module TwitterCldr
|
|
34
34
|
|
35
35
|
EMPTY_TAILORING_DATA = { :collator_options => {}, :tailored_table => '', :suppressed_contractions => '' }
|
36
36
|
|
37
|
+
ICU4J_URL = 'http://download.icu-project.org/files/icu4j/49.1/icu4j-49_1.jar'
|
38
|
+
|
37
39
|
class ImportError < RuntimeError; end
|
38
40
|
|
39
41
|
# Arguments:
|
@@ -43,7 +45,7 @@ module TwitterCldr
|
|
43
45
|
# icu4j_path - path to ICU4J jar file
|
44
46
|
#
|
45
47
|
def initialize(input_path, output_path, icu4j_path)
|
46
|
-
|
48
|
+
require_icu4j(icu4j_path)
|
47
49
|
|
48
50
|
@input_path = input_path
|
49
51
|
@output_path = output_path
|
@@ -56,6 +58,11 @@ module TwitterCldr
|
|
56
58
|
|
57
59
|
private
|
58
60
|
|
61
|
+
def require_icu4j(icu4j_path)
|
62
|
+
TwitterCldr::Resources.download_if_necessary(icu4j_path, ICU4J_URL)
|
63
|
+
require icu4j_path
|
64
|
+
end
|
65
|
+
|
59
66
|
def import_locale(locale)
|
60
67
|
print "Importing %8s\t--\t" % locale
|
61
68
|
|
@@ -126,7 +133,7 @@ module TwitterCldr
|
|
126
133
|
end
|
127
134
|
elsif child.name == 'x'
|
128
135
|
context = ''
|
129
|
-
child.children.
|
136
|
+
child.children.inject([]) do |memo, c|
|
130
137
|
if SIMPLE_RULES.include?(c.name)
|
131
138
|
memo << table_entry_for_rule(collator, context + c.text)
|
132
139
|
elsif c.name == 'context'
|
@@ -134,6 +141,8 @@ module TwitterCldr
|
|
134
141
|
elsif c.name != 'extend'
|
135
142
|
raise ImportError, "Rule '#{c.name}' inside <x></x> is not supported."
|
136
143
|
end
|
144
|
+
|
145
|
+
memo
|
137
146
|
end
|
138
147
|
else
|
139
148
|
raise ImportError, "Tag '#{child.name}' is not supported." unless IGNORED_TAGS.include?(child.name)
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# Copyright 2012 Twitter, Inc
|
4
4
|
# http://www.apache.org/licenses/LICENSE-2.0
|
5
5
|
|
6
|
-
require '
|
6
|
+
require 'twitter_cldr/resources/download'
|
7
7
|
|
8
8
|
module TwitterCldr
|
9
9
|
module Resources
|
@@ -29,6 +29,8 @@ module TwitterCldr
|
|
29
29
|
|
30
30
|
File.open(File.join(@output_path, 'blocks.yml'), 'w') { |output| YAML.dump(blocks, output) }
|
31
31
|
|
32
|
+
FileUtils.mkdir_p(File.join(@output_path, 'blocks'))
|
33
|
+
|
32
34
|
unicode_data.each do |block_name, code_points|
|
33
35
|
File.open(File.join(@output_path, 'blocks', "#{block_name}.yml"), 'w') { |output| YAML.dump(code_points, output) }
|
34
36
|
end
|
@@ -6,14 +6,15 @@
|
|
6
6
|
module TwitterCldr
|
7
7
|
module Resources
|
8
8
|
autoload :CanonicalCompositionsUpdater, 'twitter_cldr/resources/canonical_compositions_updater'
|
9
|
+
autoload :CollationTriesDumper, 'twitter_cldr/resources/collation_tries_dumper'
|
9
10
|
autoload :CompositionExclusionsImporter, 'twitter_cldr/resources/composition_exclusions_importer'
|
10
11
|
autoload :CustomLocalesResourcesImporter, 'twitter_cldr/resources/custom_locales_resources_importer'
|
12
|
+
autoload :LanguageCodesImporter, 'twitter_cldr/resources/language_codes_importer'
|
11
13
|
autoload :Loader, 'twitter_cldr/resources/loader'
|
12
14
|
autoload :LocalesResourcesImporter, 'twitter_cldr/resources/locales_resources_importer'
|
13
15
|
autoload :PhoneCodesImporter, 'twitter_cldr/resources/phone_codes_importer'
|
14
16
|
autoload :PostalCodesImporter, 'twitter_cldr/resources/postal_codes_importer'
|
15
17
|
autoload :TailoringImporter, 'twitter_cldr/resources/tailoring_importer'
|
16
|
-
autoload :TriesDumper, 'twitter_cldr/resources/tries_dumper'
|
17
18
|
autoload :UnicodeDataImporter, 'twitter_cldr/resources/unicode_data_importer'
|
18
19
|
end
|
19
20
|
end
|
@@ -34,15 +34,11 @@ module TwitterCldr
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def get_data(*path)
|
37
|
-
data =
|
37
|
+
data = TwitterCldr::Utils.traverse_hash(calendar_data, path)
|
38
38
|
redirect = parse_redirect(data)
|
39
39
|
redirect ? get_data(*redirect) : data
|
40
40
|
end
|
41
41
|
|
42
|
-
def traverse_path(tree, path)
|
43
|
-
!path.empty? && tree.is_a?(Hash) ? traverse_path(tree[path.first], path[1..-1]) : tree
|
44
|
-
end
|
45
|
-
|
46
42
|
def parse_redirect(data)
|
47
43
|
$1.split('.').map(&:to_sym) if data.is_a?(Symbol) && data.to_s =~ redirect_regexp
|
48
44
|
end
|
@@ -52,7 +48,7 @@ module TwitterCldr
|
|
52
48
|
end
|
53
49
|
|
54
50
|
def calendar_data
|
55
|
-
@calendar_data ||=
|
51
|
+
@calendar_data ||= TwitterCldr::Utils.traverse_hash(resource, [locale, :calendars, calendar_type])
|
56
52
|
end
|
57
53
|
|
58
54
|
def resource
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2012 Twitter, Inc
|
4
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
5
|
+
|
6
|
+
module TwitterCldr
|
7
|
+
module Shared
|
8
|
+
module LanguageCodes
|
9
|
+
|
10
|
+
LANGUAGE_CODES_DUMP_PATH = File.join(TwitterCldr::RESOURCES_DIR, 'shared', 'language_codes_table.dump')
|
11
|
+
|
12
|
+
NAME_STANDARD = :name # fake standard, mostly for internal use
|
13
|
+
|
14
|
+
VALID_STANDARDS = [:bcp_47, :iso_639_1, :iso_639_2, :iso_639_3, NAME_STANDARD]
|
15
|
+
|
16
|
+
class << self
|
17
|
+
|
18
|
+
def languages
|
19
|
+
resource[NAME_STANDARD].keys
|
20
|
+
end
|
21
|
+
|
22
|
+
def valid_standard?(standard)
|
23
|
+
VALID_STANDARDS.include?(standard.to_sym)
|
24
|
+
end
|
25
|
+
|
26
|
+
def valid_code?(code, standard)
|
27
|
+
resource[validate_standard(standard)].has_key?(code.to_sym)
|
28
|
+
end
|
29
|
+
|
30
|
+
def convert(code, from_and_to = {})
|
31
|
+
from, to = extract_from_and_to_options(from_and_to)
|
32
|
+
resource[from].fetch(code.to_sym, {})[to]
|
33
|
+
end
|
34
|
+
|
35
|
+
def from_language(language, standard)
|
36
|
+
convert(language, :from => NAME_STANDARD, :to => standard)
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_language(code, standard)
|
40
|
+
convert(code, :from => standard, :to => NAME_STANDARD).to_s
|
41
|
+
end
|
42
|
+
|
43
|
+
def standards_for(code, standard)
|
44
|
+
resource[validate_standard(standard)].fetch(code.to_sym, {}).keys - [NAME_STANDARD] # exclude fake NAME_STANDARD standard
|
45
|
+
end
|
46
|
+
|
47
|
+
def standards_for_language(language)
|
48
|
+
standards_for(language, NAME_STANDARD)
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def resource
|
54
|
+
@resource ||= File.open(LANGUAGE_CODES_DUMP_PATH) { |file| Marshal.load(file.read) }
|
55
|
+
end
|
56
|
+
|
57
|
+
def extract_from_and_to_options(from_and_to)
|
58
|
+
TwitterCldr::Utils.deep_symbolize_keys(from_and_to).values_at(:from, :to).map do |standard|
|
59
|
+
raise ArgumentError, 'options :from and :to are required' if standard.nil?
|
60
|
+
validate_standard(standard)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def validate_standard(standard)
|
65
|
+
raise ArgumentError, "standard can't be nil" if standard.nil?
|
66
|
+
raise ArgumentError, "#{standard.inspect} is not a valid standard name" unless valid_standard?(standard)
|
67
|
+
|
68
|
+
standard.to_sym
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -14,7 +14,7 @@ module TwitterCldr
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def all_for(code)
|
17
|
-
get_resource(
|
17
|
+
get_resource(code)[:languages]
|
18
18
|
rescue
|
19
19
|
{}
|
20
20
|
end
|
@@ -24,21 +24,14 @@ module TwitterCldr
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def from_code_for_locale(code, locale = TwitterCldr.get_locale)
|
27
|
-
get_resource(
|
27
|
+
get_resource(locale)[:languages][TwitterCldr.convert_locale(code)]
|
28
28
|
rescue
|
29
29
|
nil
|
30
30
|
end
|
31
31
|
|
32
32
|
def translate_language(language, source_locale = :en, dest_locale = TwitterCldr.get_locale)
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
if lang_code
|
37
|
-
dest_locale = TwitterCldr.convert_locale(dest_locale.to_sym)
|
38
|
-
get_resource(dest_locale)[:languages][lang_code.to_sym]
|
39
|
-
else
|
40
|
-
nil
|
41
|
-
end
|
33
|
+
lang_code = get_resource(source_locale)[:languages].detect { |_, val| val.downcase == language.downcase }.first
|
34
|
+
get_resource(dest_locale)[:languages][lang_code] if lang_code
|
42
35
|
rescue
|
43
36
|
nil
|
44
37
|
end
|
data/lib/twitter_cldr/shared.rb
CHANGED
@@ -5,12 +5,13 @@
|
|
5
5
|
|
6
6
|
module TwitterCldr
|
7
7
|
module Shared
|
8
|
-
autoload :Calendar,
|
9
|
-
autoload :CodePoint,
|
10
|
-
autoload :Currencies,
|
11
|
-
autoload :
|
12
|
-
autoload :
|
13
|
-
autoload :
|
14
|
-
autoload :
|
8
|
+
autoload :Calendar, 'twitter_cldr/shared/calendar'
|
9
|
+
autoload :CodePoint, 'twitter_cldr/shared/code_point'
|
10
|
+
autoload :Currencies, 'twitter_cldr/shared/currencies'
|
11
|
+
autoload :LanguageCodes, 'twitter_cldr/shared/language_codes'
|
12
|
+
autoload :Languages, 'twitter_cldr/shared/languages'
|
13
|
+
autoload :Numbers, 'twitter_cldr/shared/numbers'
|
14
|
+
autoload :PhoneCodes, 'twitter_cldr/shared/phone_codes'
|
15
|
+
autoload :PostalCodes, 'twitter_cldr/shared/postal_codes'
|
15
16
|
end
|
16
17
|
end
|
@@ -90,14 +90,8 @@ module TwitterCldr
|
|
90
90
|
@placeholders = {}
|
91
91
|
end
|
92
92
|
|
93
|
-
def traverse(path,
|
94
|
-
|
95
|
-
if current.is_a?(Hash) && current.has_key?(segment)
|
96
|
-
current[segment]
|
97
|
-
else
|
98
|
-
return
|
99
|
-
end
|
100
|
-
end
|
93
|
+
def traverse(path, hash = @resource)
|
94
|
+
TwitterCldr::Utils.traverse_hash(hash, path)
|
101
95
|
end
|
102
96
|
|
103
97
|
# expands all path symbols
|
data/lib/twitter_cldr/utils.rb
CHANGED
data/lib/twitter_cldr/version.rb
CHANGED
data/lib/twitter_cldr.rb
CHANGED
@@ -3,9 +3,6 @@
|
|
3
3
|
# Copyright 2012 Twitter, Inc
|
4
4
|
# http://www.apache.org/licenses/LICENSE-2.0
|
5
5
|
|
6
|
-
$:.push(File.dirname(__FILE__))
|
7
|
-
$:.push(File.dirname(File.dirname(__FILE__)))
|
8
|
-
|
9
6
|
$KCODE = 'UTF-8' unless RUBY_VERSION >= '1.9.0'
|
10
7
|
|
11
8
|
require 'yaml'
|
@@ -22,6 +19,7 @@ module TwitterCldr
|
|
22
19
|
|
23
20
|
autoload :Formatters, 'twitter_cldr/formatters'
|
24
21
|
autoload :Collation, 'twitter_cldr/collation'
|
22
|
+
autoload :Localized, 'twitter_cldr/localized'
|
25
23
|
autoload :Normalization, 'twitter_cldr/normalization'
|
26
24
|
autoload :Resources, 'twitter_cldr/resources'
|
27
25
|
autoload :Shared, 'twitter_cldr/shared'
|
@@ -38,6 +36,8 @@ module TwitterCldr
|
|
38
36
|
|
39
37
|
RESOURCES_DIR = File.join(File.dirname(File.dirname(File.expand_path(__FILE__))), 'resources')
|
40
38
|
|
39
|
+
JS_LIB_DIR = File.join(File.dirname(File.dirname(__FILE__)), 'js', 'lib')
|
40
|
+
|
41
41
|
# maps twitter locales to cldr locales
|
42
42
|
TWITTER_LOCALE_MAP = {
|
43
43
|
:msa => :ms,
|
@@ -88,7 +88,8 @@ module TwitterCldr
|
|
88
88
|
end
|
89
89
|
|
90
90
|
def require_js
|
91
|
-
|
91
|
+
$:.push(JS_LIB_DIR) unless $:.include?(JS_LIB_DIR)
|
92
|
+
require 'twitter_cldr_js'
|
92
93
|
end
|
93
94
|
end
|
94
95
|
|
@@ -15,10 +15,10 @@
|
|
15
15
|
:other: ! '{0}godz.'
|
16
16
|
:minute:
|
17
17
|
:abbreviated:
|
18
|
-
:one: ! '{0}min'
|
19
|
-
:few: ! '{0}min'
|
20
|
-
:many: ! '{0}min'
|
21
|
-
:other: ! '{0}min'
|
18
|
+
:one: ! '{0} min'
|
19
|
+
:few: ! '{0} min'
|
20
|
+
:many: ! '{0} min'
|
21
|
+
:other: ! '{0} min'
|
22
22
|
:second:
|
23
23
|
:abbreviated:
|
24
24
|
:one: ! '{0}s'
|
Binary file
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2012 Twitter, Inc
|
4
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
5
|
+
|
6
|
+
require 'spec_helper'
|
7
|
+
|
8
|
+
describe 'Core classes localization' do
|
9
|
+
|
10
|
+
[Array, Bignum, Date, DateTime, Fixnum, Float, String, Symbol, Time].each do |klass|
|
11
|
+
describe klass do
|
12
|
+
it 'has public instance method #localize' do
|
13
|
+
# convert methods names to symbols (they're strings in 1.8)
|
14
|
+
klass.public_instance_methods.map(&:to_sym).should include(:localize)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -5,42 +5,13 @@
|
|
5
5
|
|
6
6
|
require 'spec_helper'
|
7
7
|
|
8
|
-
include TwitterCldr
|
8
|
+
include TwitterCldr::Localized
|
9
9
|
|
10
|
-
describe
|
11
|
-
describe "#localize" do
|
12
|
-
before(:all) do
|
13
|
-
@date = Date.today
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should localize with the given locale, English by default" do
|
17
|
-
loc_date = @date.localize
|
18
|
-
loc_date.should be_a(LocalizedDate)
|
19
|
-
loc_date.locale.should == :en
|
20
|
-
loc_date.calendar_type.should == :gregorian
|
21
|
-
loc_date.base_obj.should == @date
|
22
|
-
|
23
|
-
loc_date = @date.localize(:it)
|
24
|
-
loc_date.should be_a(LocalizedDate)
|
25
|
-
loc_date.locale.should == :it
|
26
|
-
end
|
27
|
-
|
28
|
-
it "should localize with the given calendar" do
|
29
|
-
loc_date = @date.localize(:th, :calendar_type => :buddhist)
|
30
|
-
loc_date.should be_a(LocalizedDate)
|
31
|
-
loc_date.locale.should == :th
|
32
|
-
loc_date.calendar_type.should == :buddhist
|
33
|
-
loc_date.base_obj.should == @date
|
34
|
-
end
|
10
|
+
describe LocalizedDate do
|
35
11
|
|
36
|
-
|
37
|
-
loc_date = @date.localize(:th, :calendar_type => :buddhist)
|
38
|
-
loc_date.to_datetime(Time.now).calendar_type.should == :buddhist
|
39
|
-
end
|
12
|
+
let(:date) { Date.today }
|
40
13
|
|
41
|
-
|
42
|
-
|
43
|
-
describe "ago" do
|
14
|
+
describe "#ago" do
|
44
15
|
let(:date) { Date.new(2010,7,6) }
|
45
16
|
let(:base_time) { Time.gm(2010,8,6,12,12,30) }
|
46
17
|
|
@@ -91,7 +62,7 @@ describe Date do
|
|
91
62
|
end
|
92
63
|
end
|
93
64
|
|
94
|
-
describe "until" do
|
65
|
+
describe "#until" do
|
95
66
|
let(:base_time) { Time.gm(2010,8,6,12,12,30) }
|
96
67
|
|
97
68
|
it "should until-ify with a number of different units" do
|
@@ -114,10 +85,10 @@ describe Date do
|
|
114
85
|
|
115
86
|
describe "stringify" do
|
116
87
|
it "should stringify with a default calendar" do
|
117
|
-
#
|
118
|
-
|
119
|
-
|
120
|
-
|
88
|
+
#date.localize(:th, :calendar_type => :buddhist).to_full_s # It doesn't support era
|
89
|
+
date.localize(:th).to_long_s
|
90
|
+
date.localize(:th).to_medium_s
|
91
|
+
date.localize(:th).to_short_s
|
121
92
|
end
|
122
93
|
|
123
94
|
it "should stringify with buddhist calendar" do
|
@@ -126,15 +97,13 @@ describe Date do
|
|
126
97
|
be_nil, 'buddhist calendar is missing for :th locale (check resources/locales/th/calendars.yml)'
|
127
98
|
)
|
128
99
|
|
129
|
-
#
|
130
|
-
|
131
|
-
|
132
|
-
|
100
|
+
#date.localize(:th, :calendar_type => :buddhist).to_full_s # It doesn't support era
|
101
|
+
date.localize(:th, :calendar_type => :buddhist).to_long_s
|
102
|
+
date.localize(:th, :calendar_type => :buddhist).to_medium_s
|
103
|
+
date.localize(:th, :calendar_type => :buddhist).to_short_s
|
133
104
|
end
|
134
105
|
end
|
135
|
-
end
|
136
106
|
|
137
|
-
describe LocalizedDate do
|
138
107
|
describe "#to_datetime" do
|
139
108
|
it "should combine a date and a time object into a datetime" do
|
140
109
|
date = Date.new(1987, 9, 20)
|
@@ -152,4 +121,15 @@ describe LocalizedDate do
|
|
152
121
|
datetime.base_obj.strftime("%Y-%m-%d %H:%M:%S").should == "1987-09-20 22:05:00"
|
153
122
|
end
|
154
123
|
end
|
124
|
+
|
125
|
+
describe 'formatters' do
|
126
|
+
it "don't raise errors for any locale" do
|
127
|
+
TwitterCldr.supported_locales.each do |locale|
|
128
|
+
TwitterCldr::Tokenizers::DateTimeTokenizer::VALID_TYPES.each do |type|
|
129
|
+
lambda { Date.today.localize(locale).send(:"to_#{type}_s") }.should_not raise_error
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
155
135
|
end
|