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,75 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'i18n/gettext'
|
4
|
-
require 'i18n/gettext/po_parser'
|
5
|
-
|
6
|
-
# Experimental support for using Gettext po files to store translations.
|
7
|
-
#
|
8
|
-
# To use this you can simply include the module to the Simple backend - or
|
9
|
-
# whatever other backend you are using.
|
10
|
-
#
|
11
|
-
# I18n::Backend::Simple.send(:include, I18n::Backend::Gettext)
|
12
|
-
#
|
13
|
-
# Now you should be able to include your Gettext translation (*.po) files to
|
14
|
-
# the I18n.load_path so they're loaded to the backend and you can use them as
|
15
|
-
# usual:
|
16
|
-
#
|
17
|
-
# I18n.load_path += Dir["path/to/locales/*.po"]
|
18
|
-
#
|
19
|
-
# Following the Gettext convention this implementation expects that your
|
20
|
-
# translation files are named by their locales. E.g. the file en.po would
|
21
|
-
# contain the translations for the English locale.
|
22
|
-
module I18n
|
23
|
-
module Backend
|
24
|
-
module Gettext
|
25
|
-
class PoData < Hash
|
26
|
-
def set_comment(msgid_or_sym, comment)
|
27
|
-
# ignore
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
protected
|
32
|
-
def load_po(filename)
|
33
|
-
locale = ::File.basename(filename, '.po').to_sym
|
34
|
-
data = normalize(locale, parse(filename))
|
35
|
-
{ locale => data }
|
36
|
-
end
|
37
|
-
|
38
|
-
def parse(filename)
|
39
|
-
GetText::PoParser.new.parse(::File.read(filename), PoData.new)
|
40
|
-
end
|
41
|
-
|
42
|
-
def normalize(locale, data)
|
43
|
-
data.inject({}) do |result, (key, value)|
|
44
|
-
unless key.nil? || key.empty?
|
45
|
-
key, value = normalize_pluralization(locale, key, value) if key.index("\000")
|
46
|
-
|
47
|
-
parts = key.split('|').reverse
|
48
|
-
normalized = parts.inject({}) do |normalized, part|
|
49
|
-
normalized = { part => normalized.empty? ? value : normalized }
|
50
|
-
end
|
51
|
-
|
52
|
-
# deep_merge by Stefan Rusterholz, see http://www.ruby-forum.com/topic/142809
|
53
|
-
merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
|
54
|
-
result.merge!(normalized, &merger)
|
55
|
-
end
|
56
|
-
result
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def normalize_pluralization(locale, key, value)
|
61
|
-
# FIXME po_parser includes \000 chars that can not be turned into Symbols
|
62
|
-
key = key.gsub("\000", I18n::Gettext::PLURAL_SEPARATOR).split(I18n::Gettext::PLURAL_SEPARATOR).first
|
63
|
-
|
64
|
-
keys = I18n::Gettext.plural_keys(locale)
|
65
|
-
values = value.split("\000")
|
66
|
-
raise "invalid number of plurals: #{values.size}, keys: #{keys.inspect}" if values.size != keys.size
|
67
|
-
|
68
|
-
result = {}
|
69
|
-
values.each_with_index { |value, ix| result[keys[ix]] = value }
|
70
|
-
[key, result]
|
71
|
-
end
|
72
|
-
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
@@ -1,123 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
# The InterpolationCompiler module contains optimizations that can tremendously
|
4
|
-
# speed up the interpolation process on the Simple backend.
|
5
|
-
#
|
6
|
-
# It works by defining a pre-compiled method on stored translation Strings that
|
7
|
-
# already bring all the knowledge about contained interpolation variables etc.
|
8
|
-
# so that the actual recurring interpolation will be very fast.
|
9
|
-
#
|
10
|
-
# To enable pre-compiled interpolations you can simply include the
|
11
|
-
# InterpolationCompiler module to the Simple backend:
|
12
|
-
#
|
13
|
-
# I18n::Backend::Simple.send(:include, I18n::Backend::InterpolationCompiler)
|
14
|
-
#
|
15
|
-
# Note that InterpolationCompiler does not yield meaningful results and consequently
|
16
|
-
# should not be used with Ruby 1.9 (YARV) but improves performance everywhere else
|
17
|
-
# (jRuby, Rubinius and 1.8.7).
|
18
|
-
module I18n
|
19
|
-
module Backend
|
20
|
-
module InterpolationCompiler
|
21
|
-
module Compiler
|
22
|
-
extend self
|
23
|
-
|
24
|
-
TOKENIZER = /(%%\{[^\}]+\}|%\{[^\}]+\})/
|
25
|
-
INTERPOLATION_SYNTAX_PATTERN = /(%)?(%\{([^\}]+)\})/
|
26
|
-
|
27
|
-
def compile_if_an_interpolation(string)
|
28
|
-
if interpolated_str?(string)
|
29
|
-
string.instance_eval <<-RUBY_EVAL, __FILE__, __LINE__
|
30
|
-
def i18n_interpolate(v = {})
|
31
|
-
"#{compiled_interpolation_body(string)}"
|
32
|
-
end
|
33
|
-
RUBY_EVAL
|
34
|
-
end
|
35
|
-
|
36
|
-
string
|
37
|
-
end
|
38
|
-
|
39
|
-
def interpolated_str?(str)
|
40
|
-
str.kind_of?(::String) && str =~ INTERPOLATION_SYNTAX_PATTERN
|
41
|
-
end
|
42
|
-
|
43
|
-
protected
|
44
|
-
# tokenize("foo %{bar} baz %%{buz}") # => ["foo ", "%{bar}", " baz ", "%%{buz}"]
|
45
|
-
def tokenize(str)
|
46
|
-
str.split(TOKENIZER)
|
47
|
-
end
|
48
|
-
|
49
|
-
def compiled_interpolation_body(str)
|
50
|
-
tokenize(str).map do |token|
|
51
|
-
(matchdata = token.match(INTERPOLATION_SYNTAX_PATTERN)) ? handle_interpolation_token(token, matchdata) : escape_plain_str(token)
|
52
|
-
end.join
|
53
|
-
end
|
54
|
-
|
55
|
-
def handle_interpolation_token(interpolation, matchdata)
|
56
|
-
escaped, pattern, key = matchdata.values_at(1, 2, 3)
|
57
|
-
escaped ? pattern : compile_interpolation_token(key.to_sym)
|
58
|
-
end
|
59
|
-
|
60
|
-
def compile_interpolation_token(key)
|
61
|
-
"\#{#{interpolate_or_raise_missing(key)}}"
|
62
|
-
end
|
63
|
-
|
64
|
-
def interpolate_or_raise_missing(key)
|
65
|
-
escaped_key = escape_key_sym(key)
|
66
|
-
Base::RESERVED_KEYS.include?(key) ? reserved_key(escaped_key) : interpolate_key(escaped_key)
|
67
|
-
end
|
68
|
-
|
69
|
-
def interpolate_key(key)
|
70
|
-
[direct_key(key), nil_key(key), missing_key(key)].join('||')
|
71
|
-
end
|
72
|
-
|
73
|
-
def direct_key(key)
|
74
|
-
"((t = v[#{key}]) && t.respond_to?(:call) ? t.call : t)"
|
75
|
-
end
|
76
|
-
|
77
|
-
def nil_key(key)
|
78
|
-
"(v.has_key?(#{key}) && '')"
|
79
|
-
end
|
80
|
-
|
81
|
-
def missing_key(key)
|
82
|
-
"raise(MissingInterpolationArgument.new(#{key}, self))"
|
83
|
-
end
|
84
|
-
|
85
|
-
def reserved_key(key)
|
86
|
-
"raise(ReservedInterpolationKey.new(#{key}, self))"
|
87
|
-
end
|
88
|
-
|
89
|
-
def escape_plain_str(str)
|
90
|
-
str.gsub(/"|\\|#/) {|x| "\\#{x}"}
|
91
|
-
end
|
92
|
-
|
93
|
-
def escape_key_sym(key)
|
94
|
-
# rely on Ruby to do all the hard work :)
|
95
|
-
key.to_sym.inspect
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
def interpolate(locale, string, values)
|
100
|
-
if string.respond_to?(:i18n_interpolate)
|
101
|
-
string.i18n_interpolate(values)
|
102
|
-
elsif values
|
103
|
-
super
|
104
|
-
else
|
105
|
-
string
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
def store_translations(locale, data, options = {})
|
110
|
-
compile_all_strings_in(data)
|
111
|
-
super
|
112
|
-
end
|
113
|
-
|
114
|
-
protected
|
115
|
-
def compile_all_strings_in(data)
|
116
|
-
data.each_value do |value|
|
117
|
-
Compiler.compile_if_an_interpolation(value)
|
118
|
-
compile_all_strings_in(value) if value.kind_of?(Hash)
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
@@ -1,102 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'i18n/backend/base'
|
4
|
-
require 'active_support/json'
|
5
|
-
|
6
|
-
module I18n
|
7
|
-
module Backend
|
8
|
-
# This is a basic backend for key value stores. It receives on
|
9
|
-
# initialization the store, which should respond to three methods:
|
10
|
-
#
|
11
|
-
# * store#[](key) - Used to get a value
|
12
|
-
# * store#[]=(key, value) - Used to set a value
|
13
|
-
# * store#keys - Used to get all keys
|
14
|
-
#
|
15
|
-
# Since these stores only supports string, all values are converted
|
16
|
-
# to JSON before being stored, allowing it to also store booleans,
|
17
|
-
# hashes and arrays. However, this store does not support Procs.
|
18
|
-
#
|
19
|
-
# As the ActiveRecord backend, Symbols are just supported when loading
|
20
|
-
# translations from the filesystem or through explicit store translations.
|
21
|
-
#
|
22
|
-
# Also, avoid calling I18n.available_locales since it's a somehow
|
23
|
-
# expensive operation in most stores.
|
24
|
-
#
|
25
|
-
# == Example
|
26
|
-
#
|
27
|
-
# To setup I18n to use TokyoCabinet in memory is quite straightforward:
|
28
|
-
#
|
29
|
-
# require 'rufus/tokyo/cabinet' # gem install rufus-tokyo
|
30
|
-
# I18n.backend = I18n::Backend::KeyValue.new(Rufus::Tokyo::Cabinet.new('*'))
|
31
|
-
#
|
32
|
-
# == Performance
|
33
|
-
#
|
34
|
-
# You may make this backend even faster by including the Memoize module.
|
35
|
-
# However, notice that you should properly clear the cache if you change
|
36
|
-
# values directly in the key-store.
|
37
|
-
#
|
38
|
-
# == Subtrees
|
39
|
-
#
|
40
|
-
# In most backends, you are allowed to retrieve part of a translation tree:
|
41
|
-
#
|
42
|
-
# I18n.backend.store_translations :en, :foo => { :bar => :baz }
|
43
|
-
# I18n.t "foo" #=> { :bar => :baz }
|
44
|
-
#
|
45
|
-
# This backend supports this feature by default, but it slows down the storage
|
46
|
-
# of new data considerably and makes hard to delete entries. That said, you are
|
47
|
-
# allowed to disable the storage of subtrees on initialization:
|
48
|
-
#
|
49
|
-
# I18n::Backend::KeyValue.new(@store, false)
|
50
|
-
#
|
51
|
-
# This is useful if you are using a KeyValue backend chained to a Simple backend.
|
52
|
-
class KeyValue
|
53
|
-
module Implementation
|
54
|
-
attr_accessor :store
|
55
|
-
|
56
|
-
include Base, Flatten
|
57
|
-
|
58
|
-
def initialize(store, subtrees=true)
|
59
|
-
@store, @subtrees = store, subtrees
|
60
|
-
end
|
61
|
-
|
62
|
-
def store_translations(locale, data, options = {})
|
63
|
-
escape = options.fetch(:escape, true)
|
64
|
-
flatten_translations(locale, data, escape, @subtrees).each do |key, value|
|
65
|
-
key = "#{locale}.#{key}"
|
66
|
-
|
67
|
-
case value
|
68
|
-
when Hash
|
69
|
-
if @subtrees && (old_value = @store[key])
|
70
|
-
old_value = ActiveSupport::JSON.decode(old_value)
|
71
|
-
value = old_value.deep_symbolize_keys.deep_merge!(value) if old_value.is_a?(Hash)
|
72
|
-
end
|
73
|
-
when Proc
|
74
|
-
raise "Key-value stores cannot handle procs"
|
75
|
-
end
|
76
|
-
|
77
|
-
@store[key] = ActiveSupport::JSON.encode(value) unless value.is_a?(Symbol)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
def available_locales
|
82
|
-
locales = @store.keys.map { |k| k =~ /\./; $` }
|
83
|
-
locales.uniq!
|
84
|
-
locales.compact!
|
85
|
-
locales.map! { |k| k.to_sym }
|
86
|
-
locales
|
87
|
-
end
|
88
|
-
|
89
|
-
protected
|
90
|
-
|
91
|
-
def lookup(locale, key, scope = [], options = {})
|
92
|
-
key = normalize_flat_keys(locale, key, scope, options[:separator])
|
93
|
-
value = @store["#{locale}.#{key}"]
|
94
|
-
value = ActiveSupport::JSON.decode(value) if value
|
95
|
-
value.is_a?(Hash) ? value.deep_symbolize_keys : value
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
include Implementation
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# Memoize module simply memoizes the values returned by lookup using
|
4
|
-
# a flat hash and can tremendously speed up the lookup process in a backend.
|
5
|
-
#
|
6
|
-
# To enable it you can simply include the Memoize module to your backend:
|
7
|
-
#
|
8
|
-
# I18n::Backend::Simple.send(:include, I18n::Backend::Memoize)
|
9
|
-
#
|
10
|
-
# Notice that it's the responsibility of the backend to define whenever the
|
11
|
-
# cache should be cleaned.
|
12
|
-
module I18n
|
13
|
-
module Backend
|
14
|
-
module Memoize
|
15
|
-
def available_locales
|
16
|
-
@memoized_locales ||= super
|
17
|
-
end
|
18
|
-
|
19
|
-
def store_translations(locale, data, options = {})
|
20
|
-
reset_memoizations!(locale)
|
21
|
-
super
|
22
|
-
end
|
23
|
-
|
24
|
-
def reload!
|
25
|
-
reset_memoizations!
|
26
|
-
super
|
27
|
-
end
|
28
|
-
|
29
|
-
protected
|
30
|
-
|
31
|
-
def lookup(locale, key, scope = nil, options = {})
|
32
|
-
flat_key = I18n::Backend::Flatten.normalize_flat_keys(locale,
|
33
|
-
key, scope, options[:separator]).to_sym
|
34
|
-
flat_hash = memoized_lookup[locale.to_sym]
|
35
|
-
flat_hash.key?(flat_key) ? flat_hash[flat_key] : (flat_hash[flat_key] = super)
|
36
|
-
end
|
37
|
-
|
38
|
-
def memoized_lookup
|
39
|
-
@memoized_lookup ||= Hash.new { |h, k| h[k] = {} }
|
40
|
-
end
|
41
|
-
|
42
|
-
def reset_memoizations!(locale=nil)
|
43
|
-
@memoized_locales = nil
|
44
|
-
(locale ? memoized_lookup[locale.to_sym] : memoized_lookup).clear
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
# I18n translation metadata is useful when you want to access information
|
2
|
-
# about how a translation was looked up, pluralized or interpolated in
|
3
|
-
# your application.
|
4
|
-
#
|
5
|
-
# msg = I18n.t(:message, :default => 'Hi!', :scope => :foo)
|
6
|
-
# msg.translation_metadata
|
7
|
-
# # => { :key => :message, :scope => :foo, :default => 'Hi!' }
|
8
|
-
#
|
9
|
-
# If a :count option was passed to #translate it will be set to the metadata.
|
10
|
-
# Likewise, if any interpolation variables were passed they will also be set.
|
11
|
-
#
|
12
|
-
# To enable translation metadata you can simply include the Metadata module
|
13
|
-
# into the Simple backend class - or whatever other backend you are using:
|
14
|
-
#
|
15
|
-
# I18n::Backend::Simple.send(:include, I18n::Backend::Metadata)
|
16
|
-
#
|
17
|
-
module I18n
|
18
|
-
module Backend
|
19
|
-
module Metadata
|
20
|
-
class << self
|
21
|
-
def included(base)
|
22
|
-
Object.class_eval do
|
23
|
-
def translation_metadata
|
24
|
-
@translation_metadata ||= {}
|
25
|
-
end
|
26
|
-
|
27
|
-
def translation_metadata=(translation_metadata)
|
28
|
-
@translation_metadata = translation_metadata
|
29
|
-
end
|
30
|
-
end unless Object.method_defined?(:translation_metadata)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def translate(locale, key, options = {})
|
35
|
-
metadata = {
|
36
|
-
:locale => locale,
|
37
|
-
:key => key,
|
38
|
-
:scope => options[:scope],
|
39
|
-
:default => options[:default],
|
40
|
-
:separator => options[:separator],
|
41
|
-
:values => options.reject { |name, value| Base::RESERVED_KEYS.include?(name) }
|
42
|
-
}
|
43
|
-
with_metadata(metadata) { super }
|
44
|
-
end
|
45
|
-
|
46
|
-
def interpolate(locale, entry, values = {})
|
47
|
-
metadata = entry.translation_metadata.merge(:original => entry)
|
48
|
-
with_metadata(metadata) { super }
|
49
|
-
end
|
50
|
-
|
51
|
-
def pluralize(locale, entry, count)
|
52
|
-
with_metadata(:count => count) { super }
|
53
|
-
end
|
54
|
-
|
55
|
-
protected
|
56
|
-
|
57
|
-
def with_metadata(metadata, &block)
|
58
|
-
result = yield
|
59
|
-
result.translation_metadata = result.translation_metadata.merge(metadata) if result
|
60
|
-
result
|
61
|
-
end
|
62
|
-
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
@@ -1,57 +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 specific pluralizations you can simply include the
|
9
|
-
# Pluralization module to the Simple backend - or whatever other backend you
|
10
|
-
# are using.
|
11
|
-
#
|
12
|
-
# I18n::Backend::Simple.send(:include, I18n::Backend::Pluralization)
|
13
|
-
#
|
14
|
-
# You also need to make sure to provide pluralization algorithms to the
|
15
|
-
# backend, i.e. include them to your I18n.load_path accordingly.
|
16
|
-
module I18n
|
17
|
-
module Backend
|
18
|
-
module Pluralization
|
19
|
-
# Overwrites the Base backend translate method so that it will check the
|
20
|
-
# translation meta data space (:i18n) for a locale specific pluralization
|
21
|
-
# rule and use it to pluralize the given entry. I.e. the library expects
|
22
|
-
# pluralization rules to be stored at I18n.t(:'i18n.plural.rule')
|
23
|
-
#
|
24
|
-
# Pluralization rules are expected to respond to #call(entry, count) and
|
25
|
-
# return a pluralization key. Valid keys depend on the translation data
|
26
|
-
# hash (entry) but it is generally recommended to follow CLDR's style,
|
27
|
-
# i.e., return one of the keys :zero, :one, :few, :many, :other.
|
28
|
-
#
|
29
|
-
# The :zero key is always picked directly when count equals 0 AND the
|
30
|
-
# translation data has the key :zero. This way translators are free to
|
31
|
-
# either pick a special :zero translation even for languages where the
|
32
|
-
# pluralizer does not return a :zero key.
|
33
|
-
def pluralize(locale, entry, count)
|
34
|
-
return entry unless entry.is_a?(Hash) and count
|
35
|
-
|
36
|
-
pluralizer = pluralizer(locale)
|
37
|
-
if pluralizer.respond_to?(:call)
|
38
|
-
key = count == 0 && entry.has_key?(:zero) ? :zero : pluralizer.call(count)
|
39
|
-
raise InvalidPluralizationData.new(entry, count) unless entry.has_key?(key)
|
40
|
-
entry[key]
|
41
|
-
else
|
42
|
-
super
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
protected
|
47
|
-
|
48
|
-
def pluralizers
|
49
|
-
@pluralizers ||= {}
|
50
|
-
end
|
51
|
-
|
52
|
-
def pluralizer(locale)
|
53
|
-
pluralizers[locale] ||= I18n.t(:'i18n.plural.rule', :locale => locale, :resolve => false)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|