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
@@ -1,6 +1,8 @@
|
|
1
|
+
require 'active_support/descendants_tracker'
|
1
2
|
require 'active_support/core_ext/array/wrap'
|
2
3
|
require 'active_support/core_ext/class/inheritable_attributes'
|
3
4
|
require 'active_support/core_ext/kernel/reporting'
|
5
|
+
require 'active_support/core_ext/kernel/singleton_class'
|
4
6
|
|
5
7
|
module ActiveSupport
|
6
8
|
# Callbacks are hooks into the lifecycle of an object that allow you to trigger logic
|
@@ -83,6 +85,10 @@ module ActiveSupport
|
|
83
85
|
module Callbacks
|
84
86
|
extend Concern
|
85
87
|
|
88
|
+
included do
|
89
|
+
extend ActiveSupport::DescendantsTracker
|
90
|
+
end
|
91
|
+
|
86
92
|
def run_callbacks(kind, *args, &block)
|
87
93
|
send("_run_#{kind}_callbacks", *args, &block)
|
88
94
|
end
|
@@ -90,7 +96,7 @@ module ActiveSupport
|
|
90
96
|
class Callback
|
91
97
|
@@_callback_sequence = 0
|
92
98
|
|
93
|
-
attr_accessor :chain, :filter, :kind, :options, :per_key, :klass
|
99
|
+
attr_accessor :chain, :filter, :kind, :options, :per_key, :klass, :raw_filter
|
94
100
|
|
95
101
|
def initialize(chain, filter, kind, options, klass)
|
96
102
|
@chain, @kind, @klass = chain, kind, klass
|
@@ -202,8 +208,8 @@ module ActiveSupport
|
|
202
208
|
# end
|
203
209
|
#
|
204
210
|
name = "_conditional_callback_#{@kind}_#{next_id}"
|
205
|
-
|
206
|
-
|
211
|
+
@klass.class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
|
212
|
+
def #{name}(halted)
|
207
213
|
#{@compiled_options[0] || "if true"} && !halted
|
208
214
|
#{@filter} do
|
209
215
|
yield self
|
@@ -213,7 +219,6 @@ module ActiveSupport
|
|
213
219
|
end
|
214
220
|
end
|
215
221
|
RUBY_EVAL
|
216
|
-
@klass.class_eval(txt, __FILE__, line)
|
217
222
|
"#{name}(halted) do"
|
218
223
|
end
|
219
224
|
end
|
@@ -311,9 +316,9 @@ module ActiveSupport
|
|
311
316
|
|
312
317
|
def _normalize_legacy_filter(kind, filter)
|
313
318
|
if !filter.respond_to?(kind) && filter.respond_to?(:filter)
|
314
|
-
filter.
|
315
|
-
|
316
|
-
|
319
|
+
filter.singleton_class.class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
|
320
|
+
def #{kind}(context, &block) filter(context, &block) end
|
321
|
+
RUBY_EVAL
|
317
322
|
elsif filter.respond_to?(:before) && filter.respond_to?(:after) && kind == :around
|
318
323
|
def filter.around(context)
|
319
324
|
should_continue = before(context)
|
@@ -367,12 +372,6 @@ module ActiveSupport
|
|
367
372
|
method << "halted ? false : (block_given? ? value : true)"
|
368
373
|
method.compact.join("\n")
|
369
374
|
end
|
370
|
-
|
371
|
-
def clone(klass)
|
372
|
-
chain = CallbackChain.new(@name, @config.dup)
|
373
|
-
callbacks = map { |c| c.clone(chain, klass) }
|
374
|
-
chain.push(*callbacks)
|
375
|
-
end
|
376
375
|
end
|
377
376
|
|
378
377
|
module ClassMethods
|
@@ -391,26 +390,24 @@ module ActiveSupport
|
|
391
390
|
def __define_runner(symbol) #:nodoc:
|
392
391
|
body = send("_#{symbol}_callbacks").compile(nil)
|
393
392
|
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
393
|
+
silence_warnings do
|
394
|
+
undef_method "_run_#{symbol}_callbacks" if method_defined?("_run_#{symbol}_callbacks")
|
395
|
+
class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
|
396
|
+
def _run_#{symbol}_callbacks(key = nil, &blk)
|
397
|
+
if key
|
398
|
+
name = "_run__\#{self.class.name.hash.abs}__#{symbol}__\#{key.hash.abs}__callbacks"
|
398
399
|
|
399
|
-
|
400
|
-
|
401
|
-
|
400
|
+
unless respond_to?(name)
|
401
|
+
self.class.__create_keyed_callback(name, :#{symbol}, self, &blk)
|
402
|
+
end
|
402
403
|
|
403
|
-
|
404
|
-
|
405
|
-
|
404
|
+
send(name, &blk)
|
405
|
+
else
|
406
|
+
#{body}
|
407
|
+
end
|
406
408
|
end
|
407
|
-
|
408
|
-
|
409
|
-
RUBY_EVAL
|
410
|
-
|
411
|
-
silence_warnings do
|
412
|
-
undef_method "_run_#{symbol}_callbacks" if method_defined?("_run_#{symbol}_callbacks")
|
413
|
-
class_eval body, __FILE__, line
|
409
|
+
private :_run_#{symbol}_callbacks
|
410
|
+
RUBY_EVAL
|
414
411
|
end
|
415
412
|
end
|
416
413
|
|
@@ -435,10 +432,11 @@ module ActiveSupport
|
|
435
432
|
options = filters.last.is_a?(Hash) ? filters.pop : {}
|
436
433
|
filters.unshift(block) if block
|
437
434
|
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
435
|
+
([self] + ActiveSupport::DescendantsTracker.descendants(self)).each do |target|
|
436
|
+
chain = target.send("_#{name}_callbacks")
|
437
|
+
yield chain, type, filters, options
|
438
|
+
target.__define_runner(name)
|
439
|
+
end
|
442
440
|
end
|
443
441
|
|
444
442
|
# Set callbacks for a previously defined callback.
|
@@ -451,11 +449,13 @@ module ActiveSupport
|
|
451
449
|
# Use skip_callback to skip any defined one.
|
452
450
|
#
|
453
451
|
# When creating or skipping callbacks, you can specify conditions that
|
454
|
-
# are always the same for a given key. For instance, in
|
452
|
+
# are always the same for a given key. For instance, in Action Pack,
|
455
453
|
# we convert :only and :except conditions into per-key conditions.
|
456
454
|
#
|
457
455
|
# before_filter :authenticate, :except => "index"
|
456
|
+
#
|
458
457
|
# becomes
|
458
|
+
#
|
459
459
|
# dispatch_callback :before, :authenticate, :per_key => {:unless => proc {|c| c.action_name == "index"}}
|
460
460
|
#
|
461
461
|
# Per-Key conditions are evaluated only once per use of a given key.
|
@@ -467,31 +467,36 @@ module ActiveSupport
|
|
467
467
|
# method that took into consideration the per_key conditions. This
|
468
468
|
# is a speed improvement for ActionPack.
|
469
469
|
#
|
470
|
-
def set_callback(name, *
|
471
|
-
|
472
|
-
|
473
|
-
|
470
|
+
def set_callback(name, *filter_list, &block)
|
471
|
+
mapped = nil
|
472
|
+
|
473
|
+
__update_callbacks(name, filter_list, block) do |chain, type, filters, options|
|
474
|
+
mapped ||= filters.map do |filter|
|
474
475
|
Callback.new(chain, filter, type, options.dup, self)
|
475
476
|
end
|
476
477
|
|
477
|
-
|
478
|
+
filters.each do |filter|
|
479
|
+
chain.delete_if {|c| c.matches?(type, filter) }
|
480
|
+
end
|
481
|
+
|
482
|
+
options[:prepend] ? chain.unshift(*mapped) : chain.push(*mapped)
|
478
483
|
end
|
479
484
|
end
|
480
485
|
|
481
486
|
# Skip a previously defined callback for a given type.
|
482
487
|
#
|
483
|
-
def skip_callback(name, *
|
484
|
-
__update_callbacks(name,
|
485
|
-
chain = send("_#{name}_callbacks=", chain.clone(self))
|
486
|
-
|
488
|
+
def skip_callback(name, *filter_list, &block)
|
489
|
+
__update_callbacks(name, filter_list, block) do |chain, type, filters, options|
|
487
490
|
filters.each do |filter|
|
488
491
|
filter = chain.find {|c| c.matches?(type, filter) }
|
489
492
|
|
490
493
|
if filter && options.any?
|
491
|
-
filter.
|
492
|
-
|
493
|
-
|
494
|
+
new_filter = filter.clone(chain, self)
|
495
|
+
chain.insert(chain.index(filter), new_filter)
|
496
|
+
new_filter.recompile!(options, options[:per_key] || {})
|
494
497
|
end
|
498
|
+
|
499
|
+
chain.delete(filter)
|
495
500
|
end
|
496
501
|
end
|
497
502
|
end
|
@@ -499,61 +504,85 @@ module ActiveSupport
|
|
499
504
|
# Reset callbacks for a given type.
|
500
505
|
#
|
501
506
|
def reset_callbacks(symbol)
|
502
|
-
send("_#{symbol}_callbacks")
|
507
|
+
callbacks = send("_#{symbol}_callbacks")
|
508
|
+
|
509
|
+
ActiveSupport::DescendantsTracker.descendants(self).each do |target|
|
510
|
+
chain = target.send("_#{symbol}_callbacks")
|
511
|
+
callbacks.each { |c| chain.delete(c) }
|
512
|
+
target.__define_runner(symbol)
|
513
|
+
end
|
514
|
+
|
515
|
+
callbacks.clear
|
503
516
|
__define_runner(symbol)
|
504
517
|
end
|
505
518
|
|
506
|
-
#
|
507
|
-
#
|
508
|
-
# ==== Example
|
519
|
+
# Defines callbacks types:
|
509
520
|
#
|
510
521
|
# define_callbacks :validate
|
511
522
|
#
|
512
|
-
#
|
523
|
+
# This macro accepts the following options:
|
513
524
|
#
|
514
525
|
# * <tt>:terminator</tt> - Indicates when a before filter is considered
|
515
526
|
# to be halted.
|
516
527
|
#
|
517
528
|
# define_callbacks :validate, :terminator => "result == false"
|
518
529
|
#
|
519
|
-
# In the example above, if any before validate callbacks returns false
|
520
|
-
# other callbacks are not executed. Defaults to "false"
|
530
|
+
# In the example above, if any before validate callbacks returns +false+,
|
531
|
+
# other callbacks are not executed. Defaults to "false", meaning no value
|
532
|
+
# halts the chain.
|
521
533
|
#
|
522
534
|
# * <tt>:rescuable</tt> - By default, after filters are not executed if
|
523
|
-
# the given block or
|
524
|
-
# to change this behavior.
|
535
|
+
# the given block or a before filter raises an error. Set this option to
|
536
|
+
# true to change this behavior.
|
537
|
+
#
|
538
|
+
# * <tt>:scope</tt> - Indicates which methods should be executed when a class
|
539
|
+
# is given as callback. Defaults to <tt>[:kind]</tt>.
|
525
540
|
#
|
526
|
-
#
|
527
|
-
#
|
541
|
+
# class Audit
|
542
|
+
# def before(caller)
|
543
|
+
# puts 'Audit: before is called'
|
544
|
+
# end
|
528
545
|
#
|
529
|
-
#
|
546
|
+
# def before_save(caller)
|
547
|
+
# puts 'Audit: before_save is called'
|
548
|
+
# end
|
549
|
+
# end
|
530
550
|
#
|
531
|
-
#
|
551
|
+
# class Account
|
552
|
+
# include ActiveSupport::Callbacks
|
532
553
|
#
|
533
|
-
#
|
554
|
+
# define_callbacks :save
|
555
|
+
# set_callback :save, :before, Audit.new
|
534
556
|
#
|
535
|
-
#
|
536
|
-
#
|
557
|
+
# def save
|
558
|
+
# run_callbacks :save do
|
559
|
+
# puts 'save in main'
|
560
|
+
# end
|
561
|
+
# end
|
562
|
+
# end
|
537
563
|
#
|
538
|
-
#
|
564
|
+
# In the above case whenever you save an account the method <tt>Audit#before</tt> will
|
565
|
+
# be called. On the other hand
|
539
566
|
#
|
540
|
-
# define_callbacks :
|
567
|
+
# define_callbacks :save, :scope => [:kind, :name]
|
541
568
|
#
|
542
|
-
#
|
543
|
-
#
|
569
|
+
# would trigger <tt>Audit#before_save</tt> instead. That's constructed by calling
|
570
|
+
# <tt>"#{kind}_#{name}"</tt> on the given instance. In this case "kind" is "before" and
|
571
|
+
# "name" is "save".
|
544
572
|
#
|
545
|
-
#
|
573
|
+
# A declaration like
|
546
574
|
#
|
547
|
-
#
|
575
|
+
# define_callbacks :save, :scope => [:name]
|
548
576
|
#
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
577
|
+
# would call <tt>Audit#save</tt>.
|
578
|
+
#
|
579
|
+
def define_callbacks(*callbacks)
|
580
|
+
config = callbacks.last.is_a?(Hash) ? callbacks.pop : {}
|
581
|
+
callbacks.each do |callback|
|
582
|
+
extlib_inheritable_reader("_#{callback}_callbacks") do
|
583
|
+
CallbackChain.new(callback, config)
|
554
584
|
end
|
555
|
-
|
556
|
-
__define_runner(symbol)
|
585
|
+
__define_runner(callback)
|
557
586
|
end
|
558
587
|
end
|
559
588
|
end
|
@@ -1,35 +1,36 @@
|
|
1
|
-
require
|
1
|
+
require 'active_support/concern'
|
2
|
+
require 'active_support/ordered_options'
|
3
|
+
require 'active_support/core_ext/kernel/singleton_class'
|
4
|
+
require 'active_support/core_ext/module/delegation'
|
2
5
|
|
3
6
|
module ActiveSupport
|
4
7
|
module Configurable
|
5
8
|
extend ActiveSupport::Concern
|
6
9
|
|
7
10
|
module ClassMethods
|
8
|
-
def get_config
|
9
|
-
module_parts = name.split("::")
|
10
|
-
modules = [Object]
|
11
|
-
module_parts.each {|name| modules.push modules.last.const_get(name) }
|
12
|
-
modules.reverse_each do |mod|
|
13
|
-
return mod.const_get(:DEFAULT_CONFIG) if const_defined?(:DEFAULT_CONFIG)
|
14
|
-
end
|
15
|
-
{}
|
16
|
-
end
|
17
|
-
|
18
11
|
def config
|
19
|
-
|
20
|
-
@config
|
12
|
+
@config ||= ActiveSupport::InheritableOptions.new(superclass.respond_to?(:config) ? superclass.config : {})
|
21
13
|
end
|
22
14
|
|
23
|
-
def
|
24
|
-
|
25
|
-
|
26
|
-
|
15
|
+
def configure
|
16
|
+
yield config
|
17
|
+
end
|
18
|
+
|
19
|
+
def config_accessor(*names)
|
20
|
+
names.each do |name|
|
21
|
+
code, line = <<-RUBY, __LINE__ + 1
|
22
|
+
def #{name}; config.#{name}; end
|
23
|
+
def #{name}=(value); config.#{name} = value; end
|
24
|
+
RUBY
|
25
|
+
|
26
|
+
singleton_class.class_eval code, __FILE__, line
|
27
|
+
class_eval code, __FILE__, line
|
27
28
|
end
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
31
32
|
def config
|
32
|
-
self.class.config
|
33
|
+
@config ||= ActiveSupport::InheritableOptions.new(self.class.config)
|
33
34
|
end
|
34
35
|
end
|
35
36
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'active_support/core_ext/array/wrap'
|
2
2
|
require 'active_support/core_ext/array/access'
|
3
|
+
require 'active_support/core_ext/array/uniq_by'
|
3
4
|
require 'active_support/core_ext/array/conversions'
|
4
5
|
require 'active_support/core_ext/array/extract_options'
|
5
6
|
require 'active_support/core_ext/array/grouping'
|
@@ -1,6 +1,7 @@
|
|
1
|
+
require 'active_support/xml_mini'
|
1
2
|
require 'active_support/core_ext/hash/keys'
|
2
3
|
require 'active_support/core_ext/hash/reverse_merge'
|
3
|
-
require 'active_support/
|
4
|
+
require 'active_support/core_ext/string/inflections'
|
4
5
|
|
5
6
|
class Array
|
6
7
|
# Converts the array to a comma-separated sentence where the last element is joined by the connector word. Options:
|
@@ -8,21 +9,14 @@ class Array
|
|
8
9
|
# * <tt>:two_words_connector</tt> - The sign or word used to join the elements in arrays with two elements (default: " and ")
|
9
10
|
# * <tt>:last_word_connector</tt> - The sign or word used to join the last element in arrays with three or more elements (default: ", and ")
|
10
11
|
def to_sentence(options = {})
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
skip_last_comma = options.delete :skip_last_comma
|
21
|
-
if connector = options.delete(:connector)
|
22
|
-
options[:last_word_connector] ||= skip_last_comma ? connector : ", #{connector}"
|
23
|
-
else
|
24
|
-
options[:last_word_connector] ||= skip_last_comma ? default_two_words_connector : default_last_word_connector
|
25
|
-
end
|
12
|
+
if defined?(I18n)
|
13
|
+
default_words_connector = I18n.translate(:'support.array.words_connector', :locale => options[:locale])
|
14
|
+
default_two_words_connector = I18n.translate(:'support.array.two_words_connector', :locale => options[:locale])
|
15
|
+
default_last_word_connector = I18n.translate(:'support.array.last_word_connector', :locale => options[:locale])
|
16
|
+
else
|
17
|
+
default_words_connector = ", "
|
18
|
+
default_two_words_connector = " and "
|
19
|
+
default_last_word_connector = ", and "
|
26
20
|
end
|
27
21
|
|
28
22
|
options.assert_valid_keys(:words_connector, :two_words_connector, :last_word_connector, :locale)
|
@@ -40,22 +34,6 @@ class Array
|
|
40
34
|
end
|
41
35
|
end
|
42
36
|
|
43
|
-
|
44
|
-
# Calls <tt>to_param</tt> on all its elements and joins the result with
|
45
|
-
# slashes. This is used by <tt>url_for</tt> in Action Pack.
|
46
|
-
def to_param
|
47
|
-
collect { |e| e.to_param }.join '/'
|
48
|
-
end
|
49
|
-
|
50
|
-
# Converts an array into a string suitable for use as a URL query string,
|
51
|
-
# using the given +key+ as the param name.
|
52
|
-
#
|
53
|
-
# ['Rails', 'coding'].to_query('hobbies') # => "hobbies%5B%5D=Rails&hobbies%5B%5D=coding"
|
54
|
-
def to_query(key)
|
55
|
-
prefix = "#{key}[]"
|
56
|
-
collect { |value| value.to_query(prefix) }.join '&'
|
57
|
-
end
|
58
|
-
|
59
37
|
# Converts a collection of elements into a formatted string by calling
|
60
38
|
# <tt>to_s</tt> on all elements and joining them:
|
61
39
|
#
|
@@ -156,34 +134,31 @@ class Array
|
|
156
134
|
# </messages>
|
157
135
|
#
|
158
136
|
def to_xml(options = {})
|
159
|
-
|
160
|
-
require 'builder' unless defined?(Builder)
|
137
|
+
require 'active_support/builder' unless defined?(Builder)
|
161
138
|
|
162
139
|
options = options.dup
|
163
|
-
options[:
|
164
|
-
options[:
|
165
|
-
options[:
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
if !options.has_key?(:dasherize) || options[:dasherize]
|
172
|
-
root = root.dasherize
|
140
|
+
options[:indent] ||= 2
|
141
|
+
options[:builder] ||= Builder::XmlMarkup.new(:indent => options[:indent])
|
142
|
+
options[:root] ||= if first.class.to_s != "Hash" && all? { |e| e.is_a?(first.class) }
|
143
|
+
underscored = ActiveSupport::Inflector.underscore(first.class.name)
|
144
|
+
ActiveSupport::Inflector.pluralize(underscored).tr('/', '_')
|
145
|
+
else
|
146
|
+
"objects"
|
173
147
|
end
|
174
148
|
|
175
|
-
options[:builder]
|
149
|
+
builder = options[:builder]
|
150
|
+
builder.instruct! unless options.delete(:skip_instruct)
|
176
151
|
|
177
|
-
|
152
|
+
root = ActiveSupport::XmlMini.rename_key(options[:root].to_s, options)
|
153
|
+
children = options.delete(:children) || root.singularize
|
178
154
|
|
179
|
-
|
180
|
-
if empty?
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
each { |e| e.to_xml(opts.merge({ :skip_instruct => true })) }
|
186
|
-
}
|
155
|
+
attributes = options[:skip_types] ? {} : {:type => "array"}
|
156
|
+
return builder.tag!(root, attributes) if empty?
|
157
|
+
|
158
|
+
builder.__send__(:method_missing, root, attributes) do
|
159
|
+
each { |value| ActiveSupport::XmlMini.to_tag(children, value, options) }
|
160
|
+
yield builder if block_given?
|
187
161
|
end
|
188
162
|
end
|
163
|
+
|
189
164
|
end
|