activesupport 2.3.5 → 3.0.0.beta3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +66 -9
- data/lib/active_support/all.rb +2 -7
- data/lib/active_support/backtrace_cleaner.rb +31 -9
- data/lib/active_support/base64.rb +9 -0
- data/lib/active_support/basic_object.rb +7 -10
- data/lib/active_support/benchmarkable.rb +60 -0
- data/lib/active_support/buffered_logger.rb +14 -9
- 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 +32 -23
- data/lib/active_support/cache/memory_store.rb +17 -10
- data/lib/active_support/cache/strategy/local_cache.rb +9 -1
- data/lib/active_support/cache.rb +75 -55
- 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/array/access.rb +39 -46
- data/lib/active_support/core_ext/array/conversions.rb +145 -182
- data/lib/active_support/core_ext/array/extract_options.rb +26 -17
- data/lib/active_support/core_ext/array/grouping.rb +87 -93
- data/lib/active_support/core_ext/array/random_access.rb +4 -10
- 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/array.rb +2 -10
- data/lib/active_support/core_ext/big_decimal/conversions.rb +27 -0
- data/lib/active_support/core_ext/big_decimal.rb +1 -0
- data/lib/active_support/core_ext/cgi/escape_skipping_slashes.rb +16 -20
- data/lib/active_support/core_ext/cgi.rb +0 -4
- data/lib/active_support/core_ext/class/attribute.rb +70 -0
- data/lib/active_support/core_ext/class/attribute_accessors.rb +40 -31
- data/lib/active_support/core_ext/class/delegating_attributes.rb +37 -40
- data/lib/active_support/core_ext/class/inheritable_attributes.rb +100 -11
- data/lib/active_support/core_ext/class/subclasses.rb +55 -0
- data/lib/active_support/core_ext/class.rb +1 -1
- data/lib/active_support/core_ext/date/acts_like.rb +8 -0
- data/lib/active_support/core_ext/date/calculations.rb +218 -228
- 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 +85 -85
- data/lib/active_support/core_ext/date_time/zones.rb +17 -0
- data/lib/active_support/core_ext/enumerable.rb +18 -13
- data/lib/active_support/core_ext/exception.rb +1 -43
- data/lib/active_support/core_ext/file/atomic.rb +35 -40
- data/lib/active_support/core_ext/file/path.rb +5 -0
- data/lib/active_support/core_ext/file.rb +0 -4
- data/lib/active_support/core_ext/float/rounding.rb +15 -20
- data/lib/active_support/core_ext/float.rb +0 -6
- data/lib/active_support/core_ext/hash/conversions.rb +255 -229
- 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/hash.rb +8 -14
- 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/integer.rb +1 -7
- data/lib/active_support/core_ext/kernel/debugger.rb +1 -1
- 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/kernel/singleton_class.rb +13 -0
- data/lib/active_support/core_ext/kernel.rb +1 -1
- data/lib/active_support/core_ext/load_error.rb +16 -32
- data/lib/active_support/core_ext/logger.rb +3 -2
- data/lib/active_support/core_ext/module/aliasing.rb +64 -68
- 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 +4 -4
- data/lib/active_support/core_ext/module/attribute_accessors.rb +48 -42
- data/lib/active_support/core_ext/module/delegation.rb +22 -11
- 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/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 +6 -0
- data/lib/active_support/core_ext/module/synchronization.rb +4 -1
- data/lib/active_support/core_ext/module.rb +7 -18
- data/lib/active_support/core_ext/name_error.rb +3 -4
- 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/numeric.rb +1 -8
- data/lib/active_support/core_ext/object/acts_like.rb +10 -0
- data/lib/active_support/core_ext/object/blank.rb +20 -2
- 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/extending.rb +8 -77
- data/lib/active_support/core_ext/object/instance_variables.rb +0 -7
- data/lib/active_support/core_ext/object/misc.rb +2 -90
- 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/object.rb +10 -2
- data/lib/active_support/core_ext/proc.rb +3 -1
- data/lib/active_support/core_ext/process/daemon.rb +17 -19
- 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/range.rb +2 -9
- 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/access.rb +88 -95
- data/lib/active_support/core_ext/string/behavior.rb +6 -12
- data/lib/active_support/core_ext/string/conversions.rb +20 -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 +147 -154
- data/lib/active_support/core_ext/string/interpolation.rb +1 -0
- data/lib/active_support/core_ext/string/multibyte.rb +68 -74
- data/lib/active_support/core_ext/string/output_safety.rb +105 -44
- data/lib/active_support/core_ext/string/starts_ends_with.rb +3 -34
- data/lib/active_support/core_ext/string/xchar.rb +10 -3
- data/lib/active_support/core_ext/string.rb +6 -20
- data/lib/active_support/core_ext/time/acts_like.rb +8 -0
- data/lib/active_support/core_ext/time/calculations.rb +276 -299
- data/lib/active_support/core_ext/time/conversions.rb +79 -84
- data/lib/active_support/core_ext/time/marshal.rb +56 -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/core_ext.rb +2 -7
- data/lib/active_support/dependencies/autoload.rb +50 -0
- data/lib/active_support/dependencies.rb +168 -197
- 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 +56 -0
- data/lib/active_support/deprecation.rb +9 -187
- data/lib/active_support/duration.rb +6 -2
- data/lib/active_support/hash_with_indifferent_access.rb +141 -0
- data/lib/active_support/i18n.rb +3 -0
- data/lib/active_support/inflections.rb +1 -1
- data/lib/active_support/inflector/inflections.rb +211 -0
- data/lib/active_support/inflector/methods.rb +141 -0
- data/lib/active_support/inflector/transliterate.rb +77 -0
- data/lib/active_support/inflector.rb +4 -403
- data/lib/active_support/json/backends/jsongem.rb +16 -10
- data/lib/active_support/json/backends/yajl.rb +40 -0
- data/lib/active_support/json/backends/yaml.rb +14 -8
- data/lib/active_support/json/decoding.rb +17 -1
- data/lib/active_support/json/encoding.rb +164 -35
- data/lib/active_support/json/variable.rb +4 -3
- data/lib/active_support/lazy_load_hooks.rb +17 -0
- data/lib/active_support/memoizable.rb +8 -5
- data/lib/active_support/message_encryptor.rb +1 -0
- data/lib/active_support/message_verifier.rb +12 -29
- data/lib/active_support/multibyte/chars.rb +88 -31
- data/lib/active_support/multibyte/unicode_database.rb +5 -5
- data/lib/active_support/multibyte/utils.rb +6 -7
- data/lib/active_support/multibyte.rb +11 -6
- data/lib/active_support/notifications/fanout.rb +83 -0
- data/lib/active_support/notifications/instrumenter.rb +50 -0
- data/lib/active_support/notifications.rb +81 -0
- data/lib/active_support/option_merger.rb +2 -0
- data/lib/active_support/ordered_hash.rb +28 -11
- data/lib/active_support/ordered_options.rb +9 -1
- data/lib/active_support/railtie.rb +64 -0
- data/lib/active_support/rescuable.rb +11 -6
- data/lib/active_support/ruby/shim.rb +21 -0
- data/lib/active_support/test_case.rb +10 -8
- data/lib/active_support/testing/assertions.rb +17 -0
- 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/autoload.rb +5 -0
- data/lib/active_support/time.rb +34 -0
- data/lib/active_support/time_with_zone.rb +18 -12
- data/lib/active_support/values/time_zone.rb +51 -68
- data/lib/active_support/version.rb +5 -4
- data/lib/active_support/whiny_nil.rb +5 -9
- data/lib/active_support/xml_mini/jdom.rb +13 -7
- data/lib/active_support/xml_mini/libxml.rb +38 -91
- data/lib/active_support/xml_mini/libxmlsax.rb +85 -0
- data/lib/active_support/xml_mini/nokogiri.rb +40 -31
- data/lib/active_support/xml_mini/nokogirisax.rb +83 -0
- data/lib/active_support/xml_mini/rexml.rb +30 -9
- data/lib/active_support/xml_mini.rb +2 -0
- data/lib/active_support.rb +46 -30
- metadata +136 -215
- 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/encoding.rb +0 -16
- data/lib/active_support/core_ext/base64.rb +0 -4
- data/lib/active_support/core_ext/bigdecimal/conversions.rb +0 -37
- data/lib/active_support/core_ext/bigdecimal.rb +0 -6
- 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/behavior.rb +0 -42
- data/lib/active_support/core_ext/date.rb +0 -10
- 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/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/module/model_naming.rb +0 -25
- data/lib/active_support/core_ext/numeric/conversions.rb +0 -19
- data/lib/active_support/core_ext/object/metaclass.rb +0 -13
- data/lib/active_support/core_ext/pathname/clean_within.rb +0 -14
- data/lib/active_support/core_ext/pathname.rb +0 -7
- 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/behavior.rb +0 -13
- data/lib/active_support/core_ext/time.rb +0 -42
- 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/builder-2.1.2/blankslate.rb +0 -113
- 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/builder-2.1.2/builder.rb +0 -13
- 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/backend/simple.rb +0 -214
- data/lib/active_support/vendor/i18n-0.1.3/lib/i18n/exceptions.rb +0 -53
- data/lib/active_support/vendor/i18n-0.1.3/lib/i18n.rb +0 -199
- 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.4/memcache.rb +0 -1107
- 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/active_support/vendor/tzinfo-0.3.12/tzinfo.rb +0 -33
- data/lib/active_support/vendor.rb +0 -28
- data/lib/activesupport.rb +0 -2
|
@@ -1,23 +1,12 @@
|
|
|
1
|
-
require 'active_support/core_ext/module/
|
|
1
|
+
require 'active_support/core_ext/module/aliasing'
|
|
2
|
+
require 'active_support/core_ext/module/introspection'
|
|
3
|
+
require 'active_support/core_ext/module/anonymous'
|
|
4
|
+
require 'active_support/core_ext/module/reachable'
|
|
2
5
|
require 'active_support/core_ext/module/attribute_accessors'
|
|
3
6
|
require 'active_support/core_ext/module/attr_internal'
|
|
4
7
|
require 'active_support/core_ext/module/attr_accessor_with_default'
|
|
5
8
|
require 'active_support/core_ext/module/delegation'
|
|
6
|
-
require 'active_support/core_ext/module/introspection'
|
|
7
|
-
require 'active_support/core_ext/module/loading'
|
|
8
|
-
require 'active_support/core_ext/module/aliasing'
|
|
9
|
-
require 'active_support/core_ext/module/model_naming'
|
|
10
9
|
require 'active_support/core_ext/module/synchronization'
|
|
11
|
-
|
|
12
|
-
module
|
|
13
|
-
|
|
14
|
-
# Various extensions for the Ruby core Module class.
|
|
15
|
-
module Module
|
|
16
|
-
# Nothing here. Only defined for API documentation purposes.
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
class Module
|
|
22
|
-
include ActiveSupport::CoreExtensions::Module
|
|
23
|
-
end
|
|
10
|
+
require 'active_support/core_ext/module/deprecation'
|
|
11
|
+
require 'active_support/core_ext/module/remove_method'
|
|
12
|
+
require 'active_support/core_ext/module/method_names'
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
# Add a method to obtain the missing name from a NameError.
|
|
1
|
+
class NameError
|
|
2
|
+
# Extract the name of the missing constant from the exception message.
|
|
4
3
|
def missing_name
|
|
5
4
|
if /undefined local variable or method/ !~ message
|
|
6
5
|
$1 if /((::)?([A-Z]\w*)(::[A-Z]\w*)*)$/ =~ message
|
|
7
6
|
end
|
|
8
7
|
end
|
|
9
|
-
|
|
8
|
+
|
|
10
9
|
# Was this exception raised because the given name was missing?
|
|
11
10
|
def missing_name?(name)
|
|
12
11
|
if name.is_a? Symbol
|
|
@@ -1,50 +1,44 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
GIGABYTE = MEGABYTE * 1024
|
|
9
|
-
TERABYTE = GIGABYTE * 1024
|
|
10
|
-
PETABYTE = TERABYTE * 1024
|
|
11
|
-
EXABYTE = PETABYTE * 1024
|
|
1
|
+
class Numeric
|
|
2
|
+
KILOBYTE = 1024
|
|
3
|
+
MEGABYTE = KILOBYTE * 1024
|
|
4
|
+
GIGABYTE = MEGABYTE * 1024
|
|
5
|
+
TERABYTE = GIGABYTE * 1024
|
|
6
|
+
PETABYTE = TERABYTE * 1024
|
|
7
|
+
EXABYTE = PETABYTE * 1024
|
|
12
8
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
# Enables the use of byte calculations and declarations, like 45.bytes + 2.6.megabytes
|
|
10
|
+
def bytes
|
|
11
|
+
self
|
|
12
|
+
end
|
|
13
|
+
alias :byte :bytes
|
|
17
14
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
def kilobytes
|
|
16
|
+
self * KILOBYTE
|
|
17
|
+
end
|
|
18
|
+
alias :kilobyte :kilobytes
|
|
22
19
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
20
|
+
def megabytes
|
|
21
|
+
self * MEGABYTE
|
|
22
|
+
end
|
|
23
|
+
alias :megabyte :megabytes
|
|
27
24
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
def gigabytes
|
|
26
|
+
self * GIGABYTE
|
|
27
|
+
end
|
|
28
|
+
alias :gigabyte :gigabytes
|
|
32
29
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
def terabytes
|
|
31
|
+
self * TERABYTE
|
|
32
|
+
end
|
|
33
|
+
alias :terabyte :terabytes
|
|
37
34
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
def petabytes
|
|
36
|
+
self * PETABYTE
|
|
37
|
+
end
|
|
38
|
+
alias :petabyte :petabytes
|
|
42
39
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
end
|
|
46
|
-
alias :exabyte :exabytes
|
|
47
|
-
end
|
|
48
|
-
end
|
|
40
|
+
def exabytes
|
|
41
|
+
self * EXABYTE
|
|
49
42
|
end
|
|
43
|
+
alias :exabyte :exabytes
|
|
50
44
|
end
|
|
@@ -1,81 +1,77 @@
|
|
|
1
|
-
|
|
2
|
-
module CoreExtensions #:nodoc:
|
|
3
|
-
module Numeric #:nodoc:
|
|
4
|
-
# Enables the use of time calculations and declarations, like 45.minutes + 2.hours + 4.years.
|
|
5
|
-
#
|
|
6
|
-
# These methods use Time#advance for precise date calculations when using from_now, ago, etc.
|
|
7
|
-
# as well as adding or subtracting their results from a Time object. For example:
|
|
8
|
-
#
|
|
9
|
-
# # equivalent to Time.now.advance(:months => 1)
|
|
10
|
-
# 1.month.from_now
|
|
11
|
-
#
|
|
12
|
-
# # equivalent to Time.now.advance(:years => 2)
|
|
13
|
-
# 2.years.from_now
|
|
14
|
-
#
|
|
15
|
-
# # equivalent to Time.now.advance(:months => 4, :years => 5)
|
|
16
|
-
# (4.months + 5.years).from_now
|
|
17
|
-
#
|
|
18
|
-
# While these methods provide precise calculation when used as in the examples above, care
|
|
19
|
-
# should be taken to note that this is not true if the result of `months', `years', etc is
|
|
20
|
-
# converted before use:
|
|
21
|
-
#
|
|
22
|
-
# # equivalent to 30.days.to_i.from_now
|
|
23
|
-
# 1.month.to_i.from_now
|
|
24
|
-
#
|
|
25
|
-
# # equivalent to 365.25.days.to_f.from_now
|
|
26
|
-
# 1.year.to_f.from_now
|
|
27
|
-
#
|
|
28
|
-
# In such cases, Ruby's core
|
|
29
|
-
# Date[http://stdlib.rubyonrails.org/libdoc/date/rdoc/index.html] and
|
|
30
|
-
# Time[http://stdlib.rubyonrails.org/libdoc/time/rdoc/index.html] should be used for precision
|
|
31
|
-
# date and time arithmetic
|
|
32
|
-
module Time
|
|
33
|
-
def seconds
|
|
34
|
-
ActiveSupport::Duration.new(self, [[:seconds, self]])
|
|
35
|
-
end
|
|
36
|
-
alias :second :seconds
|
|
1
|
+
require 'active_support/duration'
|
|
37
2
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
3
|
+
class Numeric
|
|
4
|
+
# Enables the use of time calculations and declarations, like 45.minutes + 2.hours + 4.years.
|
|
5
|
+
#
|
|
6
|
+
# These methods use Time#advance for precise date calculations when using from_now, ago, etc.
|
|
7
|
+
# as well as adding or subtracting their results from a Time object. For example:
|
|
8
|
+
#
|
|
9
|
+
# # equivalent to Time.now.advance(:months => 1)
|
|
10
|
+
# 1.month.from_now
|
|
11
|
+
#
|
|
12
|
+
# # equivalent to Time.now.advance(:years => 2)
|
|
13
|
+
# 2.years.from_now
|
|
14
|
+
#
|
|
15
|
+
# # equivalent to Time.now.advance(:months => 4, :years => 5)
|
|
16
|
+
# (4.months + 5.years).from_now
|
|
17
|
+
#
|
|
18
|
+
# While these methods provide precise calculation when used as in the examples above, care
|
|
19
|
+
# should be taken to note that this is not true if the result of `months', `years', etc is
|
|
20
|
+
# converted before use:
|
|
21
|
+
#
|
|
22
|
+
# # equivalent to 30.days.to_i.from_now
|
|
23
|
+
# 1.month.to_i.from_now
|
|
24
|
+
#
|
|
25
|
+
# # equivalent to 365.25.days.to_f.from_now
|
|
26
|
+
# 1.year.to_f.from_now
|
|
27
|
+
#
|
|
28
|
+
# In such cases, Ruby's core
|
|
29
|
+
# Date[http://stdlib.rubyonrails.org/libdoc/date/rdoc/index.html] and
|
|
30
|
+
# Time[http://stdlib.rubyonrails.org/libdoc/time/rdoc/index.html] should be used for precision
|
|
31
|
+
# date and time arithmetic
|
|
32
|
+
def seconds
|
|
33
|
+
ActiveSupport::Duration.new(self, [[:seconds, self]])
|
|
34
|
+
end
|
|
35
|
+
alias :second :seconds
|
|
52
36
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
37
|
+
def minutes
|
|
38
|
+
ActiveSupport::Duration.new(self * 60, [[:seconds, self * 60]])
|
|
39
|
+
end
|
|
40
|
+
alias :minute :minutes
|
|
41
|
+
|
|
42
|
+
def hours
|
|
43
|
+
ActiveSupport::Duration.new(self * 3600, [[:seconds, self * 3600]])
|
|
44
|
+
end
|
|
45
|
+
alias :hour :hours
|
|
46
|
+
|
|
47
|
+
def days
|
|
48
|
+
ActiveSupport::Duration.new(self * 24.hours, [[:days, self]])
|
|
49
|
+
end
|
|
50
|
+
alias :day :days
|
|
67
51
|
|
|
68
|
-
|
|
69
|
-
|
|
52
|
+
def weeks
|
|
53
|
+
ActiveSupport::Duration.new(self * 7.days, [[:days, self * 7]])
|
|
54
|
+
end
|
|
55
|
+
alias :week :weeks
|
|
56
|
+
|
|
57
|
+
def fortnights
|
|
58
|
+
ActiveSupport::Duration.new(self * 2.weeks, [[:days, self * 14]])
|
|
59
|
+
end
|
|
60
|
+
alias :fortnight :fortnights
|
|
61
|
+
|
|
62
|
+
# Reads best without arguments: 10.minutes.ago
|
|
63
|
+
def ago(time = ::Time.now)
|
|
64
|
+
time - self
|
|
65
|
+
end
|
|
70
66
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
time + self
|
|
74
|
-
end
|
|
67
|
+
# Reads best with argument: 10.minutes.until(time)
|
|
68
|
+
alias :until :ago
|
|
75
69
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
end
|
|
70
|
+
# Reads best with argument: 10.minutes.since(time)
|
|
71
|
+
def since(time = ::Time.now)
|
|
72
|
+
time + self
|
|
80
73
|
end
|
|
74
|
+
|
|
75
|
+
# Reads best without arguments: 10.minutes.from_now
|
|
76
|
+
alias :from_now :since
|
|
81
77
|
end
|
|
@@ -1,9 +1,2 @@
|
|
|
1
|
-
require 'active_support/core_ext/numeric/time'
|
|
2
1
|
require 'active_support/core_ext/numeric/bytes'
|
|
3
|
-
require 'active_support/core_ext/numeric/
|
|
4
|
-
|
|
5
|
-
class Numeric #:nodoc:
|
|
6
|
-
include ActiveSupport::CoreExtensions::Numeric::Time
|
|
7
|
-
include ActiveSupport::CoreExtensions::Numeric::Bytes
|
|
8
|
-
include ActiveSupport::CoreExtensions::Numeric::Conversions
|
|
9
|
-
end
|
|
2
|
+
require 'active_support/core_ext/numeric/time'
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
class Object
|
|
2
|
+
# A duck-type assistant method. For example, Active Support extends Date
|
|
3
|
+
# to define an acts_like_date? method, and extends Time to define
|
|
4
|
+
# acts_like_time?. As a result, we can do "x.acts_like?(:time)" and
|
|
5
|
+
# "x.acts_like?(:date)" to do duck-type-safe comparisons, since classes that
|
|
6
|
+
# we want to act like Time simply need to define an acts_like_time? method.
|
|
7
|
+
def acts_like?(duck)
|
|
8
|
+
respond_to? :"acts_like_#{duck}?"
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -2,11 +2,11 @@ class Object
|
|
|
2
2
|
# An object is blank if it's false, empty, or a whitespace string.
|
|
3
3
|
# For example, "", " ", +nil+, [], and {} are blank.
|
|
4
4
|
#
|
|
5
|
-
# This simplifies
|
|
5
|
+
# This simplifies:
|
|
6
6
|
#
|
|
7
7
|
# if !address.nil? && !address.empty?
|
|
8
8
|
#
|
|
9
|
-
# to
|
|
9
|
+
# ...to:
|
|
10
10
|
#
|
|
11
11
|
# if !address.blank?
|
|
12
12
|
def blank?
|
|
@@ -17,6 +17,24 @@ class Object
|
|
|
17
17
|
def present?
|
|
18
18
|
!blank?
|
|
19
19
|
end
|
|
20
|
+
|
|
21
|
+
# Returns object if it's #present? otherwise returns nil.
|
|
22
|
+
# object.presence is equivalent to object.present? ? object : nil.
|
|
23
|
+
#
|
|
24
|
+
# This is handy for any representation of objects where blank is the same
|
|
25
|
+
# as not present at all. For example, this simplifies a common check for
|
|
26
|
+
# HTTP POST/query parameters:
|
|
27
|
+
#
|
|
28
|
+
# state = params[:state] if params[:state].present?
|
|
29
|
+
# country = params[:country] if params[:country].present?
|
|
30
|
+
# region = state || country || 'US'
|
|
31
|
+
#
|
|
32
|
+
# ...becomes:
|
|
33
|
+
#
|
|
34
|
+
# region = params[:state].presence || params[:country].presence || 'US'
|
|
35
|
+
def presence
|
|
36
|
+
self if present?
|
|
37
|
+
end
|
|
20
38
|
end
|
|
21
39
|
|
|
22
40
|
class NilClass #:nodoc:
|
|
@@ -1,15 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
# Converts an object into a string suitable for use as a URL query string, using the given <tt>key</tt> as the
|
|
8
|
-
# param name.
|
|
9
|
-
#
|
|
10
|
-
# Note: This method is defined as a default implementation for all Objects for Hash#to_query to work.
|
|
11
|
-
def to_query(key)
|
|
12
|
-
require 'cgi' unless defined?(CGI) && defined?(CGI::escape)
|
|
13
|
-
"#{CGI.escape(key.to_s)}=#{CGI.escape(to_param.to_s)}"
|
|
14
|
-
end
|
|
15
|
-
end
|
|
1
|
+
require 'active_support/core_ext/object/to_param'
|
|
2
|
+
require 'active_support/core_ext/object/to_query'
|
|
3
|
+
require 'active_support/core_ext/array/conversions'
|
|
4
|
+
require 'active_support/core_ext/hash/conversions'
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Most objects are cloneable, but not all. For example you can't dup +nil+:
|
|
2
|
+
#
|
|
3
|
+
# nil.dup # => TypeError: can't dup NilClass
|
|
4
|
+
#
|
|
5
|
+
# Classes may signal their instances are not duplicable removing +dup+/+clone+
|
|
6
|
+
# or raising exceptions from them. So, to dup an arbitrary object you normally
|
|
7
|
+
# use an optimistic approach and are ready to catch an exception, say:
|
|
8
|
+
#
|
|
9
|
+
# arbitrary_object.dup rescue object
|
|
10
|
+
#
|
|
11
|
+
# Rails dups objects in a few critical spots where they are not that arbitrary.
|
|
12
|
+
# That rescue is very expensive (like 40 times slower than a predicate), and it
|
|
13
|
+
# is often triggered.
|
|
14
|
+
#
|
|
15
|
+
# That's why we hardcode the following cases and check duplicable? instead of
|
|
16
|
+
# using that rescue idiom.
|
|
17
|
+
class Object
|
|
18
|
+
# Can you safely .dup this object?
|
|
19
|
+
# False for nil, false, true, symbols, numbers, class and module objects; true otherwise.
|
|
20
|
+
def duplicable?
|
|
21
|
+
true
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class NilClass #:nodoc:
|
|
26
|
+
def duplicable?
|
|
27
|
+
false
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class FalseClass #:nodoc:
|
|
32
|
+
def duplicable?
|
|
33
|
+
false
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class TrueClass #:nodoc:
|
|
38
|
+
def duplicable?
|
|
39
|
+
false
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class Symbol #:nodoc:
|
|
44
|
+
def duplicable?
|
|
45
|
+
false
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
class Numeric #:nodoc:
|
|
50
|
+
def duplicable?
|
|
51
|
+
false
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
class Class #:nodoc:
|
|
56
|
+
def duplicable?
|
|
57
|
+
false
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
class Module #:nodoc:
|
|
62
|
+
def duplicable?
|
|
63
|
+
false
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -1,80 +1,11 @@
|
|
|
1
|
-
class
|
|
2
|
-
def remove_subclasses_of(*superclasses) #:nodoc:
|
|
3
|
-
Class.remove_class(*subclasses_of(*superclasses))
|
|
4
|
-
end
|
|
5
|
-
|
|
6
|
-
begin
|
|
7
|
-
ObjectSpace.each_object(Class.new) {}
|
|
8
|
-
|
|
9
|
-
# Exclude this class unless it's a subclass of our supers and is defined.
|
|
10
|
-
# We check defined? in case we find a removed class that has yet to be
|
|
11
|
-
# garbage collected. This also fails for anonymous classes -- please
|
|
12
|
-
# submit a patch if you have a workaround.
|
|
13
|
-
def subclasses_of(*superclasses) #:nodoc:
|
|
14
|
-
subclasses = []
|
|
15
|
-
|
|
16
|
-
superclasses.each do |sup|
|
|
17
|
-
ObjectSpace.each_object(class << sup; self; end) do |k|
|
|
18
|
-
if k != sup && (k.name.blank? || eval("defined?(::#{k}) && ::#{k}.object_id == k.object_id"))
|
|
19
|
-
subclasses << k
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
subclasses
|
|
25
|
-
end
|
|
26
|
-
rescue RuntimeError
|
|
27
|
-
# JRuby and any implementations which cannot handle the objectspace traversal
|
|
28
|
-
# above fall back to this implementation
|
|
29
|
-
def subclasses_of(*superclasses) #:nodoc:
|
|
30
|
-
subclasses = []
|
|
31
|
-
|
|
32
|
-
superclasses.each do |sup|
|
|
33
|
-
ObjectSpace.each_object(Class) do |k|
|
|
34
|
-
if superclasses.any? { |superclass| k < superclass } &&
|
|
35
|
-
(k.name.blank? || eval("defined?(::#{k}) && ::#{k}.object_id == k.object_id"))
|
|
36
|
-
subclasses << k
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
subclasses.uniq!
|
|
40
|
-
end
|
|
41
|
-
subclasses
|
|
42
|
-
end
|
|
43
|
-
end
|
|
1
|
+
require 'active_support/core_ext/class/subclasses'
|
|
44
2
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
def
|
|
51
|
-
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
unless defined? instance_exec # 1.9
|
|
55
|
-
module InstanceExecMethods #:nodoc:
|
|
56
|
-
end
|
|
57
|
-
include InstanceExecMethods
|
|
58
|
-
|
|
59
|
-
# Evaluate the block with the given arguments within the context of
|
|
60
|
-
# this object, so self is set to the method receiver.
|
|
61
|
-
#
|
|
62
|
-
# From Mauricio's http://eigenclass.org/hiki/bounded+space+instance_exec
|
|
63
|
-
def instance_exec(*args, &block)
|
|
64
|
-
begin
|
|
65
|
-
old_critical, Thread.critical = Thread.critical, true
|
|
66
|
-
n = 0
|
|
67
|
-
n += 1 while respond_to?(method_name = "__instance_exec#{n}")
|
|
68
|
-
InstanceExecMethods.module_eval { define_method(method_name, &block) }
|
|
69
|
-
ensure
|
|
70
|
-
Thread.critical = old_critical
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
begin
|
|
74
|
-
send(method_name, *args)
|
|
75
|
-
ensure
|
|
76
|
-
InstanceExecMethods.module_eval { remove_method(method_name) } rescue nil
|
|
77
|
-
end
|
|
78
|
-
end
|
|
3
|
+
class Object
|
|
4
|
+
# Exclude this class unless it's a subclass of our supers and is defined.
|
|
5
|
+
# We check defined? in case we find a removed class that has yet to be
|
|
6
|
+
# garbage collected. This also fails for anonymous classes -- please
|
|
7
|
+
# submit a patch if you have a workaround.
|
|
8
|
+
def subclasses_of(*superclasses) #:nodoc:
|
|
9
|
+
Class.subclasses_of(*superclasses)
|
|
79
10
|
end
|
|
80
11
|
end
|
|
@@ -1,11 +1,4 @@
|
|
|
1
1
|
class Object
|
|
2
|
-
# Available in 1.8.6 and later.
|
|
3
|
-
unless respond_to?(:instance_variable_defined?)
|
|
4
|
-
def instance_variable_defined?(variable)
|
|
5
|
-
instance_variables.include?(variable.to_s)
|
|
6
|
-
end
|
|
7
|
-
end
|
|
8
|
-
|
|
9
2
|
# Returns a hash that maps instance variable names without "@" to their
|
|
10
3
|
# corresponding values. Keys are strings both in Ruby 1.8 and 1.9.
|
|
11
4
|
#
|
|
@@ -1,90 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
# process of constructing an object, performing work on the object, and then
|
|
4
|
-
# returning the object from a method. It is a Ruby-ized realization of the K
|
|
5
|
-
# combinator, courtesy of Mikael Brockman.
|
|
6
|
-
#
|
|
7
|
-
# ==== Examples
|
|
8
|
-
#
|
|
9
|
-
# # Without returning
|
|
10
|
-
# def foo
|
|
11
|
-
# values = []
|
|
12
|
-
# values << "bar"
|
|
13
|
-
# values << "baz"
|
|
14
|
-
# return values
|
|
15
|
-
# end
|
|
16
|
-
#
|
|
17
|
-
# foo # => ['bar', 'baz']
|
|
18
|
-
#
|
|
19
|
-
# # returning with a local variable
|
|
20
|
-
# def foo
|
|
21
|
-
# returning values = [] do
|
|
22
|
-
# values << 'bar'
|
|
23
|
-
# values << 'baz'
|
|
24
|
-
# end
|
|
25
|
-
# end
|
|
26
|
-
#
|
|
27
|
-
# foo # => ['bar', 'baz']
|
|
28
|
-
#
|
|
29
|
-
# # returning with a block argument
|
|
30
|
-
# def foo
|
|
31
|
-
# returning [] do |values|
|
|
32
|
-
# values << 'bar'
|
|
33
|
-
# values << 'baz'
|
|
34
|
-
# end
|
|
35
|
-
# end
|
|
36
|
-
#
|
|
37
|
-
# foo # => ['bar', 'baz']
|
|
38
|
-
def returning(value)
|
|
39
|
-
yield(value)
|
|
40
|
-
value
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# Yields <code>x</code> to the block, and then returns <code>x</code>.
|
|
44
|
-
# The primary purpose of this method is to "tap into" a method chain,
|
|
45
|
-
# in order to perform operations on intermediate results within the chain.
|
|
46
|
-
#
|
|
47
|
-
# (1..10).tap { |x| puts "original: #{x.inspect}" }.to_a.
|
|
48
|
-
# tap { |x| puts "array: #{x.inspect}" }.
|
|
49
|
-
# select { |x| x%2 == 0 }.
|
|
50
|
-
# tap { |x| puts "evens: #{x.inspect}" }.
|
|
51
|
-
# map { |x| x*x }.
|
|
52
|
-
# tap { |x| puts "squares: #{x.inspect}" }
|
|
53
|
-
def tap
|
|
54
|
-
yield self
|
|
55
|
-
self
|
|
56
|
-
end unless Object.respond_to?(:tap)
|
|
57
|
-
|
|
58
|
-
# An elegant way to factor duplication out of options passed to a series of
|
|
59
|
-
# method calls. Each method called in the block, with the block variable as
|
|
60
|
-
# the receiver, will have its options merged with the default +options+ hash
|
|
61
|
-
# provided. Each method called on the block variable must take an options
|
|
62
|
-
# hash as its final argument.
|
|
63
|
-
#
|
|
64
|
-
# with_options :order => 'created_at', :class_name => 'Comment' do |post|
|
|
65
|
-
# post.has_many :comments, :conditions => ['approved = ?', true], :dependent => :delete_all
|
|
66
|
-
# post.has_many :unapproved_comments, :conditions => ['approved = ?', false]
|
|
67
|
-
# post.has_many :all_comments
|
|
68
|
-
# end
|
|
69
|
-
#
|
|
70
|
-
# Can also be used with an explicit receiver:
|
|
71
|
-
#
|
|
72
|
-
# map.with_options :controller => "people" do |people|
|
|
73
|
-
# people.connect "/people", :action => "index"
|
|
74
|
-
# people.connect "/people/:id", :action => "show"
|
|
75
|
-
# end
|
|
76
|
-
#
|
|
77
|
-
def with_options(options)
|
|
78
|
-
yield ActiveSupport::OptionMerger.new(self, options)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
# A duck-type assistant method. For example, Active Support extends Date
|
|
82
|
-
# to define an acts_like_date? method, and extends Time to define
|
|
83
|
-
# acts_like_time?. As a result, we can do "x.acts_like?(:time)" and
|
|
84
|
-
# "x.acts_like?(:date)" to do duck-type-safe comparisons, since classes that
|
|
85
|
-
# we want to act like Time simply need to define an acts_like_time? method.
|
|
86
|
-
def acts_like?(duck)
|
|
87
|
-
respond_to? "acts_like_#{duck}?"
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
end
|
|
1
|
+
require 'active_support/core_ext/object/returning'
|
|
2
|
+
require 'active_support/core_ext/object/with_options'
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
class Object
|
|
2
|
+
# Returns +value+ after yielding +value+ to the block. This simplifies the
|
|
3
|
+
# process of constructing an object, performing work on the object, and then
|
|
4
|
+
# returning the object from a method. It is a Ruby-ized realization of the K
|
|
5
|
+
# combinator, courtesy of Mikael Brockman.
|
|
6
|
+
#
|
|
7
|
+
# ==== Examples
|
|
8
|
+
#
|
|
9
|
+
# # Without returning
|
|
10
|
+
# def foo
|
|
11
|
+
# values = []
|
|
12
|
+
# values << "bar"
|
|
13
|
+
# values << "baz"
|
|
14
|
+
# return values
|
|
15
|
+
# end
|
|
16
|
+
#
|
|
17
|
+
# foo # => ['bar', 'baz']
|
|
18
|
+
#
|
|
19
|
+
# # returning with a local variable
|
|
20
|
+
# def foo
|
|
21
|
+
# returning values = [] do
|
|
22
|
+
# values << 'bar'
|
|
23
|
+
# values << 'baz'
|
|
24
|
+
# end
|
|
25
|
+
# end
|
|
26
|
+
#
|
|
27
|
+
# foo # => ['bar', 'baz']
|
|
28
|
+
#
|
|
29
|
+
# # returning with a block argument
|
|
30
|
+
# def foo
|
|
31
|
+
# returning [] do |values|
|
|
32
|
+
# values << 'bar'
|
|
33
|
+
# values << 'baz'
|
|
34
|
+
# end
|
|
35
|
+
# end
|
|
36
|
+
#
|
|
37
|
+
# foo # => ['bar', 'baz']
|
|
38
|
+
def returning(value)
|
|
39
|
+
yield(value)
|
|
40
|
+
value
|
|
41
|
+
end
|
|
42
|
+
end
|