activesupport 3.0.pre → 3.0.0.rc
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 +121 -1
- data/README.rdoc +33 -0
- data/lib/active_support.rb +42 -4
- data/lib/active_support/backtrace_cleaner.rb +31 -9
- data/lib/active_support/benchmarkable.rb +1 -0
- data/lib/active_support/buffered_logger.rb +5 -2
- data/lib/active_support/builder.rb +6 -0
- data/lib/active_support/cache.rb +454 -84
- data/lib/active_support/cache/compressed_mem_cache_store.rb +6 -13
- data/lib/active_support/cache/file_store.rb +140 -41
- data/lib/active_support/cache/mem_cache_store.rb +121 -76
- data/lib/active_support/cache/memory_store.rb +127 -27
- data/lib/active_support/cache/strategy/local_cache.rb +111 -58
- data/lib/active_support/cache/synchronized_memory_store.rb +2 -38
- data/lib/active_support/callbacks.rb +105 -76
- data/lib/active_support/configurable.rb +19 -18
- data/lib/active_support/core_ext/array.rb +1 -0
- data/lib/active_support/core_ext/array/access.rb +1 -1
- data/lib/active_support/core_ext/array/conversions.rb +29 -54
- data/lib/active_support/core_ext/array/extract_options.rb +16 -1
- data/lib/active_support/core_ext/array/grouping.rb +1 -1
- data/lib/active_support/core_ext/array/random_access.rb +26 -5
- data/lib/active_support/core_ext/array/uniq_by.rb +17 -0
- data/lib/active_support/core_ext/array/wrap.rb +13 -9
- data/lib/active_support/core_ext/benchmark.rb +0 -12
- data/lib/active_support/core_ext/cgi/escape_skipping_slashes.rb +2 -0
- data/lib/active_support/core_ext/class.rb +2 -1
- data/lib/active_support/core_ext/class/attribute.rb +67 -0
- data/lib/active_support/core_ext/class/attribute_accessors.rb +33 -27
- data/lib/active_support/core_ext/class/delegating_attributes.rb +35 -41
- data/lib/active_support/core_ext/class/inheritable_attributes.rb +23 -14
- data/lib/active_support/core_ext/class/subclasses.rb +50 -0
- data/lib/active_support/core_ext/date/calculations.rb +35 -12
- data/lib/active_support/core_ext/date/conversions.rb +5 -5
- data/lib/active_support/core_ext/date/zones.rb +14 -0
- data/lib/active_support/core_ext/date_time/calculations.rb +3 -1
- data/lib/active_support/core_ext/date_time/conversions.rb +24 -5
- data/lib/active_support/core_ext/date_time/zones.rb +4 -0
- data/lib/active_support/core_ext/enumerable.rb +5 -9
- data/lib/active_support/core_ext/exception.rb +0 -47
- data/lib/active_support/core_ext/file.rb +1 -0
- data/lib/active_support/core_ext/file/atomic.rb +3 -2
- data/lib/active_support/core_ext/file/path.rb +5 -0
- data/lib/active_support/core_ext/float/rounding.rb +3 -2
- data/lib/active_support/core_ext/hash/conversions.rb +65 -145
- data/lib/active_support/core_ext/hash/deep_merge.rb +6 -7
- data/lib/active_support/core_ext/hash/except.rb +8 -1
- data/lib/active_support/core_ext/hash/indifferent_access.rb +5 -0
- data/lib/active_support/core_ext/hash/keys.rb +10 -11
- data/lib/active_support/core_ext/hash/slice.rb +6 -0
- data/lib/active_support/core_ext/integer.rb +1 -1
- data/lib/active_support/core_ext/integer/multiple.rb +6 -0
- data/lib/active_support/core_ext/kernel.rb +1 -1
- data/lib/active_support/core_ext/kernel/debugger.rb +3 -2
- data/lib/active_support/core_ext/kernel/reporting.rb +2 -1
- data/lib/active_support/core_ext/kernel/requires.rb +2 -2
- data/lib/active_support/core_ext/kernel/singleton_class.rb +13 -0
- data/lib/active_support/core_ext/load_error.rb +17 -30
- data/lib/active_support/core_ext/logger.rb +2 -40
- data/lib/active_support/core_ext/module.rb +5 -3
- data/lib/active_support/core_ext/module/aliasing.rb +1 -1
- data/lib/active_support/core_ext/module/anonymous.rb +24 -0
- data/lib/active_support/core_ext/module/attr_accessor_with_default.rb +1 -1
- data/lib/active_support/core_ext/module/attr_internal.rb +2 -2
- data/lib/active_support/core_ext/module/attribute_accessors.rb +20 -22
- data/lib/active_support/core_ext/module/delegation.rb +21 -10
- data/lib/active_support/core_ext/module/introspection.rb +8 -8
- data/lib/active_support/core_ext/module/method_names.rb +14 -0
- data/lib/active_support/core_ext/module/reachable.rb +10 -0
- data/lib/active_support/core_ext/module/remove_method.rb +11 -0
- data/lib/active_support/core_ext/module/synchronization.rb +2 -1
- data/lib/active_support/core_ext/name_error.rb +3 -1
- data/lib/active_support/core_ext/object.rb +5 -3
- data/lib/active_support/core_ext/object/blank.rb +20 -2
- data/lib/active_support/core_ext/object/conversions.rb +2 -16
- data/lib/active_support/core_ext/object/duplicable.rb +23 -1
- data/lib/active_support/core_ext/object/instance_variables.rb +0 -7
- data/lib/active_support/core_ext/object/to_json.rb +19 -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/object/with_options.rb +2 -0
- data/lib/active_support/core_ext/proc.rb +4 -4
- data/lib/active_support/core_ext/range/overlaps.rb +1 -1
- data/lib/active_support/core_ext/regexp.rb +0 -22
- data/lib/active_support/core_ext/rexml.rb +4 -1
- data/lib/active_support/core_ext/string.rb +3 -2
- data/lib/active_support/core_ext/string/access.rb +4 -2
- data/lib/active_support/core_ext/string/conversions.rb +28 -1
- data/lib/active_support/core_ext/string/encoding.rb +11 -0
- data/lib/active_support/core_ext/string/exclude.rb +6 -0
- data/lib/active_support/core_ext/string/filters.rb +29 -0
- data/lib/active_support/core_ext/string/inflections.rb +12 -12
- data/lib/active_support/core_ext/string/interpolation.rb +2 -92
- data/lib/active_support/core_ext/string/multibyte.rb +16 -19
- data/lib/active_support/core_ext/string/output_safety.rb +101 -35
- data/lib/active_support/core_ext/string/starts_ends_with.rb +0 -14
- data/lib/active_support/core_ext/string/xchar.rb +1 -1
- data/lib/active_support/core_ext/time/calculations.rb +14 -7
- data/lib/active_support/core_ext/time/conversions.rb +1 -0
- data/lib/active_support/core_ext/time/marshal.rb +56 -0
- data/lib/active_support/core_ext/time/zones.rb +2 -5
- data/lib/active_support/core_ext/uri.rb +10 -4
- data/lib/active_support/dependencies.rb +200 -197
- data/lib/active_support/dependencies/autoload.rb +50 -0
- data/lib/active_support/deprecation/behaviors.rb +13 -9
- data/lib/active_support/deprecation/method_wrappers.rb +10 -9
- data/lib/active_support/deprecation/proxy_wrappers.rb +7 -0
- data/lib/active_support/deprecation/reporting.rb +5 -3
- data/lib/active_support/descendants_tracker.rb +43 -0
- data/lib/active_support/duration.rb +8 -4
- data/lib/active_support/file_update_checker.rb +36 -0
- data/lib/active_support/hash_with_indifferent_access.rb +9 -1
- data/lib/active_support/i18n.rb +9 -0
- data/lib/active_support/i18n_railtie.rb +81 -0
- data/lib/active_support/inflections.rb +1 -1
- data/lib/active_support/inflector.rb +4 -407
- data/lib/active_support/inflector/inflections.rb +211 -0
- data/lib/active_support/inflector/methods.rb +151 -0
- data/lib/active_support/inflector/transliterate.rb +97 -0
- data/lib/active_support/json/backends/jsongem.rb +12 -9
- data/lib/active_support/json/backends/yajl.rb +40 -0
- data/lib/active_support/json/backends/yaml.rb +1 -1
- data/lib/active_support/json/decoding.rb +17 -2
- data/lib/active_support/json/encoding.rb +48 -31
- data/lib/active_support/json/variable.rb +2 -4
- data/lib/active_support/lazy_load_hooks.rb +27 -0
- data/lib/active_support/locale/en.yml +5 -2
- data/lib/active_support/log_subscriber.rb +123 -0
- data/lib/active_support/log_subscriber/test_helper.rb +99 -0
- data/lib/active_support/memoizable.rb +1 -1
- data/lib/active_support/message_encryptor.rb +1 -0
- data/lib/active_support/message_verifier.rb +2 -1
- data/lib/active_support/multibyte.rb +8 -23
- data/lib/active_support/multibyte/chars.rb +213 -446
- data/lib/active_support/multibyte/unicode.rb +392 -0
- data/lib/active_support/multibyte/utils.rb +6 -7
- data/lib/active_support/notifications.rb +29 -122
- data/lib/active_support/notifications/fanout.rb +61 -0
- data/lib/active_support/notifications/instrumenter.rb +54 -0
- data/lib/active_support/ordered_hash.rb +59 -14
- data/lib/active_support/ordered_options.rb +6 -0
- data/lib/active_support/railtie.rb +60 -0
- data/lib/active_support/rescuable.rb +7 -4
- data/lib/active_support/ruby/shim.rb +4 -6
- data/lib/active_support/test_case.rb +2 -7
- data/lib/active_support/testing/assertions.rb +15 -0
- data/lib/active_support/testing/declarative.rb +1 -1
- data/lib/active_support/testing/isolation.rb +64 -17
- data/lib/active_support/testing/performance.rb +306 -335
- data/lib/active_support/testing/setup_and_teardown.rb +51 -29
- data/lib/active_support/time.rb +24 -3
- data/lib/active_support/time_with_zone.rb +10 -14
- data/lib/active_support/values/time_zone.rb +192 -234
- data/lib/active_support/values/unicode_tables.dat +0 -0
- data/lib/active_support/version.rb +3 -2
- data/lib/active_support/whiny_nil.rb +9 -7
- data/lib/active_support/xml_mini.rb +130 -1
- data/lib/active_support/xml_mini/jdom.rb +2 -0
- data/lib/active_support/xml_mini/libxml.rb +23 -86
- data/lib/active_support/xml_mini/libxmlsax.rb +85 -0
- data/lib/active_support/xml_mini/nokogiri.rb +27 -24
- data/lib/active_support/xml_mini/nokogirisax.rb +83 -0
- data/lib/active_support/xml_mini/rexml.rb +8 -2
- metadata +62 -195
- data/README +0 -43
- data/lib/active_support/autoload.rb +0 -28
- data/lib/active_support/core_ext/boolean.rb +0 -1
- data/lib/active_support/core_ext/boolean/conversions.rb +0 -11
- data/lib/active_support/core_ext/class/removal.rb +0 -53
- data/lib/active_support/core_ext/date.rb +0 -7
- data/lib/active_support/core_ext/date_time.rb +0 -5
- data/lib/active_support/core_ext/integer/even_odd.rb +0 -16
- data/lib/active_support/core_ext/kernel/daemonizing.rb +0 -7
- data/lib/active_support/core_ext/module/inclusion.rb +0 -30
- data/lib/active_support/core_ext/module/loading.rb +0 -23
- data/lib/active_support/core_ext/nil.rb +0 -1
- data/lib/active_support/core_ext/nil/conversions.rb +0 -5
- data/lib/active_support/core_ext/object/extending.rb +0 -80
- data/lib/active_support/core_ext/object/metaclass.rb +0 -13
- data/lib/active_support/core_ext/object/misc.rb +0 -3
- data/lib/active_support/core_ext/object/returning.rb +0 -42
- data/lib/active_support/core_ext/object/tap.rb +0 -16
- data/lib/active_support/core_ext/string/bytesize.rb +0 -5
- data/lib/active_support/core_ext/string/iterators.rb +0 -13
- data/lib/active_support/core_ext/symbol.rb +0 -1
- data/lib/active_support/core_ext/symbol/to_proc.rb +0 -14
- data/lib/active_support/core_ext/time.rb +0 -10
- data/lib/active_support/core_ext/time/marshal_with_utc_flag.rb +0 -22
- data/lib/active_support/deprecated_callbacks.rb +0 -283
- data/lib/active_support/multibyte/unicode_database.rb +0 -71
- data/lib/active_support/vendor.rb +0 -16
- data/lib/active_support/vendor/builder-2.1.2/lib/blankslate.rb +0 -113
- data/lib/active_support/vendor/builder-2.1.2/lib/builder.rb +0 -13
- data/lib/active_support/vendor/builder-2.1.2/lib/builder/blankslate.rb +0 -20
- data/lib/active_support/vendor/builder-2.1.2/lib/builder/css.rb +0 -250
- data/lib/active_support/vendor/builder-2.1.2/lib/builder/xchar.rb +0 -115
- data/lib/active_support/vendor/builder-2.1.2/lib/builder/xmlbase.rb +0 -139
- data/lib/active_support/vendor/builder-2.1.2/lib/builder/xmlevents.rb +0 -63
- data/lib/active_support/vendor/builder-2.1.2/lib/builder/xmlmarkup.rb +0 -328
- data/lib/active_support/vendor/i18n-0.1.3/MIT-LICENSE +0 -20
- data/lib/active_support/vendor/i18n-0.1.3/README.textile +0 -20
- data/lib/active_support/vendor/i18n-0.1.3/Rakefile +0 -5
- data/lib/active_support/vendor/i18n-0.1.3/i18n.gemspec +0 -27
- data/lib/active_support/vendor/i18n-0.1.3/lib/i18n.rb +0 -204
- data/lib/active_support/vendor/i18n-0.1.3/lib/i18n/backend/simple.rb +0 -215
- data/lib/active_support/vendor/i18n-0.1.3/lib/i18n/exceptions.rb +0 -53
- data/lib/active_support/vendor/i18n-0.1.3/test/all.rb +0 -5
- data/lib/active_support/vendor/i18n-0.1.3/test/i18n_exceptions_test.rb +0 -99
- data/lib/active_support/vendor/i18n-0.1.3/test/i18n_test.rb +0 -124
- data/lib/active_support/vendor/i18n-0.1.3/test/locale/en.rb +0 -1
- data/lib/active_support/vendor/i18n-0.1.3/test/locale/en.yml +0 -3
- data/lib/active_support/vendor/i18n-0.1.3/test/simple_backend_test.rb +0 -567
- data/lib/active_support/vendor/memcache-client-1.7.5/lib/memcache.rb +0 -1133
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo.rb +0 -33
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/data_timezone.rb +0 -47
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/data_timezone_info.rb +0 -228
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Algiers.rb +0 -55
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Cairo.rb +0 -219
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Casablanca.rb +0 -42
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Harare.rb +0 -18
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Johannesburg.rb +0 -25
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Monrovia.rb +0 -22
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Nairobi.rb +0 -23
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Argentina/Buenos_Aires.rb +0 -166
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Argentina/San_Juan.rb +0 -86
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Bogota.rb +0 -23
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Caracas.rb +0 -23
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Chicago.rb +0 -283
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Chihuahua.rb +0 -136
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Denver.rb +0 -204
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Godthab.rb +0 -161
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Guatemala.rb +0 -27
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Halifax.rb +0 -274
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Indiana/Indianapolis.rb +0 -149
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Juneau.rb +0 -194
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/La_Paz.rb +0 -22
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Lima.rb +0 -35
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Los_Angeles.rb +0 -232
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Mazatlan.rb +0 -139
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Mexico_City.rb +0 -144
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Monterrey.rb +0 -131
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/New_York.rb +0 -282
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Phoenix.rb +0 -30
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Regina.rb +0 -74
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Santiago.rb +0 -205
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Sao_Paulo.rb +0 -171
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/St_Johns.rb +0 -288
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Tijuana.rb +0 -196
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Almaty.rb +0 -67
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Baghdad.rb +0 -73
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Baku.rb +0 -161
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Bangkok.rb +0 -20
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Chongqing.rb +0 -33
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Colombo.rb +0 -30
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Dhaka.rb +0 -27
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Hong_Kong.rb +0 -87
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Irkutsk.rb +0 -165
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Jakarta.rb +0 -30
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Jerusalem.rb +0 -163
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Kabul.rb +0 -20
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Kamchatka.rb +0 -163
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Karachi.rb +0 -32
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Kathmandu.rb +0 -20
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Kolkata.rb +0 -25
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Krasnoyarsk.rb +0 -163
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Kuala_Lumpur.rb +0 -31
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Kuwait.rb +0 -18
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Magadan.rb +0 -163
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Muscat.rb +0 -18
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Novosibirsk.rb +0 -164
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Rangoon.rb +0 -24
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Riyadh.rb +0 -18
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Seoul.rb +0 -34
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Shanghai.rb +0 -35
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Singapore.rb +0 -33
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Taipei.rb +0 -59
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Tashkent.rb +0 -47
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Tbilisi.rb +0 -78
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Tehran.rb +0 -121
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Tokyo.rb +0 -30
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Ulaanbaatar.rb +0 -65
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Urumqi.rb +0 -33
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Vladivostok.rb +0 -164
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Yakutsk.rb +0 -163
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Yekaterinburg.rb +0 -165
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Yerevan.rb +0 -165
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Atlantic/Azores.rb +0 -270
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Atlantic/Cape_Verde.rb +0 -23
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Atlantic/South_Georgia.rb +0 -18
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Adelaide.rb +0 -187
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Brisbane.rb +0 -35
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Darwin.rb +0 -29
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Hobart.rb +0 -193
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Melbourne.rb +0 -185
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Perth.rb +0 -37
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Sydney.rb +0 -185
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Etc/UTC.rb +0 -16
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Amsterdam.rb +0 -228
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Athens.rb +0 -185
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Belgrade.rb +0 -163
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Berlin.rb +0 -188
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Bratislava.rb +0 -13
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Brussels.rb +0 -232
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Bucharest.rb +0 -181
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Budapest.rb +0 -197
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Copenhagen.rb +0 -179
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Dublin.rb +0 -276
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Helsinki.rb +0 -163
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Istanbul.rb +0 -218
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Kiev.rb +0 -168
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Lisbon.rb +0 -268
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Ljubljana.rb +0 -13
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/London.rb +0 -288
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Madrid.rb +0 -211
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Minsk.rb +0 -170
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Moscow.rb +0 -181
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Paris.rb +0 -232
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Prague.rb +0 -187
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Riga.rb +0 -176
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Rome.rb +0 -215
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Sarajevo.rb +0 -13
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Skopje.rb +0 -13
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Sofia.rb +0 -173
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Stockholm.rb +0 -165
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Tallinn.rb +0 -172
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Vienna.rb +0 -183
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Vilnius.rb +0 -170
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Warsaw.rb +0 -212
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Zagreb.rb +0 -13
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Auckland.rb +0 -202
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Fiji.rb +0 -23
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Guam.rb +0 -22
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Honolulu.rb +0 -28
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Majuro.rb +0 -20
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Midway.rb +0 -25
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Noumea.rb +0 -25
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Pago_Pago.rb +0 -26
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Port_Moresby.rb +0 -20
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Tongatapu.rb +0 -27
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/info_timezone.rb +0 -52
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/linked_timezone.rb +0 -51
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/linked_timezone_info.rb +0 -44
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/offset_rationals.rb +0 -98
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/ruby_core_support.rb +0 -56
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/time_or_datetime.rb +0 -292
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/timezone.rb +0 -508
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/timezone_definition.rb +0 -56
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/timezone_info.rb +0 -40
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/timezone_offset_info.rb +0 -94
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/timezone_period.rb +0 -198
- data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/timezone_transition_info.rb +0 -129
@@ -0,0 +1,61 @@
|
|
1
|
+
module ActiveSupport
|
2
|
+
module Notifications
|
3
|
+
# This is a default queue implementation that ships with Notifications. It
|
4
|
+
# just pushes events to all registered log subscribers.
|
5
|
+
class Fanout
|
6
|
+
def initialize
|
7
|
+
@subscribers = []
|
8
|
+
@listeners_for = {}
|
9
|
+
end
|
10
|
+
|
11
|
+
def subscribe(pattern = nil, block = Proc.new)
|
12
|
+
subscriber = Subscriber.new(pattern, block).tap do |s|
|
13
|
+
@subscribers << s
|
14
|
+
end
|
15
|
+
@listeners_for.clear
|
16
|
+
subscriber
|
17
|
+
end
|
18
|
+
|
19
|
+
def unsubscribe(subscriber)
|
20
|
+
@subscribers.reject! {|s| s.matches?(subscriber)}
|
21
|
+
@listeners_for.clear
|
22
|
+
end
|
23
|
+
|
24
|
+
def publish(name, *args)
|
25
|
+
listeners_for(name).each { |s| s.publish(name, *args) }
|
26
|
+
end
|
27
|
+
|
28
|
+
def listeners_for(name)
|
29
|
+
@listeners_for[name] ||= @subscribers.select { |s| s.subscribed_to?(name) }
|
30
|
+
end
|
31
|
+
|
32
|
+
def listening?(name)
|
33
|
+
listeners_for(name).any?
|
34
|
+
end
|
35
|
+
|
36
|
+
# This is a sync queue, so there is not waiting.
|
37
|
+
def wait
|
38
|
+
end
|
39
|
+
|
40
|
+
class Subscriber #:nodoc:
|
41
|
+
def initialize(pattern, delegate)
|
42
|
+
@pattern = pattern
|
43
|
+
@delegate = delegate
|
44
|
+
end
|
45
|
+
|
46
|
+
def publish(message, *args)
|
47
|
+
@delegate.call(message, *args)
|
48
|
+
end
|
49
|
+
|
50
|
+
def subscribed_to?(name)
|
51
|
+
!@pattern || @pattern === name.to_s
|
52
|
+
end
|
53
|
+
|
54
|
+
def matches?(subscriber_or_name)
|
55
|
+
self === subscriber_or_name ||
|
56
|
+
@pattern && @pattern === subscriber_or_name
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'active_support/secure_random'
|
2
|
+
require 'active_support/core_ext/module/delegation'
|
3
|
+
|
4
|
+
module ActiveSupport
|
5
|
+
module Notifications
|
6
|
+
class Instrumenter
|
7
|
+
attr_reader :id
|
8
|
+
|
9
|
+
def initialize(notifier)
|
10
|
+
@id = unique_id
|
11
|
+
@notifier = notifier
|
12
|
+
end
|
13
|
+
|
14
|
+
# Instrument the given block by measuring the time taken to execute it
|
15
|
+
# and publish it. Notice that events get sent even if an error occurs
|
16
|
+
# in the passed-in block
|
17
|
+
def instrument(name, payload={})
|
18
|
+
started = Time.now
|
19
|
+
|
20
|
+
begin
|
21
|
+
yield
|
22
|
+
rescue Exception => e
|
23
|
+
payload[:exception] = [e.class.name, e.message]
|
24
|
+
raise e
|
25
|
+
ensure
|
26
|
+
@notifier.publish(name, started, Time.now, @id, payload)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
def unique_id
|
32
|
+
SecureRandom.hex(10)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class Event
|
37
|
+
attr_reader :name, :time, :end, :transaction_id, :payload, :duration
|
38
|
+
|
39
|
+
def initialize(name, start, ending, transaction_id, payload)
|
40
|
+
@name = name
|
41
|
+
@payload = payload.dup
|
42
|
+
@time = start
|
43
|
+
@transaction_id = transaction_id
|
44
|
+
@end = ending
|
45
|
+
@duration = 1000.0 * (@end - @time)
|
46
|
+
end
|
47
|
+
|
48
|
+
def parent_of?(event)
|
49
|
+
start = (time - event.time) * 1000
|
50
|
+
start <= 0 && (start + duration >= event.duration)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -1,10 +1,39 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
YAML.add_builtin_type("omap") do |type, val|
|
4
|
+
ActiveSupport::OrderedHash[val.map(&:to_a).map(&:first)]
|
5
|
+
end
|
6
|
+
|
1
7
|
# OrderedHash is namespaced to prevent conflicts with other implementations
|
2
8
|
module ActiveSupport
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
9
|
+
class OrderedHash < ::Hash #:nodoc:
|
10
|
+
def to_yaml_type
|
11
|
+
"!tag:yaml.org,2002:omap"
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_yaml(opts = {})
|
15
|
+
YAML.quick_emit(self, opts) do |out|
|
16
|
+
out.seq(taguri, to_yaml_style) do |seq|
|
17
|
+
each do |k, v|
|
18
|
+
seq.add(k => v)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Hash is ordered in Ruby 1.9!
|
25
|
+
if RUBY_VERSION < '1.9'
|
26
|
+
|
27
|
+
# In MRI the Hash class is core and written in C. In particular, methods are
|
28
|
+
# programmed with explicit C function calls and polymorphism is not honored.
|
29
|
+
#
|
30
|
+
# For example, []= is crucial in this implementation to maintain the @keys
|
31
|
+
# array but hash.c invokes rb_hash_aset() originally. This prevents method
|
32
|
+
# reuse through inheritance and forces us to reimplement stuff.
|
33
|
+
#
|
34
|
+
# For instance, we cannot use the inherited #merge! because albeit the algorithm
|
35
|
+
# itself would work, our []= is not being called at all by the C code.
|
36
|
+
|
8
37
|
def initialize(*args, &block)
|
9
38
|
super
|
10
39
|
@keys = []
|
@@ -52,7 +81,7 @@ module ActiveSupport
|
|
52
81
|
end
|
53
82
|
super
|
54
83
|
end
|
55
|
-
|
84
|
+
|
56
85
|
def delete_if
|
57
86
|
super
|
58
87
|
sync_keys!
|
@@ -112,23 +141,39 @@ module ActiveSupport
|
|
112
141
|
end
|
113
142
|
|
114
143
|
def merge!(other_hash)
|
115
|
-
|
144
|
+
if block_given?
|
145
|
+
other_hash.each { |k, v| self[k] = key?(k) ? yield(k, self[k], v) : v }
|
146
|
+
else
|
147
|
+
other_hash.each { |k, v| self[k] = v }
|
148
|
+
end
|
116
149
|
self
|
117
150
|
end
|
118
151
|
|
119
|
-
|
120
|
-
|
152
|
+
alias_method :update, :merge!
|
153
|
+
|
154
|
+
def merge(other_hash, &block)
|
155
|
+
dup.merge!(other_hash, &block)
|
121
156
|
end
|
122
157
|
|
123
|
-
|
124
|
-
|
158
|
+
# When replacing with another hash, the initial order of our keys must come from the other hash -ordered or not.
|
159
|
+
def replace(other)
|
160
|
+
super
|
161
|
+
@keys = other.keys
|
162
|
+
self
|
125
163
|
end
|
126
164
|
|
127
|
-
|
165
|
+
def invert
|
166
|
+
OrderedHash[self.to_a.map!{|key_value_pair| key_value_pair.reverse}]
|
167
|
+
end
|
128
168
|
|
129
|
-
def
|
130
|
-
|
169
|
+
def inspect
|
170
|
+
"#<OrderedHash #{super}>"
|
131
171
|
end
|
172
|
+
|
173
|
+
private
|
174
|
+
def sync_keys!
|
175
|
+
@keys.delete_if {|k| !has_key?(k)}
|
176
|
+
end
|
132
177
|
end
|
133
178
|
end
|
134
179
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require "active_support"
|
2
|
+
require "rails"
|
3
|
+
require "active_support/i18n_railtie"
|
4
|
+
|
5
|
+
module ActiveSupport
|
6
|
+
class Railtie < Rails::Railtie
|
7
|
+
config.active_support = ActiveSupport::OrderedOptions.new
|
8
|
+
|
9
|
+
# Loads support for "whiny nil" (noisy warnings when methods are invoked
|
10
|
+
# on +nil+ values) if Configuration#whiny_nils is true.
|
11
|
+
initializer "active_support.initialize_whiny_nils" do |app|
|
12
|
+
require 'active_support/whiny_nil' if app.config.whiny_nils
|
13
|
+
end
|
14
|
+
|
15
|
+
initializer "active_support.deprecation_behavior" do |app|
|
16
|
+
if deprecation = app.config.active_support.deprecation
|
17
|
+
ActiveSupport::Deprecation.behavior = deprecation
|
18
|
+
else
|
19
|
+
defaults = {"development" => :log,
|
20
|
+
"production" => :notify,
|
21
|
+
"test" => :stderr}
|
22
|
+
|
23
|
+
env = Rails.env
|
24
|
+
|
25
|
+
if defaults.key?(env)
|
26
|
+
msg = "You did not specify how you would like Rails to report " \
|
27
|
+
"deprecation notices for your #{env} environment, please " \
|
28
|
+
"set config.active_support.deprecation to :#{defaults[env]} " \
|
29
|
+
"at config/environments/#{env}.rb"
|
30
|
+
|
31
|
+
warn msg
|
32
|
+
ActiveSupport::Deprecation.behavior = defaults[env]
|
33
|
+
else
|
34
|
+
msg = "You did not specify how you would like Rails to report " \
|
35
|
+
"deprecation notices for your #{env} environment, please " \
|
36
|
+
"set config.active_support.deprecation to :log, :notify or " \
|
37
|
+
":stderr at config/environments/#{env}.rb"
|
38
|
+
|
39
|
+
warn msg
|
40
|
+
ActiveSupport::Deprecation.behavior = :stderr
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Sets the default value for Time.zone
|
46
|
+
# If assigned value cannot be matched to a TimeZone, an exception will be raised.
|
47
|
+
initializer "active_support.initialize_time_zone" do |app|
|
48
|
+
require 'active_support/core_ext/time/zones'
|
49
|
+
zone_default = Time.__send__(:get_zone, app.config.time_zone)
|
50
|
+
|
51
|
+
unless zone_default
|
52
|
+
raise \
|
53
|
+
'Value assigned to config.time_zone not recognized.' +
|
54
|
+
'Run "rake -D time" for a list of tasks for finding appropriate time zone names.'
|
55
|
+
end
|
56
|
+
|
57
|
+
Time.zone_default = zone_default
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -1,5 +1,8 @@
|
|
1
|
-
require 'active_support/
|
1
|
+
require 'active_support/concern'
|
2
|
+
require 'active_support/core_ext/class/attribute'
|
2
3
|
require 'active_support/core_ext/proc'
|
4
|
+
require 'active_support/core_ext/string/inflections'
|
5
|
+
require 'active_support/core_ext/array/extract_options'
|
3
6
|
|
4
7
|
module ActiveSupport
|
5
8
|
# Rescuable module adds support for easier exception handling.
|
@@ -7,7 +10,7 @@ module ActiveSupport
|
|
7
10
|
extend Concern
|
8
11
|
|
9
12
|
included do
|
10
|
-
|
13
|
+
class_attribute :rescue_handlers
|
11
14
|
self.rescue_handlers = []
|
12
15
|
end
|
13
16
|
|
@@ -65,7 +68,7 @@ module ActiveSupport
|
|
65
68
|
end
|
66
69
|
|
67
70
|
# put the new handler at the end because the list is read in reverse
|
68
|
-
rescue_handlers
|
71
|
+
self.rescue_handlers += [[key, options[:with]]]
|
69
72
|
end
|
70
73
|
end
|
71
74
|
end
|
@@ -81,7 +84,7 @@ module ActiveSupport
|
|
81
84
|
def handler_for_rescue(exception)
|
82
85
|
# We go from right to left because pairs are pushed onto rescue_handlers
|
83
86
|
# as rescue_from declarations are found.
|
84
|
-
_, rescuer =
|
87
|
+
_, rescuer = self.class.rescue_handlers.reverse.detect do |klass_name, handler|
|
85
88
|
# The purpose of allowing strings in rescue_from is to support the
|
86
89
|
# declaration of handler associations for exception classes whose
|
87
90
|
# definition is yet unknown.
|
@@ -4,21 +4,19 @@
|
|
4
4
|
# Date next_year, next_month
|
5
5
|
# DateTime to_date, to_datetime, xmlschema
|
6
6
|
# Enumerable group_by, each_with_object, none?
|
7
|
-
# Integer even?, odd?
|
8
|
-
# Object tap
|
9
7
|
# Process Process.daemon
|
10
8
|
# REXML security fix
|
11
9
|
# String ord
|
12
|
-
# Symbol to_proc
|
13
10
|
# Time to_date, to_time, to_datetime
|
14
11
|
require 'active_support'
|
15
12
|
require 'active_support/core_ext/date/calculations'
|
16
13
|
require 'active_support/core_ext/date_time/conversions'
|
17
14
|
require 'active_support/core_ext/enumerable'
|
18
|
-
require 'active_support/core_ext/integer/even_odd'
|
19
|
-
require 'active_support/core_ext/object/tap'
|
20
15
|
require 'active_support/core_ext/process/daemon'
|
21
16
|
require 'active_support/core_ext/string/conversions'
|
17
|
+
require 'active_support/core_ext/string/interpolation'
|
18
|
+
require 'active_support/core_ext/string/encoding'
|
22
19
|
require 'active_support/core_ext/rexml'
|
23
|
-
require 'active_support/core_ext/symbol/to_proc'
|
24
20
|
require 'active_support/core_ext/time/conversions'
|
21
|
+
require 'active_support/core_ext/file/path'
|
22
|
+
require 'active_support/core_ext/module/method_names'
|
@@ -5,9 +5,10 @@ require 'active_support/testing/deprecation'
|
|
5
5
|
require 'active_support/testing/declarative'
|
6
6
|
require 'active_support/testing/pending'
|
7
7
|
require 'active_support/testing/isolation'
|
8
|
+
require 'active_support/core_ext/kernel/reporting'
|
8
9
|
|
9
10
|
begin
|
10
|
-
require 'mocha'
|
11
|
+
silence_warnings { require 'mocha' }
|
11
12
|
rescue LoadError
|
12
13
|
# Fake Mocha::ExpectationError so we can rescue it in #run. Bleh.
|
13
14
|
Object.const_set :Mocha, Module.new
|
@@ -21,12 +22,6 @@ module ActiveSupport
|
|
21
22
|
alias_method :method_name, :name if method_defined? :name
|
22
23
|
alias_method :method_name, :__name__ if method_defined? :__name__
|
23
24
|
else
|
24
|
-
# TODO: Figure out how to get the Rails::BacktraceFilter into minitest/unit
|
25
|
-
if defined?(Rails) && ENV['BACKTRACE'].nil?
|
26
|
-
require 'rails/backtrace_cleaner'
|
27
|
-
Test::Unit::Util::BacktraceFilter.module_eval { include Rails::BacktraceFilterForTestUnit }
|
28
|
-
end
|
29
|
-
|
30
25
|
Assertion = Test::Unit::AssertionFailedError
|
31
26
|
|
32
27
|
require 'active_support/testing/default'
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'active_support/core_ext/array/wrap'
|
2
|
+
require 'active_support/core_ext/object/blank'
|
2
3
|
|
3
4
|
module ActiveSupport
|
4
5
|
module Testing
|
@@ -62,6 +63,20 @@ module ActiveSupport
|
|
62
63
|
def assert_no_difference(expression, message = nil, &block)
|
63
64
|
assert_difference expression, 0, message, &block
|
64
65
|
end
|
66
|
+
|
67
|
+
# Test if an expression is blank. Passes if object.blank? is true.
|
68
|
+
#
|
69
|
+
# assert_blank [] # => true
|
70
|
+
def assert_blank(object)
|
71
|
+
assert object.blank?, "#{object.inspect} is not blank"
|
72
|
+
end
|
73
|
+
|
74
|
+
# Test if an expression is not blank. Passes if object.present? is true.
|
75
|
+
#
|
76
|
+
# assert_present {:data => 'x' } # => true
|
77
|
+
def assert_present(object)
|
78
|
+
assert object.present?, "#{object.inspect} is blank"
|
79
|
+
end
|
65
80
|
end
|
66
81
|
end
|
67
82
|
end
|
@@ -1,10 +1,26 @@
|
|
1
|
+
require 'rbconfig'
|
1
2
|
module ActiveSupport
|
2
3
|
module Testing
|
4
|
+
class RemoteError < StandardError
|
5
|
+
|
6
|
+
attr_reader :message, :backtrace
|
7
|
+
|
8
|
+
def initialize(exception)
|
9
|
+
@message = "caught #{exception.class.name}: #{exception.message}"
|
10
|
+
@backtrace = exception.backtrace
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
3
14
|
class ProxyTestResult
|
4
15
|
def initialize
|
5
16
|
@calls = []
|
6
17
|
end
|
7
18
|
|
19
|
+
def add_error(e)
|
20
|
+
e = Test::Unit::Error.new(e.test_name, RemoteError.new(e.exception))
|
21
|
+
@calls << [:add_error, e]
|
22
|
+
end
|
23
|
+
|
8
24
|
def __replay__(result)
|
9
25
|
@calls.each do |name, args|
|
10
26
|
result.send(name, *args)
|
@@ -18,31 +34,60 @@ module ActiveSupport
|
|
18
34
|
|
19
35
|
module Isolation
|
20
36
|
def self.forking_env?
|
21
|
-
!ENV["NO_FORK"] &&
|
37
|
+
!ENV["NO_FORK"] && ((Config::CONFIG['host_os'] !~ /mswin|mingw/) && (RUBY_PLATFORM !~ /java/))
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.included(base)
|
41
|
+
if defined?(::MiniTest) && base < ::MiniTest::Unit::TestCase
|
42
|
+
base.send :include, MiniTest
|
43
|
+
elsif defined?(Test::Unit)
|
44
|
+
base.send :include, TestUnit
|
45
|
+
end
|
22
46
|
end
|
23
47
|
|
24
|
-
def
|
25
|
-
unless defined?(@@ran_class_setup)
|
48
|
+
def _run_class_setup # class setup method should only happen in parent
|
49
|
+
unless defined?(@@ran_class_setup) || ENV['ISOLATION_TEST']
|
26
50
|
self.class.setup if self.class.respond_to?(:setup)
|
27
51
|
@@ran_class_setup = true
|
28
52
|
end
|
53
|
+
end
|
54
|
+
|
55
|
+
module TestUnit
|
56
|
+
def run(result)
|
57
|
+
_run_class_setup
|
29
58
|
|
30
|
-
|
59
|
+
yield(Test::Unit::TestCase::STARTED, name)
|
31
60
|
|
32
|
-
|
61
|
+
@_result = result
|
33
62
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
63
|
+
serialized = run_in_isolation do |proxy|
|
64
|
+
begin
|
65
|
+
super(proxy) { }
|
66
|
+
rescue Exception => e
|
67
|
+
proxy.add_error(Test::Unit::Error.new(name, e))
|
68
|
+
end
|
39
69
|
end
|
70
|
+
|
71
|
+
retval, proxy = Marshal.load(serialized)
|
72
|
+
proxy.__replay__(@_result)
|
73
|
+
|
74
|
+
yield(Test::Unit::TestCase::FINISHED, name)
|
75
|
+
retval
|
40
76
|
end
|
77
|
+
end
|
78
|
+
|
79
|
+
module MiniTest
|
80
|
+
def run(runner)
|
81
|
+
_run_class_setup
|
41
82
|
|
42
|
-
|
43
|
-
|
83
|
+
serialized = run_in_isolation do |isolated_runner|
|
84
|
+
super(isolated_runner)
|
85
|
+
end
|
44
86
|
|
45
|
-
|
87
|
+
retval, proxy = Marshal.load(serialized)
|
88
|
+
proxy.__replay__(runner)
|
89
|
+
retval
|
90
|
+
end
|
46
91
|
end
|
47
92
|
|
48
93
|
module Forking
|
@@ -52,8 +97,8 @@ module ActiveSupport
|
|
52
97
|
pid = fork do
|
53
98
|
read.close
|
54
99
|
proxy = ProxyTestResult.new
|
55
|
-
yield proxy
|
56
|
-
write.puts [Marshal.dump(proxy)].pack("m")
|
100
|
+
retval = yield proxy
|
101
|
+
write.puts [Marshal.dump([retval, proxy])].pack("m")
|
57
102
|
exit!
|
58
103
|
end
|
59
104
|
|
@@ -65,6 +110,8 @@ module ActiveSupport
|
|
65
110
|
end
|
66
111
|
|
67
112
|
module Subprocess
|
113
|
+
ORIG_ARGV = ARGV.dup unless defined?(ORIG_ARGV)
|
114
|
+
|
68
115
|
# Crazy H4X to get this working in windows / jruby with
|
69
116
|
# no forking.
|
70
117
|
def run_in_isolation(&blk)
|
@@ -72,9 +119,9 @@ module ActiveSupport
|
|
72
119
|
|
73
120
|
if ENV["ISOLATION_TEST"]
|
74
121
|
proxy = ProxyTestResult.new
|
75
|
-
yield proxy
|
122
|
+
retval = yield proxy
|
76
123
|
File.open(ENV["ISOLATION_OUTPUT"], "w") do |file|
|
77
|
-
file.puts [Marshal.dump(proxy)].pack("m")
|
124
|
+
file.puts [Marshal.dump([retval, proxy])].pack("m")
|
78
125
|
end
|
79
126
|
exit!
|
80
127
|
else
|