twitter_cldr 1.7.0 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|