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
data/CHANGELOG
CHANGED
@@ -1,81 +1,58 @@
|
|
1
|
-
|
1
|
+
*Rails 3.0 (pending)*
|
2
2
|
|
3
|
-
*
|
3
|
+
* Introduce class_attribute to declare inheritable class attributes. Writing an attribute on a subclass behaves just like overriding the superclass reader method. Unifies and replaces most usage of cattr_accessor, class_inheritable_attribute, superclass_delegating_attribute, and extlib_inheritable_attribute. [Jeremy Kemper, Yehuda Katz]
|
4
4
|
|
5
|
+
* Time#- with a DateTime argument behaves the same as with a Time argument, i.e. returns the difference between self and arg as a Float #3476 [Geoff Buesing]
|
5
6
|
|
6
|
-
*
|
7
|
-
|
8
|
-
|
9
|
-
*2.3.10 (October 15, 2010)*
|
10
|
-
|
11
|
-
|
12
|
-
*2.3.9 (September 4, 2010)*
|
13
|
-
|
14
|
-
* i18n: bundle i18n 0.4.1 for forward compatibility with Rails 3. Deprecates {{foo}} interpolation syntax in favor of 1.9-native %{foo}.
|
15
|
-
|
16
|
-
* Deprecate Kernel#returning in favor of Object#tap since it's included in Ruby 1.8.7 and later. [Santiago Pastorino]
|
17
|
-
|
18
|
-
* Deprecates ActiveSupport::Dependencies.load_(once_)paths, renamed to autoload_(once_)paths. [fxn]
|
19
|
-
|
20
|
-
* Deprecates Array#random_element, renamed to sample to match Ruby 1.9, thanks to Marc-Andre Lafortune. [fxn]
|
21
|
-
|
22
|
-
|
23
|
-
*2.3.8 (May 24, 2010)*
|
24
|
-
|
25
|
-
* Version bump.
|
26
|
-
|
27
|
-
|
28
|
-
*2.3.7 (May 24, 2010)*
|
29
|
-
|
30
|
-
* HTML safety: fix compatibility with the optional rails_xss plugin. [Nathan Weizenbaum, Santiago Pastorino]
|
31
|
-
|
7
|
+
* YAML serialization for OrderedHash. #3608 [Gregor Schmidt]
|
32
8
|
|
33
|
-
*
|
9
|
+
* Update bundled TZInfo to v0.3.16 [Geoff Buesing]
|
34
10
|
|
35
|
-
*
|
11
|
+
* Georgetown TimeZone is now mapped to "America/Guyana" instead of "America/Argentina/San_Juan" #1821 [Geoff Buesing, Reuben Sivan]
|
36
12
|
|
37
|
-
*
|
13
|
+
* Changed the default ActiveSupport.use_standard_json_time_format from false to true and
|
14
|
+
ActiveSupport.escape_html_entities_in_json from true to false to match previously announced Rails 3 defaults [DHH]
|
38
15
|
|
39
16
|
* Added Object#presence that returns the object if it's #present? otherwise returns nil [DHH/Colin Kelley]
|
40
17
|
|
41
|
-
*
|
42
|
-
|
43
|
-
* Use Object#singleton_class instead of #metaclass. Prefer Ruby's choice. [Jeremy Kemper]
|
44
|
-
|
45
|
-
* JSON backend for YAJL. Preferred if available. #2666 [Brian Lopez]
|
46
|
-
|
47
|
-
* Introduce String#html_safe for rails_xss plugin and forward-compatibility with Rails 3. [Michael Koziarski, Santiago Pastorino, José Ignacio Costa]
|
48
|
-
|
49
|
-
* Time#- with a DateTime argument behaves the same as with a Time argument, i.e. returns the difference between self and arg as a Float #3476 [Geoff Buesing]
|
18
|
+
* Add Enumerable#exclude? to bring parity to Enumerable#include? and avoid if !x.include?/else calls [DHH]
|
50
19
|
|
51
|
-
*
|
20
|
+
* Update Edinburgh TimeZone to use "Europe/London" instead of "Europe/Dublin" #3310 [Phil Ross]
|
52
21
|
|
53
|
-
*
|
22
|
+
* Update bundled TZInfo to v0.3.15 [Geoff Buesing]
|
54
23
|
|
24
|
+
* JSON: +Object#to_json+ calls +as_json+ to coerce itself into something natively encodable like +Hash+, +Integer+, or +String+. Override +as_json+ instead of +to_json+ so you're JSON library agnostic. [Jeremy Kemper]
|
55
25
|
|
56
|
-
*
|
26
|
+
* String #to_time and #to_datetime: handle fractional seconds #864 [Jason Frey]
|
57
27
|
|
58
|
-
*
|
28
|
+
* Update bundled TZInfo to v0.3.13 [Geoff Buesing]
|
59
29
|
|
60
|
-
*
|
30
|
+
* Allow MemCacheStore to be initialized with a MemCache-like object instead of addresses and options [Bryan Helmkamp]
|
61
31
|
|
62
|
-
*
|
32
|
+
* Change spelling of Kyev timezone to Kyiv #2613 [Alexander Dymo]
|
63
33
|
|
64
|
-
*
|
34
|
+
* Add ActiveSupport.parse_json_times to disable time parsing in JSON backends that don't support it or don't need it. [rick]
|
65
35
|
|
36
|
+
* Add pluggable JSON backends with support for the JSON gem. [rick]
|
37
|
+
Example: ActiveSupport::JSON.backend = "JSONGem"
|
66
38
|
|
67
|
-
|
39
|
+
All internal Rails JSON encoding is now handled by ActiveSupport::JSON.encode(). Use of #to_json is not recommended, as it may clash with other libraries that overwrite it. However, you can recover Rails specific functionality
|
40
|
+
if you really want to use #to_json.
|
68
41
|
|
69
|
-
|
42
|
+
gem 'json'
|
43
|
+
ActiveSupport::JSON.backend = "JSONGem"
|
70
44
|
|
71
|
-
|
45
|
+
class ActiveRecord::Base
|
46
|
+
alias to_json rails_to_json
|
47
|
+
end
|
72
48
|
|
49
|
+
* require 'active_support' no longer orders the whole menu of core extensions. Ask for just what you need: e.g. require 'active_support/core/time' to use timezones, durations, and stdlib date/time extensions. [Jeremy Kemper]
|
73
50
|
|
74
|
-
*
|
51
|
+
* Removed rarely-used DRb cache store. [Jeremy Kemper]
|
75
52
|
|
76
|
-
*
|
53
|
+
* TimeWithZone.name returns 'Time', to further thwart type checking [Geoff Buesing]
|
77
54
|
|
78
|
-
*
|
55
|
+
* Time.local instances: Adding 24.hours across the DST boundary adds 24 hours instead of one day #2066 [Michael Curtis]
|
79
56
|
|
80
57
|
|
81
58
|
*2.3.2 [Final] (March 15, 2009)*
|
data/lib/active_support.rb
CHANGED
@@ -22,39 +22,51 @@
|
|
22
22
|
#++
|
23
23
|
|
24
24
|
module ActiveSupport
|
25
|
-
|
26
|
-
|
25
|
+
class << self
|
26
|
+
attr_accessor :load_all_hooks
|
27
|
+
def on_load_all(&hook) load_all_hooks << hook end
|
28
|
+
def load_all!; load_all_hooks.each { |hook| hook.call } end
|
27
29
|
end
|
30
|
+
self.load_all_hooks = []
|
28
31
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
autoload :BufferedLogger, 'active_support/buffered_logger'
|
33
|
-
autoload :Cache, 'active_support/cache'
|
34
|
-
autoload :Callbacks, 'active_support/callbacks'
|
35
|
-
autoload :Deprecation, 'active_support/deprecation'
|
36
|
-
autoload :Duration, 'active_support/duration'
|
37
|
-
autoload :Gzip, 'active_support/gzip'
|
38
|
-
autoload :Inflector, 'active_support/inflector'
|
39
|
-
autoload :Memoizable, 'active_support/memoizable'
|
40
|
-
autoload :MessageEncryptor, 'active_support/message_encryptor'
|
41
|
-
autoload :MessageVerifier, 'active_support/message_verifier'
|
42
|
-
autoload :Multibyte, 'active_support/multibyte'
|
43
|
-
autoload :OptionMerger, 'active_support/option_merger'
|
44
|
-
autoload :OrderedHash, 'active_support/ordered_hash'
|
45
|
-
autoload :OrderedOptions, 'active_support/ordered_options'
|
46
|
-
autoload :Rescuable, 'active_support/rescuable'
|
47
|
-
autoload :SafeBuffer, 'active_support/core_ext/string/output_safety'
|
48
|
-
autoload :SecureRandom, 'active_support/secure_random'
|
49
|
-
autoload :StringInquirer, 'active_support/string_inquirer'
|
50
|
-
autoload :TimeWithZone, 'active_support/time_with_zone'
|
51
|
-
autoload :TimeZone, 'active_support/values/time_zone'
|
52
|
-
autoload :XmlMini, 'active_support/xml_mini'
|
32
|
+
on_load_all do
|
33
|
+
[Dependencies, Deprecation, Gzip, MessageVerifier, Multibyte, SecureRandom]
|
34
|
+
end
|
53
35
|
end
|
54
36
|
|
55
|
-
require
|
56
|
-
|
57
|
-
|
58
|
-
|
37
|
+
require "active_support/dependencies/autoload"
|
38
|
+
|
39
|
+
module ActiveSupport
|
40
|
+
extend ActiveSupport::Autoload
|
41
|
+
|
42
|
+
# TODO: Narrow this list down
|
43
|
+
eager_autoload do
|
44
|
+
autoload :BacktraceCleaner
|
45
|
+
autoload :Base64
|
46
|
+
autoload :BasicObject
|
47
|
+
autoload :Benchmarkable
|
48
|
+
autoload :BufferedLogger
|
49
|
+
autoload :Cache
|
50
|
+
autoload :Callbacks
|
51
|
+
autoload :Concern
|
52
|
+
autoload :Configurable
|
53
|
+
autoload :Deprecation
|
54
|
+
autoload :Gzip
|
55
|
+
autoload :Inflector
|
56
|
+
autoload :Memoizable
|
57
|
+
autoload :MessageEncryptor
|
58
|
+
autoload :MessageVerifier
|
59
|
+
autoload :Multibyte
|
60
|
+
autoload :OptionMerger
|
61
|
+
autoload :OrderedHash
|
62
|
+
autoload :OrderedOptions
|
63
|
+
autoload :Notifications
|
64
|
+
autoload :Rescuable
|
65
|
+
autoload :SecureRandom
|
66
|
+
autoload :StringInquirer
|
67
|
+
autoload :XmlMini
|
68
|
+
end
|
59
69
|
|
60
|
-
|
70
|
+
autoload :SafeBuffer, "active_support/core_ext/string/output_safety"
|
71
|
+
autoload :TestCase
|
72
|
+
end
|
data/lib/active_support/all.rb
CHANGED
@@ -1,8 +1,4 @@
|
|
1
|
-
# For forward compatibility with Rails 3.
|
2
|
-
#
|
3
|
-
# require 'active_support' loads a very bare minumum in Rails 3.
|
4
|
-
# require 'active_support/all' loads the whole suite like Rails 2 did.
|
5
|
-
#
|
6
|
-
# To prepare for Rails 3, switch to require 'active_support/all' now.
|
7
|
-
|
8
1
|
require 'active_support'
|
2
|
+
require 'active_support/i18n'
|
3
|
+
require 'active_support/time'
|
4
|
+
require 'active_support/core_ext'
|
@@ -9,7 +9,7 @@ module ActiveSupport
|
|
9
9
|
# Example:
|
10
10
|
#
|
11
11
|
# bc = BacktraceCleaner.new
|
12
|
-
# bc.add_filter { |line| line.gsub(Rails.root, '') }
|
12
|
+
# bc.add_filter { |line| line.gsub(Rails.root, '') }
|
13
13
|
# bc.add_silencer { |line| line =~ /mongrel|rubygems/ }
|
14
14
|
# bc.clean(exception.backtrace) # will strip the Rails.root prefix and skip any lines from mongrel or rubygems
|
15
15
|
#
|
@@ -18,10 +18,19 @@ module ActiveSupport
|
|
18
18
|
def initialize
|
19
19
|
@filters, @silencers = [], []
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
# Returns the backtrace after all filters and silencers has been run against it. Filters run first, then silencers.
|
23
|
-
def clean(backtrace)
|
24
|
-
|
23
|
+
def clean(backtrace, kind = :silent)
|
24
|
+
filtered = filter(backtrace)
|
25
|
+
|
26
|
+
case kind
|
27
|
+
when :silent
|
28
|
+
silence(filtered)
|
29
|
+
when :noise
|
30
|
+
noise(filtered)
|
31
|
+
else
|
32
|
+
filtered
|
33
|
+
end
|
25
34
|
end
|
26
35
|
|
27
36
|
# Adds a filter from the block provided. Each line in the backtrace will be mapped against this filter.
|
@@ -51,21 +60,28 @@ module ActiveSupport
|
|
51
60
|
@silencers = []
|
52
61
|
end
|
53
62
|
|
54
|
-
|
55
63
|
private
|
56
64
|
def filter(backtrace)
|
57
65
|
@filters.each do |f|
|
58
66
|
backtrace = backtrace.map { |line| f.call(line) }
|
59
67
|
end
|
60
|
-
|
68
|
+
|
61
69
|
backtrace
|
62
70
|
end
|
63
|
-
|
71
|
+
|
64
72
|
def silence(backtrace)
|
65
73
|
@silencers.each do |s|
|
66
74
|
backtrace = backtrace.reject { |line| s.call(line) }
|
67
75
|
end
|
68
|
-
|
76
|
+
|
77
|
+
backtrace
|
78
|
+
end
|
79
|
+
|
80
|
+
def noise(backtrace)
|
81
|
+
@silencers.each do |s|
|
82
|
+
backtrace = backtrace.select { |line| s.call(line) }
|
83
|
+
end
|
84
|
+
|
69
85
|
backtrace
|
70
86
|
end
|
71
87
|
end
|
@@ -30,4 +30,13 @@ module ActiveSupport
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
33
|
+
|
34
|
+
# Encodes the value as base64 without the newline breaks. This makes the base64 encoding readily usable as URL parameters
|
35
|
+
# or memcache keys without further processing.
|
36
|
+
#
|
37
|
+
# ActiveSupport::Base64.encode64s("Original unencoded string")
|
38
|
+
# # => "T3JpZ2luYWwgdW5lbmNvZGVkIHN0cmluZw=="
|
39
|
+
def Base64.encode64s(value)
|
40
|
+
encode64(value).gsub(/\n/, '')
|
41
|
+
end
|
33
42
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'active_support/core_ext/benchmark'
|
2
|
+
require 'active_support/core_ext/hash/keys'
|
3
|
+
|
4
|
+
module ActiveSupport
|
5
|
+
module Benchmarkable
|
6
|
+
# Allows you to measure the execution time of a block
|
7
|
+
# in a template and records the result to the log. Wrap this block around
|
8
|
+
# expensive operations or possible bottlenecks to get a time reading
|
9
|
+
# for the operation. For example, let's say you thought your file
|
10
|
+
# processing method was taking too long; you could wrap it in a benchmark block.
|
11
|
+
#
|
12
|
+
# <% benchmark "Process data files" do %>
|
13
|
+
# <%= expensive_files_operation %>
|
14
|
+
# <% end %>
|
15
|
+
#
|
16
|
+
# That would add something like "Process data files (345.2ms)" to the log,
|
17
|
+
# which you can then use to compare timings when optimizing your code.
|
18
|
+
#
|
19
|
+
# You may give an optional logger level as the :level option.
|
20
|
+
# (:debug, :info, :warn, :error); the default value is :info.
|
21
|
+
#
|
22
|
+
# <% benchmark "Low-level files", :level => :debug do %>
|
23
|
+
# <%= lowlevel_files_operation %>
|
24
|
+
# <% end %>
|
25
|
+
#
|
26
|
+
# Finally, you can pass true as the third argument to silence all log activity
|
27
|
+
# inside the block. This is great for boiling down a noisy block to just a single statement:
|
28
|
+
#
|
29
|
+
# <% benchmark "Process data files", :level => :info, :silence => true do %>
|
30
|
+
# <%= expensive_and_chatty_files_operation %>
|
31
|
+
# <% end %>
|
32
|
+
def benchmark(message = "Benchmarking", options = {})
|
33
|
+
if logger
|
34
|
+
if options.is_a?(Symbol)
|
35
|
+
ActiveSupport::Deprecation.warn("use benchmark('#{message}', :level => :#{options}) instead", caller)
|
36
|
+
options = { :level => options, :silence => false }
|
37
|
+
else
|
38
|
+
options.assert_valid_keys(:level, :silence)
|
39
|
+
options[:level] ||= :info
|
40
|
+
end
|
41
|
+
|
42
|
+
result = nil
|
43
|
+
ms = Benchmark.ms { result = options[:silence] ? logger.silence { yield } : yield }
|
44
|
+
logger.send(options[:level], '%s (%.1fms)' % [ message, ms ])
|
45
|
+
result
|
46
|
+
else
|
47
|
+
yield
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Silence the logger during the execution of the block.
|
52
|
+
#
|
53
|
+
def silence
|
54
|
+
old_logger_level, logger.level = logger.level, ::Logger::ERROR if logger
|
55
|
+
yield
|
56
|
+
ensure
|
57
|
+
logger.level = old_logger_level if logger
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'active_support/core_ext/class/attribute_accessors'
|
2
2
|
|
3
3
|
module ActiveSupport
|
4
4
|
# Inspired by the buffered logger idea by Ezra
|
@@ -53,7 +53,6 @@ module ActiveSupport
|
|
53
53
|
FileUtils.mkdir_p(File.dirname(log))
|
54
54
|
@log = open(log, (File::WRONLY | File::APPEND | File::CREAT))
|
55
55
|
@log.sync = true
|
56
|
-
@log.write("# Logfile created on %s" % [Time.now.to_s])
|
57
56
|
end
|
58
57
|
end
|
59
58
|
|
@@ -68,15 +67,19 @@ module ActiveSupport
|
|
68
67
|
message
|
69
68
|
end
|
70
69
|
|
70
|
+
# Dynamically add methods such as:
|
71
|
+
# def info
|
72
|
+
# def warn
|
73
|
+
# def debug
|
71
74
|
for severity in Severity.constants
|
72
75
|
class_eval <<-EOT, __FILE__, __LINE__ + 1
|
73
|
-
def #{severity.downcase}(message = nil, progname = nil, &block)
|
74
|
-
add(#{severity}, message, progname, &block)
|
75
|
-
end
|
76
|
-
|
77
|
-
def #{severity.downcase}?
|
78
|
-
#{severity} >= @level
|
79
|
-
end
|
76
|
+
def #{severity.downcase}(message = nil, progname = nil, &block) # def debug(message = nil, progname = nil, &block)
|
77
|
+
add(#{severity}, message, progname, &block) # add(DEBUG, message, progname, &block)
|
78
|
+
end # end
|
79
|
+
|
80
|
+
def #{severity.downcase}? # def debug?
|
81
|
+
#{severity} >= @level # DEBUG >= @level
|
82
|
+
end # end
|
80
83
|
EOT
|
81
84
|
end
|
82
85
|
|
data/lib/active_support/cache.rb
CHANGED
@@ -1,4 +1,10 @@
|
|
1
1
|
require 'benchmark'
|
2
|
+
require 'active_support/core_ext/array/wrap'
|
3
|
+
require 'active_support/core_ext/benchmark'
|
4
|
+
require 'active_support/core_ext/exception'
|
5
|
+
require 'active_support/core_ext/class/attribute_accessors'
|
6
|
+
require 'active_support/core_ext/object/to_param'
|
7
|
+
require 'active_support/core_ext/string/inflections'
|
2
8
|
|
3
9
|
module ActiveSupport
|
4
10
|
# See ActiveSupport::Cache::Store for documentation.
|
@@ -6,7 +12,6 @@ module ActiveSupport
|
|
6
12
|
autoload :FileStore, 'active_support/cache/file_store'
|
7
13
|
autoload :MemoryStore, 'active_support/cache/memory_store'
|
8
14
|
autoload :SynchronizedMemoryStore, 'active_support/cache/synchronized_memory_store'
|
9
|
-
autoload :DRbStore, 'active_support/cache/drb_store'
|
10
15
|
autoload :MemCacheStore, 'active_support/cache/mem_cache_store'
|
11
16
|
autoload :CompressedMemCacheStore, 'active_support/cache/compressed_mem_cache_store'
|
12
17
|
|
@@ -25,9 +30,9 @@ module ActiveSupport
|
|
25
30
|
#
|
26
31
|
# ActiveSupport::Cache.lookup_store(:memory_store)
|
27
32
|
# # => returns a new ActiveSupport::Cache::MemoryStore object
|
28
|
-
#
|
29
|
-
# ActiveSupport::Cache.lookup_store(:
|
30
|
-
# # => returns a new ActiveSupport::Cache::
|
33
|
+
#
|
34
|
+
# ActiveSupport::Cache.lookup_store(:mem_cache_store)
|
35
|
+
# # => returns a new ActiveSupport::Cache::MemCacheStore object
|
31
36
|
#
|
32
37
|
# Any additional arguments will be passed to the corresponding cache store
|
33
38
|
# class's constructor:
|
@@ -40,11 +45,11 @@ module ActiveSupport
|
|
40
45
|
# ActiveSupport::Cache.lookup_store(MyOwnCacheStore.new)
|
41
46
|
# # => returns MyOwnCacheStore.new
|
42
47
|
def self.lookup_store(*store_option)
|
43
|
-
store, *parameters = *(
|
48
|
+
store, *parameters = *Array.wrap(store_option).flatten
|
44
49
|
|
45
50
|
case store
|
46
51
|
when Symbol
|
47
|
-
store_class_name =
|
52
|
+
store_class_name = store.to_s.camelize
|
48
53
|
store_class = ActiveSupport::Cache.const_get(store_class_name)
|
49
54
|
store_class.new(*parameters)
|
50
55
|
when nil
|
@@ -54,19 +59,27 @@ module ActiveSupport
|
|
54
59
|
end
|
55
60
|
end
|
56
61
|
|
62
|
+
RAILS_CACHE_ID = ENV["RAILS_CACHE_ID"]
|
63
|
+
RAILS_APP_VERION = ENV["RAILS_APP_VERION"]
|
64
|
+
EXPANDED_CACHE = RAILS_CACHE_ID || RAILS_APP_VERION
|
65
|
+
|
57
66
|
def self.expand_cache_key(key, namespace = nil)
|
58
67
|
expanded_cache_key = namespace ? "#{namespace}/" : ""
|
59
68
|
|
60
|
-
if
|
61
|
-
expanded_cache_key << "#{
|
69
|
+
if EXPANDED_CACHE
|
70
|
+
expanded_cache_key << "#{RAILS_CACHE_ID || RAILS_APP_VERION}/"
|
62
71
|
end
|
63
72
|
|
64
|
-
expanded_cache_key <<
|
65
|
-
|
73
|
+
expanded_cache_key <<
|
74
|
+
if key.respond_to?(:cache_key)
|
66
75
|
key.cache_key
|
67
|
-
|
68
|
-
key.
|
69
|
-
|
76
|
+
elsif key.is_a?(Array)
|
77
|
+
if key.size > 1
|
78
|
+
key.collect { |element| expand_cache_key(element) }.to_param
|
79
|
+
else
|
80
|
+
key.first.to_param
|
81
|
+
end
|
82
|
+
elsif key
|
70
83
|
key.to_param
|
71
84
|
end.to_s
|
72
85
|
|
@@ -84,23 +97,21 @@ module ActiveSupport
|
|
84
97
|
# Ruby objects, but don't count on every cache store to be able to do that.
|
85
98
|
#
|
86
99
|
# cache = ActiveSupport::Cache::MemoryStore.new
|
87
|
-
#
|
100
|
+
#
|
88
101
|
# cache.read("city") # => nil
|
89
102
|
# cache.write("city", "Duckburgh")
|
90
103
|
# cache.read("city") # => "Duckburgh"
|
91
104
|
class Store
|
92
|
-
cattr_accessor :logger
|
105
|
+
cattr_accessor :logger, :instance_writter => false
|
93
106
|
|
94
|
-
attr_reader :silence
|
107
|
+
attr_reader :silence
|
108
|
+
alias :silence? :silence
|
95
109
|
|
96
110
|
def silence!
|
97
111
|
@silence = true
|
98
112
|
self
|
99
113
|
end
|
100
114
|
|
101
|
-
alias silence? silence
|
102
|
-
alias logger_off? logger_off
|
103
|
-
|
104
115
|
def mute
|
105
116
|
previous_silence, @silence = defined?(@silence) && @silence, true
|
106
117
|
yield
|
@@ -108,6 +119,15 @@ module ActiveSupport
|
|
108
119
|
@silence = previous_silence
|
109
120
|
end
|
110
121
|
|
122
|
+
# Set to true if cache stores should be instrumented. By default is false.
|
123
|
+
def self.instrument=(boolean)
|
124
|
+
Thread.current[:instrument_cache_store] = boolean
|
125
|
+
end
|
126
|
+
|
127
|
+
def self.instrument
|
128
|
+
Thread.current[:instrument_cache_store] || false
|
129
|
+
end
|
130
|
+
|
111
131
|
# Fetches data from the cache, using the given key. If there is data in
|
112
132
|
# the cache with the given key, then that data is returned.
|
113
133
|
#
|
@@ -119,7 +139,7 @@ module ActiveSupport
|
|
119
139
|
#
|
120
140
|
# cache.write("today", "Monday")
|
121
141
|
# cache.fetch("today") # => "Monday"
|
122
|
-
#
|
142
|
+
#
|
123
143
|
# cache.fetch("city") # => nil
|
124
144
|
# cache.fetch("city") do
|
125
145
|
# "Duckburgh"
|
@@ -138,8 +158,8 @@ module ActiveSupport
|
|
138
158
|
#
|
139
159
|
# For example, MemCacheStore's #write method supports the +:expires_in+
|
140
160
|
# option, which tells the memcached server to automatically expire the
|
141
|
-
# cache item after a certain period.
|
142
|
-
# too:
|
161
|
+
# cache item after a certain period. This options is also supported by
|
162
|
+
# FileStore's #read method. We can use this option with #fetch too:
|
143
163
|
#
|
144
164
|
# cache = ActiveSupport::Cache::MemCacheStore.new
|
145
165
|
# cache.fetch("foo", :force => true, :expires_in => 5.seconds) do
|
@@ -148,26 +168,13 @@ module ActiveSupport
|
|
148
168
|
# cache.fetch("foo") # => "bar"
|
149
169
|
# sleep(6)
|
150
170
|
# cache.fetch("foo") # => nil
|
151
|
-
def fetch(key, options = {})
|
152
|
-
@logger_off = true
|
171
|
+
def fetch(key, options = {}, &block)
|
153
172
|
if !options[:force] && value = read(key, options)
|
154
|
-
@logger_off = false
|
155
|
-
log("hit", key, options)
|
156
173
|
value
|
157
174
|
elsif block_given?
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
value = nil
|
162
|
-
ms = Benchmark.ms { value = yield }
|
163
|
-
|
164
|
-
@logger_off = true
|
165
|
-
write(key, value, options)
|
166
|
-
@logger_off = false
|
167
|
-
|
168
|
-
log('write (will save %.2fms)' % ms, key, nil)
|
169
|
-
|
170
|
-
value
|
175
|
+
result = instrument(:generate, key, options, &block)
|
176
|
+
write(key, result, options)
|
177
|
+
result
|
171
178
|
end
|
172
179
|
end
|
173
180
|
|
@@ -178,8 +185,12 @@ module ActiveSupport
|
|
178
185
|
# You may also specify additional options via the +options+ argument.
|
179
186
|
# The specific cache store implementation will decide what to do with
|
180
187
|
# +options+.
|
181
|
-
|
182
|
-
|
188
|
+
#
|
189
|
+
# For example, FileStore supports the +:expires_in+ option, which
|
190
|
+
# makes the method return nil for cache items older than the specified
|
191
|
+
# period.
|
192
|
+
def read(key, options = nil, &block)
|
193
|
+
instrument(:read, key, options, &block)
|
183
194
|
end
|
184
195
|
|
185
196
|
# Writes the given value to the cache, with the given key.
|
@@ -187,7 +198,7 @@ module ActiveSupport
|
|
187
198
|
# You may also specify additional options via the +options+ argument.
|
188
199
|
# The specific cache store implementation will decide what to do with
|
189
200
|
# +options+.
|
190
|
-
#
|
201
|
+
#
|
191
202
|
# For example, MemCacheStore supports the +:expires_in+ option, which
|
192
203
|
# tells the memcached server to automatically expire the cache item after
|
193
204
|
# a certain period:
|
@@ -197,24 +208,23 @@ module ActiveSupport
|
|
197
208
|
# cache.read("foo") # => "bar"
|
198
209
|
# sleep(6)
|
199
210
|
# cache.read("foo") # => nil
|
200
|
-
def write(key, value, options = nil)
|
201
|
-
|
211
|
+
def write(key, value, options = nil, &block)
|
212
|
+
instrument(:write, key, options, &block)
|
202
213
|
end
|
203
214
|
|
204
|
-
def delete(key, options = nil)
|
205
|
-
|
215
|
+
def delete(key, options = nil, &block)
|
216
|
+
instrument(:delete, key, options, &block)
|
206
217
|
end
|
207
218
|
|
208
|
-
def delete_matched(matcher, options = nil)
|
209
|
-
|
219
|
+
def delete_matched(matcher, options = nil, &block)
|
220
|
+
instrument(:delete_matched, matcher.inspect, options, &block)
|
210
221
|
end
|
211
222
|
|
212
|
-
def exist?(key, options = nil)
|
213
|
-
|
223
|
+
def exist?(key, options = nil, &block)
|
224
|
+
instrument(:exist?, key, options, &block)
|
214
225
|
end
|
215
226
|
|
216
227
|
def increment(key, amount = 1)
|
217
|
-
log("incrementing", key, amount)
|
218
228
|
if num = read(key)
|
219
229
|
write(key, num + amount)
|
220
230
|
else
|
@@ -223,7 +233,6 @@ module ActiveSupport
|
|
223
233
|
end
|
224
234
|
|
225
235
|
def decrement(key, amount = 1)
|
226
|
-
log("decrementing", key, amount)
|
227
236
|
if num = read(key)
|
228
237
|
write(key, num - amount)
|
229
238
|
else
|
@@ -234,14 +243,25 @@ module ActiveSupport
|
|
234
243
|
private
|
235
244
|
def expires_in(options)
|
236
245
|
expires_in = options && options[:expires_in]
|
237
|
-
|
238
246
|
raise ":expires_in must be a number" if expires_in && !expires_in.is_a?(Numeric)
|
239
|
-
|
240
247
|
expires_in || 0
|
241
248
|
end
|
242
249
|
|
250
|
+
def instrument(operation, key, options)
|
251
|
+
log(operation, key, options)
|
252
|
+
|
253
|
+
if self.class.instrument
|
254
|
+
payload = { :key => key }
|
255
|
+
payload.merge!(options) if options.is_a?(Hash)
|
256
|
+
ActiveSupport::Notifications.instrument("active_support.cache_#{operation}", payload){ yield }
|
257
|
+
else
|
258
|
+
yield
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
243
262
|
def log(operation, key, options)
|
244
|
-
|
263
|
+
return unless logger && !silence?
|
264
|
+
logger.debug("Cache #{operation}: #{key}#{options ? " (#{options.inspect})" : ""}")
|
245
265
|
end
|
246
266
|
end
|
247
267
|
end
|