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,38 +1,22 @@
|
|
|
1
|
-
class
|
|
2
|
-
attr_reader :path
|
|
3
|
-
def initialize(message, path)
|
|
4
|
-
super(message)
|
|
5
|
-
@path = path
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def is_missing?(path)
|
|
9
|
-
path.gsub(/\.rb$/, '') == self.path.gsub(/\.rb$/, '')
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def self.from_message(message)
|
|
13
|
-
REGEXPS.each do |regexp, capture|
|
|
14
|
-
match = regexp.match(message)
|
|
15
|
-
return MissingSourceFile.new(message, match[capture]) unless match.nil?
|
|
16
|
-
end
|
|
17
|
-
nil
|
|
18
|
-
end
|
|
19
|
-
|
|
1
|
+
class LoadError
|
|
20
2
|
REGEXPS = [
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
]
|
|
25
|
-
end
|
|
3
|
+
/^no such file to load -- (.+)$/i,
|
|
4
|
+
/^Missing \w+ (?:file\s*)?([^\s]+.rb)$/i,
|
|
5
|
+
/^Missing API definition file in (.+)$/i,
|
|
6
|
+
]
|
|
26
7
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
def new(*args)
|
|
32
|
-
(self == LoadError && MissingSourceFile.from_message(args.first)) || super
|
|
33
|
-
end
|
|
8
|
+
def path
|
|
9
|
+
@path ||= begin
|
|
10
|
+
REGEXPS.find do |regex|
|
|
11
|
+
message =~ regex
|
|
34
12
|
end
|
|
35
|
-
|
|
13
|
+
$1
|
|
36
14
|
end
|
|
37
15
|
end
|
|
16
|
+
|
|
17
|
+
def is_missing?(location)
|
|
18
|
+
location.sub(/\.rb$/, '') == path.sub(/\.rb$/, '')
|
|
19
|
+
end
|
|
38
20
|
end
|
|
21
|
+
|
|
22
|
+
MissingSourceFile = LoadError
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
require 'active_support/core_ext/class/attribute_accessors'
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
# Adds the 'around_level' method to Logger.
|
|
4
|
+
class Logger #:nodoc:
|
|
4
5
|
def self.define_around_helper(level)
|
|
5
6
|
module_eval <<-end_eval
|
|
6
7
|
def around_#{level}(before_message, after_message, &block) # def around_debug(before_message, after_message, &block)
|
|
@@ -1,74 +1,70 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
aliased_target, punctuation = target.to_s.sub(/([?!=])$/, ''), $1
|
|
29
|
-
yield(aliased_target, punctuation) if block_given?
|
|
1
|
+
class Module
|
|
2
|
+
# Encapsulates the common pattern of:
|
|
3
|
+
#
|
|
4
|
+
# alias_method :foo_without_feature, :foo
|
|
5
|
+
# alias_method :foo, :foo_with_feature
|
|
6
|
+
#
|
|
7
|
+
# With this, you simply do:
|
|
8
|
+
#
|
|
9
|
+
# alias_method_chain :foo, :feature
|
|
10
|
+
#
|
|
11
|
+
# And both aliases are set up for you.
|
|
12
|
+
#
|
|
13
|
+
# Query and bang methods (foo?, foo!) keep the same punctuation:
|
|
14
|
+
#
|
|
15
|
+
# alias_method_chain :foo?, :feature
|
|
16
|
+
#
|
|
17
|
+
# is equivalent to
|
|
18
|
+
#
|
|
19
|
+
# alias_method :foo_without_feature?, :foo?
|
|
20
|
+
# alias_method :foo?, :foo_with_feature?
|
|
21
|
+
#
|
|
22
|
+
# so you can safely chain foo, foo?, and foo! with the same feature.
|
|
23
|
+
def alias_method_chain(target, feature)
|
|
24
|
+
# Strip out punctuation on predicates or bang methods since
|
|
25
|
+
# e.g. target?_without_feature is not a valid method name.
|
|
26
|
+
aliased_target, punctuation = target.to_s.sub(/([?!=])$/, ''), $1
|
|
27
|
+
yield(aliased_target, punctuation) if block_given?
|
|
30
28
|
|
|
31
|
-
|
|
29
|
+
with_method, without_method = "#{aliased_target}_with_#{feature}#{punctuation}", "#{aliased_target}_without_#{feature}#{punctuation}"
|
|
32
30
|
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
alias_method without_method, target
|
|
32
|
+
alias_method target, with_method
|
|
35
33
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
# Allows you to make aliases for attributes, which includes
|
|
47
|
-
# getter, setter, and query methods.
|
|
48
|
-
#
|
|
49
|
-
# Example:
|
|
50
|
-
#
|
|
51
|
-
# class Content < ActiveRecord::Base
|
|
52
|
-
# # has a title attribute
|
|
53
|
-
# end
|
|
54
|
-
#
|
|
55
|
-
# class Email < Content
|
|
56
|
-
# alias_attribute :subject, :title
|
|
57
|
-
# end
|
|
58
|
-
#
|
|
59
|
-
# e = Email.find(1)
|
|
60
|
-
# e.title # => "Superstars"
|
|
61
|
-
# e.subject # => "Superstars"
|
|
62
|
-
# e.subject? # => true
|
|
63
|
-
# e.subject = "Megastars"
|
|
64
|
-
# e.title # => "Megastars"
|
|
65
|
-
def alias_attribute(new_name, old_name)
|
|
66
|
-
module_eval <<-STR, __FILE__, __LINE__+1
|
|
67
|
-
def #{new_name}; self.#{old_name}; end # def subject; self.title; end
|
|
68
|
-
def #{new_name}?; self.#{old_name}?; end # def subject?; self.title?; end
|
|
69
|
-
def #{new_name}=(v); self.#{old_name} = v; end # def subject=(v); self.title = v; end
|
|
70
|
-
STR
|
|
71
|
-
end
|
|
34
|
+
case
|
|
35
|
+
when public_method_defined?(without_method)
|
|
36
|
+
public target
|
|
37
|
+
when protected_method_defined?(without_method)
|
|
38
|
+
protected target
|
|
39
|
+
when private_method_defined?(without_method)
|
|
40
|
+
private target
|
|
72
41
|
end
|
|
73
42
|
end
|
|
43
|
+
|
|
44
|
+
# Allows you to make aliases for attributes, which includes
|
|
45
|
+
# getter, setter, and query methods.
|
|
46
|
+
#
|
|
47
|
+
# Example:
|
|
48
|
+
#
|
|
49
|
+
# class Content < ActiveRecord::Base
|
|
50
|
+
# # has a title attribute
|
|
51
|
+
# end
|
|
52
|
+
#
|
|
53
|
+
# class Email < Content
|
|
54
|
+
# alias_attribute :subject, :title
|
|
55
|
+
# end
|
|
56
|
+
#
|
|
57
|
+
# e = Email.find(1)
|
|
58
|
+
# e.title # => "Superstars"
|
|
59
|
+
# e.subject # => "Superstars"
|
|
60
|
+
# e.subject? # => true
|
|
61
|
+
# e.subject = "Megastars"
|
|
62
|
+
# e.title # => "Megastars"
|
|
63
|
+
def alias_attribute(new_name, old_name)
|
|
64
|
+
module_eval <<-STR, __FILE__, __LINE__ + 1
|
|
65
|
+
def #{new_name}; self.#{old_name}; end # def subject; self.title; end
|
|
66
|
+
def #{new_name}?; self.#{old_name}?; end # def subject?; self.title?; end
|
|
67
|
+
def #{new_name}=(v); self.#{old_name} = v; end # def subject=(v); self.title = v; end
|
|
68
|
+
STR
|
|
69
|
+
end
|
|
74
70
|
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require 'active_support/core_ext/object/blank'
|
|
2
|
+
|
|
3
|
+
class Module
|
|
4
|
+
# A module may or may not have a name.
|
|
5
|
+
#
|
|
6
|
+
# module M; end
|
|
7
|
+
# M.name # => "M"
|
|
8
|
+
#
|
|
9
|
+
# m = Module.new
|
|
10
|
+
# m.name # => ""
|
|
11
|
+
#
|
|
12
|
+
# A module gets a name when it is first assigned to a constant. Either
|
|
13
|
+
# via the +module+ or +class+ keyword or by an explicit assignment:
|
|
14
|
+
#
|
|
15
|
+
# m = Module.new # creates an anonymous module
|
|
16
|
+
# M = m # => m gets a name here as a side-effect
|
|
17
|
+
# m.name # => "M"
|
|
18
|
+
#
|
|
19
|
+
def anonymous?
|
|
20
|
+
# Uses blank? because the name of an anonymous class is an empty
|
|
21
|
+
# string in 1.8, and nil in 1.9.
|
|
22
|
+
name.blank?
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -21,7 +21,7 @@ class Module
|
|
|
21
21
|
def attr_accessor_with_default(sym, default = nil, &block)
|
|
22
22
|
raise 'Default value or block required' unless !default.nil? || block
|
|
23
23
|
define_method(sym, block_given? ? block : Proc.new { default })
|
|
24
|
-
module_eval(<<-EVAL, __FILE__, __LINE__)
|
|
24
|
+
module_eval(<<-EVAL, __FILE__, __LINE__ + 1)
|
|
25
25
|
def #{sym}=(value) # def age=(value)
|
|
26
26
|
class << self; attr_reader :#{sym} end # class << self; attr_reader :age end
|
|
27
27
|
@#{sym} = value # @age = value
|
|
@@ -22,11 +22,11 @@ class Module
|
|
|
22
22
|
|
|
23
23
|
alias_method :attr_internal, :attr_internal_accessor
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
self.attr_internal_naming_format = '@_%s'
|
|
25
|
+
class << self; attr_accessor :attr_internal_naming_format end
|
|
26
|
+
self.attr_internal_naming_format = '@_%s'
|
|
28
27
|
|
|
28
|
+
private
|
|
29
29
|
def attr_internal_ivar_name(attr)
|
|
30
|
-
attr_internal_naming_format % attr
|
|
30
|
+
Module.attr_internal_naming_format % attr
|
|
31
31
|
end
|
|
32
32
|
end
|
|
@@ -1,58 +1,64 @@
|
|
|
1
|
-
require
|
|
1
|
+
require 'active_support/core_ext/array/extract_options'
|
|
2
2
|
|
|
3
|
-
# Extends the module object with module and instance accessors for class attributes,
|
|
4
|
-
# just like the native attr* accessors for instance attributes.
|
|
5
|
-
#
|
|
6
|
-
# module AppConfiguration
|
|
7
|
-
# mattr_accessor :google_api_key
|
|
8
|
-
# self.google_api_key = "123456789"
|
|
9
|
-
#
|
|
10
|
-
# mattr_accessor :paypal_url
|
|
11
|
-
# self.paypal_url = "www.sandbox.paypal.com"
|
|
12
|
-
# end
|
|
13
|
-
#
|
|
14
|
-
# AppConfiguration.google_api_key = "overriding the api key!"
|
|
15
3
|
class Module
|
|
16
4
|
def mattr_reader(*syms)
|
|
5
|
+
options = syms.extract_options!
|
|
17
6
|
syms.each do |sym|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
end # end
|
|
27
|
-
#
|
|
28
|
-
def #{sym} # def pagination_options
|
|
29
|
-
@@#{sym} # @@pagination_options
|
|
30
|
-
end # end
|
|
7
|
+
class_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
|
8
|
+
unless defined? @@#{sym}
|
|
9
|
+
@@#{sym} = nil
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.#{sym}
|
|
13
|
+
@@#{sym}
|
|
14
|
+
end
|
|
31
15
|
EOS
|
|
16
|
+
|
|
17
|
+
unless options[:instance_reader] == false
|
|
18
|
+
class_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
|
19
|
+
def #{sym}
|
|
20
|
+
@@#{sym}
|
|
21
|
+
end
|
|
22
|
+
EOS
|
|
23
|
+
end
|
|
32
24
|
end
|
|
33
25
|
end
|
|
34
|
-
|
|
26
|
+
|
|
35
27
|
def mattr_writer(*syms)
|
|
36
28
|
options = syms.extract_options!
|
|
37
29
|
syms.each do |sym|
|
|
38
|
-
class_eval(<<-EOS, __FILE__, __LINE__)
|
|
39
|
-
unless defined? @@#{sym}
|
|
40
|
-
@@#{sym} = nil
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def self.#{sym}=(obj)
|
|
44
|
-
@@#{sym} = obj
|
|
45
|
-
end
|
|
46
|
-
#
|
|
47
|
-
#{" #
|
|
48
|
-
def #{sym}=(obj) # def pagination_options=(obj)
|
|
49
|
-
@@#{sym} = obj # @@pagination_options = obj
|
|
50
|
-
end # end
|
|
51
|
-
" unless options[:instance_writer] == false } # # instance writer above is generated unless options[:instance_writer] == false
|
|
30
|
+
class_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
|
31
|
+
unless defined? @@#{sym}
|
|
32
|
+
@@#{sym} = nil
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.#{sym}=(obj)
|
|
36
|
+
@@#{sym} = obj
|
|
37
|
+
end
|
|
52
38
|
EOS
|
|
39
|
+
|
|
40
|
+
unless options[:instance_writer] == false
|
|
41
|
+
class_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
|
42
|
+
def #{sym}=(obj)
|
|
43
|
+
@@#{sym} = obj
|
|
44
|
+
end
|
|
45
|
+
EOS
|
|
46
|
+
end
|
|
53
47
|
end
|
|
54
48
|
end
|
|
55
|
-
|
|
49
|
+
|
|
50
|
+
# Extends the module object with module and instance accessors for class attributes,
|
|
51
|
+
# just like the native attr* accessors for instance attributes.
|
|
52
|
+
#
|
|
53
|
+
# module AppConfiguration
|
|
54
|
+
# mattr_accessor :google_api_key
|
|
55
|
+
# self.google_api_key = "123456789"
|
|
56
|
+
#
|
|
57
|
+
# mattr_accessor :paypal_url
|
|
58
|
+
# self.paypal_url = "www.sandbox.paypal.com"
|
|
59
|
+
# end
|
|
60
|
+
#
|
|
61
|
+
# AppConfiguration.google_api_key = "overriding the api key!"
|
|
56
62
|
def mattr_accessor(*syms)
|
|
57
63
|
mattr_reader(*syms)
|
|
58
64
|
mattr_writer(*syms)
|
|
@@ -1,14 +1,21 @@
|
|
|
1
|
+
require "active_support/core_ext/module/remove_method"
|
|
2
|
+
|
|
1
3
|
class Module
|
|
2
4
|
# Provides a delegate class method to easily expose contained objects' methods
|
|
3
5
|
# as your own. Pass one or more methods (specified as symbols or strings)
|
|
4
|
-
# and the name of the target object
|
|
5
|
-
# or string).
|
|
6
|
+
# and the name of the target object via the <tt>:to</tt> option (also a symbol
|
|
7
|
+
# or string). At least one method and the <tt>:to</tt> option are required.
|
|
6
8
|
#
|
|
7
9
|
# Delegation is particularly useful with Active Record associations:
|
|
8
10
|
#
|
|
9
11
|
# class Greeter < ActiveRecord::Base
|
|
10
|
-
# def hello
|
|
11
|
-
#
|
|
12
|
+
# def hello
|
|
13
|
+
# "hello"
|
|
14
|
+
# end
|
|
15
|
+
#
|
|
16
|
+
# def goodbye
|
|
17
|
+
# "goodbye"
|
|
18
|
+
# end
|
|
12
19
|
# end
|
|
13
20
|
#
|
|
14
21
|
# class Foo < ActiveRecord::Base
|
|
@@ -34,7 +41,7 @@ class Module
|
|
|
34
41
|
# class Foo
|
|
35
42
|
# CONSTANT_ARRAY = [0,1,2,3]
|
|
36
43
|
# @@class_array = [4,5,6,7]
|
|
37
|
-
#
|
|
44
|
+
#
|
|
38
45
|
# def initialize
|
|
39
46
|
# @instance_array = [8,9,10,11]
|
|
40
47
|
# end
|
|
@@ -72,9 +79,9 @@ class Module
|
|
|
72
79
|
# invoice.customer_name # => "John Doe"
|
|
73
80
|
# invoice.customer_address # => "Vimmersvej 13"
|
|
74
81
|
#
|
|
75
|
-
# If the object
|
|
76
|
-
#
|
|
77
|
-
#
|
|
82
|
+
# If the delegate object is +nil+ an exception is raised, and that happens
|
|
83
|
+
# no matter whether +nil+ responds to the delegated method. You can get a
|
|
84
|
+
# +nil+ instead with the +:allow_nil+ option.
|
|
78
85
|
#
|
|
79
86
|
# class Foo
|
|
80
87
|
# attr_accessor :bar
|
|
@@ -116,15 +123,19 @@ class Module
|
|
|
116
123
|
if options[:allow_nil]
|
|
117
124
|
'return'
|
|
118
125
|
else
|
|
119
|
-
%(raise "#{prefix}#{method} delegated to #{to}.#{method}, but #{to} is nil: \#{self.inspect}")
|
|
126
|
+
%(raise "#{self}##{prefix}#{method} delegated to #{to}.#{method}, but #{to} is nil: \#{self.inspect}")
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
module_eval(<<-EOS, file, line - 5)
|
|
130
|
+
if instance_methods(false).map(&:to_s).include?("#{prefix}#{method}")
|
|
131
|
+
remove_possible_method("#{prefix}#{method}")
|
|
120
132
|
end
|
|
121
133
|
|
|
122
|
-
module_eval(<<-EOS, file, line)
|
|
123
134
|
def #{prefix}#{method}(*args, &block) # def customer_name(*args, &block)
|
|
124
135
|
#{to}.__send__(#{method.inspect}, *args, &block) # client.__send__(:name, *args, &block)
|
|
125
136
|
rescue NoMethodError # rescue NoMethodError
|
|
126
137
|
if #{to}.nil? # if client.nil?
|
|
127
|
-
#{on_nil}
|
|
138
|
+
#{on_nil} # return # depends on :allow_nil
|
|
128
139
|
else # else
|
|
129
140
|
raise # raise
|
|
130
141
|
end # end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
class Module
|
|
2
|
+
# Declare that a method has been deprecated.
|
|
3
|
+
# deprecate :foo
|
|
4
|
+
# deprecate :bar => 'message'
|
|
5
|
+
# deprecate :foo, :bar, :baz => 'warning!', :qux => 'gone!'
|
|
6
|
+
def deprecate(*method_names)
|
|
7
|
+
ActiveSupport::Deprecation.deprecate_methods(self, *method_names)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -1,90 +1,88 @@
|
|
|
1
|
-
|
|
2
|
-
module CoreExtensions
|
|
3
|
-
module Module
|
|
4
|
-
# Returns the name of the module containing this one.
|
|
5
|
-
#
|
|
6
|
-
# p M::N.parent_name # => "M"
|
|
7
|
-
def parent_name
|
|
8
|
-
unless defined? @parent_name
|
|
9
|
-
@parent_name = name =~ /::[^:]+\Z/ ? $`.freeze : nil
|
|
10
|
-
end
|
|
11
|
-
@parent_name
|
|
12
|
-
end
|
|
1
|
+
require 'active_support/inflector'
|
|
13
2
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
#
|
|
25
|
-
# The parent of top-level and anonymous modules is Object.
|
|
26
|
-
#
|
|
27
|
-
# p M.parent # => Object
|
|
28
|
-
# p Module.new.parent # => Object
|
|
29
|
-
#
|
|
30
|
-
def parent
|
|
31
|
-
parent_name ? parent_name.constantize : Object
|
|
32
|
-
end
|
|
3
|
+
class Module
|
|
4
|
+
# Returns the name of the module containing this one.
|
|
5
|
+
#
|
|
6
|
+
# M::N.parent_name # => "M"
|
|
7
|
+
def parent_name
|
|
8
|
+
unless defined? @parent_name
|
|
9
|
+
@parent_name = name =~ /::[^:]+\Z/ ? $`.freeze : nil
|
|
10
|
+
end
|
|
11
|
+
@parent_name
|
|
12
|
+
end
|
|
33
13
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
parts.pop
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
parents << Object unless parents.include? Object
|
|
57
|
-
parents
|
|
58
|
-
end
|
|
14
|
+
# Returns the module which contains this one according to its name.
|
|
15
|
+
#
|
|
16
|
+
# module M
|
|
17
|
+
# module N
|
|
18
|
+
# end
|
|
19
|
+
# end
|
|
20
|
+
# X = M::N
|
|
21
|
+
#
|
|
22
|
+
# M::N.parent # => M
|
|
23
|
+
# X.parent # => M
|
|
24
|
+
#
|
|
25
|
+
# The parent of top-level and anonymous modules is Object.
|
|
26
|
+
#
|
|
27
|
+
# M.parent # => Object
|
|
28
|
+
# Module.new.parent # => Object
|
|
29
|
+
#
|
|
30
|
+
def parent
|
|
31
|
+
parent_name ? ActiveSupport::Inflector.constantize(parent_name) : Object
|
|
32
|
+
end
|
|
59
33
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
34
|
+
# Returns all the parents of this module according to its name, ordered from
|
|
35
|
+
# nested outwards. The receiver is not contained within the result.
|
|
36
|
+
#
|
|
37
|
+
# module M
|
|
38
|
+
# module N
|
|
39
|
+
# end
|
|
40
|
+
# end
|
|
41
|
+
# X = M::N
|
|
42
|
+
#
|
|
43
|
+
# M.parents # => [Object]
|
|
44
|
+
# M::N.parents # => [M, Object]
|
|
45
|
+
# X.parents # => [M, Object]
|
|
46
|
+
#
|
|
47
|
+
def parents
|
|
48
|
+
parents = []
|
|
49
|
+
if parent_name
|
|
50
|
+
parts = parent_name.split('::')
|
|
51
|
+
until parts.empty?
|
|
52
|
+
parents << ActiveSupport::Inflector.constantize(parts * '::')
|
|
53
|
+
parts.pop
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
parents << Object unless parents.include? Object
|
|
57
|
+
parents
|
|
58
|
+
end
|
|
67
59
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
60
|
+
if RUBY_VERSION < '1.9'
|
|
61
|
+
# Returns the constants that have been defined locally by this object and
|
|
62
|
+
# not in an ancestor. This method is exact if running under Ruby 1.9. In
|
|
63
|
+
# previous versions it may miss some constants if their definition in some
|
|
64
|
+
# ancestor is identical to their definition in the receiver.
|
|
65
|
+
def local_constants
|
|
66
|
+
inherited = {}
|
|
72
67
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
end
|
|
77
|
-
else
|
|
78
|
-
def local_constants #:nodoc:
|
|
79
|
-
constants(false)
|
|
80
|
-
end
|
|
68
|
+
ancestors.each do |anc|
|
|
69
|
+
next if anc == self
|
|
70
|
+
anc.constants.each { |const| inherited[const] = anc.const_get(const) }
|
|
81
71
|
end
|
|
82
72
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
def local_constant_names
|
|
86
|
-
local_constants.map { |c| c.to_s }
|
|
73
|
+
constants.select do |const|
|
|
74
|
+
!inherited.key?(const) || inherited[const].object_id != const_get(const).object_id
|
|
87
75
|
end
|
|
88
76
|
end
|
|
77
|
+
else
|
|
78
|
+
def local_constants #:nodoc:
|
|
79
|
+
constants(false)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Returns the names of the constants defined locally rather than the
|
|
84
|
+
# constants themselves. See <tt>local_constants</tt>.
|
|
85
|
+
def local_constant_names
|
|
86
|
+
local_constants.map { |c| c.to_s }
|
|
89
87
|
end
|
|
90
88
|
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class Module
|
|
2
|
+
if instance_methods[0].is_a?(Symbol)
|
|
3
|
+
def instance_method_names(*args)
|
|
4
|
+
instance_methods(*args).map(&:to_s)
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def method_names(*args)
|
|
8
|
+
methods(*args).map(&:to_s)
|
|
9
|
+
end
|
|
10
|
+
else
|
|
11
|
+
alias_method :instance_method_names, :instance_methods
|
|
12
|
+
alias_method :method_names, :methods
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
require 'active_support/core_ext/module/aliasing'
|
|
2
|
+
require 'active_support/core_ext/array/extract_options'
|
|
3
|
+
|
|
1
4
|
class Module
|
|
2
5
|
# Synchronize access around a method, delegating synchronization to a
|
|
3
6
|
# particular mutex. A mutex (either a Mutex, or any object that responds to
|
|
@@ -25,7 +28,7 @@ class Module
|
|
|
25
28
|
raise ArgumentError, "#{method} is already synchronized. Double synchronization is not currently supported."
|
|
26
29
|
end
|
|
27
30
|
|
|
28
|
-
module_eval(<<-EOS, __FILE__, __LINE__)
|
|
31
|
+
module_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
|
29
32
|
def #{aliased_method}_with_synchronization#{punctuation}(*args, &block) # def expire_with_synchronization(*args, &block)
|
|
30
33
|
#{with}.synchronize do # @@lock.synchronize do
|
|
31
34
|
#{aliased_method}_without_synchronization#{punctuation}(*args, &block) # expire_without_synchronization(*args, &block)
|