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
    
        data/History.txt
    CHANGED
    
    | @@ -1,3 +1,9 @@ | |
| 1 | 
            +
            === 1.8.0
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            * Added support for language code conversion.
         | 
| 4 | 
            +
            * `#localize` methods (eg. for Hash, String, etc) now dynamically generated, part of the `TwitterCldr::Localized` namespace.
         | 
| 5 | 
            +
            * New convenience method `TwitterCldr::Normalization#normalize`.
         | 
| 6 | 
            +
             | 
| 1 7 | 
             
            === 1.7.0
         | 
| 2 8 |  | 
| 3 9 | 
             
            * Wrote rake tasks to update CLDR and ICU resources.
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            ## twitter-cldr-rb [](http://travis-ci.org/twitter/twitter-cldr-rb)
         | 
| 1 | 
            +
            ## twitter-cldr-rb [](http://travis-ci.org/twitter/twitter-cldr-rb) [](https://codeclimate.com/github/twitter/twitter-cldr-rb)
         | 
| 2 2 |  | 
| 3 3 | 
             
            TwitterCldr uses Unicode's Common Locale Data Repository (CLDR) to format certain types of text into their
         | 
| 4 4 | 
             
            localized equivalents.  Currently supported types of text include dates, times, currencies, decimals, percentages, and symbols.
         | 
| @@ -57,7 +57,7 @@ TwitterCldr patches core Ruby objects like `Fixnum` and `Date` to make localizat | |
| 57 57 | 
             
            Behind the scenes, these convenience methods are creating instances of `LocalizedNumber`.  You can do the same thing if you're feeling adventurous:
         | 
| 58 58 |  | 
| 59 59 | 
             
            ```ruby
         | 
| 60 | 
            -
            num = TwitterCldr::LocalizedNumber.new(1337, :es)
         | 
| 60 | 
            +
            num = TwitterCldr::Localized::LocalizedNumber.new(1337, :es)
         | 
| 61 61 | 
             
            num.to_currency.to_s  # ...etc
         | 
| 62 62 | 
             
            ```
         | 
| 63 63 |  | 
| @@ -105,7 +105,7 @@ The CLDR data set only includes 4 specific date formats, full, long, medium, and | |
| 105 105 | 
             
            Behind the scenes, these convenience methods are creating instances of `LocalizedDate`, `LocalizedTime`, and `LocalizedDateTime`.  You can do the same thing if you're feeling adventurous:
         | 
| 106 106 |  | 
| 107 107 | 
             
            ```ruby
         | 
| 108 | 
            -
            dt = TwitterCldr::LocalizedDateTime.new(DateTime.now, :es)
         | 
| 108 | 
            +
            dt = TwitterCldr::Localized::LocalizedDateTime.new(DateTime.now, :es)
         | 
| 109 109 | 
             
            dt.to_short_s  # ...etc
         | 
| 110 110 | 
             
            ```
         | 
| 111 111 |  | 
| @@ -145,11 +145,11 @@ Specify a different reference point for the time span calculation: | |
| 145 145 | 
             
            Behind the scenes, these convenience methods are creating instances of `LocalizedTimespan`, whose constructor accepts a number of seconds as the first argument.  You can do the same thing if you're feeling adventurous:
         | 
| 146 146 |  | 
| 147 147 | 
             
            ```ruby
         | 
| 148 | 
            -
            ts = TwitterCldr::LocalizedTimespan.new(86400, :locale => :de)
         | 
| 148 | 
            +
            ts = TwitterCldr::Localized::LocalizedTimespan.new(86400, :locale => :de)
         | 
| 149 149 | 
             
            ts.to_s                         # In 1 Tag
         | 
| 150 150 | 
             
            ts.to_s(:unit => :hour)         # In 24 Stunden
         | 
| 151 151 |  | 
| 152 | 
            -
            ts = TwitterCldr::LocalizedTimespan.new(-86400, :locale => :de)
         | 
| 152 | 
            +
            ts = TwitterCldr::Localized::LocalizedTimespan.new(-86400, :locale => :de)
         | 
| 153 153 | 
             
            ts.to_s                         # Vor 1 Tag
         | 
| 154 154 | 
             
            ts.to_s(:unit => :hour)         # Vor 24 Stunden
         | 
| 155 155 | 
             
            ```
         | 
| @@ -326,6 +326,62 @@ Get a list of supported territories by using the `#territories` method: | |
| 326 326 | 
             
            TwitterCldr::Shared::PhoneCodes.territories  # [:zw, :an, :tr, :by, :mh, ...]
         | 
| 327 327 | 
             
            ```
         | 
| 328 328 |  | 
| 329 | 
            +
            ### Language Codes
         | 
| 330 | 
            +
             | 
| 331 | 
            +
            Over the years, different standards for language codes have accumulated.  Probably the two most popular are ISO-639 and BCP-47 and their children.  TwitterCLDR provides a way to convert between these codes systematically.
         | 
| 332 | 
            +
             | 
| 333 | 
            +
            ```ruby
         | 
| 334 | 
            +
            TwitterCldr::Shared::LanguageCodes.convert(:es, :from => :bcp_47, :to => :iso_639_2)  # :spa
         | 
| 335 | 
            +
            ```
         | 
| 336 | 
            +
             | 
| 337 | 
            +
            Use the `standards_for` method to get the standards that are available for conversion from a given code.  In the example below, note that the first argument, `:es`, is the correct BCP-47 language code for Spanish, which is the second argument.  The return value comprises all the available conversions:
         | 
| 338 | 
            +
             | 
| 339 | 
            +
            ```ruby
         | 
| 340 | 
            +
            # [:bcp_47, :iso_639_1, :iso_639_2, :iso_639_3]
         | 
| 341 | 
            +
            TwitterCldr::Shared::LanguageCodes.standards_for(:es, :bcp_47)
         | 
| 342 | 
            +
            ```
         | 
| 343 | 
            +
             | 
| 344 | 
            +
            Get a list of supported standards for a full English language name:
         | 
| 345 | 
            +
             | 
| 346 | 
            +
            ```ruby
         | 
| 347 | 
            +
            # [:bcp_47, :iso_639_1, :iso_639_2, :iso_639_3]
         | 
| 348 | 
            +
            TwitterCldr::Shared::LanguageCodes.standards_for_language(:Spanish)
         | 
| 349 | 
            +
            ```
         | 
| 350 | 
            +
             | 
| 351 | 
            +
            Get a list of supported languages:
         | 
| 352 | 
            +
             | 
| 353 | 
            +
            ```ruby
         | 
| 354 | 
            +
            TwitterCldr::Shared::LanguageCodes.languages  # [:Spanish, :German, :Norwegian, :Arabic ... ]
         | 
| 355 | 
            +
            ```
         | 
| 356 | 
            +
             | 
| 357 | 
            +
            Determine valid standards:
         | 
| 358 | 
            +
             | 
| 359 | 
            +
            ```ruby
         | 
| 360 | 
            +
            TwitterCldr::Shared::LanguageCodes.valid_standard?(:iso_639_1)  # true
         | 
| 361 | 
            +
            TwitterCldr::Shared::LanguageCodes.valid_standard?(:blarg)      # false
         | 
| 362 | 
            +
            ```
         | 
| 363 | 
            +
             | 
| 364 | 
            +
            Determine valid codes:
         | 
| 365 | 
            +
             | 
| 366 | 
            +
            ```ruby
         | 
| 367 | 
            +
            TwitterCldr::Shared::LanguageCodes.valid_code?(:es, :bcp_47)     # true
         | 
| 368 | 
            +
            TwitterCldr::Shared::LanguageCodes.valid_code?(:es, :iso_639_2)  # false
         | 
| 369 | 
            +
            ```
         | 
| 370 | 
            +
             | 
| 371 | 
            +
            Convert the full English name of a language into a language code:
         | 
| 372 | 
            +
             | 
| 373 | 
            +
            ```ruby
         | 
| 374 | 
            +
            TwitterCldr::Shared::LanguageCodes.from_language(:Spanish, :iso_639_2)  # :spa
         | 
| 375 | 
            +
            ```
         | 
| 376 | 
            +
             | 
| 377 | 
            +
            Convert a language code into it's full English name:
         | 
| 378 | 
            +
             | 
| 379 | 
            +
            ```ruby
         | 
| 380 | 
            +
            TwitterCldr::Shared::LanguageCodes.to_language(:spa, :iso_639_2)  # "Spanish"
         | 
| 381 | 
            +
            ```
         | 
| 382 | 
            +
             | 
| 383 | 
            +
            **NOTE**: All of the functions in `TwitterCldr::Shared::LanguageCodes` accept both symbol and string parameters.
         | 
| 384 | 
            +
             | 
| 329 385 | 
             
            ### Unicode Data
         | 
| 330 386 |  | 
| 331 387 | 
             
            TwitterCLDR provides ways to retrieve individual code points as well as normalize and decompose Unicode text.
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -40,79 +40,83 @@ if RUBY_VERSION < '1.9.0' | |
| 40 40 | 
             
              end
         | 
| 41 41 | 
             
            end
         | 
| 42 42 |  | 
| 43 | 
            -
            namespace : | 
| 44 | 
            -
               | 
| 45 | 
            -
             | 
| 46 | 
            -
                 | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
                  ).import
         | 
| 52 | 
            -
                end
         | 
| 43 | 
            +
            namespace :update do
         | 
| 44 | 
            +
              desc 'Import locales resources'
         | 
| 45 | 
            +
              task :locales_resources, :cldr_path do |_, args|
         | 
| 46 | 
            +
                TwitterCldr::Resources::LocalesResourcesImporter.new(
         | 
| 47 | 
            +
                    args[:cldr_path] || './vendor/cldr',
         | 
| 48 | 
            +
                    './resources/locales'
         | 
| 49 | 
            +
                ).import
         | 
| 50 | 
            +
              end
         | 
| 53 51 |  | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 52 | 
            +
              desc 'Import custom locales resources'
         | 
| 53 | 
            +
              task :custom_locales_resources do
         | 
| 54 | 
            +
                TwitterCldr::Resources::CustomLocalesResourcesImporter.new('./resources/custom/locales').import
         | 
| 55 | 
            +
              end
         | 
| 58 56 |  | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 57 | 
            +
              desc 'Import tailoring resources from CLDR data (should be executed using JRuby 1.7 in 1.9 mode)'
         | 
| 58 | 
            +
              task :tailoring_data, :cldr_path, :icu4j_jar_path do |_, args|
         | 
| 59 | 
            +
                TwitterCldr::Resources::TailoringImporter.new(
         | 
| 60 | 
            +
                    args[:cldr_path] || './vendor/cldr',
         | 
| 61 | 
            +
                    './resources/collation/tailoring',
         | 
| 62 | 
            +
                    args[:icu4j_jar_path] ||'./vendor/icu4j-49_1.jar'
         | 
| 63 | 
            +
                ).import(TwitterCldr.supported_locales)
         | 
| 64 | 
            +
              end
         | 
| 67 65 |  | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 66 | 
            +
              desc 'Import Unicode data resources'
         | 
| 67 | 
            +
              task :unicode_data, :unicode_data_path do |_, args|
         | 
| 68 | 
            +
                TwitterCldr::Resources::UnicodeDataImporter.new(
         | 
| 69 | 
            +
                    args[:unicode_data_path] || './vendor/unicode-data',
         | 
| 70 | 
            +
                    './resources/unicode_data'
         | 
| 71 | 
            +
                ).import
         | 
| 72 | 
            +
              end
         | 
| 75 73 |  | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 74 | 
            +
              desc 'Import composition exclusions resource'
         | 
| 75 | 
            +
              task :composition_exclusions, :derived_normalization_props_path do |_, args|
         | 
| 76 | 
            +
                TwitterCldr::Resources::CompositionExclusionsImporter.new(
         | 
| 77 | 
            +
                    args[:derived_normalization_props_path] || './vendor/unicode-data/DerivedNormalizationProps.txt',
         | 
| 78 | 
            +
                    './resources/unicode_data'
         | 
| 79 | 
            +
                ).import
         | 
| 80 | 
            +
              end
         | 
| 83 81 |  | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 82 | 
            +
              desc 'Import postal codes resource'
         | 
| 83 | 
            +
              task :postal_codes, :cldr_path do |_, args|
         | 
| 84 | 
            +
                TwitterCldr::Resources::PostalCodesImporter.new(
         | 
| 85 | 
            +
                    args[:cldr_path] || './vendor/cldr',
         | 
| 86 | 
            +
                    './resources/shared'
         | 
| 87 | 
            +
                ).import
         | 
| 88 | 
            +
              end
         | 
| 91 89 |  | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 90 | 
            +
              desc 'Import phone codes resource'
         | 
| 91 | 
            +
              task :phone_codes, :cldr_path do |_, args|
         | 
| 92 | 
            +
                TwitterCldr::Resources::PhoneCodesImporter.new(
         | 
| 93 | 
            +
                    args[:cldr_path] || './vendor/cldr',
         | 
| 94 | 
            +
                    './resources/shared'
         | 
| 95 | 
            +
                ).import
         | 
| 96 | 
            +
              end
         | 
| 99 97 |  | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 98 | 
            +
              desc 'Import language codes'
         | 
| 99 | 
            +
              task :language_codes, :language_codes_data do |_, args|
         | 
| 100 | 
            +
                TwitterCldr::Resources::LanguageCodesImporter.new(
         | 
| 101 | 
            +
                    args[:language_codes_data] || './vendor/language-codes',
         | 
| 102 | 
            +
                    './resources/shared'
         | 
| 103 | 
            +
                ).import
         | 
| 104 | 
            +
              end
         | 
| 104 105 |  | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 106 | 
            +
              desc 'Update default and tailoring tries dumps'
         | 
| 107 | 
            +
              task :collation_tries do
         | 
| 108 | 
            +
                TwitterCldr::Resources::CollationTriesDumper.update_dumps
         | 
| 109 | 
            +
              end
         | 
| 109 110 |  | 
| 111 | 
            +
              desc 'Update canonical compositions resource'
         | 
| 112 | 
            +
              task :canonical_compositions do
         | 
| 113 | 
            +
                TwitterCldr::Resources::CanonicalCompositionsUpdater.new('./resources/unicode_data').update
         | 
| 110 114 | 
             
              end
         | 
| 111 115 | 
             
            end
         | 
| 112 116 |  | 
| 113 117 | 
             
            namespace :js do
         | 
| 118 | 
            +
              desc 'Build JS files'
         | 
| 114 119 | 
             
              task :build do
         | 
| 115 | 
            -
                require File.expand_path(File.join(File.dirname(__FILE__), %w[lib twitter_cldr]))
         | 
| 116 120 | 
             
                TwitterCldr.require_js
         | 
| 117 121 | 
             
                FileUtils.mkdir_p(TwitterCldr::Js.build_dir)
         | 
| 118 122 | 
             
                TwitterCldr::Js.output_dir = File.expand_path(ENV["OUTPUT_DIR"])
         | 
| @@ -120,8 +124,8 @@ namespace :js do | |
| 120 124 | 
             
                TwitterCldr::Js.install
         | 
| 121 125 | 
             
              end
         | 
| 122 126 |  | 
| 127 | 
            +
              desc 'Run JS specs'
         | 
| 123 128 | 
             
              task :test do
         | 
| 124 | 
            -
                require File.expand_path(File.join(File.dirname(__FILE__), %w[lib twitter_cldr]))
         | 
| 125 129 | 
             
                TwitterCldr.require_js
         | 
| 126 130 | 
             
                FileUtils.mkdir_p(TwitterCldr::Js.build_dir)
         | 
| 127 131 | 
             
                TwitterCldr::Js.make(:locales => [:en])
         | 
    
        data/js/lib/twitter_cldr_js.rb
    CHANGED
    
    
| @@ -1,12 +1,12 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 1 | 
            +
            # encoding: UTF-8
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # Copyright 2012 Twitter, Inc
         | 
| 4 | 
            +
            # http://www.apache.org/licenses/LICENSE-2.0
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            [Bignum, Fixnum, Float].each do |klass|
         | 
| 7 | 
            +
              TwitterCldr::Localized::LocalizedNumber.localize(klass)
         | 
| 8 | 
            +
            end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            [Array, Date, DateTime, String, Symbol, Time].each do |klass|
         | 
| 11 | 
            +
              TwitterCldr::Localized::const_get("Localized#{klass}").localize(klass)
         | 
| 12 | 
            +
            end
         | 
| @@ -6,16 +6,17 @@ | |
| 6 6 | 
             
            module TwitterCldr
         | 
| 7 7 | 
             
              module Formatters
         | 
| 8 8 | 
             
                class TimespanFormatter < Base
         | 
| 9 | 
            +
             | 
| 9 10 | 
             
                  DEFAULT_TYPE = :default
         | 
| 10 11 |  | 
| 11 | 
            -
                  TIME_IN_SECONDS = { | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 12 | 
            +
                  TIME_IN_SECONDS = {
         | 
| 13 | 
            +
                      :second => 1,
         | 
| 14 | 
            +
                      :minute => 60,
         | 
| 15 | 
            +
                      :hour   => 3600,
         | 
| 16 | 
            +
                      :day    => 86400,
         | 
| 17 | 
            +
                      :week   => 604800,
         | 
| 18 | 
            +
                      :month  => 2629743.83,
         | 
| 19 | 
            +
                      :year   => 31556926
         | 
| 19 20 | 
             
                  }
         | 
| 20 21 |  | 
| 21 22 | 
             
                  def initialize(options = {})
         | 
| @@ -24,13 +25,14 @@ module TwitterCldr | |
| 24 25 | 
             
                  end
         | 
| 25 26 |  | 
| 26 27 | 
             
                  def format(seconds, options = {})
         | 
| 28 | 
            +
                    options[:type]      ||= DEFAULT_TYPE
         | 
| 27 29 | 
             
                    options[:direction] ||= @direction || (seconds < 0 ? :ago : :until)
         | 
| 28 | 
            -
                    options[:unit] | 
| 30 | 
            +
                    options[:unit]      ||= calculate_unit(seconds.abs)
         | 
| 31 | 
            +
             | 
| 29 32 | 
             
                    options[:number] = calculate_time(seconds.abs, options[:unit])
         | 
| 30 | 
            -
                    options[:type] ||= DEFAULT_TYPE
         | 
| 31 33 |  | 
| 32 34 | 
             
                    tokens = @tokenizer.tokens(options)
         | 
| 33 | 
            -
                    strings = tokens.map { |token| token[:value]}
         | 
| 35 | 
            +
                    strings = tokens.map { |token| token[:value] }
         | 
| 34 36 | 
             
                    strings.join.gsub(/\{[0-9]\}/, options[:number].to_s)
         | 
| 35 37 | 
             
                  end
         | 
| 36 38 |  | 
| @@ -0,0 +1,33 @@ | |
| 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 Localized
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                class LocalizedArray < LocalizedObject
         | 
| 10 | 
            +
                  def code_points_to_string
         | 
| 11 | 
            +
                    TwitterCldr::Utils::CodePoints.to_string(base_obj)
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  def sort
         | 
| 15 | 
            +
                    TwitterCldr::Collation::Collator.new(locale).sort(base_obj).localize
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  def sort!
         | 
| 19 | 
            +
                    TwitterCldr::Collation::Collator.new(locale).sort!(base_obj)
         | 
| 20 | 
            +
                    self
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  def formatter_const
         | 
| 24 | 
            +
                    nil
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  def to_a
         | 
| 28 | 
            +
                    @base_obj.dup
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
            end
         | 
| @@ -0,0 +1,23 @@ | |
| 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 Localized
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                class LocalizedDate < LocalizedDateTime
         | 
| 10 | 
            +
                  def to_datetime(time)
         | 
| 11 | 
            +
                    time_obj = time.is_a?(LocalizedTime) ? time.base_obj : time
         | 
| 12 | 
            +
                    LocalizedDateTime.new(DateTime.parse("#{@base_obj.strftime("%Y-%m-%d")}T#{time_obj.strftime("%H:%M:%S%z")}"), @locale, :calendar_type => @calendar_type)
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  protected
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  def formatter_const
         | 
| 18 | 
            +
                    TwitterCldr::Formatters::DateFormatter
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
            end
         | 
| @@ -0,0 +1,63 @@ | |
| 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 Localized
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                class LocalizedDateTime < LocalizedObject
         | 
| 10 | 
            +
                  attr_reader :calendar_type
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  def initialize(obj, locale, options = {})
         | 
| 13 | 
            +
                    super
         | 
| 14 | 
            +
                    @calendar_type = options[:calendar_type] || TwitterCldr::DEFAULT_CALENDAR_TYPE
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  TwitterCldr::Tokenizers::DateTimeTokenizer::VALID_TYPES.each do |format_type|
         | 
| 18 | 
            +
                    define_method "to_#{format_type}_s" do
         | 
| 19 | 
            +
                      @formatter.format(@base_obj, :type => format_type.to_sym)
         | 
| 20 | 
            +
                    end
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  def to_timespan(options = {})
         | 
| 24 | 
            +
                    base_time = options[:base_time] || Time.now
         | 
| 25 | 
            +
                    seconds = (self.to_time.base_obj.to_i - base_time.to_i).abs
         | 
| 26 | 
            +
                    TwitterCldr::Localized::LocalizedTimespan.new(seconds, options.merge(:locale => @locale, :direction => :none))
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  def ago(options = {})
         | 
| 30 | 
            +
                    base_time = options[:base_time] || Time.now
         | 
| 31 | 
            +
                    seconds = self.to_time.base_obj.to_i - base_time.to_i
         | 
| 32 | 
            +
                    raise ArgumentError.new('Start date is after end date. Consider using "until" function.') if seconds > 0
         | 
| 33 | 
            +
                    TwitterCldr::Localized::LocalizedTimespan.new(seconds, options.merge(:locale => @locale))
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  def until(options = {})
         | 
| 37 | 
            +
                    base_time = options[:base_time] || Time.now
         | 
| 38 | 
            +
                    seconds = self.to_time.base_obj.to_i - base_time.to_i
         | 
| 39 | 
            +
                    raise ArgumentError.new('End date is before start date. Consider using "ago" function.') if seconds < 0
         | 
| 40 | 
            +
                    TwitterCldr::Localized::LocalizedTimespan.new(seconds, options.merge(:locale => @locale))
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  def to_s
         | 
| 44 | 
            +
                    to_default_s
         | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  def to_date
         | 
| 48 | 
            +
                    LocalizedDate.new(Date.parse(@base_obj.strftime("%Y-%m-%dT%H:%M:%S%z")), @locale, :calendar_type => @calendar_type)
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  def to_time
         | 
| 52 | 
            +
                    LocalizedTime.new(Time.parse(@base_obj.strftime("%Y-%m-%dT%H:%M:%S%z")), @locale, :calendar_type => @calendar_type)
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                  protected
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  def formatter_const
         | 
| 58 | 
            +
                    TwitterCldr::Formatters::DateTimeFormatter
         | 
| 59 | 
            +
                  end
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
            end
         |