activesupport 2.3.18 → 3.0.0.beta
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activesupport might be problematic. Click here for more details.
- data/CHANGELOG +30 -53
- data/lib/active_support.rb +43 -31
- data/lib/active_support/all.rb +3 -7
- data/lib/active_support/backtrace_cleaner.rb +24 -8
- data/lib/active_support/base64.rb +9 -0
- data/lib/active_support/benchmarkable.rb +60 -0
- data/lib/active_support/buffered_logger.rb +12 -9
- data/lib/active_support/cache.rb +75 -55
- data/lib/active_support/cache/compressed_mem_cache_store.rb +2 -0
- data/lib/active_support/cache/file_store.rb +35 -17
- data/lib/active_support/cache/mem_cache_store.rb +29 -20
- data/lib/active_support/cache/memory_store.rb +18 -17
- data/lib/active_support/cache/strategy/local_cache.rb +9 -1
- data/lib/active_support/callbacks.rb +490 -169
- data/lib/active_support/concern.rb +29 -0
- data/lib/active_support/configurable.rb +35 -0
- data/lib/active_support/core_ext.rb +2 -7
- data/lib/active_support/core_ext/array.rb +2 -10
- data/lib/active_support/core_ext/array/access.rb +39 -46
- data/lib/active_support/core_ext/array/conversions.rb +146 -182
- data/lib/active_support/core_ext/array/extract_options.rb +12 -18
- data/lib/active_support/core_ext/array/grouping.rb +87 -93
- data/lib/active_support/core_ext/array/random_access.rb +4 -40
- data/lib/active_support/core_ext/array/uniq_by.rb +17 -0
- data/lib/active_support/core_ext/array/wrap.rb +22 -0
- data/lib/active_support/core_ext/big_decimal.rb +1 -0
- data/lib/active_support/core_ext/big_decimal/conversions.rb +27 -0
- data/lib/active_support/core_ext/cgi.rb +0 -4
- data/lib/active_support/core_ext/cgi/escape_skipping_slashes.rb +16 -20
- data/lib/active_support/core_ext/class.rb +0 -2
- data/lib/active_support/core_ext/class/attribute.rb +8 -39
- data/lib/active_support/core_ext/class/attribute_accessors.rb +31 -35
- data/lib/active_support/core_ext/class/delegating_attributes.rb +34 -40
- data/lib/active_support/core_ext/class/inheritable_attributes.rb +100 -16
- data/lib/active_support/core_ext/date/acts_like.rb +8 -0
- data/lib/active_support/core_ext/date/calculations.rb +218 -238
- data/lib/active_support/core_ext/date/conversions.rb +87 -96
- data/lib/active_support/core_ext/date/freeze.rb +31 -0
- data/lib/active_support/core_ext/date_time/acts_like.rb +13 -0
- data/lib/active_support/core_ext/date_time/calculations.rb +97 -110
- data/lib/active_support/core_ext/date_time/conversions.rb +83 -95
- data/lib/active_support/core_ext/date_time/zones.rb +17 -0
- data/lib/active_support/core_ext/enumerable.rb +14 -15
- data/lib/active_support/core_ext/exception.rb +1 -43
- data/lib/active_support/core_ext/file.rb +0 -4
- data/lib/active_support/core_ext/file/atomic.rb +34 -41
- data/lib/active_support/core_ext/float.rb +0 -6
- data/lib/active_support/core_ext/float/rounding.rb +15 -20
- data/lib/active_support/core_ext/hash.rb +8 -14
- data/lib/active_support/core_ext/hash/conversions.rb +236 -236
- data/lib/active_support/core_ext/hash/deep_merge.rb +12 -19
- data/lib/active_support/core_ext/hash/diff.rb +11 -17
- data/lib/active_support/core_ext/hash/except.rb +21 -22
- data/lib/active_support/core_ext/hash/indifferent_access.rb +8 -137
- data/lib/active_support/core_ext/hash/keys.rb +38 -45
- data/lib/active_support/core_ext/hash/reverse_merge.rb +25 -32
- data/lib/active_support/core_ext/hash/slice.rb +35 -37
- data/lib/active_support/core_ext/integer.rb +1 -7
- data/lib/active_support/core_ext/integer/inflections.rb +10 -16
- data/lib/active_support/core_ext/integer/multiple.rb +6 -0
- data/lib/active_support/core_ext/integer/time.rb +36 -42
- data/lib/active_support/core_ext/kernel/reporting.rb +9 -7
- data/lib/active_support/core_ext/kernel/requires.rb +3 -1
- data/lib/active_support/core_ext/load_error.rb +16 -33
- data/lib/active_support/core_ext/logger.rb +3 -2
- data/lib/active_support/core_ext/module.rb +3 -16
- data/lib/active_support/core_ext/module/aliasing.rb +64 -68
- data/lib/active_support/core_ext/module/attr_accessor_with_default.rb +1 -1
- data/lib/active_support/core_ext/module/attr_internal.rb +4 -4
- data/lib/active_support/core_ext/module/attribute_accessors.rb +36 -41
- data/lib/active_support/core_ext/module/delegation.rb +1 -1
- data/lib/active_support/core_ext/module/deprecation.rb +9 -0
- data/lib/active_support/core_ext/module/introspection.rb +77 -79
- data/lib/active_support/core_ext/module/loading.rb +2 -0
- data/lib/active_support/core_ext/module/synchronization.rb +4 -1
- data/lib/active_support/core_ext/name_error.rb +3 -4
- data/lib/active_support/core_ext/numeric.rb +1 -8
- data/lib/active_support/core_ext/numeric/bytes.rb +35 -41
- data/lib/active_support/core_ext/numeric/time.rb +70 -74
- data/lib/active_support/core_ext/object.rb +4 -2
- data/lib/active_support/core_ext/object/acts_like.rb +10 -0
- data/lib/active_support/core_ext/object/conversions.rb +4 -15
- data/lib/active_support/core_ext/object/duplicable.rb +65 -0
- data/lib/active_support/core_ext/object/instance_variables.rb +0 -7
- data/lib/active_support/core_ext/object/metaclass.rb +5 -6
- data/lib/active_support/core_ext/object/misc.rb +2 -93
- data/lib/active_support/core_ext/object/returning.rb +42 -0
- data/lib/active_support/core_ext/object/to_param.rb +49 -0
- data/lib/active_support/core_ext/object/to_query.rb +27 -0
- data/lib/active_support/core_ext/{try.rb → object/try.rb} +4 -4
- data/lib/active_support/core_ext/object/with_options.rb +24 -0
- data/lib/active_support/core_ext/proc.rb +6 -4
- data/lib/active_support/core_ext/process/daemon.rb +17 -19
- data/lib/active_support/core_ext/range.rb +2 -9
- data/lib/active_support/core_ext/range/blockless_step.rb +24 -27
- data/lib/active_support/core_ext/range/conversions.rb +17 -23
- data/lib/active_support/core_ext/range/include_range.rb +18 -27
- data/lib/active_support/core_ext/range/overlaps.rb +6 -13
- data/lib/active_support/core_ext/regexp.rb +5 -0
- data/lib/active_support/core_ext/rexml.rb +12 -7
- data/lib/active_support/core_ext/string.rb +6 -19
- data/lib/active_support/core_ext/string/access.rb +88 -95
- data/lib/active_support/core_ext/string/behavior.rb +6 -12
- data/lib/active_support/core_ext/string/conversions.rb +19 -21
- data/lib/active_support/core_ext/string/exclude.rb +6 -0
- data/lib/active_support/core_ext/string/filters.rb +17 -23
- data/lib/active_support/core_ext/string/inflections.rb +146 -153
- data/lib/active_support/{vendor/i18n-0.4.1/i18n/core_ext/string/interpolate.rb → core_ext/string/interpolation.rb} +8 -15
- data/lib/active_support/core_ext/string/multibyte.rb +68 -74
- data/lib/active_support/core_ext/string/output_safety.rb +21 -17
- data/lib/active_support/core_ext/string/starts_ends_with.rb +3 -32
- data/lib/active_support/core_ext/string/xchar.rb +10 -3
- data/lib/active_support/core_ext/time/acts_like.rb +8 -0
- data/lib/active_support/core_ext/time/calculations.rb +276 -308
- data/lib/active_support/core_ext/time/conversions.rb +78 -84
- data/lib/active_support/core_ext/time/marshal_with_utc_flag.rb +22 -0
- data/lib/active_support/core_ext/time/publicize_conversion_methods.rb +10 -0
- data/lib/active_support/core_ext/time/zones.rb +73 -81
- data/lib/active_support/core_ext/uri.rb +2 -1
- data/lib/active_support/dependencies.rb +38 -48
- data/lib/active_support/dependencies/autoload.rb +49 -0
- data/lib/active_support/deprecation.rb +9 -195
- data/lib/active_support/deprecation/behaviors.rb +38 -0
- data/lib/active_support/deprecation/method_wrappers.rb +29 -0
- data/lib/active_support/deprecation/proxy_wrappers.rb +74 -0
- data/lib/active_support/deprecation/reporting.rb +55 -0
- data/lib/active_support/duration.rb +6 -2
- data/lib/active_support/hash_with_indifferent_access.rb +137 -0
- data/lib/active_support/i18n.rb +2 -0
- data/lib/active_support/inflections.rb +1 -1
- data/lib/active_support/inflector.rb +4 -406
- data/lib/active_support/inflector/inflections.rb +211 -0
- data/lib/active_support/inflector/methods.rb +139 -0
- data/lib/active_support/inflector/transliterate.rb +61 -0
- data/lib/active_support/json/backends/jsongem.rb +16 -10
- data/lib/active_support/json/backends/yaml.rb +72 -2
- data/lib/active_support/json/decoding.rb +2 -16
- data/lib/active_support/json/encoding.rb +153 -33
- data/lib/active_support/json/variable.rb +4 -3
- data/lib/active_support/locale/en.yml +1 -4
- data/lib/active_support/memoizable.rb +7 -6
- data/lib/active_support/message_encryptor.rb +1 -0
- data/lib/active_support/message_verifier.rb +12 -29
- data/lib/active_support/multibyte.rb +9 -4
- data/lib/active_support/multibyte/chars.rb +25 -17
- data/lib/active_support/multibyte/unicode_database.rb +5 -5
- data/lib/active_support/multibyte/utils.rb +1 -1
- data/lib/active_support/notifications.rb +77 -0
- data/lib/active_support/notifications/fanout.rb +69 -0
- data/lib/active_support/notifications/instrumenter.rb +50 -0
- data/lib/active_support/option_merger.rb +2 -0
- data/lib/active_support/ordered_hash.rb +33 -37
- data/lib/active_support/ordered_options.rb +3 -1
- data/lib/active_support/railtie.rb +64 -0
- data/lib/active_support/rescuable.rb +11 -6
- data/lib/active_support/ruby/shim.rb +19 -0
- data/lib/active_support/test_case.rb +8 -1
- data/lib/active_support/testing/assertions.rb +2 -14
- data/lib/active_support/testing/declarative.rb +31 -12
- data/lib/active_support/testing/deprecation.rb +8 -10
- data/lib/active_support/testing/isolation.rb +153 -0
- data/lib/active_support/testing/pending.rb +48 -0
- data/lib/active_support/testing/performance.rb +342 -339
- data/lib/active_support/testing/setup_and_teardown.rb +48 -31
- data/lib/active_support/time.rb +34 -0
- data/lib/active_support/time/autoload.rb +5 -0
- data/lib/active_support/time_with_zone.rb +18 -12
- data/lib/active_support/values/time_zone.rb +97 -93
- data/lib/active_support/version.rb +3 -3
- data/lib/active_support/whiny_nil.rb +1 -4
- data/lib/active_support/xml_mini.rb +2 -0
- data/lib/active_support/xml_mini/jdom.rb +13 -7
- data/lib/active_support/xml_mini/libxml.rb +19 -12
- data/lib/active_support/xml_mini/libxmlsax.rb +19 -9
- data/lib/active_support/xml_mini/nokogiri.rb +18 -12
- data/lib/active_support/xml_mini/nokogirisax.rb +15 -6
- data/lib/active_support/xml_mini/rexml.rb +24 -9
- metadata +94 -244
- data/lib/active_support/cache/drb_store.rb +0 -14
- data/lib/active_support/core_ext/array/wrapper.rb +0 -24
- data/lib/active_support/core_ext/base64.rb +0 -4
- data/lib/active_support/core_ext/base64/encoding.rb +0 -16
- data/lib/active_support/core_ext/bigdecimal.rb +0 -6
- data/lib/active_support/core_ext/bigdecimal/conversions.rb +0 -37
- data/lib/active_support/core_ext/blank.rb +0 -2
- data/lib/active_support/core_ext/class/removal.rb +0 -50
- data/lib/active_support/core_ext/date.rb +0 -10
- data/lib/active_support/core_ext/date/behavior.rb +0 -42
- data/lib/active_support/core_ext/date_time.rb +0 -12
- data/lib/active_support/core_ext/duplicable.rb +0 -43
- data/lib/active_support/core_ext/float/time.rb +0 -27
- data/lib/active_support/core_ext/integer/even_odd.rb +0 -29
- data/lib/active_support/core_ext/kernel/singleton_class.rb +0 -13
- data/lib/active_support/core_ext/module/model_naming.rb +0 -25
- data/lib/active_support/core_ext/module/remove_method.rb +0 -6
- data/lib/active_support/core_ext/numeric/conversions.rb +0 -19
- data/lib/active_support/core_ext/object/extending.rb +0 -80
- data/lib/active_support/core_ext/object/singleton_class.rb +0 -13
- data/lib/active_support/core_ext/pathname.rb +0 -7
- data/lib/active_support/core_ext/pathname/clean_within.rb +0 -14
- data/lib/active_support/core_ext/string/bytesize.rb +0 -5
- data/lib/active_support/core_ext/string/iterators.rb +0 -23
- data/lib/active_support/core_ext/symbol.rb +0 -14
- data/lib/active_support/core_ext/time.rb +0 -46
- data/lib/active_support/core_ext/time/behavior.rb +0 -13
- data/lib/active_support/json/backends/okjson.rb +0 -644
- data/lib/active_support/json/backends/yajl.rb +0 -40
- data/lib/active_support/json/encoders/date.rb +0 -22
- data/lib/active_support/json/encoders/date_time.rb +0 -22
- data/lib/active_support/json/encoders/enumerable.rb +0 -17
- data/lib/active_support/json/encoders/false_class.rb +0 -7
- data/lib/active_support/json/encoders/hash.rb +0 -56
- data/lib/active_support/json/encoders/nil_class.rb +0 -7
- data/lib/active_support/json/encoders/numeric.rb +0 -21
- data/lib/active_support/json/encoders/object.rb +0 -10
- data/lib/active_support/json/encoders/regexp.rb +0 -9
- data/lib/active_support/json/encoders/string.rb +0 -9
- data/lib/active_support/json/encoders/symbol.rb +0 -5
- data/lib/active_support/json/encoders/time.rb +0 -22
- data/lib/active_support/json/encoders/true_class.rb +0 -7
- data/lib/active_support/vendor.rb +0 -36
- data/lib/active_support/vendor/builder-2.1.2/blankslate.rb +0 -113
- data/lib/active_support/vendor/builder-2.1.2/builder.rb +0 -13
- data/lib/active_support/vendor/builder-2.1.2/builder/blankslate.rb +0 -20
- data/lib/active_support/vendor/builder-2.1.2/builder/css.rb +0 -250
- data/lib/active_support/vendor/builder-2.1.2/builder/xchar.rb +0 -115
- data/lib/active_support/vendor/builder-2.1.2/builder/xmlbase.rb +0 -139
- data/lib/active_support/vendor/builder-2.1.2/builder/xmlevents.rb +0 -63
- data/lib/active_support/vendor/builder-2.1.2/builder/xmlmarkup.rb +0 -328
- data/lib/active_support/vendor/i18n-0.4.1/i18n.rb +0 -322
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend.rb +0 -20
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/active_record.rb +0 -61
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/active_record/missing.rb +0 -65
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/active_record/store_procs.rb +0 -38
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/active_record/translation.rb +0 -93
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/base.rb +0 -237
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/cache.rb +0 -77
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/cascade.rb +0 -57
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/chain.rb +0 -77
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/cldr.rb +0 -100
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/fallbacks.rb +0 -69
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/flatten.rb +0 -113
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/gettext.rb +0 -75
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/interpolation_compiler.rb +0 -123
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/key_value.rb +0 -102
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/memoize.rb +0 -48
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/metadata.rb +0 -65
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/pluralization.rb +0 -57
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/simple.rb +0 -87
- data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/transliterator.rb +0 -98
- data/lib/active_support/vendor/i18n-0.4.1/i18n/config.rb +0 -84
- data/lib/active_support/vendor/i18n-0.4.1/i18n/core_ext/hash.rb +0 -29
- data/lib/active_support/vendor/i18n-0.4.1/i18n/exceptions.rb +0 -61
- data/lib/active_support/vendor/i18n-0.4.1/i18n/gettext.rb +0 -27
- data/lib/active_support/vendor/i18n-0.4.1/i18n/gettext/helpers.rb +0 -65
- data/lib/active_support/vendor/i18n-0.4.1/i18n/gettext/po_parser.rb +0 -329
- data/lib/active_support/vendor/i18n-0.4.1/i18n/locale.rb +0 -6
- data/lib/active_support/vendor/i18n-0.4.1/i18n/locale/fallbacks.rb +0 -98
- data/lib/active_support/vendor/i18n-0.4.1/i18n/locale/tag.rb +0 -28
- data/lib/active_support/vendor/i18n-0.4.1/i18n/locale/tag/parents.rb +0 -24
- data/lib/active_support/vendor/i18n-0.4.1/i18n/locale/tag/rfc4646.rb +0 -76
- data/lib/active_support/vendor/i18n-0.4.1/i18n/locale/tag/simple.rb +0 -41
- data/lib/active_support/vendor/i18n-0.4.1/i18n/version.rb +0 -3
- data/lib/active_support/vendor/memcache-client-1.7.4/memcache.rb +0 -1107
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo.rb +0 -33
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/data_timezone.rb +0 -47
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/data_timezone_info.rb +0 -228
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Algiers.rb +0 -55
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Cairo.rb +0 -219
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Casablanca.rb +0 -40
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Harare.rb +0 -18
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Johannesburg.rb +0 -25
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Monrovia.rb +0 -22
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Nairobi.rb +0 -23
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Argentina/Buenos_Aires.rb +0 -166
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Argentina/San_Juan.rb +0 -86
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Bogota.rb +0 -23
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Caracas.rb +0 -23
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Chicago.rb +0 -283
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Chihuahua.rb +0 -136
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Denver.rb +0 -204
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Godthab.rb +0 -161
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Guatemala.rb +0 -27
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Halifax.rb +0 -274
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Indiana/Indianapolis.rb +0 -149
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Juneau.rb +0 -194
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/La_Paz.rb +0 -22
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Lima.rb +0 -35
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Los_Angeles.rb +0 -232
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Mazatlan.rb +0 -139
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Mexico_City.rb +0 -144
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Monterrey.rb +0 -131
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/New_York.rb +0 -282
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Phoenix.rb +0 -30
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Regina.rb +0 -74
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Santiago.rb +0 -205
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Sao_Paulo.rb +0 -171
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/St_Johns.rb +0 -288
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Tijuana.rb +0 -196
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Almaty.rb +0 -67
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Baghdad.rb +0 -73
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Baku.rb +0 -161
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Bangkok.rb +0 -20
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Chongqing.rb +0 -33
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Colombo.rb +0 -30
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Dhaka.rb +0 -27
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Hong_Kong.rb +0 -87
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Irkutsk.rb +0 -165
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Jakarta.rb +0 -30
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Jerusalem.rb +0 -163
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kabul.rb +0 -20
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kamchatka.rb +0 -163
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Karachi.rb +0 -30
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Katmandu.rb +0 -20
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kolkata.rb +0 -25
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Krasnoyarsk.rb +0 -163
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kuala_Lumpur.rb +0 -31
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kuwait.rb +0 -18
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Magadan.rb +0 -163
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Muscat.rb +0 -18
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Novosibirsk.rb +0 -164
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Rangoon.rb +0 -24
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Riyadh.rb +0 -18
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Seoul.rb +0 -34
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Shanghai.rb +0 -35
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Singapore.rb +0 -33
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Taipei.rb +0 -59
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tashkent.rb +0 -47
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tbilisi.rb +0 -78
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tehran.rb +0 -121
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tokyo.rb +0 -30
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Ulaanbaatar.rb +0 -65
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Urumqi.rb +0 -33
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Vladivostok.rb +0 -164
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Yakutsk.rb +0 -163
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Yekaterinburg.rb +0 -165
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Yerevan.rb +0 -165
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Atlantic/Azores.rb +0 -270
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Atlantic/Cape_Verde.rb +0 -23
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Atlantic/South_Georgia.rb +0 -18
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Adelaide.rb +0 -187
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Brisbane.rb +0 -35
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Darwin.rb +0 -29
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Hobart.rb +0 -193
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Melbourne.rb +0 -185
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Perth.rb +0 -37
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Sydney.rb +0 -185
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Etc/UTC.rb +0 -16
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Amsterdam.rb +0 -228
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Athens.rb +0 -185
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Belgrade.rb +0 -163
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Berlin.rb +0 -188
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Bratislava.rb +0 -13
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Brussels.rb +0 -232
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Bucharest.rb +0 -181
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Budapest.rb +0 -197
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Copenhagen.rb +0 -179
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Dublin.rb +0 -276
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Helsinki.rb +0 -163
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Istanbul.rb +0 -218
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Kiev.rb +0 -168
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Lisbon.rb +0 -268
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Ljubljana.rb +0 -13
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/London.rb +0 -288
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Madrid.rb +0 -211
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Minsk.rb +0 -170
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Moscow.rb +0 -181
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Paris.rb +0 -232
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Prague.rb +0 -187
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Riga.rb +0 -176
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Rome.rb +0 -215
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Sarajevo.rb +0 -13
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Skopje.rb +0 -13
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Sofia.rb +0 -173
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Stockholm.rb +0 -165
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Tallinn.rb +0 -172
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Vienna.rb +0 -183
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Vilnius.rb +0 -170
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Warsaw.rb +0 -212
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Zagreb.rb +0 -13
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Auckland.rb +0 -202
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Fiji.rb +0 -23
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Guam.rb +0 -22
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Honolulu.rb +0 -28
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Majuro.rb +0 -20
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Midway.rb +0 -25
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Noumea.rb +0 -25
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Pago_Pago.rb +0 -26
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Port_Moresby.rb +0 -20
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Tongatapu.rb +0 -27
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/info_timezone.rb +0 -52
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/linked_timezone.rb +0 -51
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/linked_timezone_info.rb +0 -44
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/offset_rationals.rb +0 -98
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/ruby_core_support.rb +0 -56
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/time_or_datetime.rb +0 -292
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone.rb +0 -508
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_definition.rb +0 -56
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_info.rb +0 -40
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_offset_info.rb +0 -94
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_period.rb +0 -198
- data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_transition_info.rb +0 -129
- data/lib/activesupport.rb +0 -2
@@ -1,77 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
# This module allows you to easily cache all responses from the backend - thus
|
4
|
-
# speeding up the I18n aspects of your application quite a bit.
|
5
|
-
#
|
6
|
-
# To enable caching you can simply include the Cache module to the Simple
|
7
|
-
# backend - or whatever other backend you are using:
|
8
|
-
#
|
9
|
-
# I18n::Backend::Simple.send(:include, I18n::Backend::Cache)
|
10
|
-
#
|
11
|
-
# You will also need to set a cache store implementation that you want to use:
|
12
|
-
#
|
13
|
-
# I18n.cache_store = ActiveSupport::Cache.lookup_store(:memory_store)
|
14
|
-
#
|
15
|
-
# You can use any cache implementation you want that provides the same API as
|
16
|
-
# ActiveSupport::Cache (only the methods #fetch and #write are being used).
|
17
|
-
#
|
18
|
-
# The cache_key implementation assumes that you only pass values to
|
19
|
-
# I18n.translate that return a valid key from #hash (see
|
20
|
-
# http://www.ruby-doc.org/core/classes/Object.html#M000337).
|
21
|
-
module I18n
|
22
|
-
class << self
|
23
|
-
@@cache_store = nil
|
24
|
-
@@cache_namespace = nil
|
25
|
-
|
26
|
-
def cache_store
|
27
|
-
@@cache_store
|
28
|
-
end
|
29
|
-
|
30
|
-
def cache_store=(store)
|
31
|
-
@@cache_store = store
|
32
|
-
end
|
33
|
-
|
34
|
-
def cache_namespace
|
35
|
-
@@cache_namespace
|
36
|
-
end
|
37
|
-
|
38
|
-
def cache_namespace=(namespace)
|
39
|
-
@@cache_namespace = namespace
|
40
|
-
end
|
41
|
-
|
42
|
-
def perform_caching?
|
43
|
-
!cache_store.nil?
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
module Backend
|
48
|
-
# TODO Should the cache be cleared if new translations are stored?
|
49
|
-
module Cache
|
50
|
-
def translate(*args)
|
51
|
-
I18n.perform_caching? ? fetch(*args) { super } : super
|
52
|
-
end
|
53
|
-
|
54
|
-
protected
|
55
|
-
|
56
|
-
def fetch(*args, &block)
|
57
|
-
result = I18n.cache_store.fetch(cache_key(*args), &block)
|
58
|
-
raise result if result.is_a?(Exception)
|
59
|
-
result = result.dup if result.frozen? rescue result
|
60
|
-
result
|
61
|
-
rescue MissingTranslationData => exception
|
62
|
-
I18n.cache_store.write(cache_key(*args), exception)
|
63
|
-
raise exception
|
64
|
-
end
|
65
|
-
|
66
|
-
def cache_key(*args)
|
67
|
-
# This assumes that only simple, native Ruby values are passed to I18n.translate.
|
68
|
-
# Also, in Ruby < 1.8.7 {}.hash != {}.hash
|
69
|
-
# (see http://paulbarry.com/articles/2009/09/14/why-rails-3-will-require-ruby-1-8-7)
|
70
|
-
# If args.inspect does not work for you for some reason, patches are very welcome :)
|
71
|
-
hash = RUBY_VERSION >= "1.8.7" ? args.hash : args.inspect
|
72
|
-
keys = ['i18n', I18n.cache_namespace, hash]
|
73
|
-
keys.compact.join('-')
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
# EXPERIMENTAL
|
4
|
-
#
|
5
|
-
# The Cascade module adds the ability to do cascading lookups to backends that
|
6
|
-
# are compatible to the Simple backend.
|
7
|
-
#
|
8
|
-
# By cascading lookups we mean that for any key that can not be found the
|
9
|
-
# Cascade module strips one segment off the scope part of the key and then
|
10
|
-
# tries to look up the key in that scope.
|
11
|
-
#
|
12
|
-
# E.g. when a lookup for the key :"foo.bar.baz" does not yield a result then
|
13
|
-
# the segment :bar will be stripped off the scope part :"foo.bar" and the new
|
14
|
-
# scope :foo will be used to look up the key :baz. If that does not succeed
|
15
|
-
# then the remaining scope segment :foo will be omitted, too, and again the
|
16
|
-
# key :baz will be looked up (now with no scope).
|
17
|
-
#
|
18
|
-
# To enable a cascading lookup one passes the :cascade option:
|
19
|
-
#
|
20
|
-
# I18n.t(:'foo.bar.baz', :cascade => true)
|
21
|
-
#
|
22
|
-
# This will return the first translation found for :"foo.bar.baz", :"foo.baz"
|
23
|
-
# or :baz in this order.
|
24
|
-
#
|
25
|
-
# The cascading lookup takes precedence over resolving any given defaults.
|
26
|
-
# I.e. defaults will kick in after the cascading lookups haven't succeeded.
|
27
|
-
#
|
28
|
-
# This behavior is useful for libraries like ActiveRecord validations where
|
29
|
-
# the library wants to give users a bunch of more or less fine-grained options
|
30
|
-
# of scopes for a particular key.
|
31
|
-
#
|
32
|
-
# Thanks to Clemens Kofler for the initial idea and implementation! See
|
33
|
-
# http://github.com/clemens/i18n-cascading-backend
|
34
|
-
|
35
|
-
module I18n
|
36
|
-
module Backend
|
37
|
-
module Cascade
|
38
|
-
def lookup(locale, key, scope = [], options = {})
|
39
|
-
return super unless cascade = options[:cascade]
|
40
|
-
|
41
|
-
separator = options[:separator] || I18n.default_separator
|
42
|
-
skip_root = cascade.has_key?(:skip_root) ? cascade[:skip_root] : true
|
43
|
-
step = cascade[:step]
|
44
|
-
|
45
|
-
keys = I18n.normalize_keys(nil, key, nil, separator)
|
46
|
-
offset = options[:cascade][:offset] || keys.length
|
47
|
-
scope = I18n.normalize_keys(nil, nil, scope, separator) + keys
|
48
|
-
key = scope.slice!(-offset, offset).join(separator)
|
49
|
-
|
50
|
-
begin
|
51
|
-
result = super
|
52
|
-
return result unless result.nil?
|
53
|
-
end while !scope.empty? && scope.slice!(-step, step) && (!scope.empty? || !skip_root)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module I18n
|
4
|
-
module Backend
|
5
|
-
# Backend that chains multiple other backends and checks each of them when
|
6
|
-
# a translation needs to be looked up. This is useful when you want to use
|
7
|
-
# standard translations with a Simple backend but store custom application
|
8
|
-
# translations in a database or other backends.
|
9
|
-
#
|
10
|
-
# To use the Chain backend instantiate it and set it to the I18n module.
|
11
|
-
# You can add chained backends through the initializer or backends
|
12
|
-
# accessor:
|
13
|
-
#
|
14
|
-
# # preserves the existing Simple backend set to I18n.backend
|
15
|
-
# I18n.backend = I18n::Backend::Chain.new(I18n::Backend::ActiveRecord.new, I18n.backend)
|
16
|
-
#
|
17
|
-
# The implementation assumes that all backends added to the Chain implement
|
18
|
-
# a lookup method with the same API as Simple backend does.
|
19
|
-
class Chain
|
20
|
-
include Base
|
21
|
-
|
22
|
-
attr_accessor :backends
|
23
|
-
|
24
|
-
def initialize(*backends)
|
25
|
-
self.backends = backends
|
26
|
-
end
|
27
|
-
|
28
|
-
def reload!
|
29
|
-
backends.each { |backend| backend.reload! }
|
30
|
-
end
|
31
|
-
|
32
|
-
def store_translations(locale, data, options = {})
|
33
|
-
backends.first.store_translations(locale, data, options = {})
|
34
|
-
end
|
35
|
-
|
36
|
-
def available_locales
|
37
|
-
backends.map { |backend| backend.available_locales }.flatten.uniq
|
38
|
-
end
|
39
|
-
|
40
|
-
def translate(locale, key, options = {})
|
41
|
-
return key.map { |k| translate(locale, k, options) } if key.is_a?(Array)
|
42
|
-
|
43
|
-
default = options.delete(:default)
|
44
|
-
namespace = {}
|
45
|
-
backends.each do |backend|
|
46
|
-
begin
|
47
|
-
options.update(:default => default) if default and backend == backends.last
|
48
|
-
translation = backend.translate(locale, key, options)
|
49
|
-
if namespace_lookup?(translation, options)
|
50
|
-
namespace.update(translation)
|
51
|
-
elsif !translation.nil?
|
52
|
-
return translation
|
53
|
-
end
|
54
|
-
rescue MissingTranslationData
|
55
|
-
end
|
56
|
-
end
|
57
|
-
return namespace unless namespace.empty?
|
58
|
-
raise(I18n::MissingTranslationData.new(locale, key, options))
|
59
|
-
end
|
60
|
-
|
61
|
-
def localize(locale, object, format = :default, options = {})
|
62
|
-
backends.each do |backend|
|
63
|
-
begin
|
64
|
-
result = backend.localize(locale, object, format, options) and return result
|
65
|
-
rescue MissingTranslationData
|
66
|
-
end
|
67
|
-
end
|
68
|
-
raise(I18n::MissingTranslationData.new(locale, format, options))
|
69
|
-
end
|
70
|
-
|
71
|
-
protected
|
72
|
-
def namespace_lookup?(result, options)
|
73
|
-
result.is_a?(Hash) and not options.has_key?(:count)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
@@ -1,100 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'cldr'
|
3
|
-
|
4
|
-
module I18n
|
5
|
-
module Backend
|
6
|
-
module Cldr
|
7
|
-
include ::Cldr::Format
|
8
|
-
|
9
|
-
def localize(locale, object, format = :default, options = {})
|
10
|
-
options[:as] ||= detect_type(object, options)
|
11
|
-
send(:"format_#{options[:as]}", locale, object, format, options)
|
12
|
-
end
|
13
|
-
|
14
|
-
def format_decimal(locale, object, format = :default, options = {})
|
15
|
-
formatter(locale, :decimal, format).apply(object, options)
|
16
|
-
end
|
17
|
-
|
18
|
-
def format_integer(locale, object, format = :default, options = {})
|
19
|
-
format_object(number, options.merge(:precision => 0))
|
20
|
-
end
|
21
|
-
|
22
|
-
def format_currency(locale, object, format = :default, options = {})
|
23
|
-
options.merge!(:currency => lookup_currency(locale, options[:currency], object)) if options[:currency].is_a?(Symbol)
|
24
|
-
formatter(locale, :currency, format).apply(object, options)
|
25
|
-
end
|
26
|
-
|
27
|
-
def format_percent(locale, object, format = :default, options = {})
|
28
|
-
formatter(locale, :percent, format).apply(object, options)
|
29
|
-
end
|
30
|
-
|
31
|
-
def format_date(locale, object, format = :default, options = {})
|
32
|
-
formatter(locale, :date, format).apply(object, options)
|
33
|
-
end
|
34
|
-
|
35
|
-
def format_time(locale, object, format = :default, options = {})
|
36
|
-
formatter(locale, :time, format).apply(object, options)
|
37
|
-
end
|
38
|
-
|
39
|
-
def format_datetime(locale, object, format = :default, options = {})
|
40
|
-
key = :"calendars.gregorian.formats.datetime.#{format}.pattern"
|
41
|
-
date = I18n.l(object, :format => options[:date_format] || format, :locale => locale, :as => :date)
|
42
|
-
time = I18n.l(object, :format => options[:time_format] || format, :locale => locale, :as => :time)
|
43
|
-
I18n.t(key, :date => date, :time => time, :locale => locale, :raise => true)
|
44
|
-
end
|
45
|
-
|
46
|
-
protected
|
47
|
-
|
48
|
-
def detect_type(object, options)
|
49
|
-
options.has_key?(:currency) ? :currency : case object
|
50
|
-
when ::Numeric
|
51
|
-
:decimal
|
52
|
-
when ::Date, ::DateTime, ::Time
|
53
|
-
object.class.name.downcase.to_sym
|
54
|
-
else
|
55
|
-
raise_unspecified_format_type!
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def formatter(locale, type, format)
|
60
|
-
(@formatters ||= {})[:"#{locale}.#{type}.#{format}"] ||= begin
|
61
|
-
format = lookup_format(locale, type, format)
|
62
|
-
data = lookup_format_data(locale, type)
|
63
|
-
::Cldr::Format.const_get(type.to_s.camelize).new(format, data)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def lookup_format(locale, type, format)
|
68
|
-
key = case type
|
69
|
-
when :date, :time, :datetime
|
70
|
-
:"calendars.gregorian.formats.#{type}.#{format}.pattern"
|
71
|
-
else
|
72
|
-
:"numbers.formats.#{type}.patterns.#{format || :default}"
|
73
|
-
end
|
74
|
-
I18n.t(key, :locale => locale, :raise => true)
|
75
|
-
end
|
76
|
-
|
77
|
-
def lookup_format_data(locale, type)
|
78
|
-
key = case type
|
79
|
-
when :date, :time, :datetime
|
80
|
-
:'calendars.gregorian'
|
81
|
-
else
|
82
|
-
:'numbers.symbols'
|
83
|
-
end
|
84
|
-
I18n.t(key, :locale => locale, :raise => true)
|
85
|
-
end
|
86
|
-
|
87
|
-
def lookup_currency(locale, currency, count)
|
88
|
-
I18n.t(:"currencies.#{currency}", :locale => locale, :count => count)
|
89
|
-
end
|
90
|
-
|
91
|
-
def raise_unspecified_format_type!
|
92
|
-
raise ArgumentError.new("You have to specify a format type, e.g. :as => :number.")
|
93
|
-
end
|
94
|
-
|
95
|
-
def raise_unspecified_currency!
|
96
|
-
raise ArgumentError.new("You have to specify a currency, e.g. :currency => 'EUR'.")
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
@@ -1,69 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
# I18n locale fallbacks are useful when you want your application to use
|
4
|
-
# translations from other locales when translations for the current locale are
|
5
|
-
# missing. E.g. you might want to use :en translations when translations in
|
6
|
-
# your applications main locale :de are missing.
|
7
|
-
#
|
8
|
-
# To enable locale fallbacks you can simply include the Fallbacks module to
|
9
|
-
# the Simple backend - or whatever other backend you are using:
|
10
|
-
#
|
11
|
-
# I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
|
12
|
-
module I18n
|
13
|
-
@@fallbacks = nil
|
14
|
-
|
15
|
-
class << self
|
16
|
-
# Returns the current fallbacks implementation. Defaults to +I18n::Locale::Fallbacks+.
|
17
|
-
def fallbacks
|
18
|
-
@@fallbacks ||= I18n::Locale::Fallbacks.new
|
19
|
-
end
|
20
|
-
|
21
|
-
# Sets the current fallbacks implementation. Use this to set a different fallbacks implementation.
|
22
|
-
def fallbacks=(fallbacks)
|
23
|
-
@@fallbacks = fallbacks
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
module Backend
|
28
|
-
module Fallbacks
|
29
|
-
# Overwrites the Base backend translate method so that it will try each
|
30
|
-
# locale given by I18n.fallbacks for the given locale. E.g. for the
|
31
|
-
# locale :"de-DE" it might try the locales :"de-DE", :de and :en
|
32
|
-
# (depends on the fallbacks implementation) until it finds a result with
|
33
|
-
# the given options. If it does not find any result for any of the
|
34
|
-
# locales it will then raise a MissingTranslationData exception as
|
35
|
-
# usual.
|
36
|
-
#
|
37
|
-
# The default option takes precedence over fallback locales
|
38
|
-
# only when it's not a String. When default contains String it
|
39
|
-
# is evaluated after fallback locales.
|
40
|
-
def translate(locale, key, options = {})
|
41
|
-
default = extract_string_default!(options) if options[:default]
|
42
|
-
|
43
|
-
I18n.fallbacks[locale].each do |fallback|
|
44
|
-
begin
|
45
|
-
result = super(fallback, key, options)
|
46
|
-
return result unless result.nil?
|
47
|
-
rescue I18n::MissingTranslationData
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
return super(locale, nil, options.merge(:default => default)) if default
|
52
|
-
raise(I18n::MissingTranslationData.new(locale, key, options))
|
53
|
-
end
|
54
|
-
|
55
|
-
def extract_string_default!(options)
|
56
|
-
defaults = Array(options[:default])
|
57
|
-
if index = find_first_string_default(defaults)
|
58
|
-
options[:default] = defaults[0, index]
|
59
|
-
defaults[index]
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def find_first_string_default(defaults)
|
64
|
-
defaults.each_index { |ix| return ix if String === defaults[ix] }
|
65
|
-
nil
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
@@ -1,113 +0,0 @@
|
|
1
|
-
module I18n
|
2
|
-
module Backend
|
3
|
-
# This module contains several helpers to assist flattening translations.
|
4
|
-
# You may want to flatten translations for:
|
5
|
-
#
|
6
|
-
# 1) speed up lookups, as in the Memoize backend;
|
7
|
-
# 2) In case you want to store translations in a data store, as in ActiveRecord backend;
|
8
|
-
#
|
9
|
-
# You can check both backends above for some examples.
|
10
|
-
# This module also keeps all links in a hash so they can be properly resolved when flattened.
|
11
|
-
module Flatten
|
12
|
-
SEPARATOR_ESCAPE_CHAR = "\001"
|
13
|
-
FLATTEN_SEPARATOR = "."
|
14
|
-
|
15
|
-
# normalize_keys the flatten way. This method is significantly faster
|
16
|
-
# and creates way less objects than the one at I18n.normalize_keys.
|
17
|
-
# It also handles escaping the translation keys.
|
18
|
-
def self.normalize_flat_keys(locale, key, scope, separator)
|
19
|
-
keys = [scope, key].flatten.compact
|
20
|
-
separator ||= I18n.default_separator
|
21
|
-
|
22
|
-
if separator != FLATTEN_SEPARATOR
|
23
|
-
keys.map! do |k|
|
24
|
-
k.to_s.tr("#{FLATTEN_SEPARATOR}#{separator}",
|
25
|
-
"#{SEPARATOR_ESCAPE_CHAR}#{FLATTEN_SEPARATOR}")
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
keys.join(".")
|
30
|
-
end
|
31
|
-
|
32
|
-
# Receives a string and escape the default separator.
|
33
|
-
def self.escape_default_separator(key) #:nodoc:
|
34
|
-
key.to_s.tr(FLATTEN_SEPARATOR, SEPARATOR_ESCAPE_CHAR)
|
35
|
-
end
|
36
|
-
|
37
|
-
# Shortcut to I18n::Backend::Flatten.normalize_flat_keys
|
38
|
-
# and then resolve_links.
|
39
|
-
def normalize_flat_keys(locale, key, scope, separator)
|
40
|
-
key = I18n::Backend::Flatten.normalize_flat_keys(locale, key, scope, separator)
|
41
|
-
resolve_link(locale, key)
|
42
|
-
end
|
43
|
-
|
44
|
-
# Store flattened links.
|
45
|
-
def links
|
46
|
-
@links ||= Hash.new { |h,k| h[k] = {} }
|
47
|
-
end
|
48
|
-
|
49
|
-
# Flatten keys for nested Hashes by chaining up keys:
|
50
|
-
#
|
51
|
-
# >> { "a" => { "b" => { "c" => "d", "e" => "f" }, "g" => "h" }, "i" => "j"}.wind
|
52
|
-
# => { "a.b.c" => "d", "a.b.e" => "f", "a.g" => "h", "i" => "j" }
|
53
|
-
#
|
54
|
-
def flatten_keys(hash, escape, prev_key=nil, &block)
|
55
|
-
hash.each_pair do |key, value|
|
56
|
-
key = escape_default_separator(key) if escape
|
57
|
-
curr_key = [prev_key, key].compact.join(FLATTEN_SEPARATOR).to_sym
|
58
|
-
yield curr_key, value
|
59
|
-
flatten_keys(value, escape, curr_key, &block) if value.is_a?(Hash)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
# Receives a hash of translations (where the key is a locale and
|
64
|
-
# the value is another hash) and return a hash with all
|
65
|
-
# translations flattened.
|
66
|
-
#
|
67
|
-
# Nested hashes are included in the flattened hash just if subtree
|
68
|
-
# is true and Symbols are automatically stored as links.
|
69
|
-
def flatten_translations(locale, data, escape, subtree)
|
70
|
-
hash = {}
|
71
|
-
flatten_keys(data, escape) do |key, value|
|
72
|
-
if value.is_a?(Hash)
|
73
|
-
hash[key] = value if subtree
|
74
|
-
else
|
75
|
-
store_link(locale, key, value) if value.is_a?(Symbol)
|
76
|
-
hash[key] = value
|
77
|
-
end
|
78
|
-
end
|
79
|
-
hash
|
80
|
-
end
|
81
|
-
|
82
|
-
protected
|
83
|
-
|
84
|
-
def store_link(locale, key, link)
|
85
|
-
links[locale.to_sym][key.to_s] = link.to_s
|
86
|
-
end
|
87
|
-
|
88
|
-
def resolve_link(locale, key)
|
89
|
-
key, locale = key.to_s, locale.to_sym
|
90
|
-
links = self.links[locale]
|
91
|
-
|
92
|
-
if links.key?(key)
|
93
|
-
links[key]
|
94
|
-
elsif link = find_link(locale, key)
|
95
|
-
store_link(locale, key, key.gsub(*link))
|
96
|
-
else
|
97
|
-
key
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def find_link(locale, key) #:nodoc:
|
102
|
-
links[locale].each do |from, to|
|
103
|
-
return [from, to] if key[0, from.length] == from
|
104
|
-
end && nil
|
105
|
-
end
|
106
|
-
|
107
|
-
def escape_default_separator(key) #:nodoc:
|
108
|
-
I18n::Backend::Flatten.escape_default_separator(key)
|
109
|
-
end
|
110
|
-
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|